Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-07-22 03:58:47 +0000
committerEike Stepper2012-07-22 03:58:47 +0000
commit61b27f3e226881ff58e6abf32543ed024403a489 (patch)
treedb146b5766ec22dce942ceef79327a22b571a247
parent23cfe3d7309d3826003ade17cdefa8369fbe5c4f (diff)
downloadcdo-61b27f3e226881ff58e6abf32543ed024403a489.tar.gz
cdo-61b27f3e226881ff58e6abf32543ed024403a489.tar.xz
cdo-61b27f3e226881ff58e6abf32543ed024403a489.zip
Add feature validation
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.version.digest.ui/src/org/eclipse/emf/cdo/releng/version/digest/ui/CreateDigestAction.java29
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.version.digest/src/org/eclipse/emf/cdo/releng/version/digest/DigestValidator.java62
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Release.java55
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java133
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionValidator.java4
5 files changed, 214 insertions, 69 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.version.digest.ui/src/org/eclipse/emf/cdo/releng/version/digest/ui/CreateDigestAction.java b/plugins/org.eclipse.emf.cdo.releng.version.digest.ui/src/org/eclipse/emf/cdo/releng/version/digest/ui/CreateDigestAction.java
index 20b4aa9916..cb11376111 100644
--- a/plugins/org.eclipse.emf.cdo.releng.version.digest.ui/src/org/eclipse/emf/cdo/releng/version/digest/ui/CreateDigestAction.java
+++ b/plugins/org.eclipse.emf.cdo.releng.version.digest.ui/src/org/eclipse/emf/cdo/releng/version/digest/ui/CreateDigestAction.java
@@ -12,8 +12,8 @@ package org.eclipse.emf.cdo.releng.version.digest.ui;
import org.eclipse.emf.cdo.releng.version.Release;
import org.eclipse.emf.cdo.releng.version.Release.Element;
-import org.eclipse.emf.cdo.releng.version.Release.Element.Type;
import org.eclipse.emf.cdo.releng.version.ReleaseManager;
+import org.eclipse.emf.cdo.releng.version.VersionBuilder;
import org.eclipse.emf.cdo.releng.version.digest.DigestValidator;
import org.eclipse.emf.cdo.releng.version.digest.DigestValidatorState;
@@ -29,9 +29,7 @@ import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.core.IModel;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
@@ -129,9 +127,9 @@ public class CreateDigestAction implements IObjectActionDelegate
try
{
Map<String, byte[]> result = new HashMap<String, byte[]>();
- for (Entry<String, Element> entry : release.getElements().entrySet())
+ for (Entry<Element, Element> entry : release.getElements().entrySet())
{
- String name = entry.getKey();
+ String name = entry.getKey().getName();
monitor.subTask(name);
try
@@ -139,27 +137,26 @@ public class CreateDigestAction implements IObjectActionDelegate
try
{
Element element = entry.getValue();
- if (element.getType() != Type.PLUGIN || element.getName().endsWith(".source"))
+ if (element.getName().endsWith(".source"))
{
continue;
}
- IPluginModelBase pluginModel = PluginRegistry.findModel(name);
- if (pluginModel == null)
+ IModel componentModel = VersionBuilder.getComponentModel(element);
+ if (componentModel == null)
{
- warnings.add(name + ": Plugin not found");
+ warnings.add(name + ": Component not found");
continue;
}
- IResource resource = pluginModel.getUnderlyingResource();
+ IResource resource = componentModel.getUnderlyingResource();
if (resource == null)
{
- warnings.add(name + ": Plugin is not in workspace");
+ warnings.add(name + ": Component is not in workspace");
continue;
}
- BundleDescription description = pluginModel.getBundleDescription();
- Version version = description.getVersion();
+ Version version = VersionBuilder.getComponentVersion(componentModel);
version = new Version(version.getMajor(), version.getMinor(), version.getMicro());
if (!element.getVersion().equals(version))
@@ -169,8 +166,8 @@ public class CreateDigestAction implements IObjectActionDelegate
// TODO Determine validator class from .project
DigestValidator validator = new DigestValidator.BuildModel();
- validator.beforeValidation(null, pluginModel);
- DigestValidatorState state = validator.validateFull(resource.getProject(), null, pluginModel,
+ validator.beforeValidation(null, componentModel);
+ DigestValidatorState state = validator.validateFull(resource.getProject(), null, componentModel,
new NullProgressMonitor());
validator.afterValidation(state);
result.put(state.getName(), state.getDigest());
diff --git a/plugins/org.eclipse.emf.cdo.releng.version.digest/src/org/eclipse/emf/cdo/releng/version/digest/DigestValidator.java b/plugins/org.eclipse.emf.cdo.releng.version.digest/src/org/eclipse/emf/cdo/releng/version/digest/DigestValidator.java
index 14fce0f4c9..a5331a54d3 100644
--- a/plugins/org.eclipse.emf.cdo.releng.version.digest/src/org/eclipse/emf/cdo/releng/version/digest/DigestValidator.java
+++ b/plugins/org.eclipse.emf.cdo.releng.version.digest/src/org/eclipse/emf/cdo/releng/version/digest/DigestValidator.java
@@ -25,11 +25,12 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
+import org.eclipse.pde.core.IModel;
import org.eclipse.pde.core.build.IBuild;
import org.eclipse.pde.core.build.IBuildEntry;
import org.eclipse.pde.core.build.IBuildModel;
import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
import java.io.FilterInputStream;
import java.io.IOException;
@@ -57,20 +58,20 @@ public class DigestValidator extends VersionValidator
@Override
public void updateBuildState(BuildState buildState, String releasePath, Release release, IProject project,
- IResourceDelta delta, IPluginModelBase pluginModel, IProgressMonitor monitor) throws Exception
+ IResourceDelta delta, IModel componentModel, IProgressMonitor monitor) throws Exception
{
DigestValidatorState validatorState = (DigestValidatorState)buildState.getValidatorState();
- beforeValidation(validatorState, pluginModel);
+ beforeValidation(validatorState, componentModel);
if (validatorState == null || delta == null)
{
VersionBuilder.trace("Digest: Full validation...");
buildState.setValidatorState(null);
- validatorState = validateFull(project, null, pluginModel, monitor);
+ validatorState = validateFull(project, null, componentModel, monitor);
}
else
{
VersionBuilder.trace("Digest: Delta validation...");
- validatorState = validateDelta(delta, validatorState, pluginModel, monitor);
+ validatorState = validateDelta(delta, validatorState, componentModel, monitor);
}
afterValidation(validatorState);
@@ -89,8 +90,8 @@ public class DigestValidator extends VersionValidator
buildState.setValidatorState(validatorState);
}
- public DigestValidatorState validateFull(IResource resource, DigestValidatorState parentState,
- IPluginModelBase pluginModel, IProgressMonitor monitor) throws Exception
+ public DigestValidatorState validateFull(IResource resource, DigestValidatorState parentState, IModel componentModel,
+ IProgressMonitor monitor) throws Exception
{
if (resource.getType() != IResource.PROJECT && !isConsidered(resource))
{
@@ -108,7 +109,7 @@ public class DigestValidator extends VersionValidator
List<DigestValidatorState> memberStates = new ArrayList<DigestValidatorState>();
for (IResource member : container.members())
{
- DigestValidatorState memberState = validateFull(member, result, pluginModel, monitor);
+ DigestValidatorState memberState = validateFull(member, result, componentModel, monitor);
if (memberState != null)
{
memberStates.add(memberState);
@@ -132,7 +133,7 @@ public class DigestValidator extends VersionValidator
}
public DigestValidatorState validateDelta(IResourceDelta delta, DigestValidatorState validatorState,
- IPluginModelBase pluginModel, IProgressMonitor monitor) throws Exception
+ IModel componentModel, IProgressMonitor monitor) throws Exception
{
IResource resource = delta.getResource();
if (!resource.exists() || resource.getType() != IResource.PROJECT && !isConsidered(resource))
@@ -156,7 +157,7 @@ public class DigestValidator extends VersionValidator
{
IResource memberResource = memberDelta.getResource();
DigestValidatorState memberState = validatorState.getChild(memberResource.getName());
- DigestValidatorState newMemberState = validateDelta(memberDelta, memberState, pluginModel, monitor);
+ DigestValidatorState newMemberState = validateDelta(memberDelta, memberState, componentModel, monitor);
if (newMemberState != null)
{
newMemberState.setParent(result);
@@ -204,7 +205,7 @@ public class DigestValidator extends VersionValidator
return result;
}
- public void beforeValidation(DigestValidatorState validatorState, IPluginModelBase pluginModel) throws Exception
+ public void beforeValidation(DigestValidatorState validatorState, IModel componentModel) throws Exception
{
}
@@ -389,12 +390,12 @@ public class DigestValidator extends VersionValidator
}
@Override
- public void beforeValidation(DigestValidatorState validatorState, IPluginModelBase pluginModel) throws Exception
+ public void beforeValidation(DigestValidatorState validatorState, IModel componentModel) throws Exception
{
considered.clear();
considered.add("");
- IBuild build = getBuild(pluginModel);
+ IBuild build = getBuild(componentModel);
IBuildEntry binIncludes = build.getEntry(IBuildEntry.BIN_INCLUDES);
if (binIncludes != null)
{
@@ -440,36 +441,43 @@ public class DigestValidator extends VersionValidator
}
@SuppressWarnings("restriction")
- private IBuild getBuild(IPluginModelBase pluginModel) throws CoreException
+ private IBuild getBuild(IModel componentModel) throws CoreException
{
- IBuildModel buildModel = PluginRegistry.createBuildModel(pluginModel);
- if (buildModel == null)
+ IProject project = componentModel.getUnderlyingResource().getProject();
+ IFile buildFile = org.eclipse.pde.internal.core.project.PDEProject.getBuildProperties(project);
+
+ IBuildModel buildModel = null;
+ if (buildFile.exists())
{
- IProject project = pluginModel.getUnderlyingResource().getProject();
- IFile buildFile = org.eclipse.pde.internal.core.project.PDEProject.getBuildProperties(project);
- if (buildFile.exists())
- {
- buildModel = new org.eclipse.pde.internal.core.build.WorkspaceBuildModel(buildFile);
- buildModel.load();
- }
+ buildModel = new org.eclipse.pde.internal.core.build.WorkspaceBuildModel(buildFile);
+ buildModel.load();
}
if (buildModel == null)
{
- throw new IllegalStateException("Could not determine build model for "
- + pluginModel.getBundleDescription().getSymbolicName());
+ throw new IllegalStateException("Could not determine build model for " + getName(componentModel));
}
IBuild build = buildModel.getBuild();
if (build == null)
{
- throw new IllegalStateException("Could not determine build model for "
- + pluginModel.getBundleDescription().getSymbolicName());
+ throw new IllegalStateException("Could not determine build model for " + getName(componentModel));
}
return build;
}
+ private String getName(IModel componentModel)
+ {
+ if (componentModel instanceof IPluginModelBase)
+ {
+ IPluginModelBase pluginModel = (IPluginModelBase)componentModel;
+ return pluginModel.getBundleDescription().getSymbolicName();
+ }
+
+ return ((IFeatureModel)componentModel).getFeature().getId();
+ }
+
private void consider(String path)
{
if (path.endsWith("/"))
diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Release.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Release.java
index c8d874f937..ed248ba42c 100644
--- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Release.java
+++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Release.java
@@ -43,7 +43,7 @@ public class Release
private String repository;
- private Map<String, Element> elements = new HashMap<String, Element>();
+ private Map<Element, Element> elements = new HashMap<Element, Element>();
Release(SAXParser parser, IFile file) throws CoreException, IOException, SAXException
{
@@ -93,7 +93,7 @@ public class Release
return repository;
}
- public Map<String, Element> getElements()
+ public Map<Element, Element> getElements()
{
return Collections.unmodifiableMap(elements);
}
@@ -136,6 +136,55 @@ public class Release
return version;
}
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (name == null ? 0 : name.hashCode());
+ result = prime * result + (getType() == null ? 0 : getType().hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+
+ if (obj == null)
+ {
+ return false;
+ }
+
+ if (!(obj instanceof Element))
+ {
+ return false;
+ }
+
+ Element other = (Element)obj;
+ if (name == null)
+ {
+ if (other.name != null)
+ {
+ return false;
+ }
+ }
+ else if (!name.equals(other.name))
+ {
+ return false;
+ }
+
+ if (getType() != other.getType())
+ {
+ return false;
+ }
+
+ return true;
+ }
+
public Type getType()
{
return type;
@@ -175,7 +224,7 @@ public class Release
Type type = getType(attributes, "type");
Element element = new Element(name, version, type);
- elements.put(name, element);
+ elements.put(element, element);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java
index 1fd264505d..8a6ec394c2 100644
--- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java
+++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java
@@ -27,8 +27,13 @@ import org.eclipse.osgi.service.resolver.BundleSpecification;
import org.eclipse.osgi.service.resolver.ExportPackageDescription;
import org.eclipse.osgi.service.resolver.ImportPackageSpecification;
import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.pde.core.IModel;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.internal.core.FeatureModelManager;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.ifeature.IFeature;
+import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
import org.osgi.framework.Version;
@@ -54,12 +59,15 @@ public class VersionBuilder extends IncrementalProjectBuilder
private static final Path MANIFEST_PATH = new Path("META-INF/MANIFEST.MF");
+ private static final Path FEATURE_PATH = new Path("feature.xml");
+
private Release release;
public VersionBuilder()
{
}
+ @SuppressWarnings("restriction")
@Override
protected final IProject[] build(int kind, @SuppressWarnings("rawtypes") Map args, IProgressMonitor monitor)
throws CoreException
@@ -77,20 +85,19 @@ public class VersionBuilder extends IncrementalProjectBuilder
{
Markers.deleteAllMarkers(project);
- IPluginModelBase pluginModel = PluginRegistry.findModel(getProject());
- if (pluginModel == null)
- {
- throw new IllegalStateException("Could not locate the plugin model base for project: " + getProject().getName());
- }
+ IModel componentModel = getComponentModel(project);
- if (!"true".equals(args.get(DEPENDENCY_RANGES_ARGUMENT)))
+ if (componentModel instanceof IPluginModelBase)
{
- checkDependencyRanges(pluginModel);
- }
+ if (!"true".equals(args.get(DEPENDENCY_RANGES_ARGUMENT)))
+ {
+ checkDependencyRanges((IPluginModelBase)componentModel);
+ }
- if (!"true".equals(args.get(EXPORT_VERSIONS_ARGUMENT)))
- {
- checkPackageExports(pluginModel);
+ if (!"true".equals(args.get(EXPORT_VERSIONS_ARGUMENT)))
+ {
+ checkPackageExports((IPluginModelBase)componentModel);
+ }
}
/*
@@ -158,8 +165,8 @@ public class VersionBuilder extends IncrementalProjectBuilder
* Determine if a validation is needed or if the version has already been increased properly
*/
- Element element = getElement(pluginModel);
- Element releaseElement = release.getElements().get(element.getName());
+ Element element = getElement(componentModel);
+ Element releaseElement = release.getElements().get(element);
if (releaseElement == null)
{
validator.abort(buildState, project, null, monitor);
@@ -205,7 +212,7 @@ public class VersionBuilder extends IncrementalProjectBuilder
delta = getDelta(project);
}
- validator.updateBuildState(buildState, releasePath, release, project, delta, pluginModel, monitor);
+ validator.updateBuildState(buildState, releasePath, release, project, delta, componentModel, monitor);
try
{
@@ -244,12 +251,22 @@ public class VersionBuilder extends IncrementalProjectBuilder
return releaseProject;
}
- private Element getElement(IPluginModelBase pluginModel) throws CoreException
+ private Element getElement(IModel componentModel) throws CoreException
{
- BundleDescription description = pluginModel.getBundleDescription();
- String name = description.getSymbolicName();
- Version version = description.getVersion();
- return new Element(name, version, Type.PLUGIN);
+ if (componentModel instanceof IPluginModelBase)
+ {
+ IPluginModelBase pluginModel = (IPluginModelBase)componentModel;
+ BundleDescription description = pluginModel.getBundleDescription();
+ String name = description.getSymbolicName();
+ Version version = description.getVersion();
+ return new Element(name, version, Type.PLUGIN);
+ }
+
+ IFeatureModel featureModel = (IFeatureModel)componentModel;
+ IFeature feature = featureModel.getFeature();
+ String name = feature.getId();
+ Version version = new Version(feature.getVersion());
+ return new Element(name, version, Type.FEATURE);
}
private void checkDependencyRanges(IPluginModelBase pluginModel) throws CoreException, IOException
@@ -401,8 +418,19 @@ public class VersionBuilder extends IncrementalProjectBuilder
private void addVersionMarker(String message) throws CoreException, IOException
{
- IFile file = getProject().getFile(MANIFEST_PATH);
- String regex = "Bundle-Version: *([^ ]*)";
+ String regex;
+ IFile file = getProject().getFile(FEATURE_PATH);
+ if (file.exists())
+ {
+
+ regex = ".*version\\s*=\\s*[\"'](\\d+\\.\\d+\\.\\d+).*";
+ }
+ else
+ {
+ file = getProject().getFile(MANIFEST_PATH);
+ regex = "Bundle-Version: *(\\d+\\.\\d+\\.\\d+).*";
+ }
+
Markers.addMarker(file, message, IMarker.SEVERITY_ERROR, regex);
}
@@ -413,4 +441,67 @@ public class VersionBuilder extends IncrementalProjectBuilder
System.out.println(msg);
}
}
+
+ public static IModel getComponentModel(IProject project)
+ {
+ IModel componentModel = PluginRegistry.findModel(project);
+ if (componentModel == null)
+ {
+ componentModel = getFeatureModel(project);
+ if (componentModel == null)
+ {
+ throw new IllegalStateException("The project " + project.getName() + " is neither a plugin nor a feature");
+ }
+ }
+ return componentModel;
+ }
+
+ private static IFeatureModel getFeatureModel(IProject project)
+ {
+ FeatureModelManager featureModelManager = PDECore.getDefault().getFeatureModelManager();
+ for (IFeatureModel featureModel : featureModelManager.getWorkspaceModels())
+ {
+ if (featureModel.getUnderlyingResource().getProject() == project)
+ {
+ return featureModel;
+ }
+ }
+
+ return null;
+ }
+
+ public static IModel getComponentModel(Element element)
+ {
+ String name = element.getName();
+ if (element.getType() == Element.Type.PLUGIN)
+ {
+ IModel pluginModel = PluginRegistry.findModel(name);
+ if (pluginModel != null)
+ {
+ return pluginModel;
+ }
+ }
+
+ IFeatureModel[] featureModels = PDECore.getDefault().getFeatureModelManager().getWorkspaceModels();
+ for (IFeatureModel featureModel : featureModels)
+ {
+ if (featureModel.getFeature().getId().equals(name))
+ {
+ return featureModel;
+ }
+ }
+
+ return null;
+ }
+
+ public static Version getComponentVersion(IModel componentModel)
+ {
+ if (componentModel instanceof IPluginModelBase)
+ {
+ IPluginModelBase pluginModel = (IPluginModelBase)componentModel;
+ return pluginModel.getBundleDescription().getVersion();
+ }
+
+ return new Version(((IFeatureModel)componentModel).getFeature().getVersion());
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionValidator.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionValidator.java
index c0c98bd232..180c7d1cd7 100644
--- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionValidator.java
+++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionValidator.java
@@ -13,7 +13,7 @@ package org.eclipse.emf.cdo.releng.version;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.IModel;
/**
* @author Eike Stepper
@@ -31,5 +31,5 @@ public abstract class VersionValidator
}
public abstract void updateBuildState(BuildState buildState, String releasePath, Release release, IProject project,
- IResourceDelta delta, IPluginModelBase pluginModel, IProgressMonitor monitor) throws Exception;
+ IResourceDelta delta, IModel componentModel, IProgressMonitor monitor) throws Exception;
}

Back to the top