Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 import com.sun.javadoc.*;
     18 import com.sun.tools.doclets.*;
     19 import org.clearsilver.HDF;
     20 import org.clearsilver.CS;
     21 import java.util.*;
     22 import java.io.*;
     23 
     24 public class PackageInfo extends DocInfo implements ContainerInfo
     25 {
     26     public static final Comparator<PackageInfo> comparator = new Comparator<PackageInfo>() {
     27         public int compare(PackageInfo a, PackageInfo b) {
     28             return a.name().compareTo(b.name());
     29         }
     30     };
     31 
     32     public PackageInfo(PackageDoc pkg, String name, SourcePositionInfo position)
     33     {
     34         super(pkg.getRawCommentText(), position);
     35         mName = name;
     36 
     37         if (pkg == null) {
     38             throw new RuntimeException("pkg is null");
     39         }
     40         mPackage = pkg;
     41     }
     42 
     43     public String htmlPage()
     44     {
     45         String s = mName;
     46         s = s.replace('.', '/');
     47         s += "/package-summary.html";
     48         s = DroidDoc.javadocDir + s;
     49         return s;
     50     }
     51 
     52     public String fullDescriptionHtmlPage() {
     53         String s = mName;
     54         s = s.replace('.', '/');
     55         s += "/package-descr.html";
     56         s = DroidDoc.javadocDir + s;
     57         return s;
     58     }
     59 
     60     @Override
     61     public ContainerInfo parent()
     62     {
     63         return null;
     64     }
     65 
     66     @Override
     67     public boolean isHidden()
     68     {
     69         return comment().isHidden();
     70     }
     71 
     72     public boolean checkLevel() {
     73         // TODO should return false if all classes are hidden but the package isn't.
     74         // We don't have this so I'm not doing it now.
     75         return !isHidden();
     76     }
     77 
     78     public String name()
     79     {
     80         return mName;
     81     }
     82 
     83     public String qualifiedName()
     84     {
     85         return mName;
     86     }
     87 
     88     public TagInfo[] inlineTags()
     89     {
     90         return comment().tags();
     91     }
     92 
     93     public TagInfo[] firstSentenceTags()
     94     {
     95         return comment().briefTags();
     96     }
     97 
     98     public static ClassInfo[] filterHidden(ClassInfo[] classes)
     99     {
    100         ArrayList<ClassInfo> out = new ArrayList<ClassInfo>();
    101 
    102         for (ClassInfo cl: classes) {
    103             if (!cl.isHidden()) {
    104                 out.add(cl);
    105             }
    106         }
    107 
    108         return out.toArray(new ClassInfo[0]);
    109     }
    110 
    111     public void makeLink(HDF data, String base)
    112     {
    113         if (checkLevel()) {
    114             data.setValue(base + ".link", htmlPage());
    115         }
    116         data.setValue(base + ".name", name());
    117         data.setValue(base + ".since", getSince());
    118     }
    119 
    120     public void makeClassLinkListHDF(HDF data, String base)
    121     {
    122         makeLink(data, base);
    123         ClassInfo.makeLinkListHDF(data, base + ".interfaces", interfaces());
    124         ClassInfo.makeLinkListHDF(data, base + ".classes", ordinaryClasses());
    125         ClassInfo.makeLinkListHDF(data, base + ".enums", enums());
    126         ClassInfo.makeLinkListHDF(data, base + ".exceptions", exceptions());
    127         ClassInfo.makeLinkListHDF(data, base + ".errors", errors());
    128         data.setValue(base + ".since", getSince());
    129     }
    130 
    131     public ClassInfo[] interfaces()
    132     {
    133         if (mInterfaces == null) {
    134             mInterfaces = ClassInfo.sortByName(filterHidden(Converter.convertClasses(
    135                             mPackage.interfaces())));
    136         }
    137         return mInterfaces;
    138     }
    139 
    140     public ClassInfo[] ordinaryClasses()
    141     {
    142         if (mOrdinaryClasses == null) {
    143             mOrdinaryClasses = ClassInfo.sortByName(filterHidden(Converter.convertClasses(
    144                             mPackage.ordinaryClasses())));
    145         }
    146         return mOrdinaryClasses;
    147     }
    148 
    149     public ClassInfo[] enums()
    150     {
    151         if (mEnums == null) {
    152             mEnums = ClassInfo.sortByName(filterHidden(Converter.convertClasses(mPackage.enums())));
    153         }
    154         return mEnums;
    155     }
    156 
    157     public ClassInfo[] exceptions()
    158     {
    159         if (mExceptions == null) {
    160             mExceptions = ClassInfo.sortByName(filterHidden(Converter.convertClasses(
    161                         mPackage.exceptions())));
    162         }
    163         return mExceptions;
    164     }
    165 
    166     public ClassInfo[] errors()
    167     {
    168         if (mErrors == null) {
    169             mErrors = ClassInfo.sortByName(filterHidden(Converter.convertClasses(
    170                         mPackage.errors())));
    171         }
    172         return mErrors;
    173     }
    174 
    175     // in hashed containers, treat the name as the key
    176     @Override
    177     public int hashCode() {
    178         return mName.hashCode();
    179     }
    180 
    181     private String mName;
    182     private PackageDoc mPackage;
    183     private ClassInfo[] mInterfaces;
    184     private ClassInfo[] mOrdinaryClasses;
    185     private ClassInfo[] mEnums;
    186     private ClassInfo[] mExceptions;
    187     private ClassInfo[] mErrors;
    188 }
    189 
    190