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.JSilver;
20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.google.clearsilver.jsilver.data.Data;
21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
22f959ed158599686910af990654d6c84d262868ffAndrew Sappersteinimport java.io.BufferedWriter;
23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.io.File;
24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.io.FileInputStream;
25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.io.FileOutputStream;
26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.io.IOException;
27f959ed158599686910af990654d6c84d262868ffAndrew Sappersteinimport java.io.OutputStreamWriter;
28f959ed158599686910af990654d6c84d262868ffAndrew Sappersteinimport java.io.Writer;
29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.ArrayList;
30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.List;
3188c435bb4d6c81c41107e23503b59af2e08acd8dRobert Lyimport java.util.Arrays;
32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic class ClearPage {
34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  /*
35920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   * public ClearPage() { String templ = "templates/index.cs"; String filename = "docs/index.html";
36920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   *
37920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   * data.setValue("A.B.C", "1"); data.setValue("A.B.D", "2"); }
38920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   */
39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private static ArrayList<String> mTemplateDirs = new ArrayList<String>();
41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private static boolean mTemplateDirSet = false;
42920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private static ArrayList<String> mBundledTemplateDirs = new ArrayList<String>();
44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static String outputDir = "docs";
464bac50adef51d339bb967369f9aca0de7f6c1b2fBill Napier  public static List<String> htmlDirs = new ArrayList<String>();
47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static String toroot = null;
48920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void addTemplateDir(String dir) {
50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mTemplateDirSet = true;
51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mTemplateDirs.add(dir);
52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static List<String> getTemplateDirs() {
55920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mTemplateDirs;
56920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
58920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void addBundledTemplateDir(String dir) {
59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mTemplateDirSet = true;
60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mBundledTemplateDirs.add(dir);
61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static List<String> getBundledTemplateDirs() {
64920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mBundledTemplateDirs;
65920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
66920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
67920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private static int countSlashes(String s) {
68920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    final int N = s.length();
69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    int slashcount = 0;
70920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    for (int i = 0; i < N; i++) {
71920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      if (s.charAt(i) == '/') {
72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        slashcount++;
73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return slashcount;
76920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void write(Data data, String templ, String filename, JSilver cs) {
79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    write(data, templ, filename, false, cs);
80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void write(Data data, String templ, String filename) {
83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    write(data, templ, filename, false, Doclava.jSilver);
84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void write(Data data, String templ, String filename, boolean fullPath) {
87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    write(data, templ, filename, false, Doclava.jSilver);
88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void write(Data data, String templ, String filename, boolean fullPath, JSilver cs) {
914bac50adef51d339bb967369f9aca0de7f6c1b2fBill Napier    if (!htmlDirs.isEmpty()) {
92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      data.setValue("hasindex", "true");
93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    String toroot;
96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (ClearPage.toroot != null) {
97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      toroot = ClearPage.toroot;
98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      int slashcount = countSlashes(filename);
100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      if (slashcount > 0) {
101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        toroot = "";
102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        for (int i = 0; i < slashcount; i++) {
103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          toroot += "../";
104920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        }
105920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      } else {
106920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        toroot = "./";
107920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
108920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
109920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    data.setValue("toroot", toroot);
110bb9054772d76fde416af3c0e18f98999daa65bd8Trevor Johns    if (Doclava.USE_UPDATED_TEMPLATES) {
111bb9054772d76fde416af3c0e18f98999daa65bd8Trevor Johns      data.setValue("useUpdatedTemplates", "true");
112bb9054772d76fde416af3c0e18f98999daa65bd8Trevor Johns    }
113920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    data.setValue("filename", filename);
114920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
115920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (!fullPath) {
116920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      filename = outputDir + "/" + filename;
117920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
118920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
119920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    int i = 0;
1204bac50adef51d339bb967369f9aca0de7f6c1b2fBill Napier    if (!htmlDirs.isEmpty()) {
1214bac50adef51d339bb967369f9aca0de7f6c1b2fBill Napier        for (String dir : htmlDirs) {
1224bac50adef51d339bb967369f9aca0de7f6c1b2fBill Napier          data.setValue("hdf.loadpaths." + i, dir);
1234bac50adef51d339bb967369f9aca0de7f6c1b2fBill Napier          i++;
1244bac50adef51d339bb967369f9aca0de7f6c1b2fBill Napier        }
125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
126920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (mTemplateDirSet) {
127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      for (String dir : mTemplateDirs) {
128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        data.setValue("hdf.loadpaths." + i, dir);
129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        i++;
130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
132920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      data.setValue("hdf.loadpaths." + i, "templates");
133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    File file = new File(outputFilename(filename));
136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    ensureDirectory(file);
138f959ed158599686910af990654d6c84d262868ffAndrew Sapperstein    Writer stream = null;
139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    try {
140f959ed158599686910af990654d6c84d262868ffAndrew Sapperstein      stream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      String rendered = cs.render(templ, data);
142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      stream.write(rendered, 0, rendered.length());
143920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } catch (IOException e) {
144920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      System.out.println("error: " + e.getMessage() + "; when writing file: " + filename);
145920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } finally {
146920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      if (stream != null) {
147920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        try {
148920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          stream.close();
149920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        } catch (IOException e) {}
150920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
151920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
152920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
153920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
154920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  // recursively create the directories to the output
155920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static void ensureDirectory(File f) {
156920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    File parent = f.getParentFile();
157920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (parent != null) {
158920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      parent.mkdirs();
159920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
160920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
161920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
162bb9054772d76fde416af3c0e18f98999daa65bd8Trevor Johns  public static void copyFile(boolean allowExcepted, File from, String toPath, Boolean append) {
163920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    File to = new File(outputDir + "/" + toPath);
164920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    FileInputStream in;
165920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    FileOutputStream out;
166920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    try {
167920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      if (!from.exists()) {
168920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        throw new IOException();
169920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
170920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      in = new FileInputStream(from);
171920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } catch (IOException e) {
172920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      System.err.println(from.getAbsolutePath() + ": Error opening file");
173920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return;
174920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
175920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    ensureDirectory(to);
176920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    try {
177bb9054772d76fde416af3c0e18f98999daa65bd8Trevor Johns      out = new FileOutputStream(to, append);
178920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } catch (IOException e) {
179bb9054772d76fde416af3c0e18f98999daa65bd8Trevor Johns      System.err.println(to.getAbsolutePath() + ": Error opening file");
180920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return;
181920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
18288c435bb4d6c81c41107e23503b59af2e08acd8dRobert Ly    if (!isValidContentType(allowExcepted, toPath, DROIDDOC_VALID_CONTENT_TYPES)) {
1839b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty        Errors.error(Errors.INVALID_CONTENT_TYPE, null, "Failed to process " + from
1849b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty                + ": Invalid file type. Please move the file to frameworks/base/docs/image_sources/... or docs/downloads/...");
1859b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty        return;
1869b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty    }
187920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
188920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    long sizel = from.length();
189920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    final int maxsize = 64 * 1024;
190920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    int size = sizel > maxsize ? maxsize : (int) sizel;
191920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    byte[] buf = new byte[size];
192920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    while (true) {
193920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      try {
194920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        size = in.read(buf);
195920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      } catch (IOException e) {
196920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        System.err.println(from.getAbsolutePath() + ": error reading file");
197920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        break;
198920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
199920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      if (size > 0) {
200920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        try {
201920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          out.write(buf, 0, size);
202920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        } catch (IOException e) {
203920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson          System.err.println(from.getAbsolutePath() + ": error writing file");
204920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        }
205920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      } else {
206920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson        break;
207920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      }
208920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
209920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    try {
210920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      in.close();
211920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } catch (IOException e) {}
212920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    try {
213920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      out.close();
214920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } catch (IOException e) {}
215920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
216920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
217920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  /** Takes a string that ends w/ .html and changes the .html to htmlExtension */
218920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public static String outputFilename(String htmlFile) {
219920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (!Doclava.htmlExtension.equals(".html") && htmlFile.endsWith(".html")) {
220920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return htmlFile.substring(0, htmlFile.length() - 5) + Doclava.htmlExtension;
221920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
222920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return htmlFile;
223920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
224920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
225920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
22688c435bb4d6c81c41107e23503b59af2e08acd8dRobert Ly  public static ArrayList<String> DROIDDOC_VALID_CONTENT_TYPES = new ArrayList<String>(Arrays.asList(".txt", ".css",
22788c435bb4d6c81c41107e23503b59af2e08acd8dRobert Ly    ".js", ".html", ".ico", ".png", ".jpg", ".gif", ".svg", ".webm", ".ogv","mp4", ".java", ".xml", ".aidl", ".rs",".zip", ".yaml"));
2284c95e6c9a7c559fd66e8085c239832d505d4fbf9Robert Ly  /* Setting excepted types to allow everything. Leaving it this way in in case we want to explicitly
2294c95e6c9a7c559fd66e8085c239832d505d4fbf9Robert Ly   * specify file types later. This adds unneeded checking though since it lets everything through
2304c95e6c9a7c559fd66e8085c239832d505d4fbf9Robert Ly   */
2314c95e6c9a7c559fd66e8085c239832d505d4fbf9Robert Ly  public static ArrayList<String> DROIDDOC_EXCEPTED_CONTENT_TYPES = new ArrayList<String>(Arrays.asList(""));
23288c435bb4d6c81c41107e23503b59af2e08acd8dRobert Ly
23388c435bb4d6c81c41107e23503b59af2e08acd8dRobert Ly  public static boolean isValidContentType(boolean allowExcepted, String s, ArrayList<String> list) {
23488c435bb4d6c81c41107e23503b59af2e08acd8dRobert Ly    if(allowExcepted){
23588c435bb4d6c81c41107e23503b59af2e08acd8dRobert Ly      list.addAll(DROIDDOC_EXCEPTED_CONTENT_TYPES);
23688c435bb4d6c81c41107e23503b59af2e08acd8dRobert Ly    }
2379b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty    for (String t : list) {
2389b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty      if (s.endsWith(t)) {
2399b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty        return true;
2409b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty      }
2419b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty    }
2429b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty    return false;
2439b316c84e2e15268db79772d9cef60da1df488ecDirk Dougherty  }
244920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
245