001 package de.java2html.commandline;
002
003 import java.io.File;
004
005 import de.java2html.converter.IJavaSourceConverter;
006 import de.java2html.converter.JavaSourceConverterProvider;
007 import de.java2html.options.ConversionOptionsUtilities;
008 import de.java2html.options.JavaSourceConversionOptions;
009 import de.java2html.options.JavaSourceStyleTable;
010
011 /**
012 *
013 * Command line tool to invoke the {@link de.java2html.converter.AbstractJavaSourceConverter} without a GUI.
014 * Also allows handling of complete source trees.
015 *
016 * If the -copyToTargetUnprocessedFiles parameter is supplied all files that are NOT processed
017 * by this tool will just be copied to the target directory.
018 *
019 * Valid invocations are:
020 * <ul>
021 * <li><code>java -jar java2html.jar -srcdir d:/src [-targetdir d:/src/output] [-filemask *.java] [-converter HTML ¦ LaTeX ¦ XHtml ] [-tabs 4] [-copyToTargetUnprocessedFiles] [-style KAWA ¦ ECLIPSE]</code>
022 * <li><code>java -jar java2html.jar -srcfile d:/src/test.java [-targetfile d:/src/output/target.java] [-converter HTML ¦ LaTeX ¦ XHtml ] [-tabs 4] [-style KAWA ¦ ECLIPSE]</code>
023 * </ul>
024 *
025 * default converter is HTML and default filemask is <code>*.java</code>
026 * Other options are set to the default options defined by the <code>java2html.properties</code> file.
027 *
028 * @author Sanjay Madhavan
029 * @author Markus Gebhard
030 */
031 public class Java2HtmlCommandline {
032 private static final String PARAM_TARGETFILE = "targetfile";
033 private static final String PARAM_SRCFILE = "srcfile";
034 private static final String PARAM_STYLE = "style";
035 private static final String FLAG_COPYTOTARGETUNPROCESSEDFILES = "copytotargetunprocessedfiles";
036 private static final String PARAM_TABS = "tabs";
037 private static final String PARAM_CONVERTER = "converter";
038 private static final String PARAM_TARGETDIR = "targetdir";
039 private static final String PARAM_SRCDIR = "srcdir";
040 private static final String PARAM_FILEMASK = "filemask";
041
042 private static final String DEFAULT_CONVERTER_TYPE_NAME = "HTML";
043 private final static String DEFAULT_FILEMASK = "*.java";
044
045 /**
046 * Launch this tool with the supplied parameter. See the class comment for valid parameters.
047 *
048 * @param args
049 */
050 public static IJava2HtmlConversion createCommandlineConversion(String[] args)
051 throws IllegalCommandlineParametersException {
052 final CommandlineArguments arguments = new CommandlineArguments(args);
053 if (arguments.isParameterSet(PARAM_SRCDIR)) {
054 return createDirectoryConversion(arguments);
055 }
056 else if (arguments.isParameterSet(PARAM_SRCFILE)) {
057 return createFileConversion(arguments);
058 }
059 else {
060 throw new IllegalCommandlineParametersException("No parameter -srcdir or -srcfile specified.");
061 }
062 }
063
064 private static IJava2HtmlConversion createFileConversion(CommandlineArguments arguments)
065 throws IllegalCommandlineParametersException {
066 arguments.assertContainsNoUnsupportedFlags(new String[]{});
067 arguments.assertContainsNoUnsupportedParameters(new String[]{
068 PARAM_SRCFILE,
069 PARAM_TARGETFILE,
070 PARAM_CONVERTER,
071 PARAM_TABS,
072 PARAM_STYLE });
073
074 final String srcFileName = arguments.getRequiredParameterStringValue(PARAM_SRCFILE);
075 final String targetFileName = arguments.getParameterStringValue(PARAM_TARGETFILE, null);
076 final String converterType = arguments.getParameterStringValue(PARAM_CONVERTER, DEFAULT_CONVERTER_TYPE_NAME);
077 final int tabSize = arguments.getParameterPositiveIntValue(PARAM_TABS, JavaSourceConversionOptions
078 .getDefault().getTabSize());
079 final String styleName = arguments
080 .getParameterStringValue(PARAM_STYLE, JavaSourceStyleTable.getDefault().getName());
081
082 final IJavaSourceConverter converter = getConverter(converterType);
083 if (converter == null) {
084 System.err.println("ERROR: Unknown converter type: " + converterType);
085 printUsage();
086 System.exit(1);
087 }
088
089 final JavaSourceConversionOptions options = JavaSourceConversionOptions.getDefault();
090 applyStyle(styleName, options);
091
092 options.setTabSize(tabSize);
093
094 return new Java2HtmlFileConversion(new File(srcFileName), targetFileName == null ? null : new File(
095 targetFileName), converter, options);
096 }
097
098 private static IJava2HtmlConversion createDirectoryConversion(CommandlineArguments arguments)
099 throws IllegalCommandlineParametersException {
100 arguments.assertContainsNoUnsupportedFlags(new String[]{ FLAG_COPYTOTARGETUNPROCESSEDFILES });
101 arguments.assertContainsNoUnsupportedParameters(new String[]{
102 PARAM_SRCDIR,
103 PARAM_TARGETDIR,
104 PARAM_CONVERTER,
105 PARAM_TABS,
106 PARAM_STYLE,
107 PARAM_FILEMASK });
108
109 final String srcDirectoryName = arguments.getRequiredParameterStringValue(PARAM_SRCDIR);
110 final String targetDirectoryName = arguments.getParameterStringValue(PARAM_TARGETDIR, null);
111 final String converterType = arguments.getParameterStringValue(PARAM_CONVERTER, DEFAULT_CONVERTER_TYPE_NAME);
112 final int tabSize = arguments.getParameterPositiveIntValue(PARAM_TABS, JavaSourceConversionOptions
113 .getDefault().getTabSize());
114 final boolean copyUnprocessedFiles = arguments.isFlagSet(FLAG_COPYTOTARGETUNPROCESSEDFILES);
115 final String styleName = arguments
116 .getParameterStringValue(PARAM_STYLE, JavaSourceStyleTable.getDefault().getName());
117
118 final String fileMask = arguments.getParameterStringValue(PARAM_FILEMASK, DEFAULT_FILEMASK);
119
120 final IJavaSourceConverter converter = getConverter(converterType);
121 if (converter == null) {
122 System.err.println("ERROR: Unknown converter type: " + converterType);
123 printUsage();
124 System.exit(1);
125 }
126
127 final JavaSourceConversionOptions options = JavaSourceConversionOptions.getDefault();
128 applyStyle(styleName, options);
129 options.setTabSize(tabSize);
130
131 return new Java2HtmlDirectoryConversion(new File(srcDirectoryName), converter, targetDirectoryName == null
132 ? null
133 : new File(targetDirectoryName), fileMask, copyUnprocessedFiles, options);
134 }
135
136 /**
137 * Prints the valid usage of this tool.
138 *
139 */
140 public static void printUsage() {
141 System.out.println("\nValid usage: \n");
142 System.out.println("1. To convert a directory including subdirectories: \n");
143
144 System.out.println("\tjava -jar java2html.jar -"
145 + PARAM_SRCDIR
146 + " d:/src [-"
147 + PARAM_TARGETDIR
148 + " d:/src/output] [-"
149 + PARAM_FILEMASK
150 + " *.java] [-"
151 + PARAM_CONVERTER
152 + " "
153 + getValidConverterNames()
154 + "] [-"
155 + PARAM_TABS
156 + " 4] [-"
157 + FLAG_COPYTOTARGETUNPROCESSEDFILES
158 + "] -"
159 + PARAM_STYLE
160 + " [ "
161 + getValidStylesAsString()
162 + " ]\n");
163
164 System.out.println("2. To convert a single file: \n");
165 System.out.println("\tjava -jar java2html.jar -"
166 + PARAM_SRCFILE
167 + " d:/src/test.java [-"
168 + PARAM_TARGETFILE
169 + " d:/src/output/target.java] [-"
170 + PARAM_CONVERTER
171 + " "
172 + getValidConverterNames()
173 + "] [-"
174 + PARAM_TABS
175 + " 8]"
176 + " -"
177 + PARAM_STYLE
178 + " [ "
179 + getValidStylesAsString()
180 + " ]\n");
181 }
182
183 /**
184 * set the style of generation, If the specified style is not a valid style then use the first defined style.
185 * @param options
186 * @param styleName
187 */
188 private static void applyStyle(String styleName, JavaSourceConversionOptions options)
189 throws IllegalCommandlineParametersException {
190 final JavaSourceStyleTable styleTable = JavaSourceStyleTable.getPredefinedTable(styleName);
191 if (styleTable == null) {
192 throw new IllegalCommandlineParametersException("Unknown style '" + styleName + "'");
193 }
194 options.setStyleTable(styleTable);
195 }
196
197 /**
198 * Return a list of all defined styles as a string
199 *
200 * @return String
201 */
202 private static String getValidStylesAsString() {
203 return ConversionOptionsUtilities.getSeparatedString(ConversionOptionsUtilities
204 .getPredefinedStyleTableNames(), " | ");
205 }
206
207 private static String getValidConverterNames() {
208 return ConversionOptionsUtilities.getSeparatedString(
209 JavaSourceConverterProvider.getAllConverterNames(),
210 " | ");
211 }
212
213 /**
214 * Return a converter instance for the specified converterType
215 * or null if no matching converter was found.
216 *
217 * @param converterType
218 * @return JavaSourceConverter
219 */
220 private static IJavaSourceConverter getConverter(String converterType)
221 throws IllegalCommandlineParametersException {
222 final IJavaSourceConverter converter = JavaSourceConverterProvider.getJavaSourceConverterByName(converterType);
223 if (converter == null) {
224 throw new IllegalCommandlineParametersException("Unsupported converter type '" + converterType + "'");
225 }
226 return converter;
227 }
228 }
|