/******************************************************************************* * Copyright (c) 2009, 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.net.URI; import java.net.URISyntaxException; import java.util.*; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.types.FileSet; import org.eclipse.core.runtime.URIUtil; import org.eclipse.equinox.internal.p2.updatesite.CategoryXMLAction; import org.eclipse.equinox.internal.p2.updatesite.SiteXMLAction; import org.eclipse.equinox.p2.publisher.eclipse.BundlesAction; import org.eclipse.equinox.p2.publisher.eclipse.FeaturesAction; public class FeaturesAndBundlesTask extends AbstractPublisherTask { private final ArrayList features = new ArrayList(); private final ArrayList bundles = new ArrayList(); private URI siteXML = null; private URI categoryXML = null; private String siteQualifier = ""; //$NON-NLS-1$ private String categoryVersion = null; public void execute() throws BuildException { File[] f = getLocations(features); File[] b = getLocations(bundles); BuildPublisherApplication application = createPublisherApplication(); if (f.length > 0) application.addAction(new FeaturesAction(f)); if (b.length > 0) application.addAction(new BundlesAction(b)); if (siteXML != null) { SiteXMLAction action = new SiteXMLAction(siteXML, siteQualifier); if (categoryVersion != null) action.setCategoryVersion(categoryVersion); application.addAction(action); } if (categoryXML != null) { CategoryXMLAction action = new CategoryXMLAction(categoryXML, siteQualifier); if (categoryVersion != null) action.setCategoryVersion(categoryVersion); application.addAction(action); } try { application.run(getPublisherInfo()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private File[] getLocations(List collection) { ArrayList results = new ArrayList(); for (Iterator iterator = collection.iterator(); iterator.hasNext();) { FileSet set = (FileSet) iterator.next(); DirectoryScanner scanner = set.getDirectoryScanner(getProject()); String[][] elements = new String[][] {scanner.getIncludedDirectories(), scanner.getIncludedFiles()}; for (int i = 0; i < 2; i++) { for (int j = 0; j < elements[i].length; j++) { results.add(new File(set.getDir(), elements[i][j])); } } } return (File[]) results.toArray(new File[results.size()]); } public FileSet createFeatures() { FileSet set = new FileSet(); features.add(set); return set; } public FileSet createBundles() { FileSet set = new FileSet(); bundles.add(set); return set; } public void setSiteQualifier(String siteQualifier) { if (siteQualifier != null && !siteQualifier.startsWith(ANT_PREFIX)) this.siteQualifier = siteQualifier; } public void setCategory(String value) { if (value != null && value.length() > 0 && !value.startsWith(ANT_PREFIX)) { try { categoryXML = URIUtil.fromString(value); } catch (URISyntaxException e) { throw new IllegalArgumentException("Category description location (" + value + ") must be a URL."); //$NON-NLS-1$//$NON-NLS-2$ } } } public void setCategoryVersion(String version) { if (version != null && !version.startsWith(ANT_PREFIX)) categoryVersion = version; } public void setSite(String value) { if (value != null && value.length() > 0 && !value.startsWith(ANT_PREFIX)) { try { siteXML = URIUtil.fromString(value); } catch (URISyntaxException e) { throw new IllegalArgumentException("Artifact repository location (" + value + ") must be a URL."); //$NON-NLS-1$//$NON-NLS-2$ } } } }