SampleCode.java revision 187b985f817b4a0181c5127270a2aab9915cf60a
1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/* 2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Copyright (C) 2010 Google Inc. 3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Licensed under the Apache License, Version 2.0 (the "License"); 5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * you may not use this file except in compliance with the License. 6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * You may obtain a copy of the License at 7920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * http://www.apache.org/licenses/LICENSE-2.0 9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * 10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Unless required by applicable law or agreed to in writing, software 11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * distributed under the License is distributed on an "AS IS" BASIS, 12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * See the License for the specific language governing permissions and 14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * limitations under the License. 15920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson */ 16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpackage com.google.doclava; 18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.google.clearsilver.jsilver.data.Data; 19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.*; 21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.io.*; 22e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Doughertyimport java.util.regex.Pattern; 23e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Doughertyimport java.util.regex.Matcher; 24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic class SampleCode { 26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mSource; 27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mDest; 28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mTitle; 29c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String mProjectDir; 3025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String mTags; 31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public SampleCode(String source, String dest, String title) { 33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mSource = source; 34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mTitle = title; 3525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mTags = null; 361b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 37815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (dest != null) { 38815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty int len = dest.length(); 39815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (len > 1 && dest.charAt(len - 1) != '/') { 40815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty mDest = dest + '/'; 41815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } else { 42815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty mDest = dest; 43815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 451b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("SampleCode init: source: " + mSource); 461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("SampleCode init: dest: " + mDest); 471b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("SampleCode init: title: " + mTitle); 481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 511b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public Node write(boolean offlineMode) { 521b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty List<Node> filelist = new ArrayList<Node>(); 53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson File f = new File(mSource); 54c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty mProjectDir = f.getName(); 55c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String name = mProjectDir; 561b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String startname = name; 571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String subdir = mDest; 581b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String mOut = subdir + name; 59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (!f.isDirectory()) { 60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson System.out.println("-samplecode not a directory: " + mSource); 611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return null; 62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (offlineMode) 651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeIndexOnly(f, mDest, offlineMode); 661b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty else { 671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty Data hdf = Doclava.makeHDF(); 681b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true"); 69c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeProjectDirectory(filelist, f, mDest, false, hdf, "Files."); 71c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writeProjectStructure(name, hdf); 721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.removeTree("parentdirs"); 731b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("parentdirs.0.Name", name); 74e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Write root _index.jd to out and add metadata to Node. 75f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty Node rootNode = writeProjectIndexCs(hdf, f, null, 76f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty new Node.Builder().setLabel(mProjectDir).setLink("samples/" 77f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty + startname + "/index.html").setChildren(filelist).build()); 781b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // return a root SC node for the sample with children appended 79e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty return rootNode; 801b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 811b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return null; 82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String convertExtension(String s, String ext) { 85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return s.substring(0, s.lastIndexOf('.')) + ext; 86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String[] IMAGES = {".png", ".jpg", ".gif"}; 893542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty public static String[] VIDEOS = {".mp4", ".ogv", ".webm"}; 901b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static String[] TEMPLATED = {".java", ".xml", ".aidl", ".rs",".txt", ".TXT"}; 91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static boolean inList(String s, String[] list) { 93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (String t : list) { 94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (s.endsWith(t)) { 95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return true; 96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return false; 99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 1001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static String mapTypes(String name) { 1021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String type = name.substring(name.lastIndexOf('.') + 1, name.length()); 103187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty if ("xml".equals(type) || "java".equals(type)) { 104187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty if ("AndroidManifest.xml".equals(name)) type = "manifest"; 1051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return type; 1061b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 1071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return type = "file"; 1081b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1091b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1101b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1111b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public void writeProjectDirectory(List<Node> parent, File dir, String relative, Boolean recursed, Data hdf, String newkey) { 1121b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty TreeSet<String> dirs = new TreeSet<String>(); //dirs for project structure and breadcrumb 1131b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty TreeSet<String> files = new TreeSet<String>(); //files for project structure and breadcrumb 1141b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1151b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String subdir = relative; 1161b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String name = ""; 1171b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String label = ""; 1181b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String link = ""; 1191b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String type = ""; 1201b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty int i = 0; 1211b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String expansion = ".Sub."; 1221b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String key = newkey; 1233542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty double maxFileSizeBytes = 2097152; //Max size for browseable images/video 1241b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1251b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (recursed) { 1261b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty key = (key + expansion); 1271b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 1281b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty expansion = ""; 1291b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1301b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 131c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty File[] dirContents = dir.listFiles(); 132c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Arrays.sort(dirContents, byTypeAndName); 133c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (File f: dirContents) { 1341b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name = f.getName(); 1351b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // don't process certain types of files 1361b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (name.startsWith(".") || 1371b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.startsWith("_") || 138187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty "default.properties".equals(name) || 139187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty "build.properties".equals(name) || 1401b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.endsWith(".ttf") || 141e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty name.endsWith(".gradle") || 142e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty name.endsWith(".bat") || 143187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty "Android.mk".equals(name)) { 1441b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("Invalid File Type, bypassing: " + name); 1451b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty continue; 1461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1471b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (f.isFile() && name.contains(".")){ 1481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String path = relative + name; 1491b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = mapTypes(name); 1501b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty link = convertExtension(path, ".html"); 1511b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true");//dd needed? 1521b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (inList(path, IMAGES)) { 1531b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // copy these files to output directly 1541b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = "img"; 1553542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty if (f.length() < maxFileSizeBytes) { 1563542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty ClearPage.copyFile(false, f, path); 1573542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty writeImageVideoPage(f, convertExtension(path, Doclava.htmlExtension), 1583542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty relative, type, true); 1593542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty } else { 1603542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty //too large for browsing, skip copying and show generic icon 1613542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty writeImageVideoPage(f, convertExtension(path, Doclava.htmlExtension), 1623542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty relative, type, false); 1633542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty } 1641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty files.add(name); 1651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Type", "img"); 1661b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Name", name); 1671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Href", link); 16825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue(key + i + ".RelPath", relative); 1691b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1703542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty if (inList(path, VIDEOS)) { 1713542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty // copy these files to output directly 1723542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty type = "video"; 1733542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty if (f.length() < maxFileSizeBytes) { 1743542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty ClearPage.copyFile(false, f, path); 1753542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty writeImageVideoPage(f, convertExtension(path, Doclava.htmlExtension), 1763542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty relative, type, true); 1773542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty } else { 1783542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty //too large for browsing, skip copying and show generic icon 1793542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty writeImageVideoPage(f, convertExtension(path, Doclava.htmlExtension), 1803542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty relative, type, false); 1813542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty } 1823542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty files.add(name); 1833542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue(key + i + ".Type", "video"); 1843542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue(key + i + ".Name", name); 1853542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue(key + i + ".Href", link); 1863542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue(key + i + ".RelPath", relative); 1873542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty } 1881b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (inList(path, TEMPLATED)) { 1891b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // copied and goes through the template 1901b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty ClearPage.copyFile(false, f, path); 1911b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writePage(f, convertExtension(path, Doclava.htmlExtension), relative); 1921b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty files.add(name); 1931b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Type", type); 1941b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Name", name); 1951b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Href", link); 19625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue(key + i + ".RelPath", relative); 1971b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1981b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // add file to the navtree 199f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty parent.add(new Node.Builder().setLabel(name).setLink(link).setType(type).build()); 2001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty i++; 2011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else if (f.isDirectory()) { 2021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty List<Node> mchildren = new ArrayList<Node>(); 2031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = "dir"; 2041b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String dirpath = relative + name; 2051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty link = dirpath + "/index.html"; 2061b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyName = (key + i + ".Name"); 2071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyType = (key + i + ".Type"); 2081b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyHref = (key + i + ".Href"); 2091b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyName, name); 2101b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyType, type); 2111b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyHref, relative + name + "/" + "index.html"); 2121b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("Found directory, recursing. Current key: " + hdfkeyName); 2131b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeProjectDirectory(mchildren, f, relative + name + "/", true, hdf, (key + i)); 2141b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (mchildren.size() > 0) { 2151b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //dir is processed, now add it to the navtree 216c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //don't link sidenav subdirs at this point (but can use "link" to do so) 217f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty parent.add(new Node.Builder().setLabel(name).setChildren(mchildren).setType(type).build()); 2181b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 219c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty dirs.add(name); 2201b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty i++; 2211b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 22225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 2231b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 2241b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //If this is an index for the project root (assumed root if split length is 3 (development/samples/nn)), 2251b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //then remove the root dir so that it won't appear in the breadcrumb. Else just pass it through to 2261b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //setParentDirs as usual. 2271b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String mpath = dir + ""; 2281b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String sdir[] = mpath.split("/"); 2291b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, relative, name, false); 230e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Generate an index.html page for each dir being processed 231e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "/index" + Doclava.htmlExtension); 232e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //concatenate dirs in the navtree. Comment out or remove to restore normal navtree 23325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty squashNodes(parent); 234e27c950134c99151d1d9914eaaf28848327e4f63Scott Main } 235e27c950134c99151d1d9914eaaf28848327e4f63Scott Main 236c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeProjectStructure(String dir, Data hdf) { 237c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //System.out.println(">>-- writing project structure for " + dir ); 238c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectStructure", "true"); 239c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 240c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("page.title", mProjectDir + " Structure"); 241c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectTitle", mTitle); 242e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //write the project.html file 243e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "project" + Doclava.htmlExtension); 244c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectStructure", ""); 245920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 246920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 247c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 248e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Processes a templated project index page from _index.jd in a project root. 249e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Each sample project must have an index, and each index locally defines it's own 250e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * page.tags and sample.group cs vars. This method takes a SC node on input, reads 251e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * any local vars from the _index.jd, generates an html file to out, then updates 252e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * the SC node with the page vars and returns it to the caller. 253e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * 254c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 255e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public Node writeProjectIndexCs(Data hdf, File dir, String key, Node tnode) { 256e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue("summary", ""); 257e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue("summaryFlag", ""); 258e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String filename = dir.getAbsolutePath() + "/_index.jd"; 259e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty File f = new File(filename); 260e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String rel = dir.getPath(); 261e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String mGroup = ""; 262e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("samples", "true"); 263e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set any default page variables for root index 264e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("page.title", mProjectDir); 26525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("projectDir", mProjectDir); 26625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("projectTitle", mTitle); 2673542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty //add the download/project links to the landing pages. 2683542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("samplesProjectIndex", "true"); 2691b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 270e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (!f.isFile()) { 271e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //The sample didn't have any _index.jd, so create a stub. 272e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "index" + Doclava.htmlExtension); 273e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Errors.error(Errors.INVALID_SAMPLE_INDEX, null, "Sample " + mProjectDir 274e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + ": Root _index.jd must be present and must define sample.group" 275e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + " tag. Please see ... for details."); 276e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 277e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty DocFile.writePage(filename, rel, mDest + "index" + Doclava.htmlExtension, hdf); 278f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty PageMetadata.setPageMetadata(f, rel, mDest + "index" + Doclava.htmlExtension, hdf, Doclava.sTaglist); 279e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tnode.setTags(hdf.getValue("page.tags", "")); 280e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty mGroup = hdf.getValue("sample.group", ""); 281e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (mGroup.equals("")) { 282e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Errors.error(Errors.INVALID_SAMPLE_INDEX, null, "Sample " + mProjectDir 283e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + ": Root _index.jd must be present and must define sample.group" 284e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + " tag. Please see ... for details."); 285e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 286e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tnode.setGroup(hdf.getValue("sample.group", "")); 287e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 288e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 289e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty return tnode; 290c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 291920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 292c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 293c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * Keep track of file parents 294c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 295c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data setParentDirs(Data hdf, String subdir, String name, Boolean isFile) { 296e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set whether to linkify the crumb dirs on each sample code page 297e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("pathCrumbLinks", ""); 298e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //isFile = false; 299c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty int iter; 300c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.removeTree("parentdirs"); 301c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String s = subdir; 302c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String urlParts[] = s.split("/"); 303e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //int n, l = (isFile)?1:0; 304e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty int n, l = 1; 305e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println("setParentDirs for " + subdir + name); 306e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (iter=1; iter < urlParts.length; iter++) { 307e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty n = iter-1; 308c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //System.out.println("parentdirs." + n + ".Name == " + urlParts[iter]); 309c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("parentdirs." + n + ".Name", urlParts[iter]); 310e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("parentdirs." + n + ".Link", subdir + "index" + Doclava.htmlExtension); 311920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 312920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return hdf; 313920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 314920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 315c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 316c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * Write a templated source code file to out. 317c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 318920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writePage(File f, String out, String subdir) { 319920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String name = f.getName(); 3201b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String path = f.getPath(); 321920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String data = 3221b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty SampleTagInfo.readFile(new SourcePositionInfo(path, -1, -1), path, "sample code", 3231b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty true, true, true, true); 324920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson data = Doclava.escape(data); 325920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 326920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 32725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 32825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String relative = subdir.replaceFirst("samples/", ""); 3291b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true"); 3301b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, subdir, name, true); 3311b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("projectTitle", mTitle); 332c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 333920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", name); 334920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 33525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("relative", relative); 336920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("realFile", name); 337920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("fileContents", data); 3381b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resTag", "sample"); 3391b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resType", "Sample Code"); 340920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 341920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sample.cs", out); 342920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 343920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 344c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 3453542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty * Write a templated image or video file to out. 346c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 3473542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty public void writeImageVideoPage(File f, String out, String subdir, 3483542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty String resourceType, boolean browsable) { 349920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 3503542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty String name = f.getName(); 3513542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty if (!browsable) { 3523542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("noDisplay", "true"); 3533542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty } 3541b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, subdir, name, true); 3553542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("samples", "true"); 356920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", name); 3571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("projectTitle", mTitle); 358c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 359920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 3603542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("resType", resourceType); 361920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("realFile", name); 362920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sample.cs", out); 363920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 3641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 3651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty /** 366f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty * Render a SC node tree to a navtree js file. 3671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty */ 368815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public static void writeSamplesNavTree(List<Node> tnode, List<Node> groupnodes) { 369815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 370f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty Node node = new 371f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty Node.Builder().setLabel("Reference").setLink("packages.html").setChildren(tnode).build(); 3721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 373815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (groupnodes != null) { 374815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty for (int i = 0; i < tnode.size(); i++) { 375187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty if (tnode.get(i) != null) { 376187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty groupnodes = appendNodeGroups(tnode.get(i), groupnodes); 377187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty } 378815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 3791d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty for (int n = 0; n < groupnodes.size(); n++) { 3801d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty if (groupnodes.get(n).getChildren() == null) { 3811d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty groupnodes.remove(n); 3821d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty n--; 3831d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty } 3841d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty } 385815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty node.setChildren(groupnodes); 386815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 387815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 3881b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty StringBuilder buf = new StringBuilder(); 3891b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (false) { 3901b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // if you want a root node 3911b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("["); 3921b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty node.render(buf); 3931b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("]"); 3941b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 3951b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // if you don't want a root node 3961b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty node.renderChildren(buf); 3971b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 3981b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 3991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty Data data = Doclava.makeHDF(); 4001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty data.setValue("reference_tree", buf.toString()); 4011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty ClearPage.write(data, "samples_navtree_data.cs", "samples_navtree_data.js"); 4021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 40425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty /** 4051d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty * For a given project root node, get the group and then iterate the list of valid 4061d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty * groups looking for a match. If found, append the project to that group node. 407f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty * Samples that reference a valid sample group tag are added to a list for that 4081d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty * group. Samples declare a sample.group tag in their _index.jd files. 409815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty */ 410815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty private static List<Node> appendNodeGroups(Node gNode, List<Node> groupnodes) { 411815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty List<Node> mgrouplist = new ArrayList<Node>(); 4121d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty for (int i = 0; i < groupnodes.size(); i++) { 413187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty if (gNode.getGroup().equals(groupnodes.get(i).getLabel())) { 414815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (groupnodes.get(i).getChildren() == null) { 4151d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty mgrouplist.add(gNode); 416815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty groupnodes.get(i).setChildren(mgrouplist); 4171d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty } else { 4181d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty groupnodes.get(i).getChildren().add(gNode); 419815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 420815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty break; 4211d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty } 422815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 423815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty return groupnodes; 424815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 425815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 426815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty /** 42725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty * Sort by type and name (alpha), with manifest and src always at top. 42825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty */ 429c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Comparator<File> byTypeAndName = new Comparator<File>() { 430c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public int compare (File one, File other) { 431c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (one.isDirectory() && !other.isDirectory()) { 432c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return 1; 433c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else if (!one.isDirectory() && other.isDirectory()) { 434c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return -1; 435187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty } else if ("AndroidManifest.xml".equals(one.getName())) { 43625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return -1; 437c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else { 438c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return one.compareTo(other); 439c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 440c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 441c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty }; 442c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 4431b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty /** 44425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty * Concatenate dirs that only hold dirs to simplify nav tree 44525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty */ 446815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public static List<Node> squashNodes(List<Node> tnode) { 44725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty List<Node> list = tnode; 44825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 44925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty for(int i = 0; i < list.size(); ++i) { 45025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //only squash dirs that contain another dir whose list size is 1 and 45125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //that don't contain endpoints 452187b985f817b4a0181c5127270a2aab9915cf60aDirk Dougherty if (("dir".equals(list.get(i).getType())) && 45325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty (list.size() == 1) && 45425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty (list.get(i).getChildren().get(0).getChildren() != null)) { 45525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String thisLabel = list.get(i).getLabel(); 45625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String childLabel = list.get(i).getChildren().get(0).getLabel(); 45725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String newLabel = thisLabel + "/" + childLabel; 45825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //Set label of parent and mChildren to those of child-child, skipping 45925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //squashed dir 46025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty list.get(i).setLabel(newLabel); 46125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty list.get(i).setChildren(list.get(i).getChildren().get(0).getChildren()); 46225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else { 46325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty continue; 46425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 46525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 46625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return list; 46725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 46825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 46925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty /** 4701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty * SampleCode variant of NavTree node. 4711b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty */ 4721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static class Node { 4731b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty private String mLabel; 4741b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty private String mLink; 475e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty private String mGroup; // from sample.group in _index.jd 476e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty private List<String> mTags; // from page.tags in _index.jd 47725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty private List<Node> mChildren; 47825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty private String mType; 4791b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 480f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty private Node(Builder builder) { 481f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty mLabel = builder.mLabel; 482f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty mLink = builder.mLink; 483f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty mGroup = builder.mGroup; 484f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty mTags = builder.mTags; 485f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty mChildren = builder.mChildren; 486f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty mType = builder.mType; 4871b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 488f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty 489f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public static class Builder { 490f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty private String mLabel, mLink, mGroup, mType; 491f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty private List<String> mTags = null; 492f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty private List<Node> mChildren = null; 493f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public Builder setLabel(String mLabel) { this.mLabel = mLabel; return this;} 494f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public Builder setLink(String mLink) { this.mLink = mLink; return this;} 495f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public Builder setGroup(String mGroup) { this.mGroup = mGroup; return this;} 496f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public Builder setTags(List<String> mTags) { this.mTags = mTags; return this;} 497f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public Builder setChildren(List<Node> mChildren) { this.mChildren = mChildren; return this;} 498f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public Builder setType(String mType) { this.mType = mType; return this;} 499f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public Node build() {return new Node(this);} 500f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty } 501f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty 502f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty public Node(String mLabel, 503f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty String mLink, 504f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty String mGroup, 505f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty List<String> mTags, 506f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty List<Node> mChildren, 507f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty String mType) { 508f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty this.mLabel = mLabel; 509f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty this.mLink = mLink; 510f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty this.mGroup = mGroup; 511f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty this.mTags = mTags; 512f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty this.mChildren = mChildren; 513f9d9cb045339e902b36391d19be3c665b1585ab8Dirk Dougherty this.mType = mType; } 514582c1d6e605c968147f3e2058ec31b47c09e19e3Dirk Dougherty 5151b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty static void renderString(StringBuilder buf, String s) { 5161b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (s == null) { 5171b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("null"); 5181b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 5191b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append('"'); 5201b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty final int N = s.length(); 5211b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int i = 0; i < N; i++) { 5221b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty char c = s.charAt(i); 5231b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (c >= ' ' && c <= '~' && c != '"' && c != '\\') { 5241b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(c); 5251b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 5261b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("\\u"); 5271b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int j = 0; i < 4; i++) { 5281b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty char x = (char) (c & 0x000f); 5291b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (x > 10) { 5301b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty x = (char) (x - 10 + 'a'); 5311b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 5321b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty x = (char) (x + '0'); 5331b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5341b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(x); 5351b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty c >>= 4; 5361b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5371b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5381b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5391b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append('"'); 5401b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5411b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5421b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 5431b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty void renderChildren(StringBuilder buf) { 5441b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty List<Node> list = mChildren; 5451b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (list == null || list.size() == 0) { 5461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // We output null for no children. That way empty lists here can just 5471b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // be a byproduct of how we generate the lists. 5481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("null"); 5491b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 5501b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("[ "); 5511b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty final int N = list.size(); 5521b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int i = 0; i < N; i++) { 5531b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty list.get(i).render(buf); 5541b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (i != N - 1) { 5551b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 5561b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5581b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(" ]\n"); 5591b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5601b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 562e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty void renderTags(StringBuilder buf) { 563e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty List<String> list = mTags; 564e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (list == null || list.size() == 0) { 565e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("null"); 566e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 567e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("[ "); 568e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty final int N = list.size(); 569e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int i = 0; i < N; i++) { 570e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String tagval = list.get(i).toString(); 571e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append('"'); 572e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty final int L = tagval.length(); 573e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int t = 0; t < L; t++) { 574e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty char c = tagval.charAt(t); 575e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (c >= ' ' && c <= '~' && c != '"' && c != '\\') { 576e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(c); 577e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 578e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("\\u"); 579e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int m = 0; m < 4; m++) { 580e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty char x = (char) (c & 0x000f); 581e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (x > 10) { 582e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty x = (char) (x - 10 + 'a'); 583e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 584e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty x = (char) (x + '0'); 585e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 586e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(x); 587e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty c >>= 4; 588e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 589e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 590e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 591e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append('"'); 592e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (i != N - 1) { 593e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 594e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 595e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 596e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(" ]"); 597e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 598e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 599e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 6001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty void render(StringBuilder buf) { 6011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("[ "); 6021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mLabel); 6031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 6041b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mLink); 6051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 606e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty renderString(buf, mGroup); 607e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 608e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty renderTags(buf); 609e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 6101b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderChildren(buf); 6111b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 6121b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mType); 6131b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(" ]"); 6141b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 61525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 61625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public List<Node> getChildren() { 61725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty if (mChildren != null) { 61825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mChildren; 61925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else { 62025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return null; 62125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 62225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 62325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 62425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setChildren(List<Node> node) { 62525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mChildren = node; 62625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 62725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 62825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getLabel() { 62925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mLabel; 63025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 63125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 63225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setLabel(String label) { 63325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mLabel = label; 63425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 63525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 63625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getType() { 63725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mType.toString(); 63825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 63925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 64025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getHref() { 64125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mLink; 64225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 64325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 64425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setHref(String link) { 64525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mLink = link; 64625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 647e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 648815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public String getGroup() { 649815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty return mGroup; 650e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 651e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 652815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public void setGroup(String group) { 653815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty mGroup = group; 654e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 655e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 656e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void setTags(String tags) { 657e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty List<String> tagList = new ArrayList(); 658e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String[] tagParts = tags.split(","); 659e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 660e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int iter = 0; iter < tagParts.length; iter++) { 661e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String item = tagParts[iter].replaceAll("\"", "").trim(); 662e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tagList.add(item); 663e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 664e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty mTags = tagList; 665e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 666e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 667e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 668e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty /** 669e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Write the project's templated _index.html 670e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * @deprecated 671e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * 672e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty */ 673e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void writeProjectIndex(Data hdf) { 674e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println(">>-- writing project index for " + mDest ); 675e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("projectDir", mProjectDir); 676e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("page.title", mProjectDir + " Sample"); 677e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("projectTitle", mTitle); 678e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "index" + Doclava.htmlExtension); 679e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 680e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 681e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty /** 682e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Grab the contents of an _index.html summary from a dir. 683e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * @deprecated 684e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty */ 685e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void getSummaryFromDir(Data hdf, File dir, String key) { 686e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println("Getting summary for " + dir + "/_index.html"); 687e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summary", ""); 688e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summaryFlag", ""); 689e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String filename = dir.getPath() + "/_index.html"; 690e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String summary = SampleTagInfo.readFile(new SourcePositionInfo(filename, 691e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty -1,-1), filename, "sample code", true, false, false, true); 692e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (summary != null) { 693e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue(key + "SummaryFlag", "true"); 694e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summary", summary); 695e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set the target for [info] link 696e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue(key + "Href", dir + "/index.html"); 697e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //return true; 698e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 6991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 7001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 701c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 702c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 703c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 704c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeDirectory(File dir, String relative, boolean offline) { 705c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty TreeSet<String> dirs = new TreeSet<String>(); 706c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty TreeSet<String> files = new TreeSet<String>(); 707c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 708c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String subdir = relative; // .substring(mDest.length()); 709c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 710c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (File f : dir.listFiles()) { 711c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String name = f.getName(); 712c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (name.startsWith(".") || name.startsWith("_")) { 713c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty continue; 714c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 715c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (f.isFile()) { 716c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String out = relative + name; 717c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (inList(out, IMAGES)) { 718c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // copied directly 719c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.copyFile(false, f, out); 720c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writeImagePage(f, convertExtension(out, Doclava.htmlExtension), subdir); 721c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty files.add(name); 722c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 723c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (inList(out, TEMPLATED)) { 724c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // copied and goes through the template 725c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.copyFile(false, f, out); 726c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writePage(f, convertExtension(out, Doclava.htmlExtension), subdir); 727c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty files.add(name); 728c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 729c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 730c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // else ignored 731c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else if (f.isDirectory()) { 732c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writeDirectory(f, relative + name + "/", offline); 733c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty dirs.add(name); 734c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 735c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 736c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 737c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // write the index page 738c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty int i; 739c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 740c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = writeIndex(dir); 741c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("subdir", subdir); 742c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i = 0; 743c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (String d : dirs) { 744c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("subdirs." + i + ".Name", d); 745c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Href", convertExtension(d, ".html")); 746c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i++; 747c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 748c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i = 0; 749c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (String f : files) { 750c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Name", f); 751c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Href", convertExtension(f, ".html")); 752c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i++; 753c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 754c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 755c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (!offline) relative = "/" + relative; 756c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "index" + Doclava.htmlExtension); 757c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 758c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 759c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 760c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 761c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 762c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeIndexOnly(File dir, String relative, Boolean offline) { 763c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = writeIndex(dir); 764c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (!offline) relative = "/" + relative; 765c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 766c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty System.out.println("writing indexonly at " + relative + "/index" + Doclava.htmlExtension); 767c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "index" + Doclava.htmlExtension); 768c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 769c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 770c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 771c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 772c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 773c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public Data writeIndex(File dir) { 774c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = Doclava.makeHDF(); 775c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("page.title", dir.getName() + " - " + mTitle); 776c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectTitle", mTitle); 777c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 778c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String filename = dir.getPath() + "/_index.html"; 779c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String summary = 780c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty SampleTagInfo.readFile(new SourcePositionInfo(filename, -1, -1), filename, "sample code", 781c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty true, false, false, true); 782c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 783c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (summary == null) { 784c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty summary = ""; 785c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 786c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("summary", summary); 787c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 788c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return hdf; 789c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 790c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 7913542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty /** 7923542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty * @deprecated 7933542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty */ 7943542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty public void writeImagePage(File f, String out, String subdir) { 7953542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty Data hdf = Doclava.makeHDF(); 7963542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty String name = f.getName(); 7973542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty 7983542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("samples", "true"); 7993542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty setParentDirs(hdf, subdir, name, true); 8003542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("page.title", name); 8013542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("projectTitle", mTitle); 8023542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("projectDir", mProjectDir); 8033542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("subdir", subdir); 8043542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("realFile", name); 8053542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("resTag", "sample"); 8063542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty hdf.setValue("resType", "sampleImage"); 8073542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty ClearPage.write(hdf, "sample.cs", out); 8083542770e7b9e121d1a3107300af1aac1b2555128Dirk Dougherty } 809920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} 810