diff options
author | Eike Stepper | 2014-04-08 12:06:21 +0000 |
---|---|---|
committer | Eike Stepper | 2014-04-08 12:06:21 +0000 |
commit | d1f3dddffdc4b8194219652681a1653c7aa138ae (patch) | |
tree | 1f2e3429099b2a27076736acafdbd1088f498f79 | |
parent | 85a4c246fe88e8f0fa17475cf3869a9e9227df71 (diff) | |
download | cdo-d1f3dddffdc4b8194219652681a1653c7aa138ae.tar.gz cdo-d1f3dddffdc4b8194219652681a1653c7aa138ae.tar.xz cdo-d1f3dddffdc4b8194219652681a1653c7aa138ae.zip |
Improve setup related models; handle .qualifier in features
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.setup/setups/releng.setup | 2 | ||||
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/IUGenerator.java | 75 |
2 files changed, 75 insertions, 2 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/setups/releng.setup b/plugins/org.eclipse.emf.cdo.releng.setup/setups/releng.setup index f2dd9fb89c..d394ee9e2f 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/setups/releng.setup +++ b/plugins/org.eclipse.emf.cdo.releng.setup/setups/releng.setup @@ -56,7 +56,7 @@ </predicates> </sourceLocators> <repositoryLists name="Luna Dependencies"> - <p2Repositories url="http://hudson.eclipse.org/hudson/job/emf-cdo-integration/lastSuccessfulBuild/artifact"/> + <p2Repositories url="https://hudson.eclipse.org/cdo/job/emf-cdo-integration/lastSuccessfulBuild/artifact"/> <p2Repositories url="http://download.eclipse.org/eclipse/updates/4.4milestones"/> <p2Repositories url="http://download.eclipse.org/modeling/emf/emf/updates/2.10milestones"/> <p2Repositories url="http://download.eclipse.org/modeling/emf/cdo/orbit/latest-S"/> diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/IUGenerator.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/IUGenerator.java index c0a3eaf82b..dc65793a55 100644 --- a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/IUGenerator.java +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/internal/setup/targlets/IUGenerator.java @@ -11,8 +11,14 @@ package org.eclipse.emf.cdo.releng.internal.setup.targlets; import org.eclipse.equinox.internal.p2.metadata.InstallableUnit; +import org.eclipse.equinox.internal.p2.metadata.OSGiVersion; +import org.eclipse.equinox.internal.p2.metadata.RequiredCapability; import org.eclipse.equinox.p2.metadata.IArtifactKey; import org.eclipse.equinox.p2.metadata.IInstallableUnit; +import org.eclipse.equinox.p2.metadata.IRequirement; +import org.eclipse.equinox.p2.metadata.MetadataFactory; +import org.eclipse.equinox.p2.metadata.Version; +import org.eclipse.equinox.p2.metadata.VersionRange; import org.eclipse.equinox.p2.publisher.PublisherInfo; import org.eclipse.equinox.p2.publisher.eclipse.BundlesAction; import org.eclipse.equinox.p2.publisher.eclipse.Feature; @@ -106,7 +112,74 @@ public interface IUGenerator } List<IInstallableUnit> childIUs = Collections.emptyList(); - return createGroupIU(feature, childIUs, info); + InstallableUnit iu = (InstallableUnit)createGroupIU(feature, childIUs, info); + List<IRequirement> requirements = iu.getRequirements(); + + String licenseFeature = feature.getLicenseFeature(); + String licenseFeatureVersion = feature.getLicenseFeatureVersion(); + boolean hasLicenseFeature = licenseFeature != null && licenseFeatureVersion != null; + + int size = requirements.size(); + IRequirement[] newRequirements = new IRequirement[size + (hasLicenseFeature ? 1 : 0)]; + + if (hasLicenseFeature) + { + Version osgiVersion = OSGiVersion.create(licenseFeatureVersion); + VersionRange osgiRange = new VersionRange(osgiVersion, true, osgiVersion, true); + + VersionRange adjustedRange = adjustQualifier(osgiRange); + if (adjustedRange != null) + { + osgiRange = adjustedRange; + } + + IRequirement requirement = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, licenseFeature, + osgiRange, null, false, false); + newRequirements[size] = requirement; + } + + // Adjust childIU requirements to support possible .qualifier specifications + for (int i = 0; i < size; i++) + { + IRequirement requirement = requirements.get(i); + if (requirement instanceof RequiredCapability) + { + RequiredCapability capability = (RequiredCapability)requirement; + VersionRange range = adjustQualifier(capability.getRange()); + if (range != null) + { + requirement = MetadataFactory.createRequirement(capability.getNamespace(), capability.getName(), range, + capability.getFilter(), capability.getMin() == 0, capability.getMax() > 1); + } + } + + newRequirements[i] = requirement; + } + + iu.setRequiredCapabilities(newRequirements); + return iu; + } + + private static VersionRange adjustQualifier(VersionRange range) + { + Version minimum = range.getMinimum(); + if (minimum instanceof OSGiVersion) + { + OSGiVersion osgiVersion = (OSGiVersion)minimum; + if (osgiVersion.equals(range.getMaximum())) + { + if ("qualifier".equals(osgiVersion.getQualifier())) + { + minimum = OSGiVersion.createOSGi(osgiVersion.getMajor(), osgiVersion.getMinor(), osgiVersion.getMicro()); + Version maximum = OSGiVersion.createOSGi(osgiVersion.getMajor(), osgiVersion.getMinor(), + osgiVersion.getMicro() + 1); + + return new VersionRange(minimum, true, maximum, false); + } + } + } + + return null; } } } |