blob: 8976e6583be22067f6333e9d5724eb13eed297ab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Innoopract Informationssysteme GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract - initial API and implementation
*******************************************************************************/
package org.eclipse.epp.packaging.core.assembly;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.ant.core.AntRunner;
import org.eclipse.core.runtime.CoreException;
/**
* An IPackager based on the PDE Build packager. Locates, configures and
* executes the package.xml ant script
*/
public class PackagerRunner implements IPackager {
private static final String ARGUMENT_ARCHIVE_FORMATS = "archivesFormat"; //$NON-NLS-1$
private static final String ARGUMENT_BASE_DIRECTORY = "baseDirectory";//$NON-NLS-1$
private static final String ARGUMENT_CONFIGURATION_FOLDER = "packagingInfo";//$NON-NLS-1$
private static final String ARGUMENT_FEATURE_LIST = "featureList";//$NON-NLS-1$
private static final String ARGUMENT_PLATFORM_LIST = "config";//$NON-NLS-1$
private static final String PDE_BUILD_PLUGIN_ID = "org.eclipse.pde.build";//$NON-NLS-1$
private final List<String> features = new ArrayList<String>();
private final List<String> platforms = new ArrayList<String>();
private final List<String> formats = new ArrayList<String>();
public void packApplication() throws CoreException, IOException {
AntRunner runner = new AntRunner();
String scriptLocation = PluginUtils.getPluginPath( PDE_BUILD_PLUGIN_ID )
+ "/scripts/package.xml";//$NON-NLS-1$
runner.setBuildFileLocation( scriptLocation );
addFeatureListToArguments();
addPlatformListToArguments();
addFormatListToArguments();
runner.run();
}
/**
* Prior to running the packager, convert the list of archive formats to an
* argument string and add it to the list of arguments.
*/
private void addFormatListToArguments() {
addListToArguments( this.formats, '&', ARGUMENT_ARCHIVE_FORMATS );
}
/**
* Prior to running the packager, convert the list of platforms to an argument
* string and add it to the list of arguments.
*/
private void addPlatformListToArguments() {
addListToArguments( this.platforms, '&', ARGUMENT_PLATFORM_LIST );
}
/**
* Prior to running the packager, convert the list of features to an argument
* string and add it to the list of arguments.
*/
private void addFeatureListToArguments() {
addListToArguments( this.features, ',', ARGUMENT_FEATURE_LIST );
}
/**
* Converts the source list to a string with the entries separated by
* separator, then sets the result as a value for the argument.
*/
private void addListToArguments( final List<String> sourceList,
final char separator,
final String argumentName )
{
StringBuilder builder = new StringBuilder();
for( String feature : sourceList ) {
builder.append( feature );
builder.append( separator );
}
setArgument( argumentName, builder.toString() );
}
/**
* Sets the configuration folder for the PDE packager. The folder must contain
* packager.properties, packaging.properties and customTargets.xml.
*
* @param folder directory name
*/
public void setConfigurationFolder( final String folder ) {
setArgument( ARGUMENT_CONFIGURATION_FOLDER, folder );
}
/** Sets the working directory for the PDE packager.
* @param folder directory name of the base directory
*/
public void setBaseDirectory( final String folder ) {
setArgument( ARGUMENT_BASE_DIRECTORY, folder );
}
/**
* Adds a feature to the configured application.
*
* @param identifier The feature id.
*/
public void addFeature( final String identifier ) {
this.features.add( identifier );
}
/** Sets an argument for the AntRunner to use. */
private void setArgument( final String key, final String value ) {
System.setProperty( key, value );
}
/**
* Adds a new target platform to the configuration.
*
* @param platform A comma-separated platform description (os,ws,arch).
*/
public void addPlatform( final String platform ) {
this.platforms.add( platform );
}
/**
* Sets a platform's archive format.
*
* @param platform A comma-separated platform description - os,ws,arch.
* @param format An archive format. Supported values are antZip, antTar, tar.
*/
public void setArchiveFormat( final String platform, final String format ) {
this.formats.add( platform + '-' + format );
}
}