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