SampleCode.java revision 920dbbbaca6aa578f3b26d89e99d12754c26ed60
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 Dodson 19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.google.clearsilver.jsilver.data.Data; 20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.*; 22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.io.*; 23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic class SampleCode { 26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mSource; 27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mDest; 28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String mTitle; 29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public SampleCode(String source, String dest, String title) { 31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mSource = source; 32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mTitle = title; 33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson int len = dest.length(); 34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (len > 1 && dest.charAt(len - 1) != '/') { 35920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mDest = dest + '/'; 36920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } else { 37920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson mDest = dest; 38920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void write(boolean offlineMode) { 42920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson File f = new File(mSource); 43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (!f.isDirectory()) { 44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson System.out.println("-samplecode not a directory: " + mSource); 45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return; 46920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (offlineMode) 48920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson writeIndexOnly(f, mDest, offlineMode); 49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson else 50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson writeDirectory(f, mDest); 51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String convertExtension(String s, String ext) { 54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return s.substring(0, s.lastIndexOf('.')) + ext; 55920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 56920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String[] IMAGES = {".png", ".jpg", ".gif"}; 58920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static String[] TEMPLATED = {".java", ".xml"}; 59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public static boolean inList(String s, String[] list) { 61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (String t : list) { 62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (s.endsWith(t)) { 63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return true; 64920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 65920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 66920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return false; 67920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 68920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writeDirectory(File dir, String relative) { 70920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson TreeSet<String> dirs = new TreeSet<String>(); 71920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson TreeSet<String> files = new TreeSet<String>(); 72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String subdir = relative; // .substring(mDest.length()); 74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (File f : dir.listFiles()) { 76920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String name = f.getName(); 77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (name.startsWith(".") || name.startsWith("_")) { 78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson continue; 79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (f.isFile()) { 81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String out = relative + name; 82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (inList(out, IMAGES)) { 84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson // copied directly 85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.copyFile(f, out); 86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson writeImagePage(f, convertExtension(out, Doclava.htmlExtension), subdir); 87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson files.add(name); 88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (inList(out, TEMPLATED)) { 90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson // copied and goes through the template 91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.copyFile(f, out); 92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson writePage(f, convertExtension(out, Doclava.htmlExtension), subdir); 93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson files.add(name); 94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson // else ignored 96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } else if (f.isDirectory()) { 97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson writeDirectory(f, relative + name + "/"); 98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson dirs.add(name); 99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson // write the index page 103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson int i; 104920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 105920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = writeIndex(dir); 106920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 107920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson i = 0; 108920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (String d : dirs) { 109920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdirs." + i + ".name", d); 110920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson i++; 111920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 112920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson i = 0; 113920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson for (String f : files) { 114920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("files." + i + ".name", f); 115920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("files." + i + ".href", convertExtension(f, ".html")); 116920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson i++; 117920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 118920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 119920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sampleindex.cs", relative + "/index" + Doclava.htmlExtension); 120920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 121920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 122920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writeIndexOnly(File dir, String relative, Boolean offline) { 123920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = writeIndex(dir); 124920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (!offline) relative = "/" + relative; 125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sampleindex.cs", relative + "index" + Doclava.htmlExtension); 126920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public Data writeIndex(File dir) { 129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", dir.getName() + " - " + mTitle); 132920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("projectTitle", mTitle); 133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String filename = dir.getPath() + "/_index.html"; 135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String summary = 136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson SampleTagInfo.readFile(new SourcePositionInfo(filename, -1, -1), filename, "sample code", 137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson true, false, true); 138920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson if (summary == null) { 140920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson summary = ""; 141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("summary", summary); 143920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 144920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson return hdf; 145920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 146920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 147920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writePage(File f, String out, String subdir) { 148920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String name = f.getName(); 149920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 150920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String filename = f.getPath(); 151920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String data = 152920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson SampleTagInfo.readFile(new SourcePositionInfo(filename, -1, -1), filename, "sample code", 153920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson true, true, true); 154920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson data = Doclava.escape(data); 155920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 156920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 157920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 158920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", name); 159920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 160920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("realFile", name); 161920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("fileContents", data); 162920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 163920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sample.cs", out); 164920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 165920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 166920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson public void writeImagePage(File f, String out, String subdir) { 167920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String name = f.getName(); 168920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 169920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson String data = "<img src=\"" + name + "\" title=\"" + name + "\" />"; 170920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 171920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson Data hdf = Doclava.makeHDF(); 172920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 173920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("page.title", name); 174920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("subdir", subdir); 175920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("realFile", name); 176920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson hdf.setValue("fileContents", data); 177920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson 178920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson ClearPage.write(hdf, "sample.cs", out); 179920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson } 180920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson} 181