SampleCode.java revision 1d8fa8ddfef0080a63faf8ec09c69bd5f00ee601
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. 75e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty Node rootNode = writeProjectIndexCs(hdf, f, null, new Node(mProjectDir, 76e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty "samples/" + startname + "/index.html", null, null, filelist, null)); 771b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // return a root SC node for the sample with children appended 78e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty return rootNode; 791b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 801b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return null; 81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String convertExtension(String s, String ext) { 84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return s.substring(0, s.lastIndexOf('.')) + ext; 85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String[] IMAGES = {".png", ".jpg", ".gif"}; 881b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static String[] TEMPLATED = {".java", ".xml", ".aidl", ".rs",".txt", ".TXT"}; 89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static boolean inList(String s, String[] list) { 91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (String t : list) { 92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (s.endsWith(t)) { 93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return true; 94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return false; 97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 981b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static String mapTypes(String name) { 1001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String type = name.substring(name.lastIndexOf('.') + 1, name.length()); 1011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (type.equals("xml") || type.equals("java")) { 1021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (name.equals("AndroidManifest.xml")) type = "manifest"; 1031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return type; 1041b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 1051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty return type = "file"; 1061b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1081b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1091b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public void writeProjectDirectory(List<Node> parent, File dir, String relative, Boolean recursed, Data hdf, String newkey) { 1101b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty TreeSet<String> dirs = new TreeSet<String>(); //dirs for project structure and breadcrumb 1111b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty TreeSet<String> files = new TreeSet<String>(); //files for project structure and breadcrumb 1121b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1131b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String subdir = relative; 1141b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String name = ""; 1151b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String label = ""; 1161b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String link = ""; 1171b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String type = ""; 1181b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty int i = 0; 1191b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String expansion = ".Sub."; 1201b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String key = newkey; 1211b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 1221b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (recursed) { 1231b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty key = (key + expansion); 1241b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 1251b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty expansion = ""; 1261b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1271b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 128c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty File[] dirContents = dir.listFiles(); 129c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Arrays.sort(dirContents, byTypeAndName); 130c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (File f: dirContents) { 1311b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name = f.getName(); 1321b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // don't process certain types of files 1331b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (name.startsWith(".") || 1341b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.startsWith("_") || 1351b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.equals("default.properties") || 1361b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.equals("build.properties") || 1371b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.endsWith(".ttf") || 138e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty name.endsWith(".gradle") || 139e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty name.endsWith(".bat") || 1401b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty name.equals("Android.mk")) { 1411b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("Invalid File Type, bypassing: " + name); 1421b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty continue; 1431b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1441b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (f.isFile() && name.contains(".")){ 1451b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String path = relative + name; 1461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = mapTypes(name); 1471b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty link = convertExtension(path, ".html"); 1481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true");//dd needed? 1491b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (inList(path, IMAGES)) { 1501b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // copy these files to output directly 1511b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = "img"; 1521b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty ClearPage.copyFile(false, f, path); 1531b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeImagePage(f, convertExtension(path, Doclava.htmlExtension), relative); 1541b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty files.add(name); 1551b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Type", "img"); 1561b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Name", name); 1571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Href", link); 15825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue(key + i + ".RelPath", relative); 1591b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1601b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (inList(path, TEMPLATED)) { 1611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // copied and goes through the template 1621b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty ClearPage.copyFile(false, f, path); 1631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writePage(f, convertExtension(path, Doclava.htmlExtension), relative); 1641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty files.add(name); 1651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(key + i + ".Type", type); 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 } 1701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // add file to the navtree 171e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty parent.add(new Node(name, link, null, null, null, type)); 1721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty i++; 1731b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else if (f.isDirectory()) { 1741b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty List<Node> mchildren = new ArrayList<Node>(); 1751b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty type = "dir"; 1761b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String dirpath = relative + name; 1771b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty link = dirpath + "/index.html"; 1781b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyName = (key + i + ".Name"); 1791b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyType = (key + i + ".Type"); 1801b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String hdfkeyHref = (key + i + ".Href"); 1811b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyName, name); 1821b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyType, type); 1831b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue(hdfkeyHref, relative + name + "/" + "index.html"); 1841b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //System.out.println("Found directory, recursing. Current key: " + hdfkeyName); 1851b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty writeProjectDirectory(mchildren, f, relative + name + "/", true, hdf, (key + i)); 1861b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (mchildren.size() > 0) { 1871b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //dir is processed, now add it to the navtree 188c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //don't link sidenav subdirs at this point (but can use "link" to do so) 189e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty parent.add(new Node(name, null, null, null, mchildren, type)); 1901b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 191c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty dirs.add(name); 1921b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty i++; 1931b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 19425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 1951b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 1961b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //dd not working yet 197c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //Get summary from any _index files in any project dirs (currently disabled) 198c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // getSummaryFromDir(hdf, dir, newkey); 1991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //If this is an index for the project root (assumed root if split length is 3 (development/samples/nn)), 2001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //then remove the root dir so that it won't appear in the breadcrumb. Else just pass it through to 2011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty //setParentDirs as usual. 2021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String mpath = dir + ""; 2031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String sdir[] = mpath.split("/"); 2041b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (sdir.length == 3 ) { 2051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty System.out.println("-----------------> this must be the root: [sdir len]" + sdir.length + "[dir]" + dir); 206c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("showProjectPaths","true");//dd remove here? 2071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 2081b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, relative, name, false); 209e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Generate an index.html page for each dir being processed 210e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "/index" + Doclava.htmlExtension); 211e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //concatenate dirs in the navtree. Comment out or remove to restore normal navtree 21225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty squashNodes(parent); 213e27c950134c99151d1d9914eaaf28848327e4f63Scott Main } 214e27c950134c99151d1d9914eaaf28848327e4f63Scott Main 215c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeProjectStructure(String dir, Data hdf) { 216c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //System.out.println(">>-- writing project structure for " + dir ); 217c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectStructure", "true"); 218c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 219c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("page.title", mProjectDir + " Structure"); 220c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectTitle", mTitle); 221e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //write the project.html file 222e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "project" + Doclava.htmlExtension); 223c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectStructure", ""); 224920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 225920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 226c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 227e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Processes a templated project index page from _index.jd in a project root. 228e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Each sample project must have an index, and each index locally defines it's own 229e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * page.tags and sample.group cs vars. This method takes a SC node on input, reads 230e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * any local vars from the _index.jd, generates an html file to out, then updates 231e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * the SC node with the page vars and returns it to the caller. 232e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * 233c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 234e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public Node writeProjectIndexCs(Data hdf, File dir, String key, Node tnode) { 235e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue("summary", ""); 236e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue("summaryFlag", ""); 237e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String filename = dir.getAbsolutePath() + "/_index.jd"; 238e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty File f = new File(filename); 239e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String rel = dir.getPath(); 240e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String mGroup = ""; 241e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("samples", "true"); 242e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set any default page variables for root index 243e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("page.title", mProjectDir); 24425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("projectDir", mProjectDir); 24525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("projectTitle", mTitle); 2461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 247e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (!f.isFile()) { 248e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //The sample didn't have any _index.jd, so create a stub. 249e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "index" + Doclava.htmlExtension); 250e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Errors.error(Errors.INVALID_SAMPLE_INDEX, null, "Sample " + mProjectDir 251e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + ": Root _index.jd must be present and must define sample.group" 252e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + " tag. Please see ... for details."); 253e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 254e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty DocFile.writePage(filename, rel, mDest + "index" + Doclava.htmlExtension, hdf); 255e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tnode.setTags(hdf.getValue("page.tags", "")); 256e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty mGroup = hdf.getValue("sample.group", ""); 257e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (mGroup.equals("")) { 258e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //Errors.error(Errors.INVALID_SAMPLE_INDEX, null, "Sample " + mProjectDir 259e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + ": Root _index.jd must be present and must define sample.group" 260e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty // + " tag. Please see ... for details."); 261e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 262e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tnode.setGroup(hdf.getValue("sample.group", "")); 263e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 264e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 265e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty return tnode; 266c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 267920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 268c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 269c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * Keep track of file parents 270c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 271c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data setParentDirs(Data hdf, String subdir, String name, Boolean isFile) { 272e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set whether to linkify the crumb dirs on each sample code page 273e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("pathCrumbLinks", ""); 274e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //isFile = false; 275c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty int iter; 276c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.removeTree("parentdirs"); 277c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String s = subdir; 278c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String urlParts[] = s.split("/"); 279e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //int n, l = (isFile)?1:0; 280e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty int n, l = 1; 281e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println("setParentDirs for " + subdir + name); 282e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (iter=1; iter < urlParts.length; iter++) { 283e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty n = iter-1; 284c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty //System.out.println("parentdirs." + n + ".Name == " + urlParts[iter]); 285c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("parentdirs." + n + ".Name", urlParts[iter]); 286e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("parentdirs." + n + ".Link", subdir + "index" + Doclava.htmlExtension); 287920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 288920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return hdf; 289920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 290920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 291c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 292c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * Write a templated source code file to out. 293c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 294920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writePage(File f, String out, String subdir) { 295920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String name = f.getName(); 2961b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty String path = f.getPath(); 297920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String data = 2981b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty SampleTagInfo.readFile(new SourcePositionInfo(path, -1, -1), path, "sample code", 2991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty true, true, true, true); 300920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson data = Doclava.escape(data); 301920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 302920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 30325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 30425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String relative = subdir.replaceFirst("samples/", ""); 3051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true"); 3061b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, subdir, name, true); 3071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("projectTitle", mTitle); 308c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 309920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", name); 310920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 31125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty hdf.setValue("relative", relative); 312920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("realFile", name); 313920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("fileContents", data); 3141b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resTag", "sample"); 3151b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resType", "Sample Code"); 316920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 317920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sample.cs", out); 318920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 319920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 320c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 321c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * Write a templated image file to out. 322c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 323920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writeImagePage(File f, String out, String subdir) { 324920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String name = f.getName(); 325920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 326920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String data = "<img src=\"" + name + "\" title=\"" + name + "\" />"; 327920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 328920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 3291b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("samples", "true"); 3301b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty setParentDirs(hdf, subdir, name, true); 331920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", name); 3321b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("projectTitle", mTitle); 333c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectDir", mProjectDir); 334920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 335920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("realFile", name); 336920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("fileContents", data); 3371b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resTag", "sample"); 3381b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty hdf.setValue("resType", "Sample Code"); 339920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sample.cs", out); 340920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 3411b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 3421b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty /** 3431d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty * Render a SC node tree to a navtree js file. 3441b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty */ 345815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public static void writeSamplesNavTree(List<Node> tnode, List<Node> groupnodes) { 346815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 347e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty Node node = new Node("Reference", "packages.html", null, null, tnode, null); 3481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 349815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (groupnodes != null) { 350815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty for (int i = 0; i < tnode.size(); i++) { 351815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty groupnodes = appendNodeGroups(tnode.get(i), groupnodes); 352815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 3531d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty for (int n = 0; n < groupnodes.size(); n++) { 3541d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty if (groupnodes.get(n).getChildren() == null) { 3551d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty groupnodes.remove(n); 3561d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty n--; 3571d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty } 3581d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty } 359815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty node.setChildren(groupnodes); 360815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 361815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 3621b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty StringBuilder buf = new StringBuilder(); 3631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (false) { 3641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // if you want a root node 3651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("["); 3661b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty node.render(buf); 3671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("]"); 3681b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 3691b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // if you don't want a root node 3701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty node.renderChildren(buf); 3711b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 3721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 3731b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty Data data = Doclava.makeHDF(); 3741b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty data.setValue("reference_tree", buf.toString()); 3751b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty ClearPage.write(data, "samples_navtree_data.cs", "samples_navtree_data.js"); 3761b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 3771b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 37825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty /** 3791d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty * For a given project root node, get the group and then iterate the list of valid 3801d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty * groups looking for a match. If found, append the project to that group node. 3811d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty * Samples the reference a valid sample group tag are added to a list for that 3821d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty * group. Samples declare a sample.group tag in their _index.jd files. 383815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty */ 384815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty private static List<Node> appendNodeGroups(Node gNode, List<Node> groupnodes) { 385815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty List<Node> mgrouplist = new ArrayList<Node>(); 3861d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty for (int i = 0; i < groupnodes.size(); i++) { 387815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (groupnodes.get(i).getLabel().equals(gNode.getGroup())) { 388815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty if (groupnodes.get(i).getChildren() == null) { 3891d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty mgrouplist.add(gNode); 390815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty groupnodes.get(i).setChildren(mgrouplist); 3911d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty } else { 3921d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty groupnodes.get(i).getChildren().add(gNode); 393815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 394815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty break; 3951d8fa8ddfef0080a63faf8ec09c69bd5f00ee601Dirk Dougherty } 396815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 397815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty return groupnodes; 398815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty } 399815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty 400815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty /** 40125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty * Sort by type and name (alpha), with manifest and src always at top. 40225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty */ 403c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Comparator<File> byTypeAndName = new Comparator<File>() { 404c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public int compare (File one, File other) { 405c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (one.isDirectory() && !other.isDirectory()) { 406c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return 1; 407c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else if (!one.isDirectory() && other.isDirectory()) { 408c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return -1; 40925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else if (one.getName().equals("AndroidManifest.xml")) { 41025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return -1; 41125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else if (one.getName().equals("src")) { 41225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return -1; 413c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else { 414c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return one.compareTo(other); 415c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 416c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 417c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty }; 418c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 4191b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty /** 42025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty * Concatenate dirs that only hold dirs to simplify nav tree 42125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty */ 422815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public static List<Node> squashNodes(List<Node> tnode) { 42325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty List<Node> list = tnode; 42425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 42525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty for(int i = 0; i < list.size(); ++i) { 42625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //only squash dirs that contain another dir whose list size is 1 and 42725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //that don't contain endpoints 42825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty if ((list.get(i).getType().equals("dir")) && 42925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty (list.size() == 1) && 43025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty (list.get(i).getChildren().get(0).getChildren() != null)) { 43125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String thisLabel = list.get(i).getLabel(); 43225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String childLabel = list.get(i).getChildren().get(0).getLabel(); 43325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty String newLabel = thisLabel + "/" + childLabel; 43425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //Set label of parent and mChildren to those of child-child, skipping 43525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty //squashed dir 43625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty list.get(i).setLabel(newLabel); 43725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty list.get(i).setChildren(list.get(i).getChildren().get(0).getChildren()); 43825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else { 43925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty continue; 44025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 44125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 44225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return list; 44325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 44425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 44525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty /** 4461b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty * SampleCode variant of NavTree node. 4471b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty */ 4481b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty public static class Node { 4491b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty private String mLabel; 4501b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty private String mLink; 451e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty private String mGroup; // from sample.group in _index.jd 452e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty private List<String> mTags; // from page.tags in _index.jd 45325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty private List<Node> mChildren; 45425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty private String mType; 4551b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 456e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty Node(String label, String link, String group, List<String> tags, List<Node> children, String type) { 4571b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty mLabel = label; 4581b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty mLink = link; 459e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty mGroup = group; 46025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mTags = tags; 4611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty mChildren = children; 4621b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty mType = type; 4631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 4651b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty static void renderString(StringBuilder buf, String s) { 4661b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (s == null) { 4671b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("null"); 4681b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 4691b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append('"'); 4701b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty final int N = s.length(); 4711b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int i = 0; i < N; i++) { 4721b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty char c = s.charAt(i); 4731b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (c >= ' ' && c <= '~' && c != '"' && c != '\\') { 4741b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(c); 4751b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 4761b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("\\u"); 4771b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int j = 0; i < 4; i++) { 4781b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty char x = (char) (c & 0x000f); 4791b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (x > 10) { 4801b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty x = (char) (x - 10 + 'a'); 4811b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 4821b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty x = (char) (x + '0'); 4831b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4841b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(x); 4851b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty c >>= 4; 4861b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4871b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4881b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4891b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append('"'); 4901b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4911b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 4921b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 4931b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty void renderChildren(StringBuilder buf) { 4941b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty List<Node> list = mChildren; 4951b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (list == null || list.size() == 0) { 4961b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // We output null for no children. That way empty lists here can just 4971b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty // be a byproduct of how we generate the lists. 4981b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("null"); 4991b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } else { 5001b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("[ "); 5011b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty final int N = list.size(); 5021b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty for (int i = 0; i < N; i++) { 5031b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty list.get(i).render(buf); 5041b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty if (i != N - 1) { 5051b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 5061b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5071b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5081b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(" ]\n"); 5091b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5101b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 5111b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 512e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty void renderTags(StringBuilder buf) { 513e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty List<String> list = mTags; 514e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (list == null || list.size() == 0) { 515e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("null"); 516e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 517e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("[ "); 518e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty final int N = list.size(); 519e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int i = 0; i < N; i++) { 520e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String tagval = list.get(i).toString(); 521e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append('"'); 522e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty final int L = tagval.length(); 523e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int t = 0; t < L; t++) { 524e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty char c = tagval.charAt(t); 525e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (c >= ' ' && c <= '~' && c != '"' && c != '\\') { 526e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(c); 527e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 528e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append("\\u"); 529e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int m = 0; m < 4; m++) { 530e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty char x = (char) (c & 0x000f); 531e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (x > 10) { 532e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty x = (char) (x - 10 + 'a'); 533e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } else { 534e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty x = (char) (x + '0'); 535e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 536e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(x); 537e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty c >>= 4; 538e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 539e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 540e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 541e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append('"'); 542e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (i != N - 1) { 543e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 544e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 545e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 546e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(" ]"); 547e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 548e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 549e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 5501b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty void render(StringBuilder buf) { 5511b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append("[ "); 5521b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mLabel); 5531b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 5541b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mLink); 5551b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 556e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty renderString(buf, mGroup); 557e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 558e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty renderTags(buf); 559e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty buf.append(", "); 5601b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderChildren(buf); 5611b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(", "); 5621b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty renderString(buf, mType); 5631b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty buf.append(" ]"); 5641b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 56525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 56625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public List<Node> getChildren() { 56725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty if (mChildren != null) { 56825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mChildren; 56925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } else { 57025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return null; 57125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 57225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 57325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 57425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setChildren(List<Node> node) { 57525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mChildren = node; 57625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 57725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 57825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getLabel() { 57925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mLabel; 58025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 58125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 58225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setLabel(String label) { 58325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mLabel = label; 58425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 58525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 58625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getType() { 58725586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mType.toString(); 58825586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 58925586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 59025586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public String getHref() { 59125586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty return mLink; 59225586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 59325586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty 59425586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty public void setHref(String link) { 59525586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty mLink = link; 59625586c08d0a5068159d1c9482f0eaec0d8cc3d50Dirk Dougherty } 597e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 598815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public String getGroup() { 599815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty return mGroup; 600e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 601e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 602815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty public void setGroup(String group) { 603815f9342d2b82cf61e56e64cbea46079215041beDirk Dougherty mGroup = group; 604e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 605e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 606e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void setTags(String tags) { 607e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty List<String> tagList = new ArrayList(); 608e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String[] tagParts = tags.split(","); 609e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 610e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty for (int iter = 0; iter < tagParts.length; iter++) { 611e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String item = tagParts[iter].replaceAll("\"", "").trim(); 612e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty tagList.add(item); 613e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 614e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty mTags = tagList; 615e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 616e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 617e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 618e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty /** 619e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Write the project's templated _index.html 620e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * @deprecated 621e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * 622e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty */ 623e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void writeProjectIndex(Data hdf) { 624e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println(">>-- writing project index for " + mDest ); 625e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("projectDir", mProjectDir); 626e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("page.title", mProjectDir + " Sample"); 627e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("projectTitle", mTitle); 628e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty ClearPage.write(hdf, "sampleindex.cs", mDest + "index" + Doclava.htmlExtension); 629e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 630e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty 631e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty /** 632e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * Grab the contents of an _index.html summary from a dir. 633e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty * @deprecated 634e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty */ 635e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty public void getSummaryFromDir(Data hdf, File dir, String key) { 636e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //System.out.println("Getting summary for " + dir + "/_index.html"); 637e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summary", ""); 638e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summaryFlag", ""); 639e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String filename = dir.getPath() + "/_index.html"; 640e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty String summary = SampleTagInfo.readFile(new SourcePositionInfo(filename, 641e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty -1,-1), filename, "sample code", true, false, false, true); 642e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty if (summary != null) { 643e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue(key + "SummaryFlag", "true"); 644e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty hdf.setValue("summary", summary); 645e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //set the target for [info] link 646e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //hdf.setValue(key + "Href", dir + "/index.html"); 647e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty //return true; 648e52f6d819e7d95e19e9b315f358bb7ac293413d8Dirk Dougherty } 6491b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty } 6501b45d1d08a4ff984e1d0741dd13f0759f6527ebfDirk Dougherty 651c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 652c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 653c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 654c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeDirectory(File dir, String relative, boolean offline) { 655c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty TreeSet<String> dirs = new TreeSet<String>(); 656c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty TreeSet<String> files = new TreeSet<String>(); 657c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 658c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String subdir = relative; // .substring(mDest.length()); 659c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 660c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (File f : dir.listFiles()) { 661c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String name = f.getName(); 662c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (name.startsWith(".") || name.startsWith("_")) { 663c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty continue; 664c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 665c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (f.isFile()) { 666c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String out = relative + name; 667c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (inList(out, IMAGES)) { 668c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // copied directly 669c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.copyFile(false, f, out); 670c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writeImagePage(f, convertExtension(out, Doclava.htmlExtension), subdir); 671c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty files.add(name); 672c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 673c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (inList(out, TEMPLATED)) { 674c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // copied and goes through the template 675c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.copyFile(false, f, out); 676c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writePage(f, convertExtension(out, Doclava.htmlExtension), subdir); 677c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty files.add(name); 678c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 679c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 680c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // else ignored 681c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } else if (f.isDirectory()) { 682c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty writeDirectory(f, relative + name + "/", offline); 683c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty dirs.add(name); 684c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 685c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 686c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 687c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty // write the index page 688c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty int i; 689c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 690c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = writeIndex(dir); 691c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("subdir", subdir); 692c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i = 0; 693c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (String d : dirs) { 694c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("subdirs." + i + ".Name", d); 695c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Href", convertExtension(d, ".html")); 696c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i++; 697c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 698c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i = 0; 699c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty for (String f : files) { 700c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Name", f); 701c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("files." + i + ".Href", convertExtension(f, ".html")); 702c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty i++; 703c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 704c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 705c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (!offline) relative = "/" + relative; 706c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "index" + Doclava.htmlExtension); 707c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 708c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 709c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 710c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 711c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 712c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public void writeIndexOnly(File dir, String relative, Boolean offline) { 713c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = writeIndex(dir); 714c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (!offline) relative = "/" + relative; 715c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 716c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty System.out.println("writing indexonly at " + relative + "/index" + Doclava.htmlExtension); 717c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty ClearPage.write(hdf, "sampleindex.cs", relative + "index" + Doclava.htmlExtension); 718c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 719c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 720c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty /** 721c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty * @deprecated 722c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty */ 723c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty public Data writeIndex(File dir) { 724c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty Data hdf = Doclava.makeHDF(); 725c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("page.title", dir.getName() + " - " + mTitle); 726c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("projectTitle", mTitle); 727c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 728c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String filename = dir.getPath() + "/_index.html"; 729c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty String summary = 730c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty SampleTagInfo.readFile(new SourcePositionInfo(filename, -1, -1), filename, "sample code", 731c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty true, false, false, true); 732c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 733c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty if (summary == null) { 734c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty summary = ""; 735c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 736c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty hdf.setValue("summary", summary); 737c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 738c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty return hdf; 739c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty } 740c11a467135f9118604f31fadc99d2edd494edb0bDirk Dougherty 741920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} 742