package com.digiarea.closure.model.bind; import java.nio.charset.Charset; import com.digiarea.closure.model.Check; import com.digiarea.closure.model.CheckType; import com.digiarea.closure.model.Checks; import com.digiarea.closure.model.Closure; import com.digiarea.closure.model.ClosureGss; import com.digiarea.closure.model.ClosureJs; import com.digiarea.closure.model.ClosureSoy; import com.digiarea.closure.model.GssInputOrientation; import com.digiarea.closure.model.GssOptimizationLevel; import com.digiarea.closure.model.GssOutputFormat; import com.digiarea.closure.model.GssOutputOrientation; import com.digiarea.closure.model.GssOutputRenamingMapFormat; import com.digiarea.closure.model.GssRenamingType; import com.digiarea.closure.model.GssVendor; import com.digiarea.closure.model.Info; import com.digiarea.closure.model.JsRenaming; import com.digiarea.closure.model.JsRenamingFunctionPolice; import com.digiarea.closure.model.JsRenamingPropertyPolice; import com.digiarea.closure.model.JsRenamingVariablePolice; import com.digiarea.closure.model.JsSourceMapFormat; import com.digiarea.closure.model.LangType; import com.digiarea.closure.model.Optimization; import com.digiarea.closure.model.OptimizationType; import com.digiarea.closure.model.Optimizations; import com.digiarea.closure.model.SeverityType; import com.digiarea.closure.model.SoyCodeStyle; import com.digiarea.closure.model.SoyCssSchemeType; import com.digiarea.closure.model.Warning; import com.digiarea.closure.model.WarningType; import com.digiarea.closure.model.Warnings; import com.google.common.base.Charsets; public class ClosureModelManager { public static JsSourceMapFormat getDefaultJsSourceMapFormat() { return JsSourceMapFormat.DEFAULT; } public static GssRenamingType getDefaultGssRenamingType() { return GssRenamingType.NONE; } public static GssVendor getDefaultGssVendor() { return GssVendor.NONE; } public static GssOutputRenamingMapFormat getDefaultGssOutputRenamingMapFormat() { return GssOutputRenamingMapFormat.JSON; } public static GssOptimizationLevel getDefaultGssOptimizationLevel() { return GssOptimizationLevel.SAVE; } public static GssOutputFormat getDefaultGssOutputFormat() { return GssOutputFormat.COMPRESSED; } public static GssInputOrientation getDefaultGssInputOrientation() { return GssInputOrientation.LTR; } public static GssOutputOrientation getDefaultGssOutputOrientation() { return GssOutputOrientation.NOCHANGE; } public static SoyCssSchemeType getDefaultSoyCssSchemeType() { return SoyCssSchemeType.LITERAL; } public static SoyCodeStyle getDefaultSoyCodeStyle() { return SoyCodeStyle.CONCAT; } public static JsRenamingVariablePolice getDefaultJsRenamingVariablePolice() { return JsRenamingVariablePolice.OFF; } public static JsRenamingFunctionPolice getDefaultJsRenamingFunctionPolice() { return JsRenamingFunctionPolice.OFF; } public static JsRenamingPropertyPolice getDefaultJsRenamingPropertyPolice() { return JsRenamingPropertyPolice.OFF; } public static LangType getDefaultInputLangType() { return LangType.ECMASCRIPT_3; } public static LangType getDefaultOutputLangType() { return LangType.ECMASCRIPT_3; } public static String getDefaultJSInputDelimiter() { return "Input %num%";//$NON-NLS-1$ } public static String getDefaultJSOutputWrapper() { return ""; //$NON-NLS-1$ } public static Checks getDefaultChecks() { Checks checks = new Checks(); for (CheckType type : CheckType.values()) { if (isValidCheck(type)) { Check opt = new Check(); opt.setCheck(false); opt.setType(type); checks.addCheck(opt); } } return checks; } private static boolean isValidCheck(CheckType type) { switch (type) { case CHECK_CAJA: case CHECK_CONTROL_SCTRUCTURES: case TIGHTEN_TYPES: return false; } return true; } public static Closure getDefaultClosure() { Closure closure = new Closure(); closure.getClosureJs().setBuild(true); ClosureJs closureJs = closure.getClosureJs(); closureJs.setClosurePass(true); closureJs.setClosureStyle(true); JsRenaming renaming = new JsRenaming(); renaming.setRenameLabels(true); closureJs.setRenaming(renaming); return closure; } public static Charset getDefaultCharset() { return Charsets.UTF_8; } public static Optimizations getDefaultOptimizations() { Optimizations optimizations = new Optimizations(); for (OptimizationType type : OptimizationType.values()) { if (isValidOptimization(type)) { Optimization opt = new Optimization(); opt.setOptimize(false); opt.setType(type); optimizations.addOptimization(opt); } } return optimizations; } private static boolean isValidOptimization(OptimizationType type) { switch (type) { case ALIAS_KEYWORDS: case COLLAPSE_PROPERTIES_ON_EXTERN_TYPES: return false; } return true; } public static Warnings getDefaultWarnings() { Warnings warnings = new Warnings(); for (WarningType type : WarningType.values()) { if (isValidWarning(type)) { Warning warning = new Warning(); warning.setSeverity(SeverityType.OFF); warning.setType(type); warnings.addWarning(warning); } } return warnings; } private static boolean isValidWarning(WarningType type) { switch (type) { case CHECK_UNREACHABLE_CODE: return false; } return true; } public static Warnings synchWarnings(Warnings warnings) { Warnings defaultWarnings = getDefaultWarnings(); if (warnings != null && warnings.getWarning().size() != 0) { for (Warning war : warnings.getWarning()) { for (Warning cat : defaultWarnings.getWarning()) { if (war.getType().equals(cat.getType())) { cat.setSeverity(war.getSeverity()); break; } } } } return defaultWarnings; } public static Checks synchChecks(Checks checks) { Checks defaultChecks = getDefaultChecks(); if (checks != null && checks.getCheck().size() != 0) { for (Check opt : checks.getCheck()) { for (Check cat : defaultChecks.getCheck()) { if (opt.getType().equals(cat.getType())) { cat.setCheck(opt.isCheck()); break; } } } } return defaultChecks; } public static Optimizations synchOptimizations(Optimizations optimizations) { Optimizations defaultOptimizations = getDefaultOptimizations(); if (optimizations != null && optimizations.getOptimization().size() != 0) { for (Optimization opt : optimizations.getOptimization()) { for (Optimization cat : defaultOptimizations.getOptimization()) { if (opt.getType().equals(cat.getType())) { cat.setOptimize(opt.isOptimize()); break; } } } } return defaultOptimizations; } public static Info getDefaultJSInfo() { Info n = new Info(); n.setId("app.jsc"); n.setName("JavaScript Application"); n.setVersion("1.0.0"); return n; } public static Info getDefaultSOYInfo() { Info n = new Info(); n.setId("app.soy"); n.setName("Templates Sources"); n.setVersion("1.0.0"); return n; } public static Info getDefaultGSSInfo() { Info n = new Info(); n.setId("app.gss"); n.setName("Stylesheets Sources"); n.setVersion("1.0.0"); return n; } public static boolean canBuild(ClosureJs closureJs) { return closureJs.isBuild() && closureJs.getBuildpath() != null && closureJs.getBuildpath().getSource() != null && !closureJs.getBuildpath().getSource().isEmpty(); } public static boolean canBuild(ClosureGss closureJs) { return closureJs.isBuild() && closureJs.getBuildpath() != null && closureJs.getBuildpath().getSource() != null && !closureJs.getBuildpath().getSource().isEmpty(); } public static boolean canBuild(ClosureSoy closureJs) { return closureJs.isBuild() && closureJs.getBuildpath() != null && closureJs.getBuildpath().getSource() != null && !closureJs.getBuildpath().getSource().isEmpty(); } }