/******************************************************************************* * Copyright (c) 2008, 2010 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.pde.internal.build.publisher; import java.io.File; import java.util.Collection; import org.eclipse.equinox.internal.p2.publisher.eclipse.FeatureParser; import org.eclipse.equinox.p2.metadata.*; import org.eclipse.equinox.p2.publisher.IPublisherInfo; import org.eclipse.equinox.p2.publisher.eclipse.Feature; import org.eclipse.equinox.p2.publisher.eclipse.FeaturesAction; import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor; import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor; import org.eclipse.equinox.spi.p2.publisher.PublisherHelper; public class GatherFeatureAction extends FeaturesAction { private GatheringComputer computer; private String groupId = null; private FeatureRootAdvice rootAdvice; private final File featureRoot; public GatherFeatureAction(File location, File featureRoot) { super(new File[] {location}); this.featureRoot = featureRoot; } public void setComputer(GatheringComputer computer) { this.computer = computer; } public void setGroupId(String groupId) { this.groupId = groupId; } protected Feature[] getFeatures(File[] locations) { Feature feature = new FeatureParser().parse(featureRoot); if (feature != null) { feature.setLocation(locations[0].getAbsolutePath()); rootAdvice.setFeatureId(feature.getId()); rootAdvice.setFeatureVersion(Version.parseVersion(feature.getVersion())); return new Feature[] {feature}; } return new Feature[0]; } // protected ArrayList generateRootFileIUs(Feature feature, IPublisherResult result, IPublisherInfo publisherInfo) { // ArrayList ius = new ArrayList(); // // Collection collection = publisherInfo.getAdvice(null, false, null, null, FeatureRootAdvice.class); // if (collection.size() == 0) // return ius; // // FeatureRootAdvice advice = (FeatureRootAdvice) collection.iterator().next(); // String[] configs = advice.getConfigs(); // for (int i = 0; i < configs.length; i++) { // String config = configs[i]; // // GatheringComputer rootComputer = advice.getRootFileComputer(config); // // if (rootComputer != null) { // FileSetDescriptor descriptor = advice.getDescriptor(config); // IInstallableUnit iu = (IInstallableUnit) createFeatureRootFileIU(feature.getId(), feature.getVersion(), null, descriptor)[0]; // // File[] files = rootComputer.getFiles(); // IArtifactKey artifactKey = iu.getArtifacts()[0]; // ArtifactDescriptor artifactDescriptor = new ArtifactDescriptor(artifactKey); // publishArtifact(artifactDescriptor, files, null, publisherInfo, rootComputer); // // result.addIU(iu, IPublisherResult.NON_ROOT); // ius.add(iu); // } // } // return ius; // } protected String getGroupId(String featureId) { if (groupId != null) return groupId; return super.getGroupId(featureId); } protected IInstallableUnit generateFeatureJarIU(Feature feature, IPublisherInfo publisherInfo) { if (computer == null) return null; return createFeatureJarIU(feature, publisherInfo); } protected void publishFeatureArtifacts(Feature feature, IInstallableUnit featureIU, IPublisherInfo publisherInfo) { if (computer == null) return; // add all the artifacts associated with the feature Collection artifacts = featureIU.getArtifacts(); if (artifacts.size() > 1) { //boo! } ArtifactDescriptor ad = (ArtifactDescriptor) PublisherHelper.createArtifactDescriptor(publisherInfo, (IArtifactKey) artifacts.iterator().next(), null); processArtifactPropertiesAdvice(featureIU, ad, publisherInfo); ad.setProperty(IArtifactDescriptor.DOWNLOAD_CONTENTTYPE, IArtifactDescriptor.TYPE_ZIP); publishArtifact(ad, computer.getFiles(), null, publisherInfo, computer); } public void setRootAdvice(FeatureRootAdvice rootAdvice) { this.rootAdvice = rootAdvice; } }