| /* |
| * |
| * 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 flex2.tools.oem; |
| |
| import flex2.compiler.util.Benchmark; |
| import flex2.compiler.util.PerformanceData; |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| import java.util.Map; |
| |
| /** |
| * The <code>Builder</code> interface lists the common configuration and build-cycle methods. |
| * The <code>Application</code> and <code>Library</code> classes both implement this interface. |
| * |
| * @see flex2.tools.oem.Application |
| * @see flex2.tools.oem.Library |
| * @version 2.0.1 |
| * @author Clement Wong |
| */ |
| public interface Builder |
| { |
| /** |
| * Sets the compiler options for this object. You use the |
| * <code>getDefaultConfiguration()</code> method to get a <code>Configuration</code> object. |
| * |
| * @see flex2.tools.oem.Configuration |
| * |
| * @param configuration An instance of an object that implements the <code>Configuration</code> interface. |
| */ |
| void setConfiguration(Configuration configuration); |
| |
| /** |
| * Gets the default compiler options. The default values are specified in the <code>flex-config.xml</code> |
| * file. You can override the default values by using methods of the <code>Configuration</code> interface. |
| * |
| * <p> |
| * This method returns the default compiler options in new <code>Configuration</code> objects. |
| * |
| * @see flex2.tools.oem.Configuration |
| * |
| * @return An instance of an object that implements the <code>Configuration</code> interface. |
| */ |
| Configuration getDefaultConfiguration(); |
| |
| /** |
| * Gets the compiler options for this object. Unlike the <code>getDefaultConfiguration()</code> method, |
| * this method returns <code>null</code> if the <code>setConfiguration()</code> method was not called. |
| * |
| * @see flex2.tools.oem.Configuration |
| * |
| * @return An instance of an object that implements the <code>Configuration</code> interface. |
| */ |
| Configuration getConfiguration(); |
| |
| |
| /** |
| * Gets the performance data for each compiler phase for the last build. |
| * |
| * @return A map of compiler phase to PerformanceData. |
| */ |
| Map<String, PerformanceData[]> getCompilerBenchmarks(); |
| |
| /** |
| * Gets the overall performance data for the last build. |
| * |
| * @return a Benchmark object. |
| */ |
| Benchmark getBenchmark(); |
| |
| /** |
| * Sets the logger for this object. The compiler uses the logger |
| * to notify clients of events that occurred during the compilation. |
| * |
| * @see flex2.tools.oem.Logger |
| * |
| * @param logger An object that implements the <code>Logger</code> interface. |
| */ |
| void setLogger(Logger logger); |
| |
| /** |
| * Gets the logger for this object. This method returns <code>null</code> if the <code>setLogger()</code> |
| * method was not called. |
| * |
| * @see flex2.tools.oem.Logger |
| * |
| * @return An object that implements the <code>Logger</code> interface. |
| */ |
| Logger getLogger(); |
| |
| /** |
| * Sets the custom file extensions for this object. For example: |
| * |
| * <pre> |
| * setSupportedFileExtensions(flex2.compiler.util.MimeMappings.MXML, new String[] {".foo"}); |
| * </pre> |
| * |
| * This example instructs the compiler to treat files with the <code>*.foo</code> extension as MXML documents. |
| * The supported MIME types are specified in the <code>flex2.compiler.util.MimeMappings</code> class as constants. |
| * |
| * @param mimeType MIME type. |
| * @param extensions An array of file extensions. |
| */ |
| void setSupportedFileExtensions(String mimeType, String[] extensions); |
| |
| /** |
| * Sets the progress meter for this object. This method is optional. |
| * You can set a progress meter so that it receives periodic updates |
| * during the compilation. |
| * |
| * @see flex2.tools.oem.ProgressMeter |
| * |
| * @param meter An object that implements the <code>ProgressMeter</code> interface. |
| */ |
| void setProgressMeter(ProgressMeter meter); |
| |
| /** |
| * Sets the path resolver for this object. This method is optional. |
| * |
| * @see flex2.tools.oem.PathResolver |
| * |
| * @param resolver A path resolver |
| */ |
| void setPathResolver(PathResolver resolver); |
| |
| /** |
| * Sets the application cache to be shared by all the applications |
| * and libraries in the current workspace. |
| * |
| * @param applicationCache The cache. |
| */ |
| void setApplicationCache(ApplicationCache applicationCache); |
| |
| /** |
| * Sets the library cache to be shared by all the applications and |
| * libraries in the current project. |
| * |
| * @param libraryCache The cache. |
| */ |
| void setSwcCache(LibraryCache libraryCache); |
| |
| /** |
| * Builds the object. If the <code>incremental</code> input argument is <code>false</code>, |
| * this method recompiles all parts of the object. If the <code>incremental</code> |
| * input argument is <code>true</code>, |
| * this method compiles only the parts of the object that have changed since the last compilation. |
| * |
| * <p> |
| * You must call the <code>setOutput()</code> method before calling this method. The result is saved to the location |
| * specified by the <code>getOutput()</code> method. If there is no output destination specified, this method |
| * does nothing and returns <code>0</code>. |
| * |
| * @see flex2.tools.oem.Application |
| * @see flex2.tools.oem.Library |
| * |
| * @param incremental If <code>true</code>, build incrementally; if <code>false</code>, rebuild. |
| * @return The number of bytes written out. |
| * @throws IOException Thrown when an I/O error occurs during compilation. |
| */ |
| long build(boolean incremental) throws IOException; |
| |
| /** |
| * Builds the object. If the <code>incremental</code> input argument is <code>false</code>, |
| * this method recompiles all parts of the object. |
| * If the <code>incremental</code> input argument is <code>true</code>, |
| * this method compiles only the parts of the object that have changed since the last compilation. |
| * |
| * <p> |
| * This method only outputs to the specified <code>OutputStream</code>. For better performance, the OutputStream |
| * should be buffered. This method does not output |
| * to the destination specified by the <code>setOutput()</code> method. |
| * |
| * @param out The <code>OutputStream</code>. |
| * @param incremental If <code>true</code>, build incrementally; if <code>false</code>, rebuild. |
| * @return The number of bytes written out. This method returns <code>0</code> if the object fails to compile. |
| * @throws IOException Thrown when an I/O error occurs during compilation. |
| */ |
| long build(OutputStream out, boolean incremental) throws IOException; |
| |
| /** |
| * Stops the compilation. If the client runs the compiler in a background thread, |
| * it can use this method to stop the compilation. The compiler does not |
| * stop immediately, but stops the compilation when it reaches a |
| * stable state. |
| */ |
| void stop(); |
| |
| /** |
| * If you called the <code>setOutput()</code> method, this method |
| * deletes the <code>Application</code> or <code>Library</code> |
| * file. Calls to the <code>build()</code> method trigger a full |
| * recompilation. |
| * |
| * <p> |
| * The <code>clean()</code> method does not remove compiler options or reset the output location. |
| */ |
| void clean(); |
| |
| /** |
| * Loads compilation data from a previous compilation. This method is usually called before the <code>build()</code> method. |
| * |
| * @param in The <code>InputStream</code>. |
| * @throws IOException Thrown when an I/O error occurs while loading the compilation data. |
| */ |
| void load(InputStream in) throws IOException; |
| |
| /** |
| * Saves the current compilation data. This method is usually called after the <code>build()</code> method. |
| * |
| * <p> |
| * Do not use this to create a SWF or SWC file. Use the <code>build()</code> method instead. |
| * |
| * @param out The <code>OutputStream</code>. |
| * @return The number of bytes written out. |
| * @throws IOException Thrown when an I/O error occurs while saving the compilation data. |
| */ |
| long save(OutputStream out) throws IOException; |
| |
| /** |
| * Reports information about the current compilation. This method returns <code>null</code> |
| * if you have not yet called the <code>build(boolean)</code>, <code>build(OutputStream, boolean)</code>, or |
| * <code>compile(boolean)</code> methods. |
| * |
| * <p> |
| * The <code>Report</code> object includes the following information: |
| * <ol> |
| * <li>Number of source files used in the compilation.</li> |
| * <li>The location of the source files.</li> |
| * <li>Number of asset files that are embedded in the <code>Application</code> or <code>Library</code>.</li> |
| * <li>The location of the asset files.</li> |
| * <li>The dependencies of the source files.</li> |
| * </ol> |
| * <p> |
| * You must call the <code>getReport()</code> method to get a new report after each |
| * call to the <code>build()</code> method. |
| * |
| * @return An object that implements the <code>Report</code> interface. |
| */ |
| Report getReport(); |
| |
| File getOutput(); |
| |
| /** |
| * <code>Application.compile()</code> or <code>Library.compile()</code> did not compile anything. |
| */ |
| int SKIP = 0; |
| |
| /** |
| * <code>Application.compile()</code> or <code>Library.compile()</code> did not compile but advise |
| * the caller to link again. |
| */ |
| int LINK = Integer.MAX_VALUE; |
| |
| /** |
| * <code>Application.compile()</code> or <code>Library.compile()</code> compiled successfully. |
| */ |
| int OK = 1; |
| |
| /** |
| * <code>Application.compile()</code> or <code>Library.compile()</code> failed to compile. |
| */ |
| int FAIL = -1; |
| } |