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