Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 264389 | Differences between
and this patch

Collapse All | Expand All

(-)src_ant/org/eclipse/pde/internal/build/publisher/FeaturesAndBundlesTask.java (-1 / +1 lines)
Lines 35-41 Link Here
35
		if (b.length > 0)
35
		if (b.length > 0)
36
			application.addAction(new BundlesAction(b));
36
			application.addAction(new BundlesAction(b));
37
		if (siteXML != null)
37
		if (siteXML != null)
38
			application.addAction(new SiteXMLAction(siteXML));
38
			application.addAction(new SiteXMLAction(siteXML, null));
39
39
40
		try {
40
		try {
41
			application.run(getPublisherInfo());
41
			application.run(getPublisherInfo());
(-)src/org/eclipse/equinox/p2/tests/updatesite/AllTests.java (+1 lines)
Lines 21-26 Link Here
21
		TestSuite suite = new TestSuite(AllTests.class.getName());
21
		TestSuite suite = new TestSuite(AllTests.class.getName());
22
		suite.addTestSuite(SiteXMLActionTest.class);
22
		suite.addTestSuite(SiteXMLActionTest.class);
23
		suite.addTestSuite(UpdateSiteTest.class);
23
		suite.addTestSuite(UpdateSiteTest.class);
24
		suite.addTestSuite(LocalUpdatesiteTest.class);
24
		return suite;
25
		return suite;
25
	}
26
	}
26
27
(-)src/org/eclipse/equinox/p2/tests/updatesite/SiteXMLActionTest.java (-4 / +27 lines)
Lines 10-23 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.equinox.p2.tests.updatesite;
11
package org.eclipse.equinox.p2.tests.updatesite;
12
12
13
import java.io.File;
13
import java.net.URI;
14
import java.net.URI;
14
import java.util.Collection;
15
import java.util.Collection;
15
import java.util.Iterator;
16
import java.util.Iterator;
17
import org.eclipse.core.runtime.NullProgressMonitor;
18
import org.eclipse.core.runtime.URIUtil;
16
import org.eclipse.equinox.internal.p2.updatesite.SiteXMLAction;
19
import org.eclipse.equinox.internal.p2.updatesite.SiteXMLAction;
17
import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository;
20
import org.eclipse.equinox.internal.provisional.p2.core.repository.IRepository;
18
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
21
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
22
import org.eclipse.equinox.internal.provisional.p2.metadata.query.IUPropertyQuery;
23
import org.eclipse.equinox.internal.provisional.p2.query.Collector;
24
import org.eclipse.equinox.internal.provisional.p2.query.Query;
19
import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.RepositoryReference;
25
import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.RepositoryReference;
20
import org.eclipse.equinox.p2.publisher.*;
26
import org.eclipse.equinox.p2.publisher.*;
27
import org.eclipse.equinox.p2.publisher.eclipse.FeaturesAction;
21
import org.eclipse.equinox.p2.tests.*;
28
import org.eclipse.equinox.p2.tests.*;
22
29
23
/**
30
/**
Lines 25-41 Link Here
25
 */
32
 */
