generic builder which performs validation and creates markers
diff --git a/modeling/plugins/org.eclipse.pde.ds.builder/plugin.xml b/modeling/plugins/org.eclipse.pde.ds.builder/plugin.xml
index fd594dd..b4d1d76 100644
--- a/modeling/plugins/org.eclipse.pde.ds.builder/plugin.xml
+++ b/modeling/plugins/org.eclipse.pde.ds.builder/plugin.xml
@@ -9,6 +9,7 @@
isConfigurable="true">
<run
class="org.eclipse.pde.ds.builder.internal.validation.ScrBuilder">
+ <parameter name="content-type" value="org.eclipse.pde.ds.content-type" />
</run>
</builder>
</extension>
diff --git a/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/ScrBuilder.java b/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/ScrBuilder.java
index c06ec0c..52fe5d0 100644
--- a/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/ScrBuilder.java
+++ b/modeling/plugins/org.eclipse.pde.ds.builder/src/org/eclipse/pde/ds/builder/internal/validation/ScrBuilder.java
@@ -4,21 +4,13 @@
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.util.*;
-import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.transaction.RunnableWithResult;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.PluginRegistry;
-import org.eclipse.pde.ds.builder.internal.Activator;
import org.eclipse.pde.emfforms.builder.IncrementalModelBuilder;
-import org.eclipse.pde.emfforms.builder.MarkerHelper;
import org.eclipse.pde.internal.core.ibundle.IBundleModel;
import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
import org.eclipse.pde.internal.core.natures.PDE;
@@ -68,84 +60,11 @@
new BasicCommandStack()).getResourceSet()
.getResource(res, true);
build(modelResource.getContents().get(0),
- componentFile, true, new SubProgressMonitor(
- monitor, 1));
+ componentFile, new SubProgressMonitor(monitor,
+ 1));
}
} // end while
}
}
}
-
- protected void build(EObject modelObject, IResource resource,
- boolean force, IProgressMonitor monitor) throws CoreException {
- if (monitor == null) {
- monitor = new NullProgressMonitor();
- }
-
- monitor.beginTask("Model Validation", 4);
-
- monitor.subTask("Validation");
-
- Diagnostic diagnostic = validate(modelObject);
-
- monitor.worked(3);
-
- if (resource instanceof IContainer) {
- MarkerHelper.cleanMarkers((IContainer) resource);
- } else if (resource instanceof IFile) {
- MarkerHelper.cleanMarkers((IFile) resource);
- }
-
- MarkerHelper.createMarkers(diagnostic, new SubProgressMonitor(monitor,
- 1));
-
- monitor.done();
- }
-
- private Diagnostic validate(final EObject modelObject) {
- TransactionalEditingDomain domain = TransactionalEditingDomain.Factory.INSTANCE
- .createEditingDomain();
- final AdapterFactory adapterFactory = domain instanceof AdapterFactoryEditingDomain ? ((AdapterFactoryEditingDomain) domain)
- .getAdapterFactory()
- : null;
-
- try {
- return (Diagnostic) domain
- .runExclusive(new RunnableWithResult.Impl<Diagnostic>() {
- public void run() {
-
- Diagnostic diagnostic = new Diagnostician() {
-
- @Override
- public String getObjectLabel(EObject eObject) {
- if (adapterFactory != null
- && !eObject.eIsProxy()) {
- IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory
- .adapt(
- eObject,
- IItemLabelProvider.class);
- if (itemLabelProvider != null) {
- return itemLabelProvider
- .getText(eObject);
- }
- }
-
- return super.getObjectLabel(eObject);
- }
- }.validate(modelObject);
- setResult(diagnostic);
- }
- });
- } catch (InterruptedException ie) {
- // Log and return the exception in a diagnostic
- Activator.log(ie);
- return new BasicDiagnostic(Diagnostic.ERROR, "ModelChecker", 0, ie
- .getMessage(), new Object[] { modelObject });
- }
- }
-
- @Override
- protected String getContentType() {
- return "org.eclipse.pde.ds.content-type";
- }
}
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/builder/IncrementalModelBuilder.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/builder/IncrementalModelBuilder.java
index 1b74554..f439416 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/builder/IncrementalModelBuilder.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/builder/IncrementalModelBuilder.java
@@ -8,71 +8,36 @@
* Contributors:
* Anyware Technologies - initial API and implementation
*
- * $Id: IncrementalModelBuilder.java,v 1.6 2009/07/29 10:31:26 bcabe Exp $
+ * $Id: IncrementalModelBuilder.java,v 1.1 2010/03/17 11:42:44 bcabe Exp $
*/
package org.eclipse.pde.emfforms.builder;
-import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Map;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.transaction.RunnableWithResult;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.pde.emfforms.internal.Activator;
/**
* An abstract class to subclass to launch background jobs on the modified model
*/
public abstract class IncrementalModelBuilder extends IncrementalProjectBuilder {
- protected class ModelFileDeltaVisitor implements IResourceDeltaVisitor {
- private Map<Resource, IResource> modifiedResources = new HashMap<Resource, IResource>();
- private String _contentType;
-
- public ModelFileDeltaVisitor(String contentType) {
- _contentType = contentType;
- }
-
- public Map<Resource, IResource> getModifiedResources() {
- return modifiedResources;
- }
-
- /**
- * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse
- * .core.resources.IResourceDelta)
- */
- public boolean visit(IResourceDelta delta) throws CoreException {
- IResource resource = delta.getResource();
- switch (delta.getKind()) {
- case IResourceDelta.ADDED :
- case IResourceDelta.REMOVED :
- // Do nothing
- break;
- case IResourceDelta.CHANGED :
- if (resource instanceof IContainer)
- return true;
- if (_contentType != null && !_contentType.equals(((IFile) resource).getContentDescription().getContentType().getId()))
- return false;
- // handle changed resource
- URI resourceURI = URI.createPlatformResourceURI(resource.getFullPath().toString(), true);
- Resource modelResource = new AdapterFactoryEditingDomain(new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE), new BasicCommandStack()).getResourceSet().getResource(resourceURI, true);
- if (modelResource != null && modelResource.isLoaded() && !modifiedResources.containsKey(modelResource)) {
- modifiedResources.put(modelResource, resource);
- }
- break;
- }
- // return true to continue visiting children.
- return true;
- }
- }
+ private String _contentType;
/**
* @see org.eclipse.core.resources.IncrementalProjectBuilder#build(int,
* java.util.Map, org.eclipse.core.runtime.IProgressMonitor)
*/
- @SuppressWarnings("unchecked")
@Override
protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
switch (kind) {
@@ -110,10 +75,10 @@
Map<Resource, IResource> modifiedResources = visitor.getModifiedResources();
- monitor.beginTask("Incremental Build", modifiedResources.size());
+ monitor.beginTask("Incremental Build", modifiedResources.size()); //$NON-NLS-1$
for (Resource modelResource : modifiedResources.keySet()) {
- build(modelResource.getContents().get(0), modifiedResources.get(modelResource), false, new SubProgressMonitor(monitor, 1));
+ build(modelResource.getContents().get(0), modifiedResources.get(modelResource), new SubProgressMonitor(monitor, 1));
}
monitor.done();
@@ -128,10 +93,78 @@
* exists
*/
protected String getContentType() {
- return null;
+ return _contentType;
}
protected abstract void fullBuild(IProgressMonitor monitor) throws CoreException;
- protected abstract void build(EObject modelObject, IResource resource, boolean force, IProgressMonitor monitor) throws CoreException;
+ protected void build(EObject modelObject, IResource resource, IProgressMonitor monitor) throws CoreException {
+ if (monitor == null) {
+ monitor = new NullProgressMonitor();
+ }
+
+ monitor.beginTask("Model Validation", 4); //$NON-NLS-1$
+
+ monitor.subTask("Validation"); //$NON-NLS-1$
+
+ Diagnostic diagnostic = validate(modelObject);
+
+ monitor.worked(3);
+
+ if (resource instanceof IContainer) {
+ MarkerHelper.cleanMarkers((IContainer) resource);
+ } else if (resource instanceof IFile) {
+ MarkerHelper.cleanMarkers((IFile) resource);
+ }
+
+ MarkerHelper.createMarkers(diagnostic, new SubProgressMonitor(monitor, 1));
+
+ monitor.done();
+ }
+
+ protected Diagnostic validate(final EObject modelObject) {
+ TransactionalEditingDomain domain = TransactionalEditingDomain.Factory.INSTANCE.createEditingDomain();
+ final AdapterFactory adapterFactory = domain instanceof AdapterFactoryEditingDomain ? ((AdapterFactoryEditingDomain) domain).getAdapterFactory() : null;
+
+ try {
+ return (Diagnostic) domain.runExclusive(new RunnableWithResult.Impl<Diagnostic>() {
+ public void run() {
+
+ Diagnostic diagnostic = new Diagnostician() {
+
+ @Override
+ public String getObjectLabel(EObject eObject) {
+ if (adapterFactory != null && !eObject.eIsProxy()) {
+ IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(eObject, IItemLabelProvider.class);
+ if (itemLabelProvider != null) {
+ return itemLabelProvider.getText(eObject);
+ }
+ }
+
+ return super.getObjectLabel(eObject);
+ }
+ }.validate(modelObject);
+ setResult(diagnostic);
+ }
+ });
+ } catch (InterruptedException ie) {
+ // Log and return the exception in a diagnostic
+ Activator.log(ie);
+ return new BasicDiagnostic(Diagnostic.ERROR, "ModelChecker", 0, ie.getMessage(), new Object[] {modelObject}); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * The content-type this builder is bound to is defined in the extension
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+ if (data != null && data instanceof Hashtable<?, ?>) {
+ Hashtable<String, String> map = (Hashtable<String, String>) data;
+ _contentType = map.get("content-type"); //$NON-NLS-1$
+ }
+
+ }
+
}
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/builder/ModelFileDeltaVisitor.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/builder/ModelFileDeltaVisitor.java
new file mode 100644
index 0000000..3602991
--- /dev/null
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/builder/ModelFileDeltaVisitor.java
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2010 Sierra Wireless and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Sierra Wireless - initial API and implementation
+ *
+ * $Id: IncrementalModelBuilder.java,v 1.1 2010/03/17 11:42:44 bcabe Exp $
+ */
+package org.eclipse.pde.emfforms.builder;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+public class ModelFileDeltaVisitor implements IResourceDeltaVisitor {
+ private Map<Resource, IResource> modifiedResources = new HashMap<Resource, IResource>();
+ private String _contentType;
+
+ public ModelFileDeltaVisitor(String contentType) {
+ _contentType = contentType;
+ }
+
+ public Map<Resource, IResource> getModifiedResources() {
+ return modifiedResources;
+ }
+
+ /**
+ * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse
+ * .core.resources.IResourceDelta)
+ */
+ public boolean visit(IResourceDelta delta) throws CoreException {
+ IResource resource = delta.getResource();
+ switch (delta.getKind()) {
+ case IResourceDelta.ADDED :
+ case IResourceDelta.REMOVED :
+ // Do nothing
+ break;
+ case IResourceDelta.CHANGED :
+ if (resource instanceof IContainer)
+ return true;
+ if (_contentType != null && !_contentType.equals(((IFile) resource).getContentDescription().getContentType().getId()))
+ return false;
+ // handle changed resource
+ URI resourceURI = URI.createPlatformResourceURI(resource.getFullPath().toString(), true);
+ Resource modelResource = new AdapterFactoryEditingDomain(new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE), new BasicCommandStack()).getResourceSet().getResource(resourceURI, true);
+ if (modelResource != null && modelResource.isLoaded() && !modifiedResources.containsKey(modelResource)) {
+ modifiedResources.put(modelResource, resource);
+ }
+ break;
+ }
+ // return true to continue visiting children.
+ return true;
+ }
+}
\ No newline at end of file