flex2.tools.oem.Builder Maven / Gradle / Ivy
/*
*
* 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 Builder interface lists the common configuration and build-cycle methods.
* The Application and Library 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
* getDefaultConfiguration() method to get a Configuration object.
*
* @see flex2.tools.oem.Configuration
*
* @param configuration An instance of an object that implements the Configuration interface.
*/
void setConfiguration(Configuration configuration);
/**
* Gets the default compiler options. The default values are specified in the flex-config.xml
* file. You can override the default values by using methods of the Configuration interface.
*
*
* This method returns the default compiler options in new Configuration objects.
*
* @see flex2.tools.oem.Configuration
*
* @return An instance of an object that implements the Configuration interface.
*/
Configuration getDefaultConfiguration();
/**
* Gets the compiler options for this object. Unlike the getDefaultConfiguration() method,
* this method returns null if the setConfiguration() method was not called.
*
* @see flex2.tools.oem.Configuration
*
* @return An instance of an object that implements the Configuration interface.
*/
Configuration getConfiguration();
/**
* Gets the performance data for each compiler phase for the last build.
*
* @return A map of compiler phase to PerformanceData.
*/
Map 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 Logger interface.
*/
void setLogger(Logger logger);
/**
* Gets the logger for this object. This method returns null if the setLogger()
* method was not called.
*
* @see flex2.tools.oem.Logger
*
* @return An object that implements the Logger interface.
*/
Logger getLogger();
/**
* Sets the custom file extensions for this object. For example:
*
*
* setSupportedFileExtensions(flex2.compiler.util.MimeMappings.MXML, new String[] {".foo"});
*
*
* This example instructs the compiler to treat files with the *.foo extension as MXML documents.
* The supported MIME types are specified in the flex2.compiler.util.MimeMappings 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 ProgressMeter 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 incremental input argument is false,
* this method recompiles all parts of the object. If the incremental
* input argument is true,
* this method compiles only the parts of the object that have changed since the last compilation.
*
*
* You must call the setOutput() method before calling this method. The result is saved to the location
* specified by the getOutput() method. If there is no output destination specified, this method
* does nothing and returns 0.
*
* @see flex2.tools.oem.Application
* @see flex2.tools.oem.Library
*
* @param incremental If true, build incrementally; if false, 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 incremental input argument is false,
* this method recompiles all parts of the object.
* If the incremental input argument is true,
* this method compiles only the parts of the object that have changed since the last compilation.
*
*
* This method only outputs to the specified OutputStream. For better performance, the OutputStream
* should be buffered. This method does not output
* to the destination specified by the setOutput() method.
*
* @param out The OutputStream.
* @param incremental If true, build incrementally; if false, rebuild.
* @return The number of bytes written out. This method returns 0 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 setOutput() method, this method
* deletes the Application or Library
* file. Calls to the build() method trigger a full
* recompilation.
*
*
* The clean() 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 build() method.
*
* @param in The InputStream.
* @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 build() method.
*
*
* Do not use this to create a SWF or SWC file. Use the build() method instead.
*
* @param out The OutputStream.
* @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 null
* if you have not yet called the build(boolean), build(OutputStream, boolean), or
* compile(boolean) methods.
*
*
* The Report object includes the following information:
*
* - Number of source files used in the compilation.
* - The location of the source files.
* - Number of asset files that are embedded in the
Application or Library.
* - The location of the asset files.
* - The dependencies of the source files.
*
*
* You must call the getReport() method to get a new report after each
* call to the build() method.
*
* @return An object that implements the Report interface.
*/
Report getReport();
File getOutput();
/**
* Application.compile() or Library.compile() did not compile anything.
*/
int SKIP = 0;
/**
* Application.compile() or Library.compile() did not compile but advise
* the caller to link again.
*/
int LINK = Integer.MAX_VALUE;
/**
* Application.compile() or Library.compile() compiled successfully.
*/
int OK = 1;
/**
* Application.compile() or Library.compile() failed to compile.
*/
int FAIL = -1;
}