26
public class SiteXMLActionTest extends AbstractProvisioningTest {
33
public class SiteXMLActionTest extends AbstractProvisioningTest {
27
	private TestMetadataRepository metadataRepository;
34
	private TestMetadataRepository metadataRepository;
35
	private IPublisherResult actionResult;
36
	private URI siteLocation;
28
37
29
	@Override
38
	@Override
30
	protected void setUp() throws Exception {
39
	protected void setUp() throws Exception {
31
		super.setUp();
40
		super.setUp();
32
		IPublisherResult result = new PublisherResult();
41
		actionResult = new PublisherResult();
33
		PublisherInfo info = new PublisherInfo();
42
		PublisherInfo info = new PublisherInfo();
34
		metadataRepository = new TestMetadataRepository(new IInstallableUnit[0]);
43
		metadataRepository = new TestMetadataRepository(new IInstallableUnit[0]);
35
		info.setMetadataRepository(metadataRepository);
44
		info.setMetadataRepository(metadataRepository);
36
		URI siteLocation = TestData.getFile("updatesite", "SiteXMLActionTest/site.xml").toURI();
45
		siteLocation = TestData.getFile("updatesite", "SiteXMLActionTest/site.xml").toURI();
37
		SiteXMLAction action = new SiteXMLAction(siteLocation);
46
		FeaturesAction featuresAction = new FeaturesAction(new File[] {TestData.getFile("updateSite", "SiteXMLActionTest")});
38
		action.perform(info, result, getMonitor());
47
		featuresAction.perform(info, actionResult, new NullProgressMonitor());
48
49
		SiteXMLAction action = new SiteXMLAction(siteLocation, null);
50
		action.perform(info, actionResult, getMonitor());
51
	}
52
53
	public void testQualifier() {
54
		Query categoryQuery = new IUPropertyQuery(IInstallableUnit.PROP_TYPE_CATEGORY, Boolean.toString(true));
55
		Collector results = actionResult.query(categoryQuery, new Collector(), new NullProgressMonitor());
56
		Iterator iter = results.iterator();
57
		while (iter.hasNext()) {
58
			IInstallableUnit unit = (IInstallableUnit) iter.next();
59
			assertTrue("1.0", unit.getId().startsWith(URIUtil.toUnencodedString(siteLocation)));
60
			assertEquals("2.0", "Test Category Label", unit.getProperty(IInstallableUnit.PROP_NAME));
61
		}
39
	}
62
	}
40
63
41
	/**
64
	/**
(-)src/org/eclipse/equinox/p2/tests/updatesite/LocalUpdatesiteTest.java (+62 lines)
Added Link Here
1
/******************************************************************************* 
2
* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
3
* program and the accompanying materials are made available under the terms of
4
* the Eclipse Public License v1.0 which accompanies this distribution, and is
5
* available at http://www.eclipse.org/legal/epl-v10.html
6
*
7
* Contributors:
8
*   EclipseSource - initial API and implementation
9
******************************************************************************/
10
package org.eclipse.equinox.p2.tests.updatesite;
11
12
import java.io.File;
13
import java.io.IOException;
14
import java.util.Iterator;
15
import org.eclipse.core.runtime.NullProgressMonitor;
16
import org.eclipse.equinox.internal.p2.updatesite.UpdateSitePublisherApplication;
17
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
18
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
19
import org.eclipse.equinox.internal.provisional.p2.metadata.query.IUPropertyQuery;
20
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
21
import org.eclipse.equinox.internal.provisional.p2.query.Collector;
22
import org.eclipse.equinox.internal.provisional.p2.query.Query;
23
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
24
import org.eclipse.equinox.p2.tests.TestData;
25
26
public class LocalUpdatesiteTest extends AbstractProvisioningTest {
27
	protected File repoLocation;
28
29
	protected void setUp() throws Exception {
30
		super.setUp();
31
		String tempDir = System.getProperty("java.io.tmpdir");
32
		repoLocation = new File(tempDir, "LocalMetadataRepositoryTest");
33
		AbstractProvisioningTest.delete(repoLocation);
34
		repoLocation.mkdir();
35
	}
36
37
	protected void tearDown() throws Exception {
38
		getMetadataRepositoryManager().removeRepository(repoLocation.toURI());
39
		delete(repoLocation);
40
		super.tearDown();
41
	}
42
43
	public void testCategoryQualifier() throws IOException, ProvisionException {
44
		Query categoryQuery = new IUPropertyQuery(IInstallableUnit.PROP_TYPE_CATEGORY, Boolean.toString(true));
45
		File siteSource = TestData.getFile("updatesite", "SiteXMLActionTest");
46
		UpdateSitePublisherApplication application = new UpdateSitePublisherApplication();
47
		try {
48
			application.run(new String[] {"-metadataRepository", repoLocation.toURI().toString(), "-source", siteSource.toString(), "-categoryQualifier", "fooQualifier"});
49
		} catch (Exception e) {
50
			fail("0.99");
51
		}
52
		IMetadataRepository repository = getMetadataRepositoryManager().loadRepository(repoLocation.toURI(), new NullProgressMonitor());
53
		Collector results = repository.query(categoryQuery, new Collector(), new NullProgressMonitor());
54
		assertEquals("1.0", 1, results.size());
55
		Iterator iter = results.iterator();
56
		while (iter.hasNext()) {
57
			IInstallableUnit unit = (IInstallableUnit) iter.next();
58
			assertTrue("2.0", unit.getId().startsWith("fooQualifier"));
59
			assertEquals("3.0", "Test Category Label", unit.getProperty(IInstallableUnit.PROP_NAME));
60
		}
61
	}
62
}
(-)src/org/eclipse/equinox/internal/p2/updatesite/SiteXMLAction.java (-4 / +33 lines)
Lines 39-51 Link Here
39
	private SiteCategory defaultCategory;
39
	private SiteCategory defaultCategory;
40
	private HashSet defaultCategorySet;
40
	private HashSet defaultCategorySet;
41
	private URI location;
41
	private URI location;
42
	private String categoryQualifier = null;
42
43
43
	public SiteXMLAction(URI location) {
44
	/**
45
	 * Creates a SiteXMLAction from a Location (URI) with an optional qualifier to use for category names
46
	 * @param location The location of the update site
47
	 * @param categoryQualifier The qualifier to prepend to categories. This qualifier is used
48
	 * to ensure that the category IDs are unique between update sites. If <b>null</b> a default
49
	 * qualifier will be generated
50
	 */
51
	public SiteXMLAction(URI location, String categoryQualifier) {
44
		this.location = location;
52
		this.location = location;
53
		this.categoryQualifier = categoryQualifier;
45
	}
54
	}
46
55
47
	public SiteXMLAction(UpdateSite updateSite) {
56
	/**
57
	 * Creates a SiteXMLAction from an Update site with an optional qualifier to use for category names
58
	 * @param updateSite The update site 
59
	 * @param categoryQualifier The qualifier to prepend to categories. This qualifier is used
60
	 * to ensure that the category IDs are unique between update sites. If <b>null</b> a default
61
	 * qualifier will be generated
62
	 */
63
	public SiteXMLAction(UpdateSite updateSite, String categoryQualifier) {
48
		this.updateSite = updateSite;
64
		this.updateSite = updateSite;
65
		this.categoryQualifier = categoryQualifier;
49
	}
66
	}
50
67
51
	private void initialize() {
68
	private void initialize() {
Lines 247-256 Link Here
247
	 * @param parentCategory The parent category, or <code>null</code>
264
	 * @param parentCategory The parent category, or <code>null</code>
248
	 * @return an IU representing the category
265
	 * @return an IU representing the category
249
	 */
266
	 */
250
	public static IInstallableUnit createCategoryIU(SiteCategory category, Set featureIUs, IInstallableUnit parentCategory) {
267
	public IInstallableUnit createCategoryIU(SiteCategory category, Set featureIUs, IInstallableUnit parentCategory) {
251
		InstallableUnitDescription cat = new MetadataFactory.InstallableUnitDescription();
268
		InstallableUnitDescription cat = new MetadataFactory.InstallableUnitDescription();
252
		cat.setSingleton(true);
269
		cat.setSingleton(true);
253
		String categoryId = category.getName();
270
		String categoryId = buildCategoryId(category.getName());
254
		cat.setId(categoryId);
271
		cat.setId(categoryId);
255
		cat.setVersion(Version.emptyVersion);
272
		cat.setVersion(Version.emptyVersion);
256
		cat.setProperty(IInstallableUnit.PROP_NAME, category.getLabel());
273
		cat.setProperty(IInstallableUnit.PROP_NAME, category.getLabel());
Lines 293-296 Link Here
293
		return MetadataFactory.createInstallableUnit(cat);
310
		return MetadataFactory.createInstallableUnit(cat);
294
	}
311
	}
295
312
313
	/**
314
	 * Creates a qualified category id. This action's qualifier is used if one exists 
315
	 * or an existing update site's location is used.
316
	 */
317
	private String buildCategoryId(String categoryName) {
318
		if (categoryQualifier != null)
319
			return categoryQualifier + "." + categoryName; //$NON-NLS-1$
320
		if (updateSite != null)
321
			return URIUtil.toUnencodedString(updateSite.getLocation()) + "." + categoryName; //$NON-NLS-1$
322
		return categoryName;
323
	}
324
296
}
325
}
(-)src/org/eclipse/equinox/internal/p2/updatesite/RemoteUpdateSiteAction.java (-19 / +2 lines)
Lines 10-17 Link Here
10
 ******************************************************************************/
10
 ******************************************************************************/
11
package org.eclipse.equinox.internal.p2.updatesite;
11
package org.eclipse.equinox.internal.p2.updatesite;
12
12
13
import java.net.URI;
14
import java.net.URISyntaxException;
15
import java.util.ArrayList;
13
import java.util.ArrayList;
16
import org.eclipse.core.runtime.*;
14
import org.eclipse.core.runtime.*;
17
import org.eclipse.equinox.p2.publisher.*;
15
import org.eclipse.equinox.p2.publisher.*;
Lines 23-42 Link Here
23
 * IUs generated for the bundles are "partial" as the bundles themselves are not downloaded.
21
 * IUs generated for the bundles are "partial" as the bundles themselves are not downloaded.
24
 */
22
 */
25
public class RemoteUpdateSiteAction implements IPublisherAction {
23
public class RemoteUpdateSiteAction implements IPublisherAction {
26
	protected String source;
27
	private UpdateSite updateSite;
24
	private UpdateSite updateSite;
28
25
29
	public RemoteUpdateSiteAction(UpdateSite updateSite) {
26
	public RemoteUpdateSiteAction(UpdateSite updateSite) {
30
		this.updateSite = updateSite;
27
		this.updateSite = updateSite;
31
	}
28
	}
32
29
33
	public RemoteUpdateSiteAction(String source) {
34
		this.source = source;
35
	}
36
37
	public IStatus perform(IPublisherInfo info, IPublisherResult results, IProgressMonitor monitor) {
30
	public IStatus perform(IPublisherInfo info, IPublisherResult results, IProgressMonitor monitor) {
38
		IPublisherAction[] actions = createActions();
31
		IPublisherAction[] actions = createActions();
39
		MultiStatus finalStatus = new MultiStatus(this.getClass().getName(), 0, NLS.bind(Messages.Error_Generation, source != null ? source : (updateSite != null ? updateSite.getLocation().toString() : "Unknown")), null); //$NON-NLS-1$
32
		MultiStatus finalStatus = new MultiStatus(this.getClass().getName(), 0, NLS.bind(Messages.Error_Generation, updateSite != null ? updateSite.getLocation().toString() : "Unknown"), null); //$NON-NLS-1$
40
		for (int i = 0; i < actions.length; i++) {
33
		for (int i = 0; i < actions.length; i++) {
41
			if (monitor.isCanceled())
34
			if (monitor.isCanceled())
42
				return Status.CANCEL_STATUS;
35
				return Status.CANCEL_STATUS;
Lines 55-70 Link Here
55
	}
48
	}
56
49
57
	private IPublisherAction createSiteXMLAction() {
50
	private IPublisherAction createSiteXMLAction() {
58
		if (updateSite != null)
51
		return new SiteXMLAction(updateSite, null);
59
			return new SiteXMLAction(updateSite);
60
		if (source != null) {
61
			try {
62
				return new SiteXMLAction(new URI(source + "/site.xml")); //$NON-NLS-1$
63
			} catch (URISyntaxException e) {
64
				// never happens
65
				return null;
66
			}
67
		}
68
		return null;
69
	}
52
	}
70
}
53
}
(-)src/org/eclipse/equinox/internal/p2/updatesite/LocalUpdateSiteAction.java (-5 / +26 lines)
Lines 26-41 Link Here
26
public class LocalUpdateSiteAction implements IPublisherAction {
26
public class LocalUpdateSiteAction implements IPublisherAction {
27
	protected String source;
27
	protected String source;
28
	private UpdateSite updateSite;
28
	private UpdateSite updateSite;
29
	private String categoryQualifier;
29
30
30
	protected LocalUpdateSiteAction() {
31
	protected LocalUpdateSiteAction() {
32
		// empty
31
	}
33
	}
32
34
33
	public LocalUpdateSiteAction(String source) {
35
	/**
36
	 * Creates a local updatesite publisher action from a source location
37
	 * @param source The location of the directory that contains the site.xml file
38
	 * @param categoryQualifier The qualifier to prepend to categories. This qualifier is used
39
	 * to ensure that the category IDs are unique between update sites. If <b>null</b> a default
40
	 * qualifier will be generated
41
	 */
42
	public LocalUpdateSiteAction(String source, String categoryQualifier) {
34
		this.source = source;
43
		this.source = source;
44
		this.categoryQualifier = categoryQualifier;
35
	}
45
	}
36
46
37
	public LocalUpdateSiteAction(UpdateSite updateSite) {
47
	/**
48
	 * Creates a local updatesite publisher action from an UpdateSite
49
	 * @param updateSite The updatesite to use
50
	 * @param categoryQualifier The qualifier to prepend to categories. This qualifier is used
51
	 * to ensure that the category IDs are unique between update sites.  If <b>null</b> a default
52
	 * qualifier will be generated
53
	 */
54
	public LocalUpdateSiteAction(UpdateSite updateSite, String categoryQualifier) {
38
		this.updateSite = updateSite;
55
		this.updateSite = updateSite;
56
		this.categoryQualifier = categoryQualifier;
39
	}
57
	}
40
58
41
	public IStatus perform(IPublisherInfo info, IPublisherResult results, IProgressMonitor monitor) {
59
	public IStatus perform(IPublisherInfo info, IPublisherResult results, IProgressMonitor monitor) {
Lines 63-75 Link Here
63
81
64
	private IPublisherAction createSiteXMLAction() {
82
	private IPublisherAction createSiteXMLAction() {
65
		if (updateSite != null)
83
		if (updateSite != null)
66
			return new SiteXMLAction(updateSite);
84
			return new SiteXMLAction(updateSite, categoryQualifier);
67
		if (source != null)
85
		if (source != null) {
68
			return new SiteXMLAction(new File(source, "site.xml").toURI()); //$NON-NLS-1$
86
			SiteXMLAction siteXmlAction = new SiteXMLAction(new File(source, "site.xml").toURI(), categoryQualifier); //$NON-NLS-1$
87
			return siteXmlAction;
88
		}
69
		return null;
89
		return null;
70
	}
90
	}
71
91
72
	private void createAdvice() {
92
	private void createAdvice() {
93
		// empty
73
	}
94
	}
74
95
75
	protected IPublisherAction createFeaturesAction() {
96
	protected IPublisherAction createFeaturesAction() {
(-)src/org/eclipse/equinox/internal/p2/updatesite/UpdatesitePublisherApplication.java (-30 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 Code 9 and others. All rights reserved. This
3
 * program and the accompanying materials are made available under the terms of
4
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
5
 * available at http://www.eclipse.org/legal/epl-v10.html
6
 * 
7
 * Contributors: 
8
 *   Code 9 - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.equinox.internal.p2.updatesite;
11
12
import org.eclipse.equinox.p2.publisher.AbstractPublisherApplication;
13
import org.eclipse.equinox.p2.publisher.IPublisherAction;
14
15
/**
16
 * <p>
17
 * This application generates meta-data/artifact repositories from a local update site.
18
 * The -source <localdir> parameter must specify the top-level directory containing the update site.
19
 * </p>
20
 */
21
public class UpdatesitePublisherApplication extends AbstractPublisherApplication {
22
23
	public UpdatesitePublisherApplication() {
24
		// nothing todo
25
	}
26
27
	protected IPublisherAction[] createActions() {
28
		return new IPublisherAction[] {new LocalUpdateSiteAction(source)};
29
	}
30
}
(-)plugin.xml (-1 / +1 lines)
Lines 27-33 Link Here
27
            thread="any"
27
            thread="any"
28
            visible="true">
28
            visible="true">
29
         <run
29
         <run
30
               class="org.eclipse.equinox.internal.p2.updatesite.UpdatesitePublisherApplication">
30
               class="org.eclipse.equinox.internal.p2.updatesite.UpdateSitePublisherApplication">
31
         </run>
31
         </run>
32
      </application>
32
      </application>
33
   </extension>
33
   </extension>
(-)src/org/eclipse/equinox/internal/p2/updatesite/UpdateSitePublisherApplication.java (+40 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 Code 9 and others. All rights reserved. This
3
 * program and the accompanying materials are made available under the terms of
4
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
5
 * available at http://www.eclipse.org/legal/epl-v10.html
6
 * 
7
 * Contributors: 
8
 *   Code 9 - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.equinox.internal.p2.updatesite;
11
12
import java.net.URISyntaxException;
13
import org.eclipse.equinox.p2.publisher.*;
14
15
/**
16
 * <p>
17
 * This application generates meta-data/artifact repositories from a local update site.
18
 * The -source <localdir> parameter must specify the top-level directory containing the update site.
19
 * </p>
20
 */
21
public class UpdateSitePublisherApplication extends AbstractPublisherApplication {
22
23
	private String categoryQualifier = null;
24
25
	public UpdateSitePublisherApplication() {
26
		// nothing todo
27
	}
28
29
	protected void processParameter(String arg, String parameter, PublisherInfo pinfo) throws URISyntaxException {
30
		super.processParameter(arg, parameter, pinfo);
31
32
		if (arg.equalsIgnoreCase("-categoryQualifier")) //$NON-NLS-1$
33
			categoryQualifier = parameter;
34
35
	}
36
37
	protected IPublisherAction[] createActions() {
38
		return new IPublisherAction[] {new LocalUpdateSiteAction(source, categoryQualifier)};
39
	}
40
}

Return to bug 264389