From ee923bfd9ca999da336509b670662f5a526c2aba Mon Sep 17 00:00:00 2001 From: "ho.namkoong" Date: Fri, 4 Jan 2013 16:30:16 +0900 Subject: [PATCH] [Title] pkg version up [Type] [Module] [Priority] [Jira#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] Change-Id: I085ca8f2f930f25b5540cf4918202dce87cf74da --- .../tizen/cli/exec/gen/CLIProjectGenerator.java | 187 +++++++++++++++++++++ package/changelog | 3 + package/pkginfo.manifest | 2 +- 3 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 org.tizen.cli/src/org/tizen/cli/exec/gen/CLIProjectGenerator.java diff --git a/org.tizen.cli/src/org/tizen/cli/exec/gen/CLIProjectGenerator.java b/org.tizen.cli/src/org/tizen/cli/exec/gen/CLIProjectGenerator.java new file mode 100644 index 0000000..d158f4d --- /dev/null +++ b/org.tizen.cli/src/org/tizen/cli/exec/gen/CLIProjectGenerator.java @@ -0,0 +1,187 @@ +package org.tizen.cli.exec.gen; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import org.tizen.common.core.application.InstallPathConfig; +import org.tizen.common.util.FileUtil; +import org.tizen.common.util.StringUtil; +import org.tizen.nativecommon.Activator; +import org.tizen.nativecommon.exception.TizenProcessFailureException; +import org.tizen.nativecommon.templateengine.TizenTemplateEngine; +import org.tizen.nativecommon.templateengine.build.AbstractProjectGenerator; +import org.tizen.nativecommon.templateengine.build.model.BuildProperty; +import org.tizen.nativecommon.templateengine.build.model.TargetModel; +import org.tizen.nativecommon.templateengine.model.TizenTemplate; +import org.tizen.nativecommon.templateengine.process.TizenProcessRunner; +import org.tizen.nativecommon.templateengine.util.TemplateUtil; + +public class CLIProjectGenerator extends AbstractProjectGenerator { + + private static final String PACKAGE_PREFIX_TEMPLATE_PROCESS = Activator.PLUGIN_ID + ".templateengine.process"; + + private static final String MACRO_SRCS = "CLI_SRC"; + private static final String MACRO_OBJS = "CLI_OBJ"; + private static final String MACRO_DEPS = "CLI_DEPS"; + private static final String MACRO_BINARY = "CLI_BINARY"; + + private static final String QUOAT_CLI = "\\\""; + + public static final String DIR_MAKEFILE = InstallPathConfig.getSDKPath() + File.separatorChar + "tools" + File.separatorChar + "ide" + File.separatorChar + "template" + File.separatorChar +"makefile"; + private static final String DIR_ROOTSTRAP = InstallPathConfig.getPlatformVersionPath() + File.separatorChar + "rootstraps"; + + @Override + public void addDefaultIncludePaths(BuildProperty buildProperty, TizenTemplate template, TargetModel target) { + String projectPath = template.getProjectPath(); + projectPath = projectPath.replace(" ", "\\ "); + buildProperty.addIncludePath(projectPath + "/inc"); + + super.addDefaultIncludePaths(buildProperty, template, target); + } + + @Override + protected String getRootstrapPath(String rootstrapId) { + //TODO It should be replaced to Macro. + return DIR_ROOTSTRAP + File.separatorChar + rootstrapId; + } + + @Override + protected String getQuotedString(String msg) { + return QUOAT_CLI + msg + QUOAT_CLI; + } + + @Override + public void pressDefaultPostValueStore(Map valueStore, TizenTemplate template) throws TizenProcessFailureException { + + pressValueStoreForSrcObjDep(valueStore, template); + + String projectName = template.getProjectName(); + String projectType = (String) template.getProperty(TizenTemplate.PROPERTY_KEY_PROJECTTYPE); + if(projectType.equals(TizenTemplateEngine.PROJECTTYPE_APP)) { + valueStore.put(MACRO_BINARY, projectName + ".exe"); + } + else if(projectType.equals(TizenTemplateEngine.PROJECTTYPE_SHARED)) { + valueStore.put(MACRO_BINARY, projectName + ".so"); + } + else if(projectType.equals(TizenTemplateEngine.PROJECTTYPE_STATIC)) { + valueStore.put(MACRO_BINARY, projectName + ".a"); + } + else { + String msg = "Unexpected project type: " + projectType; + throw new TizenProcessFailureException(msg); + } + + super.pressDefaultPostValueStore(valueStore, template); + } + + private static void pressValueStoreForSrcObjDep(Map valueStore, TizenTemplate template) { + String projectPath = FileUtil.appendPath(template.getProjectPath(), "src"); + File projectDir = new File(projectPath); + + StringBuffer srcBuffer = new StringBuffer(); + StringBuffer objBuffer = new StringBuffer(); + StringBuffer depBuffer = new StringBuffer(); + boolean firstSrc = true; + + for(File projectFile: projectDir.listFiles()) { + if(projectFile.isFile()) { + String ext = FileUtil.getFileExtension(projectFile.getName()); + if("cpp".equals(ext)) { + String name = FileUtil.getFileNameWithoutExtension(projectFile.getName()); + if(firstSrc) { + firstSrc = false; + } + else { + srcBuffer.append(" \\\n"); + objBuffer.append(" \\\n"); + depBuffer.append(" \\\n"); + } + srcBuffer.append("../src/" + name + ".cpp"); + objBuffer.append("./src/" + name + ".o"); + depBuffer.append("./src/" + name + ".d"); + } + } + } + srcBuffer.append(" \n"); + objBuffer.append(" \n"); + depBuffer.append(" \n"); + + valueStore.put(MACRO_SRCS, srcBuffer.toString()); + valueStore.put(MACRO_OBJS, objBuffer.toString()); + valueStore.put(MACRO_DEPS, depBuffer.toString()); + } + + @Override + public void pressPostValueStoreFromDevPkg(Map valueStore, TizenTemplate template) { + BuildProperty emulBuildProperty = (BuildProperty) template.getProperty(TizenTemplate.PROPERTY_KEY_EMUL_BUILD_PROPERTY); + BuildProperty devBuildProperty = (BuildProperty) template.getProperty(TizenTemplate.PROPERTY_KEY_DEV_BUILD_PROPERTY); + + pressValueStoreForFlag(valueStore, TizenTemplateEngine.MACRO_EMULINC, emulBuildProperty.getIncludePathList(), "-I"); + pressValueStoreForFlag(valueStore, TizenTemplateEngine.MACRO_EMULCF, emulBuildProperty.getcFlagList(), StringUtil.EMPTY_STRING); + pressValueStoreForFlag(valueStore, TizenTemplateEngine.MACRO_EMULLF, emulBuildProperty.getlFlagList(), StringUtil.EMPTY_STRING); + + pressValueStoreForFlag(valueStore, TizenTemplateEngine.MACRO_DEVINC, devBuildProperty.getIncludePathList(), "-I"); + pressValueStoreForFlag(valueStore, TizenTemplateEngine.MACRO_DEVCF, devBuildProperty.getcFlagList(), StringUtil.EMPTY_STRING); + pressValueStoreForFlag(valueStore, TizenTemplateEngine.MACRO_DEVLF, devBuildProperty.getlFlagList(), StringUtil.EMPTY_STRING); + } + + private static void pressValueStoreForFlag(Map valueStore, String macro, List flagList, String pre) { + StringBuffer emulBuffer = new StringBuffer(); + + for(String emulInc: flagList) { + emulBuffer.append(pre + emulInc + " "); + } + + valueStore.put(macro, emulBuffer.toString()); + } + + @Override + public void createBuildFiles(Map postValueStore, TizenTemplate template) throws TizenProcessFailureException { + String projectType = (String) template.getProperty(TizenTemplate.PROPERTY_KEY_PROJECTTYPE); + + String buildDataFile = FileUtil.appendPath(DIR_MAKEFILE, "build_data"); + + String srcMakeFile = ""; + if(projectType.equals(TizenTemplateEngine.PROJECTTYPE_APP)) { + srcMakeFile = FileUtil.appendPath(DIR_MAKEFILE, "makefile_app_template"); + } + else if(projectType.equals(TizenTemplateEngine.PROJECTTYPE_SHARED)) { + srcMakeFile = FileUtil.appendPath(DIR_MAKEFILE, "makefile_shared_template"); + } + else if(projectType.equals(TizenTemplateEngine.PROJECTTYPE_STATIC)) { + srcMakeFile = FileUtil.appendPath(DIR_MAKEFILE, "makefile_static_template"); + } + + String buildDir = FileUtil.appendPath(template.getProjectPath(), "CommandLineBuild"); + new File(buildDir, "src").mkdirs(); + + try { + TemplateUtil.createReplaceableFile(srcMakeFile, FileUtil.appendPath(buildDir, "makefile"), postValueStore); + TemplateUtil.createReplaceableFile(buildDataFile, FileUtil.appendPath(buildDir, "build_data"), postValueStore); + } catch (IOException e) { + String msg = "Exception occurred while creating makefile"; + throw new TizenProcessFailureException(msg, e); + } + } + + @Override + public TizenProcessRunner getTemplateProcess(String templateId, TizenTemplate template) throws TizenProcessFailureException { + String processResolvedName = PACKAGE_PREFIX_TEMPLATE_PROCESS + "." + FileUtil.getFileExtension(templateId); + ClassLoader cLoader = ClassLoader.getSystemClassLoader(); + + TizenProcessRunner runner = null; + + try { + Class processClass = cLoader.loadClass(processResolvedName); +// Constructor tizenProcessConstructor = processClass.getConstructor(new Class[] {TizenTemplate.class}); + runner = (TizenProcessRunner) processClass.newInstance(); + } catch (Exception e) { + throw new TizenProcessFailureException("Exception occurred while creating class: " + processResolvedName, e); + } + + runner.setTemplate(template); + return runner; + } +} diff --git a/package/changelog b/package/changelog index 3867588..d5fba68 100644 --- a/package/changelog +++ b/package/changelog @@ -1,3 +1,6 @@ +* 1.0.52 +- Refactoring project creation logic in wizard +== ho.namkoong 2013-01-04 * 1.0.51 - modified CLI's usage print contents == gyeongseok.seo 2013-01-03 diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index 9a47b87..d6c6d76 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,4 +1,4 @@ -Version:1.0.51 +Version:1.0.52 Maintainer: Bon-Yong Lee, gyeongseok seo Package: web-cli -- 2.7.4