From 090fac7d69582ff494822c081ef8f160f90bc375 Mon Sep 17 00:00:00 2001 From: Taeyoung Son Date: Tue, 27 Aug 2013 21:41:14 +0900 Subject: [PATCH] [Title] Fixed out of memory problem - do not read all resources to memory [Desc.] [Issue] Change-Id: I5200ef2a10a0d4495c80b07f90ab90bab84a7312 --- .../src/org/tizen/cli/exec/web/build/Main.java | 128 +++++++++------------ 1 file changed, 54 insertions(+), 74 deletions(-) diff --git a/org.tizen.cli/src/org/tizen/cli/exec/web/build/Main.java b/org.tizen.cli/src/org/tizen/cli/exec/web/build/Main.java index f20656a..dd2118e 100755 --- a/org.tizen.cli/src/org/tizen/cli/exec/web/build/Main.java +++ b/org.tizen.cli/src/org/tizen/cli/exec/web/build/Main.java @@ -25,9 +25,7 @@ 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; @@ -53,7 +51,6 @@ import org.tizen.common.file.VirtualFileHandler; 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; @@ -121,9 +118,6 @@ extends AbstractLauncher // excluding file list private List excludes = new ArrayList(); - // set buildProcess's last layer - private ResourceLayer lastLayer; - /** * Entry point for cli main * @@ -209,18 +203,18 @@ extends AbstractLauncher 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 { @@ -292,28 +286,36 @@ extends AbstractLauncher * @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)); } /** @@ -337,10 +339,10 @@ extends AbstractLauncher * @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)); @@ -355,8 +357,8 @@ extends AbstractLauncher * @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; } /** @@ -370,10 +372,10 @@ extends AbstractLauncher * @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); @@ -388,7 +390,7 @@ extends AbstractLauncher 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); @@ -399,7 +401,6 @@ extends AbstractLauncher /** * 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. @@ -408,8 +409,7 @@ extends AbstractLauncher * @return * @throws IOException */ - private Resource[] getResources(CommandLine cmdLine - , String input + private Resource[] getBuildResources(CommandLine cmdLine , ResourceLayer layer , String[] includes , String[] excludes) throws IOException { @@ -417,40 +417,39 @@ extends AbstractLauncher 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 resources) throws IOException { + private List getResources(String cwd, String relativeSrcDir, ResourceLayer layer) throws IOException { + List resources = new ArrayList(); List 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()); @@ -464,28 +463,9 @@ extends AbstractLauncher 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; } /** @@ -519,7 +499,7 @@ extends AbstractLauncher * @param buildProcess * @param parentLayer */ - private void addOptimizingBuilders(BuildProcess buildProcess, ResourceLayer parentLayer ) { + private void addOptimizingBuilders(BuildProcess buildProcess, ResourceLayer parentLayer, FileHandler fh) { if (buildProcess == null) { return; } @@ -527,14 +507,14 @@ extends AbstractLauncher // 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); } -- 2.7.4