/**
* jetbrick-template
* http://subchen.github.io/jetbrick-template/
*
* Copyright 2010-2014 Guoqiang Chen. All rights reserved.
* Email: subchen@gmail.com
*
* 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 jetbrick.template;
import java.io.File;
import java.util.List;
import jetbrick.template.resource.loader.FileSystemResourceLoader;
import jetbrick.template.utils.finder.TemplateFileFinder;
/**
* 一个用来在外部进行预编译的工具.
* @see {@link https://github.com/subchen/jetbrick-template/issues/49}
*
* @since 1.2.0
* @author Guoqiang Chen
*/
public class JetxGenerateApp {
private boolean all = false;
private String configFile;
private String sourcePath;
private String compilePath;
public JetxGenerateApp() {
}
private void options(String[] args) {
for (int i = 0; i < args.length; i++) {
String arg = args[i];
if ("-all".equals(arg)) {
all = true;
} else if ("-src".equals(arg)) {
if (++i < args.length) {
sourcePath = args[i];
}
} else if ("-d".equals(arg)) {
if (++i < args.length) {
compilePath = args[i];
}
} else if ("-config".equals(arg)) {
if (++i < args.length) {
configFile = args[i];
}
} else if ("-help".equals(arg)) {
printHelp();
}
}
if (sourcePath == null || compilePath == null || configFile == null) {
printHelp();
}
}
private void printHelp() {
System.out.println("jar -jar jetbrick-template-<version>.jar [options]");
System.out.println();
System.out.println("options:");
System.out.println(" -help Print this help.");
System.out.println(" -all Compile all templates even if errors.");
System.out.println(" -src <path> Template root directory.");
System.out.println(" -d <path> Output directory.");
System.out.println(" -config <file> Config file for template.");
System.exit(0);
}
private void execute() {
JetConfig config = new JetConfig();
config.loadFile(new File(configFile));
config.load(JetConfig.TEMPLATE_LOADER, FileSystemResourceLoader.class.getName());
config.load(JetConfig.TEMPLATE_PATH, sourcePath);
config.load(JetConfig.COMPILE_PATH, compilePath);
config.load(JetConfig.COMPILE_STRATEGY, "always");
config.load(JetConfig.COMPILE_DEBUG, "false");
JetEngine engine = new JetEngine(config);
TemplateFileFinder finder = new TemplateFileFinder(config.getTemplateSuffix());
finder.lookupFileSystem(new File(sourcePath), true);
List<String> resources = finder.getResources();
System.out.println("Find " + resources.size() + " templates to precompile ...");
int succ = 0;
int fail = 0;
long ts = System.currentTimeMillis();
for (String name : resources) {
try {
engine.getTemplate(name);
succ++;
} catch (Exception e) {
fail++;
e.printStackTrace();
if (!all) {
System.err.println();
System.err.println("Failed to compile templates.");
System.err.println("Please add -all option to compile all templates.");
System.err.println("System exit.");
System.exit(1);
}
}
}
ts = System.currentTimeMillis() - ts;
System.out.println("Completed precompile templates in " + ts + " ms, success = " + succ + ", failure = " + fail + ".");
}
public static void main(String[] args) {
JetxGenerateApp app = new JetxGenerateApp();
app.options(args);
app.execute();
}
}