| /* | 
 |  * Copyright 2006 Google Inc. | 
 |  *  | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); you may not | 
 |  * use this file except in compliance with the License. You may obtain a copy of | 
 |  * the License at | 
 |  *  | 
 |  * http://www.apache.org/licenses/LICENSE-2.0 | 
 |  *  | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | 
 |  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | 
 |  * License for the specific language governing permissions and limitations under | 
 |  * the License. | 
 |  */ | 
 | package com.google.doctool; | 
 |  | 
 | import java.io.File; | 
 | import java.io.PrintStream; | 
 | import java.util.ArrayList; | 
 | import java.util.List; | 
 |  | 
 | /** | 
 |  * Supports two-phase creation of {@link DocTool} objects. | 
 |  */ | 
 | public class DocToolFactory { | 
 |  | 
 |   private final List classPathEntries = new ArrayList(); | 
 |  | 
 |   private String fileBase; | 
 |  | 
 |   private String fileType; | 
 |  | 
 |   private boolean generateHtml; | 
 |  | 
 |   private final List htmlFileBases = new ArrayList(); | 
 |  | 
 |   private final List imagePathEntries = new ArrayList(); | 
 |  | 
 |   private File outDir; | 
 |  | 
 |   private File overviewFile; | 
 |  | 
 |   private final List packageNameEntries = new ArrayList(); | 
 |  | 
 |   private final List srcPathEntries = new ArrayList(); | 
 |  | 
 |   private String title; | 
 |  | 
 |   public DocToolFactory() { | 
 |   } | 
 |  | 
 |   public void addHtmlFileBase(String filebase) { | 
 |     htmlFileBases.add(filebase); | 
 |   } | 
 |  | 
 |   public void addToClassPath(String path) { | 
 |     classPathEntries.add(new File(path)); | 
 |   } | 
 |  | 
 |   public void addToImagePath(String path) { | 
 |     imagePathEntries.add(new File(path)); | 
 |   } | 
 |  | 
 |   public void addToPackages(String packageName) { | 
 |     this.packageNameEntries.add(packageName); | 
 |   } | 
 |  | 
 |   public void addToSourcePath(String path) { | 
 |     srcPathEntries.add(new File(path)); | 
 |   } | 
 |  | 
 |   public DocTool create(PrintStream out, PrintStream err) { | 
 |     File localOutDir = outDir; | 
 |     if (localOutDir == null) { | 
 |       localOutDir = new File(System.getProperty("user.dir"), "out"); | 
 |       out.println("Using default output directory: " | 
 |           + localOutDir.getAbsolutePath()); | 
 |     } | 
 |  | 
 |     File[] classPath = null; | 
 |     File[] sourcePath = null; | 
 |     String[] packageNames = null; | 
 |     if (fileType != null) { | 
 |       // Generating a doc set implies other settings. | 
 |       // | 
 |       if (fileBase == null) { | 
 |         err.println("A file base must be specified when generating doc"); | 
 |         return null; | 
 |       } | 
 |       // if (overviewFile == null) { | 
 |       // err | 
 |       // .println("An overview file must be specified when generating doc; if | 
 |       // you don't have one, use this:"); | 
 |       // err.println("<html><body>"); | 
 |       // err.println(" " + fileBase + "documentation"); | 
 |       // err.println(" @id " + fileBase + "-doc"); | 
 |       // err.println(" @title Documentation for " + fileBase); | 
 |       // err.println("</body></html>"); | 
 |       // return null; | 
 |       // } | 
 |       classPath = (File[]) classPathEntries.toArray(new File[0]); | 
 |       sourcePath = (File[]) srcPathEntries.toArray(new File[0]); | 
 |       packageNames = (String[]) packageNameEntries.toArray(new String[0]); | 
 |     } | 
 |  | 
 |     if (generateHtml) { | 
 |       if (title == null) { | 
 |         out.println("A title must be specified when generating html"); | 
 |         return null; | 
 |       } | 
 |  | 
 |       if (htmlFileBases.isEmpty()) { | 
 |         out.println("No html filebases were specified"); | 
 |         return null; | 
 |       } | 
 |     } | 
 |  | 
 |     String[] htmlFileBaseArray = (String[]) htmlFileBases.toArray(new String[0]); | 
 |  | 
 |     // Handle -imagepath | 
 |     // | 
 |     List localImagePathEntries = new ArrayList(imagePathEntries); | 
 |     if (localImagePathEntries.isEmpty()) { | 
 |       out.println("No image path specified; using only the output dir"); | 
 |     } | 
 |  | 
 |     localImagePathEntries.add(localOutDir); | 
 |     File[] imagePath = (File[]) imagePathEntries.toArray(new File[0]); | 
 |  | 
 |     return new DocTool(out, err, localOutDir, generateHtml, title, | 
 |         htmlFileBaseArray, fileType, fileBase, overviewFile, sourcePath, | 
 |         classPath, packageNames, imagePath); | 
 |   } | 
 |  | 
 |   public String getFileType() { | 
 |     return fileType; | 
 |   } | 
 |  | 
 |   public void setFileBase(String fileBase) { | 
 |     this.fileBase = fileBase; | 
 |   } | 
 |  | 
 |   public void setFileType(String fileType) { | 
 |     this.fileType = fileType; | 
 |   } | 
 |  | 
 |   public void setGenerateHtml(boolean generateHtml) { | 
 |     this.generateHtml = generateHtml; | 
 |   } | 
 |  | 
 |   public void setOutDir(String outDirPath) { | 
 |     this.outDir = new File(outDirPath); | 
 |   } | 
 |  | 
 |   public void setOverviewFile(String overviewFile) { | 
 |     this.overviewFile = new File(overviewFile); | 
 |   } | 
 |  | 
 |   public void setTitle(String title) { | 
 |     this.title = title; | 
 |   } | 
 | } |