46 |
import java.io.StringWriter; |
import java.io.StringWriter; |
47 |
|
|
48 |
import java.util.Arrays; |
import java.util.Arrays; |
49 |
|
import java.util.Collection; |
50 |
import java.util.HashMap; |
import java.util.HashMap; |
51 |
import java.util.Iterator; |
import java.util.Iterator; |
52 |
import java.util.LinkedHashSet; |
import java.util.LinkedHashSet; |
94 |
} |
} |
95 |
else { |
else { |
96 |
output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); |
output.beginSpan(CssClass.NAVBAR_ITEM_ENABLED); |
97 |
output.beginAnchor("index" + filenameExtension); |
output.beginAnchor("package-summary" + filenameExtension); |
98 |
output.print("Package"); |
output.print("Package"); |
99 |
output.endAnchor(); |
output.endAnchor(); |
100 |
output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); |
output.endSpan(CssClass.NAVBAR_ITEM_ENABLED); |
289 |
|
|
290 |
for (int i=0; i<classDocs.length; ++i) { |
for (int i=0; i<classDocs.length; ++i) { |
291 |
ClassDoc classDoc = classDocs[i]; |
ClassDoc classDoc = classDocs[i]; |
292 |
output.beginRow(); |
if (classDoc.isIncluded()) { |
293 |
|
output.beginRow(); |
294 |
|
|
295 |
output.beginCell(CssClass.PACKAGE_SUMMARY_LEFT); |
output.beginCell(CssClass.PACKAGE_SUMMARY_LEFT); |
296 |
printType(output, classDoc); |
printType(output, classDoc); |
297 |
output.endCell(); |
output.endCell(); |
298 |
|
|
299 |
output.beginCell(CssClass.PACKAGE_SUMMARY_RIGHT); |
output.beginCell(CssClass.PACKAGE_SUMMARY_RIGHT); |
300 |
printTags(output, classDoc.firstSentenceTags(), true); |
printTags(output, classDoc.firstSentenceTags(), true); |
301 |
output.endCell(); |
output.endCell(); |
302 |
output.endRow(); |
output.endRow(); |
303 |
|
} |
304 |
} |
} |
305 |
output.endTable(); |
output.endTable(); |
306 |
} |
} |
310 |
throws IOException |
throws IOException |
311 |
{ |
{ |
312 |
HtmlPage output = new HtmlPage(new File(packageDir, |
HtmlPage output = new HtmlPage(new File(packageDir, |
313 |
"index" + filenameExtension), |
"package-summary" + filenameExtension), |
314 |
pathToRoot); |
pathToRoot); |
315 |
output.beginPage(packageDoc.name()); |
output.beginPage(packageDoc.name()); |
316 |
output.beginBody(); |
output.beginBody(); |
317 |
printNavBarTop(output, "package"); |
printNavBarTop(output, "package"); |
318 |
|
|
319 |
output.div(CssClass.PACKAGE_TITLE, "Package " + packageDoc.name()); |
output.beginDiv(CssClass.PACKAGE_TITLE); |
320 |
|
output.print("Package "); |
321 |
|
if (packageDoc.name().length() > 0) { |
322 |
|
output.print(packageDoc.name()); |
323 |
|
} |
324 |
|
else { |
325 |
|
output.print("<Unnamed>"); |
326 |
|
} |
327 |
|
output.endDiv(CssClass.PACKAGE_TITLE); |
328 |
|
|
329 |
output.beginDiv(CssClass.PACKAGE_DESCRIPTION_TOP); |
output.beginDiv(CssClass.PACKAGE_DESCRIPTION_TOP); |
330 |
printTags(output, packageDoc.firstSentenceTags(), true); |
printTags(output, packageDoc.firstSentenceTags(), true); |
536 |
String anchor = null; |
String anchor = null; |
537 |
String description = null; |
String description = null; |
538 |
if (entry instanceof PackageDoc) { |
if (entry instanceof PackageDoc) { |
539 |
output.beginAnchor(getPackageURL((PackageDoc)entry) + "index" + filenameExtension); |
output.beginAnchor(getPackageURL((PackageDoc)entry) + "package-summary" + filenameExtension); |
540 |
output.print(entry.name()); |
output.print(entry.name()); |
541 |
output.endAnchor(); |
output.endAnchor(); |
542 |
output.print(" - package"); |
output.print(" - package"); |
559 |
else { |
else { |
560 |
output.print("class "); |
output.print("class "); |
561 |
} |
} |
562 |
output.print(classDoc.containingPackage().name()); |
String packageName = classDoc.containingPackage().name(); |
563 |
output.print("."); |
if (packageName.length() > 0) { |
564 |
|
output.print(packageName); |
565 |
|
output.print("."); |
566 |
|
} |
567 |
printType(output, classDoc); |
printType(output, classDoc); |
568 |
} |
} |
569 |
else { |
else { |
590 |
output.print("field in class "); |
output.print("field in class "); |
591 |
} |
} |
592 |
ClassDoc containingClass = memberDoc.containingClass(); |
ClassDoc containingClass = memberDoc.containingClass(); |
593 |
output.print(containingClass.containingPackage().name()); |
String packageName = containingClass.containingPackage().name(); |
594 |
output.print("."); |
if (packageName.length() > 0) { |
595 |
|
output.print(packageName); |
596 |
|
output.print("."); |
597 |
|
} |
598 |
printType(output, containingClass); |
printType(output, containingClass); |
599 |
} |
} |
600 |
output.beginDiv(CssClass.INDEX_ENTRY_DESCRIPTION); |
output.beginDiv(CssClass.INDEX_ENTRY_DESCRIPTION); |
649 |
|
|
650 |
output.beginDiv(CssClass.PACKAGE_MENU_LIST); |
output.beginDiv(CssClass.PACKAGE_MENU_LIST); |
651 |
|
|
652 |
PackageDoc[] packageDocs = getRootDoc().specifiedPackages(); |
Set packageDocs = getAllPackages(); |
653 |
for (int i=0; i<packageDocs.length; ++i) { |
Iterator it = packageDocs.iterator(); |
654 |
PackageDoc packageDoc = packageDocs[i]; |
while (it.hasNext()) { |
655 |
|
PackageDoc packageDoc = (PackageDoc)it.next(); |
656 |
output.beginDiv(CssClass.PACKAGE_MENU_ENTRY); |
output.beginDiv(CssClass.PACKAGE_MENU_ENTRY); |
657 |
output.beginAnchor(getPackageURL(packageDoc) + "classes" + filenameExtension, |
output.beginAnchor(getPackageURL(packageDoc) + "classes" + filenameExtension, |
658 |
null, |
null, |
659 |
"classes"); |
"classes"); |
660 |
output.print(packageDoc.name()); |
if (packageDoc.name().length() > 0) { |
661 |
|
output.print(packageDoc.name()); |
662 |
|
} |
663 |
|
else { |
664 |
|
output.print("<unnamed package>"); |
665 |
|
} |
666 |
output.endAnchor(); |
output.endAnchor(); |
667 |
output.endDiv(CssClass.PACKAGE_MENU_ENTRY); |
output.endDiv(CssClass.PACKAGE_MENU_ENTRY); |
668 |
} |
} |
679 |
|
|
680 |
for (int i=0; i<classDocs.length; ++i) { |
for (int i=0; i<classDocs.length; ++i) { |
681 |
ClassDoc classDoc = classDocs[i]; |
ClassDoc classDoc = classDocs[i]; |
682 |
output.beginDiv(CssClass.CLASS_MENU_ENTRY); |
if (classDoc.isIncluded()) { |
683 |
output.beginAnchor(getClassDocURL(output, classDoc), |
output.beginDiv(CssClass.CLASS_MENU_ENTRY); |
684 |
classDoc.qualifiedTypeName(), |
output.beginAnchor(getClassDocURL(output, classDoc), |
685 |
"content"); |
classDoc.qualifiedTypeName(), |
686 |
output.print(classDoc.name()); |
"content"); |
687 |
output.endAnchor(); |
output.print(classDoc.name()); |
688 |
output.endDiv(CssClass.CLASS_MENU_ENTRY); |
output.endAnchor(); |
689 |
|
output.endDiv(CssClass.CLASS_MENU_ENTRY); |
690 |
|
} |
691 |
} |
} |
692 |
|
|
693 |
output.endDiv(CssClass.CLASS_MENU_LIST); |
output.endDiv(CssClass.CLASS_MENU_LIST); |
721 |
output.beginPage(packageDoc.name() + " Class Menu"); |
output.beginPage(packageDoc.name() + " Class Menu"); |
722 |
output.beginBody(); |
output.beginBody(); |
723 |
|
|
724 |
output.div(CssClass.CLASS_MENU_TITLE, packageDoc.name()); |
output.beginDiv(CssClass.CLASS_MENU_TITLE); |
725 |
|
output.beginAnchor("package-summary" + filenameExtension, "", "content"); |
726 |
|
if (packageDoc.name().length() > 0) { |
727 |
|
output.print(packageDoc.name()); |
728 |
|
} |
729 |
|
else { |
730 |
|
output.print("<Unnamed>"); |
731 |
|
} |
732 |
|
output.endAnchor(); |
733 |
|
output.endDiv(CssClass.CLASS_MENU_TITLE); |
734 |
|
|
735 |
printClassMenuList(output, packageDoc.allClasses()); |
printClassMenuList(output, packageDoc.allClasses()); |
736 |
|
|
1033 |
|
|
1034 |
if (packageGroups.isEmpty()) { |
if (packageGroups.isEmpty()) { |
1035 |
|
|
1036 |
printOverviewPackages(output, getRootDoc().specifiedPackages(), |
printOverviewPackages(output, getAllPackages(), |
1037 |
"All Packages"); |
"All Packages"); |
1038 |
} |
} |
1039 |
else { |
else { |
1040 |
Set otherPackages = new LinkedHashSet(); |
Set otherPackages = new LinkedHashSet(); |
1041 |
otherPackages.addAll(Arrays.asList(getRootDoc().specifiedPackages())); |
otherPackages.addAll(getAllPackages()); |
1042 |
|
|
1043 |
Iterator it = packageGroups.iterator(); |
Iterator it = packageGroups.iterator(); |
1044 |
while (it.hasNext()) { |
while (it.hasNext()) { |
1045 |
PackageGroup packageGroup = (PackageGroup)it.next(); |
PackageGroup packageGroup = (PackageGroup)it.next(); |
1046 |
printOverviewPackages(output, |
printOverviewPackages(output, |
1047 |
(PackageDoc[])packageGroup.getPackages().toArray(new PackageDoc[0]), |
packageGroup.getPackages(), |
1048 |
packageGroup.getName()); |
packageGroup.getName()); |
1049 |
otherPackages.removeAll(packageGroup.getPackages()); |
otherPackages.removeAll(packageGroup.getPackages()); |
1050 |
} |
} |
1051 |
|
|
1052 |
if (!otherPackages.isEmpty()) { |
if (!otherPackages.isEmpty()) { |
1053 |
printOverviewPackages(output, |
printOverviewPackages(output, |
1054 |
(PackageDoc[])otherPackages.toArray(new PackageDoc[0]), |
otherPackages, |
1055 |
"Other Packages"); |
"Other Packages"); |
1056 |
} |
} |
1057 |
} |
} |
1069 |
output.close(); |
output.close(); |
1070 |
} |
} |
1071 |
|
|
1072 |
private void printOverviewPackages(HtmlPage output, PackageDoc[] packageDocs, String header) |
private void printOverviewPackages(HtmlPage output, Collection packageDocs, String header) |
1073 |
{ |
{ |
1074 |
output.beginTable(CssClass.OVERVIEW_SUMMARY); |
output.beginTable(CssClass.OVERVIEW_SUMMARY); |
1075 |
output.rowDiv(CssClass.TABLE_HEADER, header); |
output.rowDiv(CssClass.TABLE_HEADER, header); |
1076 |
|
|
1077 |
for (int i=0; i<packageDocs.length; ++i) { |
Iterator it = packageDocs.iterator(); |
1078 |
PackageDoc packageDoc = packageDocs[i]; |
while (it.hasNext()) { |
1079 |
|
PackageDoc packageDoc = (PackageDoc)it.next(); |
1080 |
output.beginRow(); |
output.beginRow(); |
1081 |
|
|
1082 |
output.beginCell(CssClass.OVERVIEW_SUMMARY_LEFT); |
output.beginCell(CssClass.OVERVIEW_SUMMARY_LEFT); |
1083 |
output.beginAnchor(getPackageURL(packageDoc) + "index" + filenameExtension); |
output.beginAnchor(getPackageURL(packageDoc) + "package-summary" + filenameExtension); |
1084 |
output.print(packageDoc.name()); |
output.print(packageDoc.name()); |
1085 |
output.endAnchor(); |
output.endAnchor(); |
1086 |
output.endCell(); |
output.endCell(); |
1406 |
} |
} |
1407 |
output.endDiv(CssClass.MEMBER_DETAIL_SPECIFIED_BY_LIST); |
output.endDiv(CssClass.MEMBER_DETAIL_SPECIFIED_BY_LIST); |
1408 |
} |
} |
1409 |
|
|
1410 |
|
ClassDoc overriddenClassDoc = null; |
1411 |
|
|
1412 |
|
for (ClassDoc superclassDoc = memberDoc.containingClass().superclass(); |
1413 |
|
null != superclassDoc && null == overriddenClassDoc; |
1414 |
|
superclassDoc = superclassDoc.superclass()) { |
1415 |
|
|
1416 |
|
MethodDoc[] methods = superclassDoc.methods(); |
1417 |
|
for (int j=0; j<methods.length; ++j) { |
1418 |
|
if (methods[j].name().equals(memberDoc.name()) |
1419 |
|
&& methods[j].signature().equals(((MethodDoc)memberDoc).signature())) { |
1420 |
|
overriddenClassDoc = superclassDoc; |
1421 |
|
break; |
1422 |
|
} |
1423 |
|
} |
1424 |
|
} |
1425 |
|
|
1426 |
|
if (null != overriddenClassDoc) { |
1427 |
|
output.beginDiv(CssClass.MEMBER_DETAIL_OVERRIDDEN_LIST); |
1428 |
|
output.div(CssClass.MEMBER_DETAIL_OVERRIDDEN_HEADER, "Overrides:"); |
1429 |
|
output.beginDiv(CssClass.MEMBER_DETAIL_OVERRIDDEN_ITEM); |
1430 |
|
|
1431 |
|
output.print(memberDoc.name() + " in interface "); |
1432 |
|
printType(output, overriddenClassDoc); |
1433 |
|
|
1434 |
|
output.endDiv(CssClass.MEMBER_DETAIL_OVERRIDDEN_ITEM); |
1435 |
|
output.endDiv(CssClass.MEMBER_DETAIL_OVERRIDDEN_LIST); |
1436 |
|
} |
1437 |
} |
} |
1438 |
|
|
1439 |
ExecutableMemberDoc execMemberDoc |
ExecutableMemberDoc execMemberDoc |
1563 |
if (memberDoc.isMethod()) { |
if (memberDoc.isMethod()) { |
1564 |
printType(output, ((MethodDoc)memberDoc).returnType()); |
printType(output, ((MethodDoc)memberDoc).returnType()); |
1565 |
} |
} |
1566 |
|
else if (memberDoc.isField()) { |
1567 |
|
printType(output, ((FieldDoc)memberDoc).type()); |
1568 |
|
} |
1569 |
output.endCell(); |
output.endCell(); |
1570 |
|
|
1571 |
output.beginCell(CssClass.CLASS_SUMMARY_RIGHT); |
output.beginCell(CssClass.CLASS_SUMMARY_RIGHT); |
1695 |
|
|
1696 |
private String getPackageURL(PackageDoc packageDoc) |
private String getPackageURL(PackageDoc packageDoc) |
1697 |
{ |
{ |
1698 |
return packageDoc.name().replace('.', '/') + '/'; |
if (packageDoc.name().length() > 0) { |
1699 |
|
return packageDoc.name().replace('.', '/') + '/'; |
1700 |
|
} |
1701 |
|
else { |
1702 |
|
return ""; |
1703 |
|
} |
1704 |
} |
} |
1705 |
|
|
1706 |
private String getClassURL(ClassDoc classDoc) |
private String getClassURL(ClassDoc classDoc) |
1763 |
printDeprecationPage(); |
printDeprecationPage(); |
1764 |
} |
} |
1765 |
|
|
1766 |
PackageDoc[] packageDocs = getRootDoc().specifiedPackages(); |
Collection packageDocs = getAllPackages(); |
1767 |
for (int i=0; i<packageDocs.length; ++i) { |
Iterator it = packageDocs.iterator(); |
1768 |
PackageDoc packageDoc = packageDocs[i]; |
while (it.hasNext()) { |
1769 |
File sourcePackageDir = getPackageSourceDir(packageDoc); |
PackageDoc packageDoc = (PackageDoc)it.next(); |
1770 |
File packageDir = new File(getTargetDirectory(), |
File packageDir = new File(getTargetDirectory(), |
1771 |
packageDoc.name().replace('.', File.separatorChar)); |
packageDoc.name().replace('.', File.separatorChar)); |
1772 |
if (!packageDir.exists() && !packageDir.mkdirs()) { |
if (!packageDir.exists() && !packageDir.mkdirs()) { |
1773 |
throw new IOException("Couldn't create directory " + packageDir); |
throw new IOException("Couldn't create directory " + packageDir); |
1774 |
} |
} |
1775 |
copyDocFiles(sourcePackageDir, packageDir); |
File sourcePackageDir = null; |
1776 |
|
try { |
1777 |
|
sourcePackageDir = getPackageSourceDir(packageDoc); |
1778 |
|
copyDocFiles(sourcePackageDir, packageDir); |
1779 |
|
} |
1780 |
|
catch (IOException ignore) { |
1781 |
|
} |
1782 |
String pathToRoot = getPathToRoot(packageDir, getTargetDirectory()); |
String pathToRoot = getPathToRoot(packageDir, getTargetDirectory()); |
1783 |
printNotice("Writing HTML files for package " + packageDoc.name()); |
printNotice("Writing HTML files for package " + packageDoc.name()); |
1784 |
printPackagePage(packageDir, pathToRoot, packageDoc); |
printPackagePage(packageDir, pathToRoot, packageDoc); |
1795 |
printClassUsagePage(packageDir, pathToRoot, classDocs[j]); |
printClassUsagePage(packageDir, pathToRoot, classDocs[j]); |
1796 |
} |
} |
1797 |
if (optionLinkSource.getValue() && null == classDoc.containingClass()) { |
if (optionLinkSource.getValue() && null == classDoc.containingClass()) { |
1798 |
Java2xhtml java2xhtml = new Java2xhtml(); |
if (null != sourcePackageDir) { |
1799 |
Properties properties = new Properties(); |
Java2xhtml java2xhtml = new Java2xhtml(); |
1800 |
properties.setProperty("isCodeSnippet", "true"); |
Properties properties = new Properties(); |
1801 |
properties.setProperty("hasLineNumbers", "true"); |
properties.setProperty("isCodeSnippet", "true"); |
1802 |
java2xhtml.setProperties(properties); |
properties.setProperty("hasLineNumbers", "true"); |
1803 |
|
java2xhtml.setProperties(properties); |
1804 |
StringWriter sourceBuffer = new StringWriter(); |
|
1805 |
File sourceFile = new File(sourcePackageDir, |
StringWriter sourceBuffer = new StringWriter(); |
1806 |
classDoc.name() + ".java"); |
File sourceFile = new File(sourcePackageDir, |
1807 |
FileReader sourceReader = new FileReader(sourceFile); |
classDoc.name() + ".java"); |
1808 |
IOToolkit.copyStream(sourceReader, sourceBuffer); |
FileReader sourceReader = new FileReader(sourceFile); |
1809 |
sourceReader.close(); |
IOToolkit.copyStream(sourceReader, sourceBuffer); |
1810 |
String result = java2xhtml.makeHTML(sourceBuffer.getBuffer(), sourceFile.getName()); |
sourceReader.close(); |
1811 |
|
String result = java2xhtml.makeHTML(sourceBuffer.getBuffer(), sourceFile.getName()); |
1812 |
File targetFile = new File(packageDir, |
|
1813 |
classDoc.name() + "-source" + filenameExtension); |
File targetFile = new File(packageDir, |
1814 |
FileWriter targetWriter = new FileWriter(targetFile); |
classDoc.name() + "-source" + filenameExtension); |
1815 |
targetWriter.write(result); |
FileWriter targetWriter = new FileWriter(targetFile); |
1816 |
targetWriter.close(); |
targetWriter.write(result); |
1817 |
|
targetWriter.close(); |
1818 |
|
} |
1819 |
|
else { |
1820 |
|
printWarning("Cannot locate source file for class " + classDoc.qualifiedTypeName()); |
1821 |
|
} |
1822 |
} |
} |
1823 |
} |
} |
1824 |
} |
} |