blob: 8f0b79a84d097ca8cc60f71496cbd83f615ba73c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2013 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.build.packager;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.equinox.p2.publisher.eclipse.FeatureEntry;
import org.eclipse.pde.internal.build.AssemblyInformation;
import org.eclipse.pde.internal.build.Config;
import org.eclipse.pde.internal.build.builder.BuildDirector;
import org.eclipse.pde.internal.build.site.BuildTimeFeature;
public class ElementCollector extends BuildDirector {
public ElementCollector(AssemblyInformation assemblageInformation) {
super(assemblageInformation);
}
@Override
protected void generateIncludedFeatureBuildFile(BuildTimeFeature feature) throws CoreException {
FeatureEntry[] referencedFeatures = feature.getIncludedFeatureReferences();
for (int i = 0; i < referencedFeatures.length; i++) {
String featureId = referencedFeatures[i].getId();
BuildTimeFeature nestedFeature = getSite(false).findFeature(featureId, null, true);
try {
generate(nestedFeature, false);
} catch (CoreException exception) {
//If the referenced feature is not optional, there is a real problem and the exception is re-thrown.
if (exception.getStatus().getCode() != EXCEPTION_FEATURE_MISSING || (exception.getStatus().getCode() == EXCEPTION_FEATURE_MISSING && !referencedFeatures[i].isOptional()))
throw exception;
}
}
}
@Override
protected void collectElementToAssemble(BuildTimeFeature featureToCollect) {
if (assemblyData == null)
return;
List<Config> correctConfigs = selectConfigs(featureToCollect);
// Here, we could sort if the feature is a common one or not by comparing the size of correctConfigs
for (Iterator<Config> iter = correctConfigs.iterator(); iter.hasNext();) {
Config config = iter.next();
assemblyData.addFeature(config, featureToCollect);
}
}
}