blob: 05d4bc4202cf5019af904f6ebd5b8349948c4fc9 [file] [log] [blame]
package org.eclipse.pde.internal.build.tasks;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.osgi.service.resolver.BundleDescription;
import org.eclipse.pde.internal.build.AssemblyInformation;
import org.eclipse.pde.internal.build.SourceFeatureInformation;
import org.eclipse.pde.internal.build.Utils;
import org.eclipse.pde.internal.build.builder.BuildDirector;
import org.eclipse.pde.internal.build.builder.FeatureBuildScriptGenerator;
import org.eclipse.pde.internal.build.site.BuildTimeFeature;
import org.eclipse.pde.internal.build.site.BuildTimeSiteFactory;
import org.eclipse.pde.internal.build.site.compatibility.FeatureEntry;
import org.osgi.framework.Version;
public class AJBuildDirector extends BuildDirector {
private boolean scriptGeneration = true;
public AJBuildDirector() {
super();
}
public AJBuildDirector(AssemblyInformation assemblageInformation) {
super(assemblageInformation);
}
public AJBuildDirector(String featureId, String versionId,
AssemblyInformation informationGathering) throws CoreException {
super(featureId, versionId, informationGathering);
}
protected void generate(BuildTimeFeature feature, boolean generateProductFiles) throws CoreException {
if (analyseIncludedFeatures)
generateIncludedFeatureBuildFile(feature);
if (analysePlugins)
generateChildrenScripts(feature);
collectElementToAssemble(feature);
if (scriptGeneration) {
FeatureBuildScriptGenerator featureScriptGenerator =
new FeatureBuildScriptGenerator(feature); //AspectJ Change
featureScriptGenerator.setDirector(this);
featureScriptGenerator.setBuildSiteFactory(siteFactory);
featureScriptGenerator.setGenerateProductFiles(generateProductFiles);
featureScriptGenerator.generate();
}
}
BuildTimeSiteFactory getSiteFactory() {
return super.siteFactory;
}
/**
* @param models
* @throws CoreException
*/
private void generateModels(List models) throws CoreException {
if (scriptGeneration == false)
return;
if (binaryFeature == false || models.isEmpty())
return;
Set generatedScripts = new HashSet(models.size());
for (Iterator iterator = models.iterator(); iterator.hasNext();) {
BundleDescription model = (BundleDescription) iterator.next();
if (generatedScripts.contains(model))
continue;
generatedScripts.add(model);
//Get the corresponding plug-in entries (from a feature object) associated with the model
//and generate the script if one the configuration is being built. The generated scripts
//are configuration agnostic so we only generate once.
Set matchingEntries = (Set) ((Properties) model.getUserObject()).get(PLUGIN_ENTRY);
if (matchingEntries.isEmpty())
return;
Iterator entryIter = matchingEntries.iterator();
FeatureEntry correspondingEntry = (FeatureEntry) entryIter.next();
List list = selectConfigs(correspondingEntry);
if (list.size() == 0)
continue;
AJModelBuildScriptGenerator generator =
new AJModelBuildScriptGenerator(); // AspectJ Change
generator.setBuildSiteFactory(siteFactory);
generator.setCompiledElements(getCompiledElements());
generator.setIgnoreMissingPropertiesFile(isIgnoreMissingPropertiesFile());
generator.setModel(model); // setModel has to be called before configurePersistentProperties because it reads the model's properties
generator.setFeatureGenerator(this);
generator.setPluginPath(getPluginPath());
generator.setBuildingOSGi(isBuildingOSGi());
generator.setDevEntries(devEntries);
generator.includePlatformIndependent(isPlatformIndependentIncluded());
generator.setSignJars(signJars);
generator.setAssociatedEntry(correspondingEntry);
generator.generate();
}
}
private void generateChildrenScripts(BuildTimeFeature feature) throws CoreException {
List plugins = computeElements(feature);
String suffix = generateFeatureVersionSuffix(feature);
if (suffix != null) {
Version versionId = new Version(feature.getVersion());
String qualifier = versionId.getQualifier();
qualifier = qualifier.substring(0, feature.getContextQualifierLength());
qualifier = qualifier + '-' + suffix;
versionId = new Version(versionId.getMajor(), versionId.getMinor(), versionId.getMicro(), qualifier);
String newVersion = versionId.toString();
feature.setVersion(newVersion);
//initializeFeatureNames(); //reset our variables
}
generateModels(Utils.extractPlugins(getSite(false).getRegistry().getSortedBundles(), plugins));
}
// execute private method
private static Method generateFeatureVersionSuffixMethod;
private String generateFeatureVersionSuffix(BuildTimeFeature buildFeature) throws CoreException {
try {
if (generateFeatureVersionSuffixMethod == null) {
generateFeatureVersionSuffixMethod = BuildDirector.class.getDeclaredMethod(
"generateFeatureVersionSuffix", new Class[]{ BuildTimeFeature.class } ); //$NON-NLS-1$
generateFeatureVersionSuffixMethod.setAccessible(true);
}
return (String) generateFeatureVersionSuffixMethod.invoke(this, new Object[] { buildFeature });
} catch (Exception e) {
}
return null;
}
/**
* Sets the scriptGeneration.
*
* @param scriptGeneration
* The scriptGeneration to set
*/
public void setScriptGeneration(boolean scriptGeneration) {
super.setScriptGeneration(scriptGeneration);
this.scriptGeneration = scriptGeneration;
}
// AspectJ Change---make accessible to classes in this package.
SourceFeatureInformation getSourceToGather() {
return sourceToGather;
}
}