Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.metadata.generator')
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/ProductQuery.java65
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/EclipseInstallGeneratorInfoProvider.java9
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Generator.java4
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IGeneratorInfo.java4
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/GeneratorTask.java6
5 files changed, 84 insertions, 4 deletions
diff --git a/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/ProductQuery.java b/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/ProductQuery.java
index 049a097de..8486d52b7 100644
--- a/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/ProductQuery.java
+++ b/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/p2/metadata/generator/ProductQuery.java
@@ -10,13 +10,16 @@
*******************************************************************************/
package org.eclipse.equinox.internal.p2.metadata.generator;
+import java.io.*;
import java.util.*;
import org.eclipse.equinox.internal.p2.metadata.generator.features.ProductFile;
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.internal.provisional.p2.metadata.generator.MetadataGeneratorHelper;
import org.eclipse.equinox.internal.provisional.p2.metadata.generator.Generator.GeneratorResult;
+import org.eclipse.equinox.internal.provisional.p2.query.Collector;
import org.eclipse.equinox.internal.provisional.p2.query.Query;
import org.eclipse.osgi.service.resolver.VersionRange;
+import org.osgi.framework.Version;
public class ProductQuery extends Query {
private static final String EQUINOX_LAUNCHER = "org.eclipse.equinox.launcher"; //$NON-NLS-1$
@@ -24,22 +27,80 @@ public class ProductQuery extends Query {
private final ProductFile product;
private final String flavor;
private final Map children = new HashMap();
+ private final String versionAdvice;
- public ProductQuery(ProductFile product, String flavor, Map configIUs) {
+ // Collector collects the largest version of each IU
+ private final Collector collector = new Collector() {
+ private final HashMap elements = new HashMap();
+
+ public boolean accept(Object object) {
+ if (!(object instanceof IInstallableUnit))
+ return true;
+ IInstallableUnit iu = (IInstallableUnit) object;
+ if (elements.containsKey(iu.getId())) {
+ IInstallableUnit existing = (IInstallableUnit) elements.get(iu.getId());
+ if (existing.getVersion().compareTo(iu.getVersion()) >= 0)
+ return true;
+ getList().remove(existing);
+ }
+ elements.put(iu.getId(), iu);
+ return super.accept(object);
+ }
+ };
+
+ public ProductQuery(ProductFile product, String flavor, Map configIUs, String versionAdvice) {
this.product = product;
this.flavor = flavor;
+ this.versionAdvice = versionAdvice;
initialize(configIUs);
}
+ public Collector getCollector() {
+ return this.collector;
+ }
+
+ private Properties loadVersions(String location) {
+ Properties properties = new Properties();
+ if (location == null)
+ return properties;
+ File file = new File(location);
+ if (file.exists()) {
+ InputStream stream = null;
+ try {
+ stream = new BufferedInputStream(new FileInputStream(file));
+ properties.load(stream);
+ } catch (IOException e) {
+ // nothing
+ } finally {
+ if (stream != null)
+ try {
+ stream.close();
+ } catch (IOException e) {
+ //nothing
+ }
+ }
+ }
+ return properties;
+ }
+
private void initialize(Map configIUs) {
boolean features = product.useFeatures();
+ Properties versions = loadVersions(versionAdvice);
+
List contents = features ? product.getFeatures() : product.getPlugins();
for (Iterator iterator = contents.iterator(); iterator.hasNext();) {
String item = (String) iterator.next();
+
+ VersionRange range = VersionRange.emptyRange;
+ if (versions.containsKey(item)) {
+ Version value = new Version(versions.getProperty(item));
+ range = new VersionRange(value, true, value, true);
+ }
+
if (features) // for features we want the group
item = MetadataGeneratorHelper.getTransformedId(item, false, true);
- children.put(item, VersionRange.emptyRange);
+ children.put(item, range);
if (configIUs.containsKey(item)) {
for (Iterator ius = ((Set) configIUs.get(item)).iterator(); ius.hasNext();) {
IInstallableUnit object = (IInstallableUnit) ius.next();
diff --git a/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/EclipseInstallGeneratorInfoProvider.java b/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/EclipseInstallGeneratorInfoProvider.java
index 4c6f25fb8..8429a147b 100644
--- a/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/EclipseInstallGeneratorInfoProvider.java
+++ b/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/EclipseInstallGeneratorInfoProvider.java
@@ -90,6 +90,7 @@ public class EclipseInstallGeneratorInfoProvider implements IGeneratorInfo {
private String rootVersion;
private String productFile = null;
private String launcherConfig;
+ private String versionAdvice;
private URL siteLocation;
@@ -502,4 +503,12 @@ public class EclipseInstallGeneratorInfoProvider implements IGeneratorInfo {
}
return false;
}
+
+ public String getVersionAdvice() {
+ return versionAdvice;
+ }
+
+ public void setVersionAdvice(String advice) {
+ this.versionAdvice = advice;
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Generator.java b/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Generator.java
index baabc85c4..5ba052e20 100644
--- a/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Generator.java
+++ b/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/Generator.java
@@ -143,8 +143,8 @@ public class Generator {
GeneratorResult productContents = new GeneratorResult();
- ProductQuery query = new ProductQuery(productFile, info.getFlavor(), result.configurationIUs);
- Collector collector = info.getMetadataRepository().query(query, new Collector(), null);
+ ProductQuery query = new ProductQuery(productFile, info.getFlavor(), result.configurationIUs, info.getVersionAdvice());
+ Collector collector = info.getMetadataRepository().query(query, query.getCollector(), null);
for (Iterator iterator = collector.iterator(); iterator.hasNext();) {
productContents.rootIUs.add(iterator.next());
}
diff --git a/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IGeneratorInfo.java b/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IGeneratorInfo.java
index a013391df..0a4f2acd6 100644
--- a/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IGeneratorInfo.java
+++ b/bundles/org.eclipse.equinox.p2.metadata.generator/src/org/eclipse/equinox/internal/provisional/p2/metadata/generator/IGeneratorInfo.java
@@ -88,6 +88,8 @@ public interface IGeneratorInfo {
public String getProductFile();
+ public String getVersionAdvice();
+
/**
* Returns the location of the site.xml file, or <code>null</code> if not
* generating for an update site.
@@ -115,6 +117,8 @@ public interface IGeneratorInfo {
public void setRootId(String value);
+ public void setVersionAdvice(String advice);
+
// TODO: This is kind of ugly. It's purpose is to allow us to craft CUs that we know about and need for our build
// We should try to replace this with something more generic prior to release
public Collection getOtherIUs();
diff --git a/bundles/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/GeneratorTask.java b/bundles/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/GeneratorTask.java
index c4a9e048a..663735cf5 100644
--- a/bundles/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/GeneratorTask.java
+++ b/bundles/org.eclipse.equinox.p2.metadata.generator/src_ant/org/eclipse/equinox/internal/p2/metadata/generator/ant/GeneratorTask.java
@@ -179,4 +179,10 @@ public class GeneratorTask extends Task {
public void setMode(String mode) {
this.mode = mode;
}
+
+ public void setVersionAdvice(String advice) {
+ if (provider == null)
+ provider = new EclipseInstallGeneratorInfoProvider();
+ provider.setVersionAdvice(advice);
+ }
}

Back to the top