package org.tizen.cli.exec.web.build;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import org.tizen.common.file.filter.WildCardFilterFactory;
import org.tizen.common.util.FileUtil;
import org.tizen.common.util.FilenameUtil;
-import org.tizen.common.util.IOUtil;
import org.tizen.web.builder.CssMinifyBuilder;
import org.tizen.web.builder.HybridAppCLIBuilder;
import org.tizen.web.builder.JSMinifyBuilder;
// excluding file list
private List<String> excludes = new ArrayList<String>();
- // set buildProcess's last layer
- private ResourceLayer lastLayer;
-
/**
* Entry point for cli main
*
BuildProcess buildProcess = new BuildProcess();
// Set start layer
- ResourceLayer startLayer = new ResourceLayer(RESOURCE_LAYER_START, new VirtualFileHandler());
- this.lastLayer = startLayer;
-
+ FileHandler fh = new StandardFileHandler();
+ fh.setCurrentWorkingDirectory(cwd);
+ ResourceLayer startLayer = new ResourceLayer(RESOURCE_LAYER_START, fh);
+
// Get resource list for build
- Resource[] resources = getResources(cmdLine
- , cwd
- , startLayer
- , null
- , excludes.toArray(new String[excludes.size()]));
+ Resource[] resources = getBuildResources(cmdLine
+ , startLayer
+ , null
+ , excludes.toArray(new String[excludes.size()]));
// Generate web builders to build process
- generateBuilders(cmdLine, buildProcess, this.lastLayer);
+ generateAllBuilders(cmdLine, buildProcess, startLayer);
if (buildProcess.getLastBuilder() != null) {
logger.debug("start build process");
try {
* @param parentLayer
* @throws IOException
*/
- public void generateBuilders(CommandLine cmdLine
+ public void generateAllBuilders(CommandLine cmdLine
, BuildProcess buildProcess
, ResourceLayer parentLayer) throws IOException {
- lastLayer = parentLayer;
+
+ FileHandler fh = new VirtualFileHandler();
+ fh.setCurrentWorkingDirectory(parentLayer.getFileHandler().getCurrentWorkingDirectory());
if (isExcludeUIFW(cmdLine)) {
- addUIFWBuilder(true, cmdLine.hasOption(OPT_NAME_EXCLUDE_UI_FRAMEWORK_USEMIN), buildProcess, lastLayer);
+ addUIFWBuilder(true
+ , cmdLine.hasOption(OPT_NAME_EXCLUDE_UI_FRAMEWORK_USEMIN)
+ , buildProcess
+ , getLastResourceLayer(buildProcess, parentLayer)
+ , fh);
}
boolean hasReference = cmdLine.hasOption(OPT_NAME_REFERENCE_PROJECT);
if (hasReference) {
- lastLayer = getLastResourceLayer(buildProcess, lastLayer);
- addHybridBuilder( cmdLine, buildProcess, lastLayer );
+ addHybridBuilder( cmdLine
+ , buildProcess
+ , getLastResourceLayer(buildProcess, parentLayer)
+ , fh);
}
if (cmdLine.hasOption(OPT_NAME_OPTIMIZE)) {
- lastLayer = getLastResourceLayer(buildProcess, lastLayer);
- addOptimizingBuilders(buildProcess, lastLayer);
+ addOptimizingBuilders(buildProcess
+ , getLastResourceLayer(buildProcess, parentLayer)
+ , fh);
}
- lastLayer = getLastResourceLayer(buildProcess, lastLayer);
- addLastbuilder(buildProcess, lastLayer);
+ addLastbuilder(buildProcess, getLastResourceLayer(buildProcess, parentLayer));
}
/**
* @param lastLayer
* @throws IOException
*/
- private void addHybridBuilder(CommandLine cmdLine, BuildProcess buildProcess, ResourceLayer lastLayer) throws IOException {
+ private void addHybridBuilder(CommandLine cmdLine, BuildProcess buildProcess, ResourceLayer lastLayer, FileHandler fh) throws IOException {
ResourceLayer layer = new ResourceLayer(HybridAppCLIBuilder.RESOURCE_LAYER_NAME
, lastLayer
- , lastLayer.getFileHandler());
+ , fh);
String refPath = convertPath(cmdLine.getOptionValue(OPT_NAME_REFERENCE_PROJECT));
* @return
*/
private ResourceLayer getLastResourceLayer(BuildProcess buildProcess, ResourceLayer defaultLayer) {
- ResourceLayer parentLayer = buildProcess.getLastResourceLayer();
- return (parentLayer != null) ? parentLayer : defaultLayer;
+ ResourceLayer lastLayer = buildProcess.getLastResourceLayer();
+ return (lastLayer != null) ? lastLayer : defaultLayer;
}
/**
* @param parentLayer
*/
private void addUIFWBuilder(boolean isExclude, boolean useMin, BuildProcess buildProcess,
- ResourceLayer parentLayer) {
+ ResourceLayer parentLayer, FileHandler fh) {
ResourceLayer layer = new ResourceLayer(UIFWBuilder.RESOURCE_LAYER_NAME
, parentLayer
- , parentLayer.getFileHandler());
+ , fh);
UIFWBuilder uifwBuilder = new UIFWBuilder(isExclude, layer);
uifwBuilder.setUseMin(useMin);
private void addLastbuilder(BuildProcess buildProcess, ResourceLayer parentLayer) {
// add file output builder
FileHandler fh = new StandardFileHandler();
- fh.setCurrentWorkingDirectory(cwd);
+ fh.setCurrentWorkingDirectory(parentLayer.getFileHandler().getCurrentWorkingDirectory());
ResourceLayer toFSLayer = new ResourceLayer(CopyBuilder.RESOURCE_LAYER_NAME
, parentLayer
, fh);
/**
* Get resource list for build.
* @param cmdLine
- * @param input root path located resources. It means working path. means current path.
* @param layer parent layer
* @param includes Include resource list. If you want to add all resources located in input path, set this parameter to null.
* If you set this parameter, another resources will not be added to list.
* @return
* @throws IOException
*/
- private Resource[] getResources(CommandLine cmdLine
- , String input
+ private Resource[] getBuildResources(CommandLine cmdLine
, ResourceLayer layer
, String[] includes
, String[] excludes) throws IOException {
setIncludes(includes);
setExcludes(excludes);
- addResources(input
- , FilenameUtil.getRelativePath(input, input)
- , layer
- , resources);
+ String cwd = layer.getFileHandler().getCurrentWorkingDirectory();
+ resources.addAll(getResources(cwd
+ , FilenameUtil.getRelativePath(cwd, cwd)
+ , layer));
if (cmdLine.hasOption(OPT_NAME_REFERENCE_PROJECT)) {
+ FileHandler refFh = new StandardFileHandler();
ResourceLayer referenceLayer = new ResourceLayer(HybridAppCLIBuilder.RESOURCE_LAYER_REFERENCE_NAME
- , layer
- , layer.getFileHandler());
+ , refFh);
+ layer.setParent(referenceLayer);
String refPath = convertPath(cmdLine.getOptionValue(OPT_NAME_REFERENCE_PROJECT));
+ refFh.setCurrentWorkingDirectory(refPath);
- addResources(refPath
- , FilenameUtil.getRelativePath(refPath, refPath)
- , referenceLayer
- , resources);
- lastLayer = referenceLayer;
+ resources.addAll(getResources(refPath
+ , FilenameUtil.getRelativePath(refPath, refPath)
+ , referenceLayer));
}
return resources.toArray(new Resource[resources.size()]);
}
/**
- * Add resource for build
+ * get resource list
+ * @param cwd root path located resources. It means working path. means current path.
* @param relativeSrcDir relative directory including resources.
- * @param layer {@link ResourceLayer}
- * @param resources output resources.
+ * @param layer {@link ResourceLayer} about resource
* @throws IOException
*/
- private void addResources(String cwd, String relativeSrcDir, ResourceLayer layer, List<Resource> resources) throws IOException {
+ private List<Resource> getResources(String cwd, String relativeSrcDir, ResourceLayer layer) throws IOException {
+ List<Resource> resources = new ArrayList<Resource>();
List<File> files = null;
String absoluteDir = cwd+ File.separator + relativeSrcDir;
files = FileUtil.findFiles(new File(absoluteDir), ".*", true);
- FileHandler fh = layer.getFileHandler();
-
for (File file : files) {
String fileRelativePath = FilenameUtil.getRelativePath(cwd, file.getCanonicalPath());
logger.debug("resource path : {}", fileRelativePath);
Resource resource = new Resource(layer, fileRelativePath);
- String dir = null;
- if (file.isFile()) {
- dir = FilenameUtil.removeTailingPath(fileRelativePath, 1);
- } else {
- dir = fileRelativePath;
- }
-
- logger.debug("directory : {}", dir);
-
- if (!fh.is(dir, Attribute.EXISTS)) {
- fh.makeDirectory(dir, true);
- }
-
- InputStream is = null;
- try {
- is = new FileInputStream(file);
- resource.setContents(is);
- } finally {
- IOUtil.tryClose(is);
- }
resources.add(resource);
}
+ return resources;
}
/**
* @param buildProcess
* @param parentLayer
*/
- private void addOptimizingBuilders(BuildProcess buildProcess, ResourceLayer parentLayer ) {
+ private void addOptimizingBuilders(BuildProcess buildProcess, ResourceLayer parentLayer, FileHandler fh) {
if (buildProcess == null) {
return;
}
// add js minify builder
ResourceLayer jsMinLayer = new ResourceLayer(JSMinifyBuilder.RESOURCE_LAYER_NAME
, parentLayer
- , parentLayer.getFileHandler());
+ , fh);
JSMinifyBuilder jsMin = new JSMinifyBuilder(jsMinLayer);
buildProcess.addBuilder(jsMin);
// add css minify builder
ResourceLayer cssMinLayer = new ResourceLayer(CssMinifyBuilder.RESOURCE_LAYER_NAME
, jsMinLayer
- , jsMinLayer.getFileHandler());
+ , fh);
CssMinifyBuilder cssMin = new CssMinifyBuilder(cssMinLayer);
buildProcess.addBuilder(cssMin);
}