Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java47
-rw-r--r--bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java3
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java77
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductContentTypeTest.java52
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/testData/ProductActionTest/productFileActionTest.product11
5 files changed, 142 insertions, 48 deletions
diff --git a/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java b/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java
index bca948e49..452db5300 100644
--- a/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java
+++ b/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/ProductAction.java
@@ -16,12 +16,14 @@ import java.util.*;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.publisher.eclipse.*;
import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.metadata.expression.IMatchExpression;
import org.eclipse.equinox.p2.publisher.*;
import org.eclipse.equinox.p2.publisher.actions.*;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.internal.publishing.Activator;
public class ProductAction extends AbstractPublisherAction {
+ protected static final String DEFAULT_EE_CAPABILITY_NAME = "JavaSE"; //$NON-NLS-1$
protected String source;
protected String id;
protected Version version;
@@ -61,9 +63,9 @@ public class ProductAction extends AbstractPublisherAction {
actions.add(createApplicationExecutableAction(info.getConfigurations()));
// add the actions that just configure things.
actions.add(createConfigCUsAction());
- actions.add(createJREAction());
actions.add(createDefaultCUsAction());
actions.add(createRootIUAction());
+ actions.add(createJREAction());
return actions.toArray(new IPublisherAction[actions.size()]);
}
@@ -76,9 +78,50 @@ public class ProductAction extends AbstractPublisherAction {
}
protected IPublisherAction createRootIUAction() {
- return new RootIUAction(id, version, name);
+ return new RootIUAction(id, version, name) {
+ @Override
+ protected Collection<IRequirement> createIURequirements(Collection<? extends IVersionedId> children) {
+ Collection<IRequirement> res = new ArrayList<>(super.createIURequirements(children));
+ Set<String> processedOs = new HashSet<>();
+ Set<String> osWithUndefinedVM = new HashSet<>();
+ for (String configSpec : info.getConfigurations()) {
+ String os = parseConfigSpec(configSpec)[1];
+ if (processedOs.contains(os)) {
+ continue;
+ }
+ processedOs.add(os);
+ String vm = product.getVM(os);
+ if (vm != null) {
+ IMatchExpression<IInstallableUnit> filter = createFilterSpec(createConfigSpec(CONFIG_ANY, os, CONFIG_ANY));
+ String[] segments = vm.split("/"); //$NON-NLS-1$
+ String ee = segments[segments.length - 1];
+ String[] eeSegments = ee.split("-"); //$NON-NLS-1$
+ String eeName = eeSegments[0].replace('%', '/');
+ String eeVersion = eeSegments[1];
+ res.add(MetadataFactory.createRequirement(JREAction.NAMESPACE_OSGI_EE, eeName, VersionRange.create('[' + eeVersion + ',' + eeVersion + ']'), filter, false, false));
+ } else {
+ osWithUndefinedVM.add(os);
+ }
+ }
+ if (osWithUndefinedVM.equals(processedOs)) {
+ res.add(MetadataFactory.createRequirement(JREAction.NAMESPACE_OSGI_EE, DEFAULT_EE_CAPABILITY_NAME, VersionRange.create("0.0.0"), null, false, false)); //$NON-NLS-1$
+ } else {
+ osWithUndefinedVM.forEach(os -> {
+ IMatchExpression<IInstallableUnit> filter = createFilterSpec(createConfigSpec(CONFIG_ANY, os, CONFIG_ANY));
+ res.add(MetadataFactory.createRequirement(JREAction.NAMESPACE_OSGI_EE, DEFAULT_EE_CAPABILITY_NAME, VersionRange.create("0.0.0"), filter, false, false)); //$NON-NLS-1$
+ });
+ }
+ return res;
+ }
+ };
}
+ /*protected Collection<IRequirement> createJRERequirements() {
+ VersionRange jreRange = VersionRange.create(versionRange);
+ MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "a.jre.javase", jreRange)));
+ MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "config.a.jre.javase", jreRange)));
+ }*/
+
protected IPublisherAction createConfigCUsAction() {
return new ConfigCUsAction(info, flavor, id, version);
}
diff --git a/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java b/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java
index bab154b5b..46f60f99c 100644
--- a/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java
+++ b/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/actions/JREAction.java
@@ -56,8 +56,7 @@ public class JREAction extends AbstractPublisherAction {
this.environment = environment;
}
- @Override
- public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
+ @Override public IStatus perform(IPublisherInfo publisherInfo, IPublisherResult results, IProgressMonitor monitor) {
String problemMessage = NLS.bind(Messages.message_problemsWhilePublishingEE, jreLocation != null ? jreLocation : environment);
resultStatus = new MultiStatus(Activator.ID, 0, problemMessage, null);
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java
index f7cd53df8..b44036e87 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductActionTest.java
@@ -12,20 +12,38 @@
package org.eclipse.equinox.p2.tests.publisher.actions;
import static org.easymock.EasyMock.createNiceMock;
-import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.*;
-import static org.hamcrest.CoreMatchers.*;
+import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.errorStatus;
+import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.okStatus;
+import static org.eclipse.equinox.p2.tests.publisher.actions.StatusMatchers.statusWithMessageWhich;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import java.io.File;
import java.io.IOException;
import java.net.URI;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.equinox.internal.p2.metadata.*;
+import org.eclipse.equinox.internal.p2.metadata.IRequiredCapability;
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
+import org.eclipse.equinox.internal.p2.metadata.RequiredCapability;
import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
-import org.eclipse.equinox.p2.metadata.*;
-import org.eclipse.equinox.p2.publisher.*;
+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.IInstallableUnitFragment;
+import org.eclipse.equinox.p2.metadata.IRequirement;
+import org.eclipse.equinox.p2.metadata.ITouchpointData;
+import org.eclipse.equinox.p2.metadata.IUpdateDescriptor;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.publisher.AbstractPublisherAction;
+import org.eclipse.equinox.p2.publisher.IPublisherInfo;
+import org.eclipse.equinox.p2.publisher.IPublisherResult;
+import org.eclipse.equinox.p2.publisher.PublisherInfo;
+import org.eclipse.equinox.p2.publisher.actions.JREAction;
import org.eclipse.equinox.p2.publisher.actions.QueryableFilterAdvice;
import org.eclipse.equinox.p2.publisher.eclipse.IConfigAdvice;
import org.eclipse.equinox.p2.publisher.eclipse.ProductAction;
@@ -49,20 +67,17 @@ public class ProductActionTest extends ActionTest {
String source = "";
protected TestArtifactRepository artifactRepository = new TestArtifactRepository(getAgent());
- @Override
- protected IPublisherInfo createPublisherInfoMock() {
+ @Override protected IPublisherInfo createPublisherInfoMock() {
//override to create a nice mock, because we don't care about other method calls.
return createNiceMock(IPublisherInfo.class);
}
- @Override
- public void setUp() throws Exception {
+ @Override public void setUp() throws Exception {
setupPublisherInfo();
setupPublisherResult();
}
- @Override
- public void setupPublisherInfo() {
+ @Override public void setupPublisherInfo() {
PublisherInfo publisherInfoImpl = new PublisherInfo();
publisherInfoImpl.setArtifactRepository(artifactRepository);
publisherInfoImpl.setArtifactOptions(IPublisherInfo.A_PUBLISH);
@@ -339,6 +354,44 @@ public class ProductActionTest extends ActionTest {
// TODO the message should have a code identifying it
}
+ public void testJREIncluded() throws Exception {
+ ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "brandedProduct/branded.product").toString());
+ addContextIU("org.eclipse.platform.feature.group", "1.2.3");
+
+ performProductAction(productFile);
+ Collection<IInstallableUnit> ius = publisherResult.getIUs("branded.product", IPublisherResult.NON_ROOT);
+ assertEquals(1, ius.size());
+ assertEquals("Missing a.jre.javase", 1, publisherResult.getIUs("a.jre.javase", IPublisherResult.ROOT).size());
+ assertEquals("Missing config.a.jre.javase", 1, publisherResult.getIUs("config.a.jre.javase", IPublisherResult.ROOT).size());
+ }
+
+ public void testRequiredEEAsSpecified() throws Exception {
+ ProductFile productFile = new ProductFile(TestData.getFile("ProductActionTest", "productFileActionTest.product").toString());
+ addContextIU("org.eclipse.core.commands", "5.0.0");
+
+ performProductAction(productFile);
+ Collection<IInstallableUnit> ius = publisherResult.getIUs("SampleProduct", IPublisherResult.NON_ROOT);
+ assertEquals(1, ius.size());
+ IInstallableUnit productIU = ius.iterator().next();
+ IInstallableUnit aJre = publisherResult.getIUs("a.jre.javase", IPublisherResult.ROOT).iterator().next();
+ boolean found = false;
+ for (IRequirement req : productIU.getRequirements()) {
+ if (req instanceof RequiredCapability) {
+ RequiredCapability required = (RequiredCapability) req;
+ if (JREAction.NAMESPACE_OSGI_EE.equals(required.getNamespace())) {
+ found = true;
+ assertEquals("OSGi/Minimum", required.getName());
+ assertEquals("1.0.0", required.getRange().getMinimum().toString());
+ assertEquals("1.0.0", required.getRange().getMaximum().toString());
+ assertTrue(req.isMatch(aJre));
+ } else if (required.getName().contains("a.jre")) {
+ fail("instead of unit requirement, should use a osgi.ee requirement");
+ }
+ }
+ }
+ assertTrue(found);
+ }
+
private void performProductAction(ProductFile productFile) {
IStatus status = performProductActionAndReturnStatus(productFile);
assertThat(status, is(okStatus()));
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductContentTypeTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductContentTypeTest.java
index d85619dca..18263705d 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductContentTypeTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/ProductContentTypeTest.java
@@ -40,12 +40,12 @@ public class ProductContentTypeTest extends ActionTest {
private static final String TEST_DATA_FOLDER = "ProductContentTypeTest";
private static final String flavor = "tooling";
- private List<IInstallableUnit> cusList;
+ private List<IInstallableUnit> requiredUnits;
+ private List<IInstallableUnit> additionalPublishedUnits;
private IInstallableUnit featureIU = createIU("TestFeature.feature.group");
private IInstallableUnit bundleIU = createIU("TestBundle");
- @Override
- public void setUp() throws Exception {
+ @Override public void setUp() throws Exception {
setupPublisherResult();
initCUsList();
}
@@ -53,28 +53,28 @@ public class ProductContentTypeTest extends ActionTest {
/**
* Publish product with attribute <code>type="bundles"</code>.
* Check that the generated product IU
- * requires the default CU list + CU for the product + bundle IU.
+ * requires the default CU list + CU for the product + bundle IU + EE requirement.
*/
public void test01PublishWithBundle() throws Exception {
- testTemplate("ProductWithBundle.product", "1", cusList.size() + 2, bundleIU);
+ testTemplate("ProductWithBundle.product", "1", requiredUnits.size() + 3, bundleIU);
}
/**
* Publish product with attribute <code>type="features"</code>.
* Check that the generated product IU
- * requires the default CU list + CU for the product + feature IU.
+ * requires the default CU list + CU for the product + feature IU + EE requirement.
*/
public void test02PublishWithFeature() throws Exception {
- testTemplate("ProductWithFeature.product", "1", cusList.size() + 2, featureIU);
+ testTemplate("ProductWithFeature.product", "1", requiredUnits.size() + 3, featureIU);
}
/**
* Publish product with attribute <code>type="mixed"</code>.
* Check that the generated product IU
- * requires the default CU list + CU for the product + bundle IU + feature IU.
+ * requires the default CU list + CU for the product + bundle IU + feature IU + EE requirement.
*/
public void test03PublishWithMixedContent() throws Exception {
- testTemplate("MixedContentProduct.product", "1", cusList.size() + 3, bundleIU, featureIU);
+ testTemplate("MixedContentProduct.product", "1", requiredUnits.size() + 4, bundleIU, featureIU);
}
/**
@@ -106,33 +106,34 @@ public class ProductContentTypeTest extends ActionTest {
/**
* Publish product with attributes <code>type="bundles"</code> and <code>useFeatures="true"</code>.
* Check that the generated product IU
- * requires the default CU list + CU for the product + bundle IU.
+ * requires the default CU list + CU for the product + bundle IU + EE requirement.
*/
public void test06OverrideUseFeaturesAttr() throws Exception {
- testTemplate("OverrideUseFeaturesAttr.product", "1", cusList.size() + 2, bundleIU);
+ testTemplate("OverrideUseFeaturesAttr.product", "1", requiredUnits.size() + 3, bundleIU);
}
/**
* Publish product with attributes <code>type="mixed"</code> and <code>useFeatures="true"</code>.
* Check that the generated product IU
- * requires the default CU list + CU for the product + bundle IU + feature IU.
+ * requires the default CU list + CU for the product + bundle IU + feature IU + EE requirement.
*/
public void test07OverrideUseFeaturesAttr2() throws Exception {
- testTemplate("OverrideUseFeaturesAttr2.product", "1", cusList.size() + 3, bundleIU, featureIU);
+ testTemplate("OverrideUseFeaturesAttr2.product", "1", requiredUnits.size() + 4, bundleIU, featureIU);
}
private void initCUsList() {
- cusList = new ArrayList<>();
- cusList.add(createIU(flavor + ".source.default"));
- cusList.add(createIU(flavor + ".osgi.bundle.default"));
- cusList.add(createIU(flavor + ".org.eclipse.update.feature.default"));
- cusList.add(createIU("a.jre.javase", Version.create("9.0")));
- cusList.add(createIU("config.a.jre.javase", Version.create("9.0")));
+ requiredUnits = new ArrayList<>(3);
+ requiredUnits.add(createIU(flavor + ".source.default"));
+ requiredUnits.add(createIU(flavor + ".osgi.bundle.default"));
+ requiredUnits.add(createIU(flavor + ".org.eclipse.update.feature.default"));
+ additionalPublishedUnits = new ArrayList<>(2);
+ additionalPublishedUnits.add(createIU("a.jre.javase", Version.create("9.0")));
+ additionalPublishedUnits.add(createIU("config.a.jre.javase", Version.create("9.0")));
}
private void testTemplate(String productFileName, String productVersion, int expectedRequirementsSize, IInstallableUnit... requiredInstallableUnits) throws Exception {
- for (int i = 0; i < requiredInstallableUnits.length; i++) {
- publisherResult.addIU(requiredInstallableUnits[i], IPublisherResult.NON_ROOT);
+ for (IInstallableUnit requiredUnit : requiredInstallableUnits) {
+ publisherResult.addIU(requiredUnit, IPublisherResult.NON_ROOT);
}
File productFileLocation = TestData.getFile(TEST_DATA_FOLDER, productFileName);
@@ -156,8 +157,7 @@ public class ProductContentTypeTest extends ActionTest {
}
private void verifyRequirementsForConfigurationUnits(Collection<IRequirement> requirements, String productName, String productVersion) {
-
- List<IInstallableUnit> cusListCopy = new ArrayList<>(cusList);
+ List<IInstallableUnit> cusListCopy = new ArrayList<>(requiredUnits);
cusListCopy.add(createIU(flavor + productName + ".configuration", Version.create(productVersion)));
for (Iterator<IInstallableUnit> cusIterator = cusListCopy.iterator(); cusIterator.hasNext();) {
IInstallableUnit cu = cusIterator.next();
@@ -165,19 +165,15 @@ public class ProductContentTypeTest extends ActionTest {
cusIterator.remove();
}
}
-
assertTrue("Some of the default configuration units are not included in the product - " + cusListCopy, cusListCopy.isEmpty());
}
private boolean verifyRequirement(Collection<IRequirement> requirements, IInstallableUnit iu) {
-
- for (Iterator<IRequirement> iterator = requirements.iterator(); iterator.hasNext();) {
- IRequirement requirement = iterator.next();
+ for (IRequirement requirement : requirements) {
if (requirement.isMatch(iu)) {
return true;
}
}
-
return false;
}
} \ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/ProductActionTest/productFileActionTest.product b/bundles/org.eclipse.equinox.p2.tests/testData/ProductActionTest/productFileActionTest.product
index 5890a0cc6..e7ffcb301 100644
--- a/bundles/org.eclipse.equinox.p2.tests/testData/ProductActionTest/productFileActionTest.product
+++ b/bundles/org.eclipse.equinox.p2.tests/testData/ProductActionTest/productFileActionTest.product
@@ -1,20 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<?pde version="3.5"?>
-<product name="SampleProduct" version="1.0.0" useFeatures="false" includeLaunchers="true">
+<product name="SampleProduct" uid="SampleProduct" version="1.0.0" useFeatures="false" includeLaunchers="true">
<configIni use="">
</configIni>
<launcherArgs>
- <programArgs>-product &quot;com,ma&quot;</programArgs>
- <vmArgs>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8272</vmArgs>
+ <programArgs>-product &quot;com,ma&quot;
+ </programArgs>
+ <vmArgs>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8272
+ </vmArgs>
</launcherArgs>
<windowImages/>
<launcher>
- <solaris/>
<win useIco="false">
<bmp
winSmallLow="icon.bmp"/>
@@ -22,6 +23,8 @@
</launcher>
<vm>
+ <linux include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-9</linux>
+ <windows include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/OSGi%Minimum-1.0</windows>
</vm>
<plugins>

Back to the top