/* * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.flex.compiler.internal.codegen.externals; import java.util.ArrayList; import java.util.List; /** * @author Michael Schmalle */ public class CompilerArguments { private List<String> bundles = new ArrayList<String>(); private List<String> libraries = new ArrayList<String>(); private List<String> sources = new ArrayList<String>(); private List<String> includes = new ArrayList<String>(); private String sdkPath = ""; private String appName = ""; private String output; private String jsLibraryPath = ""; private String jsBasePath = ""; private Boolean jsOutputAsFiles = null; // private List<MergedFileSettings> jsMergedFiles = new ArrayList<MergedFileSettings>(); public void addBundlePath(String path) { if (bundles.contains(path)) return; bundles.add(path); } public void addLibraryPath(String path) { if (libraries.contains(path)) return; libraries.add(path); } public void addSourcepath(String path) { if (sources.contains(path)) return; sources.add(path); } public void addIncludedSources(String path) { if (includes.contains(path)) return; includes.add(path); } public List<String> getBundles() { return bundles; } public List<String> getLibraries() { return libraries; } public List<String> getSources() { return sources; } public List<String> getIncludes() { return includes; } public String getSDKPath() { return sdkPath; } public void setSDKPath(String value) { sdkPath = value; } public String getAppName() { return appName; } public void setAppName(String value) { appName = value; } public String getOutput() { return output; } public void setOutput(String path) { output = path; } public String getJsLibraryPath() { return jsLibraryPath; } public void setJsLibraryPath(String jsLibraryPath) { this.jsLibraryPath = jsLibraryPath; } public String getJsBasePath() { return jsBasePath; } public void setJsBasePath(String jsBasePath) { this.jsBasePath = jsBasePath; } public Boolean isJsOutputAsFiles() { return jsOutputAsFiles; } public void setJsOutputAsFiles(Boolean jsOutputAsFiles) { this.jsOutputAsFiles = jsOutputAsFiles; } // public void addJsMergedFiles(MergedFileSettings setting) // { // jsMergedFiles.add(setting); // } //-------------------------------------------------------------------------- // SWC //-------------------------------------------------------------------------- private List<String> metadatas = new ArrayList<String>(); // -keep-as3-metadata public List<String> getKeepMetadata() { return metadatas; } public void addKeepMetadata(String metadata) { if (metadatas.contains(metadata)) return; metadatas.add(metadata); } //-------------------------------------------------------------------------- // Doc //-------------------------------------------------------------------------- private List<String> docMembers = new ArrayList<String>(); private List<String> docNamespace = new ArrayList<String>(); private String mainTitle; public String getMainTitle() { return mainTitle; } public void setMainTitle(String value) { mainTitle = value; } private String footer; public String getFooter() { return footer; } public void setFooter(String value) { footer = value; } public void addDocMember(String member) { if (docMembers.contains(member)) return; docMembers.add(member); } public void addDocNamespace(String namespace) { if (docNamespace.contains(namespace)) return; docNamespace.add(namespace); } public void clear() { jsBasePath = ""; jsLibraryPath = ""; jsOutputAsFiles = false; output = ""; clearLibraries(); clearSourcePaths(); includes.clear(); // jsMergedFiles.clear(); } public void clearSourcePaths() { sources = new ArrayList<String>(); } public void clearBundles() { bundles = new ArrayList<String>(); } public void clearLibraries() { libraries = new ArrayList<String>(); } public List<String> toArguments() { List<String> result = new ArrayList<String>(); for (String arg : bundles) { result.add("-bundle-path=" + arg); } for (String arg : libraries) { result.add("-library-path=" + arg); } for (String arg : sources) { result.add("-source-path=" + arg); } if (includes.size() > 0) { result.add("-include-sources=" + join(includes, ",")); } if (metadatas.size() > 0) { result.add("-keep-as3-metadata=" + join(metadatas, ",")); } // if (jsMergedFiles.size() > 0) // { // final StringBuilder sb = new StringBuilder(); // for (MergedFileSettings setting : jsMergedFiles) // { // sb.append("-js-merged-file="); // sb.append(setting.getFileName()); // sb.append(","); // sb.append(StringUtils.join( // setting.getQualifiedNames().toArray(new String[] {}), // ",")); // result.add(sb.toString()); // sb.setLength(0); // } // } String sdk = getSDKPath(); if (sdk != null && !sdk.equals("")) result.add("-sdk-path=" + sdk); String name = getAppName(); if (name != null && !name.equals("")) result.add("-app-name=" + name); String base = getJsBasePath(); if (!base.equals("")) result.add("-js-base-path=" + base); String library = getJsLibraryPath(); if (!library.equals("")) result.add("-js-library-path=" + library); if (isJsOutputAsFiles() != null) { result.add("-js-classes-as-files=" + (isJsOutputAsFiles() ? "true" : "false")); } result.add("-output=" + getOutput()); addArguments(result); return result; } protected void addArguments(List<String> arguments) { String mainTitle = getMainTitle(); if (mainTitle != null && !mainTitle.equals("")) arguments.add("-main-title=" + mainTitle); if (footer != null && !footer.equals("")) arguments.add("-footer=" + footer); if (docMembers.size() > 0) { arguments.add("-doc-member=" + join(docMembers, ",")); } if (docNamespace.size() > 0) { arguments.add("-doc-namespace=" + join(docNamespace, ",")); } } private String join(List<String> items, String separator) { StringBuilder sb = new StringBuilder(); int len = items.size(); int index = 0; for (String item : items) { sb.append(item); if (index < len) sb.append(separator); index++; } return sb.toString(); } public static class CompilerArgument { private String name; private String value; CompilerArgument(String name, String value) { this.name = name; this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static CompilerArgument create(String name, String value) { return new CompilerArgument(name, value); } } @Override public String toString() { return join(toArguments(), " "); } }