import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.tizen.cli.exec.AbstractLauncher;
-import org.tizen.cli.exec.Help;
import org.tizen.common.FactoryWithArgument;
import org.tizen.common.builder.BuildProcess;
import org.tizen.common.builder.Resource;
import org.tizen.common.builder.ResourceLayer;
-import org.tizen.common.core.command.Executor;
-import org.tizen.common.core.command.zip.ZipCommand;
import org.tizen.common.file.FileHandler;
import org.tizen.common.file.FileHandler.Attribute;
import org.tizen.common.file.Filter;
import org.tizen.common.util.FileUtil;
import org.tizen.common.util.FilenameUtil;
import org.tizen.common.util.IOUtil;
+import org.tizen.web.builder.HybridAppCLIBuilder;
import org.tizen.web.builder.JavaScriptMinifier;
import org.tizen.web.builder.UIFWBuilder;
import org.tizen.web.builder.WorkingCopyBuilder;
//for build framework(org.tizen.common.builder)
protected static final String RESOURCE_LAYER_START = "start";
- protected static final String RESOURCE_LAYER_OPTIMIZE = "optimize";
- protected static final String RESOURCE_LAYER_MINIFY = "minify";
- protected static final String RESOURCE_LAYER_MINIFY_JS = RESOURCE_LAYER_MINIFY+".js";
- protected static final String RESOURCE_LAYER_UIFW = "ui-framework";
protected static final String RESOURCE_LAYER_END = "end";
private static final String[] DEFAULT_EXCLUDES = {".build"+File.separator+"*"
BuildProcess buildProcess = new BuildProcess();
ResourceLayer startLayer = new ResourceLayer(RESOURCE_LAYER_START, new VirtualFileHandler());
- generateBuilders(cmdLine, buildProcess, startLayer);
-
Resource[] resources = getResources(cmdLine, baseDir
, startLayer
, null
, excludes.toArray(new String[excludes.size()]));
+ generateBuilders(cmdLine, buildProcess, startLayer);
if (buildProcess.getLastBuilder() != null) {
logger.debug("start build process");
buildProcess.build(resources);
}
}
- private void generateBuilders(CommandLine cmdLine
+ public void generateBuilders(CommandLine cmdLine
, BuildProcess buildProcess
, ResourceLayer parentLayer) {
+ ResourceLayer lastLayer = parentLayer;
boolean isExcludeUIFW = cmdLine.hasOption(OPT_NAME_EXCLUDE_UI_FRAMEWORK);
if (isExcludeUIFW) {
- addUIFWBuilder(isExcludeUIFW, buildProcess, parentLayer);
+ addUIFWBuilder(isExcludeUIFW, buildProcess, lastLayer);
}
boolean hasReference = cmdLine.hasOption(OPT_NAME_REFERENCE_PROJECT);
if (hasReference) {
- //TODO: add new HybridBuilder
+ lastLayer = getLastResourceLayer(buildProcess, lastLayer);
+ addHybridBuilder(buildProcess, lastLayer);
}
if (cmdLine.hasOption(OPT_NAME_OPTIMIZE)) {
- addOptimizingBuilders(buildProcess, parentLayer);
+ lastLayer = getLastResourceLayer(buildProcess, lastLayer);
+ addOptimizingBuilders(buildProcess, lastLayer);
}
- ResourceLayer lastLayer = parentLayer;
- if (buildProcess.getLastBuilder()!=null) {
- lastLayer = buildProcess.getLastBuilder().getResourceLayer();
- }
+ lastLayer = getLastResourceLayer(buildProcess, lastLayer);
addLastbuilder(buildProcess, lastLayer);
}
+ private void addHybridBuilder(BuildProcess buildProcess, ResourceLayer lastLayer) {
+ ResourceLayer layer = new ResourceLayer(HybridAppCLIBuilder.RESOURCE_LAYER_NAME
+ , lastLayer
+ , lastLayer.getFileHandler());
+ HybridAppCLIBuilder hybridAppBuilder = new HybridAppCLIBuilder(layer);
+ buildProcess.addBuilder(hybridAppBuilder);
+ }
+
+ private ResourceLayer getLastResourceLayer(BuildProcess buildProcess, ResourceLayer defaultLayer) {
+ ResourceLayer parentLayer = buildProcess.getLastResourceLayer();
+ return (parentLayer != null) ? parentLayer : defaultLayer;
+ }
+
private void addUIFWBuilder(boolean isExclude, BuildProcess buildProcess,
ResourceLayer parentLayer) {
- ResourceLayer layer = new ResourceLayer(RESOURCE_LAYER_UIFW, parentLayer, parentLayer.getFileHandler());
+ ResourceLayer layer = new ResourceLayer(UIFWBuilder.RESOURCE_LAYER_NAME
+ , parentLayer
+ , parentLayer.getFileHandler());
UIFWBuilder uifwBuilder = new UIFWBuilder(isExclude, layer);
buildProcess.addBuilder(uifwBuilder);
}
addResources(baseDir, layer, resources);
if (cmdLine.hasOption(OPT_NAME_REFERENCE_PROJECT)) {
- ResourceLayer referenceLayer = new ResourceLayer(WebConstant.RESOURCE_LAYER_REFERENCE_PROJECT, layer, layer.getFileHandler());
+ ResourceLayer referenceLayer = new ResourceLayer(HybridAppCLIBuilder.RESOURCE_LAYER_REFERENCE_NAME
+ , layer
+ , layer.getFileHandler());
String refPath = cmdLine.getOptionValue(OPT_NAME_REFERENCE_PROJECT);
addResources(refPath, referenceLayer, resources);
for (File file : files) {
- String filePath = file.getPath();
- if (!FilenameUtil.equals(filePath, baseDir)
- && !filter.accept(baseDir, FilenameUtil.getRelativePath(baseDir, filePath))) {
- logger.debug("Ignore {}", filePath);
+ String fileRelativePath = FilenameUtil.getRelativePath(baseDir, file.getPath());
+
+ if (!FilenameUtil.equals(file.getPath(), baseDir)
+ && !filter.accept(baseDir, fileRelativePath)) {
+ logger.debug("Ignore {}", fileRelativePath);
continue;
}
- Resource resource = new Resource(layer, filePath);
+ Resource resource = new Resource(layer, fileRelativePath);
String dir = null;
if (file.isFile()) {
- dir = file.getParent();
+ dir = FilenameUtil.removeTailingPath(fileRelativePath, 1);
} else {
- dir = filePath;
+ dir = fileRelativePath;
}
if (fh instanceof VirtualFileHandler) {
}
}
- /**
- * Archive <code>baseDir</code> to <code>wgtPath</code> including
- * <code>includes</code> and excluding <code>excludes</code>
- *
- * @param wgtPath wgt file path
- * @param baseDir directory to root
- * @param includes includes file pattern
- * @param excludes excludes file pattern
- */
- private void zipFiles(final String wgtPath, final String baseDir, final Resource[] resources) {
- final ZipCommand command = new ZipCommand(baseDir, resources, wgtPath);
-
- final Executor executor = getExecutor();
- executor.execute(command);
- }
-
private void addOptimizingBuilders(BuildProcess buildProcess, ResourceLayer parentLayer ) {
if (buildProcess == null) {
return;
}
- /*
- * 1. optimization builder
- */
- ResourceLayer optimizeLayer = new ResourceLayer(RESOURCE_LAYER_OPTIMIZE, parentLayer, parentLayer.getFileHandler());
- ResourceLayer minifyLayer = new ResourceLayer(RESOURCE_LAYER_MINIFY, optimizeLayer, parentLayer.getFileHandler());
// add js minify builder
- ResourceLayer jsMinLayer = new ResourceLayer(RESOURCE_LAYER_MINIFY_JS, minifyLayer, parentLayer.getFileHandler());
+ ResourceLayer jsMinLayer = new ResourceLayer(JavaScriptMinifier.RESOURCE_LAYER_NAME
+ , parentLayer
+ , parentLayer.getFileHandler());
JavaScriptMinifier jsMin = new JavaScriptMinifier(jsMinLayer);
buildProcess.addBuilder(jsMin);
}
-
- /**
- * Check if <code>path</code> exists
- *
- * @param path file path
- *
- * @return <code>true</code> if <code>path</code> exists
- *
- * @throws IOException If <code>path</code> can't be accessed
- */
- protected
- boolean
- exists(
- final String path
- )
- throws IOException
- {
- return getFileHandler().is( path, Attribute.EXISTS );
- }
-
- /**
- * Check if <code>path</code> is Tizen web project root
- *
- * @param path directory path to check
- *
- * @return <code>true</code> if <code>path</code> is Tize web project root
- * @throws IOException If <code>path</code>'s sub files can't be accessed
- */
- protected
- boolean
- isValidRoot(
- final String path
- )
- throws IOException
- {
- final FileHandler fileHandler = getFileHandler();
- final String projectFilePath = FilenameUtil.addTailingPath( path, ".project" );
- return fileHandler.is( projectFilePath, Attribute.EXISTS );
- }
-
- /**
- * Return default excludes file patterns
- *
- * @return default excludes file patterns
- */
- protected
- String[] getDefaultExcludes()
- {
- return new String[] { ".*", "*.wgt" };
- }
-
- /**
- * Archive <code>baseDir</code> to <code>wgtPath</code>
- *
- * including <code>includes</code> and excluding <code>excludes</code>
- *
- * @param wgtPath wgt file path
- * @param baseDir directory to root
- * @param includes includes file pattern
- * @param excludes excludes file pattern
- */
- protected
- void
- zipFiles(
- final String wgtPath,
- final String baseDir
- )
- {
- zipFiles(wgtPath, baseDir, null);
- }
-
- /* (non-Javadoc)
- * @see org.tizen.cli.exec.AbstractLauncher#createHelp()
- */
- @Override
- protected Help createHelp() {
- Help help = super.createHelp();
-
- help.setSyntax( help.getSyntax() + getSyntax() );
- return help;
- }
-
- /* (non-Javadoc)
- * @see org.tizen.cli.exec.AbstractLauncher#getSyntax()
- */
- @Override
- protected
- String
- getSyntax()
- {
- return " [options]";
- }
}