[483913] Improve behavior with target platform

test in builds


Change-Id: I4beea3e92fe461c289c94a7dc896dbe367115fb8
Signed-off-by: Thomas Guiu <thomas.guiu@soyatec.com>
diff --git a/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/PlatformResourceLoadedListener.java b/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/PlatformResourceLoadedListener.java
index 796d7f0..3103b6f 100644
--- a/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/PlatformResourceLoadedListener.java
+++ b/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/PlatformResourceLoadedListener.java
@@ -1,530 +1,528 @@
-/**
- * Copyright (c) 2009-2010 Thales Corporate Services S.A.S.
- * 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:
- * Thales Corporate Services S.A.S - initial API and implementation
- */
-package org.eclipse.egf.core.domain;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.commands.operations.IOperationHistory;
-import org.eclipse.core.commands.operations.IUndoableOperation;
-import org.eclipse.core.commands.operations.ObjectUndoContext;
-import org.eclipse.egf.common.helper.URIHelper;
-import org.eclipse.egf.core.EGFCorePlugin;
-import org.eclipse.egf.core.fcore.IPlatformFcore;
-import org.eclipse.egf.core.fcore.IPlatformFcoreConstants;
-import org.eclipse.egf.core.platform.EGFPlatformPlugin;
-import org.eclipse.egf.core.platform.pde.IPlatformExtensionPointDelta;
-import org.eclipse.egf.core.platform.pde.IPlatformExtensionPointListener;
-import org.eclipse.egf.core.workspace.EGFWorkspaceSynchronizer;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.common.util.UniqueEList;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.pde.core.plugin.ModelEntry;
-import org.eclipse.pde.internal.core.IExtensionDeltaListener;
-import org.eclipse.pde.internal.core.IPluginModelListener;
-import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.pde.internal.core.PluginModelDelta;
-
-/**
- * @author Thomas Guiu
- * 
- */
-public final class PlatformResourceLoadedListener implements EGFWorkspaceSynchronizer.Delegate {
-
-	private static volatile PlatformResourceLoadedListener resourceLoadedListener = new PlatformResourceLoadedListener();
-
-	private static volatile ResourceManager resourceManager = new ResourceManager();
-
-	private final WorkspaceListener listener = new WorkspaceListener();
-
-	public static ResourceManager getResourceManager() {
-		return resourceManager;
-	}
-
-	public static PlatformResourceLoadedListener getResourceLoadedListener() {
-		return resourceLoadedListener;
-	}
-
-	public static interface ResourceUser {
-
-		public Resource getResource();
-
-		public ResourceListener getListener();
-
-		public boolean isDirty();
-
-		public boolean userHasSavedResource();
-
-		public boolean resourceHasBeenExternallyChanged();
-
-		public IOperationHistory getOperationHistory();
-
-		public ObjectUndoContext getUndoContext();
-
-	}
-
-	public static interface ResourceListener {
-
-		public void resourceDeleted(final Resource resource);
-
-		public void resourceMoved(final Resource resource, URI oldURI);
-
-		public void resourceReloaded(final Resource resource);
-
-		public void externalUpdate(final Resource resource);
-
-		public void internalUpdate(final Resource resource);
-
-	}
-
-	public static class ResourceManager {
-
-		final private List<ResourceListener> listeners = new ArrayList<ResourceListener>();
-
-		final private Map<Resource, List<ResourceUser>> observers = new HashMap<Resource, List<ResourceUser>>();
-
-		protected void dispose() {
-			listeners.clear();
-			observers.clear();
-		}
-
-		public void addObserver(ResourceUser resourceUser) {
-			synchronized (PlatformResourceLoadedListener.class) {
-				Resource resource = resourceUser.getResource();
-				List<ResourceUser> list = observers.get(resource);
-				if (list == null) {
-					list = new ArrayList<ResourceUser>();
-					observers.put(resource, list);
-				}
-				list.add(resourceUser);
-				listeners.add(resourceUser.getListener());
-			}
-		}
-
-		public void removeObserver(ResourceUser resourceUser) {
-			synchronized (resourceLoadedListener) {
-				Resource resource = resourceUser.getResource();
-				List<ResourceUser> list = observers.get(resource);
-				if (list == null) {
-					return;
-				}
-				list.remove(resourceUser);
-				if (list.isEmpty()) {
-					try {
-						resource.unload();
-						observers.remove(resource);
-						if (noMoreObserver() == false) {
-							resource.load(Collections.EMPTY_MAP);
-						}
-					} catch (IOException ioe) {
-						resource.getErrors().add(new DiagnosticResourceException(resource, ioe));
-					}
-				}
-				listeners.remove(resourceUser.getListener());
-				if (noMoreObserver()) {
-					clear();
-				}
-			}
-		}
-
-		private void clear() {
-			// no editor is actually open, so let's unload all the resources
-			final TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);
-			try {
-				editingDomain.runExclusive(new Runnable() {
-
-					public void run() {
-						ResourceSet resourceSet = editingDomain.getResourceSet();
-						for (Iterator<Resource> it = resourceSet.getResources().iterator(); it.hasNext();) {
-							Resource resource = it.next();
-							resource.unload();
-							it.remove();
-						}
-					}
-				});
-				if (EGFCorePlugin.getDefault().isDebugging()) {
-					EGFPlatformPlugin.getDefault().logInfo(NLS.bind("''{0}'' _ clear", EGFCorePlugin.EDITING_DOMAIN_ID)); //$NON-NLS-1$
-				}
-			} catch (InterruptedException e) {
-				EGFCorePlugin.getDefault().logError(e);
-			}
-		}
-
-		private boolean noMoreObserver() {
-			for (List<ResourceUser> users : observers.values()) {
-				if (users.isEmpty() == false) {
-					return false;
-				}
-			}
-			return true;
-		}
-
-		public void removeResource(Resource resource) {
-			if (resource == null) {
-				throw new IllegalArgumentException();
-			}
-			synchronized (resourceLoadedListener) {
-				boolean isDirty = false;
-				// Check whether or not we are editing the current resource
-				List<ResourceUser> users = observers.get(resource);
-				if (users != null) {
-					for (ResourceUser user : users) {
-						// This state is propagated, the first user is enough to
-						// check this state
-						isDirty = user.isDirty();
-						break;
-					}
-				}
-				// Notify, use an iterator as a closing editor always remove its
-				// listener
-				// This we avoid any concurrent modification exception
-				for (Iterator<ResourceListener> iterator = listeners.iterator(); iterator.hasNext();) {
-					ResourceListener resourceListener = iterator.next();
-					resourceListener.resourceDeleted(resource);
-				}
-				// Non dirty editors should close themselves while editing a
-				// deleted resource if any
-				if (isDirty == false) {
-					resource.unload();
-				}
-			}
-		}
-
-		public void reloadResource(Resource resource) {
-			if (resource == null) {
-				throw new IllegalArgumentException();
-			}
-			synchronized (resourceLoadedListener) {
-				try {
-					resource.unload();
-					resource.load(Collections.EMPTY_MAP);
-				} catch (IOException ioe) {
-					resource.getErrors().add(new DiagnosticResourceException(resource, ioe));
-				}
-				for (Iterator<ResourceListener> iterator = listeners.iterator(); iterator.hasNext();) {
-					ResourceListener resourceListener = iterator.next();
-					resourceListener.resourceReloaded(resource);
-				}
-			}
-		}
-
-		public void movedResource(Resource movedResource, URI newURI) {
-			if (newURI == null) {
-				throw new IllegalArgumentException();
-			}
-			final TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);
-			synchronized (resourceLoadedListener) {
-				ResourceSet resourceSet = editingDomain.getResourceSet();
-				Resource resource = resourceSet.getResource(newURI, false);
-				// Resource who can't open a physical resource raise exception
-				// but are loaded
-				// in the resource set, its flag is also set to isLoaded
-				// we need to unload it otherwise our resource set will be messy
-				// (two resources with the same URI)
-				if (resource != null && resource.getContents().size() == 0 && resource.getErrors().isEmpty() == false) {
-					resource.unload();
-					resourceSet.getResources().remove(resource);
-					if (EGFCorePlugin.getDefault().isDebugging()) {
-						EGFPlatformPlugin.getDefault().logInfo(NLS.bind("TargetPlatformResourceLoadedListener$ResourceManager.movedResource(...) - discard loaded empty resource with errors ''{0}''", //$NON-NLS-1$
-								URIHelper.toString(newURI)));
-					}
-					// Load it in our resource set
-					movedResource = editingDomain.getResourceSet().getResource(newURI, true);
-				} else {
-					if (movedResource != null) {
-						movedResource.setURI(newURI);
-					}
-				}
-				if (movedResource != null) {
-					URI oldURI = movedResource.getURI();
-					for (Iterator<ResourceListener> iterator = listeners.iterator(); iterator.hasNext();) {
-						ResourceListener resourceListener = iterator.next();
-						resourceListener.resourceMoved(movedResource, oldURI);
-					}
-				}
-			}
-		}
-
-		public boolean resourceHasBeenExternallyChanged(Resource resource) {
-			if (resource == null) {
-				throw new IllegalArgumentException();
-			}
-			synchronized (resourceLoadedListener) {
-				List<ResourceUser> users = observers.get(resource);
-				if (users == null) {
-					return false;
-				}
-				boolean resourceHasBeenExternallyChanged = false;
-				// This state is propagated, the first user is enough to check
-				// this state
-				for (ResourceUser user : users) {
-					resourceHasBeenExternallyChanged = user.resourceHasBeenExternallyChanged();
-					break;
-				}
-				return resourceHasBeenExternallyChanged;
-			}
-		}
-
-		public void populateUndoContext(IOperationHistory operationHistory, ObjectUndoContext undoContext, Resource resource) {
-			if (resource == null || undoContext == null) {
-				throw new IllegalArgumentException();
-			}
-			synchronized (resourceLoadedListener) {
-				List<ResourceUser> users = observers.get(resource);
-				if (users == null) {
-					return;
-				}
-				// Operation History is propagated, the first user is enough to
-				// retrieve it
-				ObjectUndoContext innerUndoContext = null;
-				for (ResourceUser user : users) {
-					if (user.getUndoContext() != undoContext) {
-						innerUndoContext = user.getUndoContext();
-						break;
-					}
-				}
-				// Populate
-				if (innerUndoContext != null) {
-					for (IUndoableOperation operation : operationHistory.getUndoHistory(innerUndoContext)) {
-						operation.addContext(undoContext);
-					}
-					for (IUndoableOperation operation : operationHistory.getRedoHistory(innerUndoContext)) {
-						operation.addContext(undoContext);
-					}
-				}
-			}
-		}
-
-	}
-
-	/**
-	 * This listens for platform changes.
-	 */
-	protected IPlatformExtensionPointListener platformListener = new IPlatformExtensionPointListener() {
-
-		public void platformExtensionPointChanged(IPlatformExtensionPointDelta delta) {
-
-			synchronized (PlatformResourceLoadedListener.this) {
-
-				TransactionalEditingDomain editingDomain = getEditingDomain();
-
-				List<Resource> deltaChangedFcores = new UniqueEList<Resource>();
-
-				Map<Resource, IPlatformFcore> deltaRemovedFcores = new HashMap<Resource, IPlatformFcore>();
-
-				// Check if removed platform fcores are applicable
-				for (IPlatformFcore fcore : delta.getRemovedPlatformExtensionPoints(IPlatformFcore.class)) {
-					Resource resource = editingDomain.getResourceSet().getResource(fcore.getURI(), false);
-					if (resource == null) {
-						continue;
-					}
-					deltaRemovedFcores.put(resource, fcore);
-				}
-
-				// Check if added platform fcores are applicable
-				// if a removed platform fcore is also detected it means a
-				// changed resource
-				// eg: changed means target versus workspace fcore
-				for (IPlatformFcore fcore : delta.getAddedPlatformExtensionPoints(IPlatformFcore.class)) {
-					Resource resource = editingDomain.getResourceSet().getResource(fcore.getURI(), false);
-					if (resource == null) {
-						continue;
-					}
-					// Resource who can't open a physical resource raise
-					// exception but are loaded in the resource set
-					// we need to unload it to get a chance to load it again
-					if (resource.getContents().size() == 0 && resource.getErrors().isEmpty() == false) {
-						// start substitution removed resource if applicable
-						IPlatformFcore deletedFcore = deltaRemovedFcores.get(resource);
-						if (deletedFcore != null) {
-							deltaRemovedFcores.remove(resource);
-						}
-						// Remove previous on error resource
-						resource.unload();
-						resource.getResourceSet().getResources().remove(resource);
-						if (EGFCorePlugin.getDefault().isDebugging()) {
-							EGFPlatformPlugin.getDefault().logInfo(NLS.bind("TargetPlatformResourceLoadedListener.platformExtensionPointChanged(...) - discard loaded empty resource with errors ''{0}''", //$NON-NLS-1$
-									fcore.toString()));
-						}
-						// Load it in our resource set, beware the URIConverter
-						// should be updated accordingly
-						resource = editingDomain.getResourceSet().getResource(fcore.getURI(), true);
-						if (resource == null) {
-							continue;
-						}
-						// end substitution removed resource if applicable
-						if (deletedFcore != null) {
-							deltaRemovedFcores.put(resource, deletedFcore);
-						}
-					}
-					if (deltaRemovedFcores.remove(resource) != null) {
-						deltaChangedFcores.add(resource);
-					}
-				}
-
-				// Process Removed Fcores
-				if (deltaRemovedFcores.isEmpty() == false) {
-					for (Resource resource : deltaRemovedFcores.keySet()) {
-						getResourceManager().removeResource(resource);
-					}
-				}
-
-				// Target and workspace update, this is not detected by other
-				// listeners
-				// This is safe to do it here
-				if (deltaChangedFcores.isEmpty() == false) {
-					for (Resource resource : deltaChangedFcores) {
-						getResourceManager().reloadResource(resource);
-					}
-				}
-
-			}
-
-		}
-
-	};
-
-	private PlatformResourceLoadedListener() {
-		// TODO WIU est ce bien utile ?
-		// EGFPlatformPlugin.getPlatformManager().addPlatformExtensionPointListener(_platformListener);
-		PDECore.getDefault().getModelManager().addPluginModelListener(listener);
-	}
-
-	private TransactionalEditingDomain getEditingDomain() {
-		return TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);
-	}
-
-	public synchronized boolean handleResourcePersisted(Resource resource) {
-		for (Iterator<ResourceListener> iterator = getResourceManager().listeners.iterator(); iterator.hasNext();) {
-			ResourceListener resourceListener = iterator.next();
-			resourceListener.internalUpdate(resource);
-		}
-		return true;
-	}
-
-	public synchronized boolean handleResourceMoved(Resource movedResource, URI newURI) {
-		// check whether or not we face a moved fcore to non fcore
-		boolean isFcore = IPlatformFcoreConstants.FCORE_FILE_EXTENSION.equals(movedResource.getURI().fileExtension());
-		boolean isMovedToFcore = IPlatformFcoreConstants.FCORE_FILE_EXTENSION.equals(newURI.fileExtension());
-		// Not sure here is we need to let process non fcore file
-		if ((isFcore && isMovedToFcore) || isFcore == false) {
-			// Moved resource are always in non dirty editors
-			// when moving a dirty resource the platform request to save the
-			// resource
-			// if not saved the resource is not moved
-			Resource resource = getEditingDomain().getResourceSet().getResource(movedResource.getURI(), false);
-			if (resource != null || getEditingDomain().getResourceSet().getResource(newURI, false) != null) {
-				// Notify moved resource
-				getResourceManager().movedResource(resource, newURI);
-			}
-		} else {
-			// an fcore has moved to a non fcore resource, process a remove
-			return handleResourceDeleted(movedResource);
-		}
-		return true;
-	}
-
-	public synchronized boolean handleResourceDeleted(Resource deletedResource) {
-		IPlatformFcore fcore = EGFCorePlugin.getPlatformFcore(deletedResource);
-		// Either a non Fcore resource or an already processed deleted fcore
-		// from _platformListener
-		if (fcore == null) {
-			// _platformListener has been called first, Process workspace
-			// removed fcores detected in _platformListener
-			getResourceManager().removeResource(deletedResource);
-		}
-		return true;
-	}
-
-	public synchronized boolean handleResourceChanged(final Resource changedResource) {
-		List<ResourceUser> users = getResourceManager().observers.get(changedResource);
-		// No one edit this resource, process a standard reload
-		if (users == null) {
-			getResourceManager().reloadResource(changedResource);
-			return true;
-		}
-		// Check the state of this edited resource
-		boolean hasSavedResource = false;
-		boolean isDirty = false;
-		for (ResourceUser user : users) {
-			// We need to deeply analyze users as anyone could have saved this
-			// resource if any
-			hasSavedResource |= user.userHasSavedResource();
-			// This state is propagated, the first user is enough to check this
-			// state
-			isDirty |= user.isDirty();
-		}
-		// Nothing to do, we just reload the resource
-		if (hasSavedResource == false && isDirty == false) {
-			getResourceManager().reloadResource(changedResource);
-			return true;
-		}
-		// Dirty resource
-		if (hasSavedResource == false && isDirty) { // Give a chance to cancel
-													// dirty editors while
-													// reloading external
-													// changed resource
-			for (Iterator<ResourceListener> iterator = getResourceManager().listeners.iterator(); iterator.hasNext();) {
-				ResourceListener resourceListener = iterator.next();
-				resourceListener.externalUpdate(changedResource);
-			}
-			return true;
-		}
-		// Non dirty resource
-		for (Iterator<ResourceListener> iterator = getResourceManager().listeners.iterator(); iterator.hasNext();) {
-			ResourceListener resourceListener = iterator.next();
-			resourceListener.internalUpdate(changedResource);
-		}
-		return true;
-	}
-
-	public synchronized void dispose() {
-		PDECore.getDefault().getModelManager().removePluginModelListener(listener);
-		EGFPlatformPlugin.getPlatformManager().removePlatformExtensionPointListener(platformListener);
-		getResourceManager().dispose();
-		resourceManager = null;
-	}
-
-	public class WorkspaceListener implements IPluginModelListener {
-
-		public void modelsChanged(PluginModelDelta delta) {
-			TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);
-			for (ModelEntry entry : delta.getChangedEntries()) {
-				String id = entry.getId();
-				for (Resource r : editingDomain.getResourceSet().getResources()) {
-					if (id.equals(r.getURI().segment(1)))
-						reloadResource(r);
-				}
-			}
-		}
-
-		private void reloadResource(Resource r) {
-			System.out.println("reload " + r.getURI());
-			r.unload();
-			try {
-				r.load(Collections.EMPTY_MAP);
-			} catch (IOException e) {
-				EGFPlatformPlugin.getDefault().logError(e);
-			}
-
-		}
-
-	}
-
-}
+/**

+ * Copyright (c) 2009-2010 Thales Corporate Services S.A.S.

+ * 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:

+ * Thales Corporate Services S.A.S - initial API and implementation

+ */

+package org.eclipse.egf.core.domain;

+

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.Collections;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.commands.operations.IOperationHistory;

+import org.eclipse.core.commands.operations.IUndoableOperation;

+import org.eclipse.core.commands.operations.ObjectUndoContext;

+import org.eclipse.egf.common.helper.URIHelper;

+import org.eclipse.egf.core.EGFCorePlugin;

+import org.eclipse.egf.core.fcore.IPlatformFcore;

+import org.eclipse.egf.core.fcore.IPlatformFcoreConstants;

+import org.eclipse.egf.core.platform.EGFPlatformPlugin;

+import org.eclipse.egf.core.platform.pde.IPlatformExtensionPointDelta;

+import org.eclipse.egf.core.platform.pde.IPlatformExtensionPointListener;

+import org.eclipse.egf.core.workspace.EGFWorkspaceSynchronizer;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.common.util.UniqueEList;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.transaction.TransactionalEditingDomain;

+import org.eclipse.osgi.util.NLS;

+import org.eclipse.pde.core.plugin.ModelEntry;

+import org.eclipse.pde.internal.core.IPluginModelListener;

+import org.eclipse.pde.internal.core.PDECore;

+import org.eclipse.pde.internal.core.PluginModelDelta;

+

+/**

+ * @author Thomas Guiu

+ * 

+ */

+public final class PlatformResourceLoadedListener implements EGFWorkspaceSynchronizer.Delegate {

+

+	private static volatile PlatformResourceLoadedListener resourceLoadedListener = new PlatformResourceLoadedListener();

+

+	private static volatile ResourceManager resourceManager = new ResourceManager();

+

+	private final WorkspaceListener listener = new WorkspaceListener();

+

+	public static ResourceManager getResourceManager() {

+		return resourceManager;

+	}

+

+	public static PlatformResourceLoadedListener getResourceLoadedListener() {

+		return resourceLoadedListener;

+	}

+

+	public static interface ResourceUser {

+

+		public Resource getResource();

+

+		public ResourceListener getListener();

+

+		public boolean isDirty();

+

+		public boolean userHasSavedResource();

+

+		public boolean resourceHasBeenExternallyChanged();

+

+		public IOperationHistory getOperationHistory();

+

+		public ObjectUndoContext getUndoContext();

+

+	}

+

+	public static interface ResourceListener {

+

+		public void resourceDeleted(final Resource resource);

+

+		public void resourceMoved(final Resource resource, URI oldURI);

+

+		public void resourceReloaded(final Resource resource);

+

+		public void externalUpdate(final Resource resource);

+

+		public void internalUpdate(final Resource resource);

+

+	}

+

+	public static class ResourceManager {

+

+		final private List<ResourceListener> listeners = new ArrayList<ResourceListener>();

+

+		final private Map<Resource, List<ResourceUser>> observers = new HashMap<Resource, List<ResourceUser>>();

+

+		protected void dispose() {

+			listeners.clear();

+			observers.clear();

+		}

+

+		public void addObserver(ResourceUser resourceUser) {

+			synchronized (PlatformResourceLoadedListener.class) {

+				Resource resource = resourceUser.getResource();

+				List<ResourceUser> list = observers.get(resource);

+				if (list == null) {

+					list = new ArrayList<ResourceUser>();

+					observers.put(resource, list);

+				}

+				list.add(resourceUser);

+				listeners.add(resourceUser.getListener());

+			}

+		}

+

+		public void removeObserver(ResourceUser resourceUser) {

+			synchronized (resourceLoadedListener) {

+				Resource resource = resourceUser.getResource();

+				List<ResourceUser> list = observers.get(resource);

+				if (list == null) {

+					return;

+				}

+				list.remove(resourceUser);

+				if (list.isEmpty()) {

+					try {

+						resource.unload();

+						observers.remove(resource);

+						if (noMoreObserver() == false) {

+							resource.load(Collections.EMPTY_MAP);

+						}

+					} catch (IOException ioe) {

+						resource.getErrors().add(new DiagnosticResourceException(resource, ioe));

+					}

+				}

+				listeners.remove(resourceUser.getListener());

+				if (noMoreObserver()) {

+					clear();

+				}

+			}

+		}

+

+		private void clear() {

+			// no editor is actually open, so let's unload all the resources

+			final TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);

+			try {

+				editingDomain.runExclusive(new Runnable() {

+

+					public void run() {

+						ResourceSet resourceSet = editingDomain.getResourceSet();

+						for (Iterator<Resource> it = resourceSet.getResources().iterator(); it.hasNext();) {

+							Resource resource = it.next();

+							resource.unload();

+							it.remove();

+						}

+					}

+				});

+				if (EGFCorePlugin.getDefault().isDebugging()) {

+					EGFPlatformPlugin.getDefault().logInfo(NLS.bind("''{0}'' _ clear", EGFCorePlugin.EDITING_DOMAIN_ID)); //$NON-NLS-1$

+				}

+			} catch (InterruptedException e) {

+				EGFCorePlugin.getDefault().logError(e);

+			}

+		}

+

+		private boolean noMoreObserver() {

+			for (List<ResourceUser> users : observers.values()) {

+				if (users.isEmpty() == false) {

+					return false;

+				}

+			}

+			return true;

+		}

+

+		public void removeResource(Resource resource) {

+			if (resource == null) {

+				throw new IllegalArgumentException();

+			}

+			synchronized (resourceLoadedListener) {

+				boolean isDirty = false;

+				// Check whether or not we are editing the current resource

+				List<ResourceUser> users = observers.get(resource);

+				if (users != null) {

+					for (ResourceUser user : users) {

+						// This state is propagated, the first user is enough to

+						// check this state

+						isDirty = user.isDirty();

+						break;

+					}

+				}

+				// Notify, use an iterator as a closing editor always remove its

+				// listener

+				// This we avoid any concurrent modification exception

+				for (Iterator<ResourceListener> iterator = listeners.iterator(); iterator.hasNext();) {

+					ResourceListener resourceListener = iterator.next();

+					resourceListener.resourceDeleted(resource);

+				}

+				// Non dirty editors should close themselves while editing a

+				// deleted resource if any

+				if (isDirty == false) {

+					resource.unload();

+				}

+			}

+		}

+

+		public void reloadResource(Resource resource) {

+			if (resource == null) {

+				throw new IllegalArgumentException();

+			}

+			synchronized (resourceLoadedListener) {

+				try {

+					resource.unload();

+					resource.load(Collections.EMPTY_MAP);

+				} catch (IOException ioe) {

+					resource.getErrors().add(new DiagnosticResourceException(resource, ioe));

+				}

+				for (Iterator<ResourceListener> iterator = listeners.iterator(); iterator.hasNext();) {

+					ResourceListener resourceListener = iterator.next();

+					resourceListener.resourceReloaded(resource);

+				}

+			}

+		}

+

+		public void movedResource(Resource movedResource, URI newURI) {

+			if (newURI == null) {

+				throw new IllegalArgumentException();

+			}

+			final TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);

+			synchronized (resourceLoadedListener) {

+				ResourceSet resourceSet = editingDomain.getResourceSet();

+				Resource resource = resourceSet.getResource(newURI, false);

+				// Resource who can't open a physical resource raise exception

+				// but are loaded

+				// in the resource set, its flag is also set to isLoaded

+				// we need to unload it otherwise our resource set will be messy

+				// (two resources with the same URI)

+				if (resource != null && resource.getContents().size() == 0 && resource.getErrors().isEmpty() == false) {

+					resource.unload();

+					resourceSet.getResources().remove(resource);

+					if (EGFCorePlugin.getDefault().isDebugging()) {

+						EGFPlatformPlugin.getDefault().logInfo(NLS.bind("TargetPlatformResourceLoadedListener$ResourceManager.movedResource(...) - discard loaded empty resource with errors ''{0}''", //$NON-NLS-1$

+								URIHelper.toString(newURI)));

+					}

+					// Load it in our resource set

+					movedResource = editingDomain.getResourceSet().getResource(newURI, true);

+				} else {

+					if (movedResource != null) {

+						movedResource.setURI(newURI);

+					}

+				}

+				if (movedResource != null) {

+					URI oldURI = movedResource.getURI();

+					for (Iterator<ResourceListener> iterator = listeners.iterator(); iterator.hasNext();) {

+						ResourceListener resourceListener = iterator.next();

+						resourceListener.resourceMoved(movedResource, oldURI);

+					}

+				}

+			}

+		}

+

+		public boolean resourceHasBeenExternallyChanged(Resource resource) {

+			if (resource == null) {

+				throw new IllegalArgumentException();

+			}

+			synchronized (resourceLoadedListener) {

+				List<ResourceUser> users = observers.get(resource);

+				if (users == null) {

+					return false;

+				}

+				boolean resourceHasBeenExternallyChanged = false;

+				// This state is propagated, the first user is enough to check

+				// this state

+				for (ResourceUser user : users) {

+					resourceHasBeenExternallyChanged = user.resourceHasBeenExternallyChanged();

+					break;

+				}

+				return resourceHasBeenExternallyChanged;

+			}

+		}

+

+		public void populateUndoContext(IOperationHistory operationHistory, ObjectUndoContext undoContext, Resource resource) {

+			if (resource == null || undoContext == null) {

+				throw new IllegalArgumentException();

+			}

+			synchronized (resourceLoadedListener) {

+				List<ResourceUser> users = observers.get(resource);

+				if (users == null) {

+					return;

+				}

+				// Operation History is propagated, the first user is enough to

+				// retrieve it

+				ObjectUndoContext innerUndoContext = null;

+				for (ResourceUser user : users) {

+					if (user.getUndoContext() != undoContext) {

+						innerUndoContext = user.getUndoContext();

+						break;

+					}

+				}

+				// Populate

+				if (innerUndoContext != null) {

+					for (IUndoableOperation operation : operationHistory.getUndoHistory(innerUndoContext)) {

+						operation.addContext(undoContext);

+					}

+					for (IUndoableOperation operation : operationHistory.getRedoHistory(innerUndoContext)) {

+						operation.addContext(undoContext);

+					}

+				}

+			}

+		}

+

+	}

+

+	/**

+	 * This listens for platform changes.

+	 */

+	protected IPlatformExtensionPointListener platformListener = new IPlatformExtensionPointListener() {

+

+		public void platformExtensionPointChanged(IPlatformExtensionPointDelta delta) {

+

+			synchronized (PlatformResourceLoadedListener.this) {

+

+				TransactionalEditingDomain editingDomain = getEditingDomain();

+

+				List<Resource> deltaChangedFcores = new UniqueEList<Resource>();

+

+				Map<Resource, IPlatformFcore> deltaRemovedFcores = new HashMap<Resource, IPlatformFcore>();

+

+				// Check if removed platform fcores are applicable

+				for (IPlatformFcore fcore : delta.getRemovedPlatformExtensionPoints(IPlatformFcore.class)) {

+					Resource resource = editingDomain.getResourceSet().getResource(fcore.getURI(), false);

+					if (resource == null) {

+						continue;

+					}

+					deltaRemovedFcores.put(resource, fcore);

+				}

+

+				// Check if added platform fcores are applicable

+				// if a removed platform fcore is also detected it means a

+				// changed resource

+				// eg: changed means target versus workspace fcore

+				for (IPlatformFcore fcore : delta.getAddedPlatformExtensionPoints(IPlatformFcore.class)) {

+					Resource resource = editingDomain.getResourceSet().getResource(fcore.getURI(), false);

+					if (resource == null) {

+						continue;

+					}

+					// Resource who can't open a physical resource raise

+					// exception but are loaded in the resource set

+					// we need to unload it to get a chance to load it again

+					if (resource.getContents().size() == 0 && resource.getErrors().isEmpty() == false) {

+						// start substitution removed resource if applicable

+						IPlatformFcore deletedFcore = deltaRemovedFcores.get(resource);

+						if (deletedFcore != null) {

+							deltaRemovedFcores.remove(resource);

+						}

+						// Remove previous on error resource

+						resource.unload();

+						resource.getResourceSet().getResources().remove(resource);

+						if (EGFCorePlugin.getDefault().isDebugging()) {

+							EGFPlatformPlugin.getDefault().logInfo(NLS.bind("TargetPlatformResourceLoadedListener.platformExtensionPointChanged(...) - discard loaded empty resource with errors ''{0}''", //$NON-NLS-1$

+									fcore.toString()));

+						}

+						// Load it in our resource set, beware the URIConverter

+						// should be updated accordingly

+						resource = editingDomain.getResourceSet().getResource(fcore.getURI(), true);

+						if (resource == null) {

+							continue;

+						}

+						// end substitution removed resource if applicable

+						if (deletedFcore != null) {

+							deltaRemovedFcores.put(resource, deletedFcore);

+						}

+					}

+					if (deltaRemovedFcores.remove(resource) != null) {

+						deltaChangedFcores.add(resource);

+					}

+				}

+

+				// Process Removed Fcores

+				if (deltaRemovedFcores.isEmpty() == false) {

+					for (Resource resource : deltaRemovedFcores.keySet()) {

+						getResourceManager().removeResource(resource);

+					}

+				}

+

+				// Target and workspace update, this is not detected by other

+				// listeners

+				// This is safe to do it here

+				if (deltaChangedFcores.isEmpty() == false) {

+					for (Resource resource : deltaChangedFcores) {

+						getResourceManager().reloadResource(resource);

+					}

+				}

+

+			}

+

+		}

+

+	};

+

+	private PlatformResourceLoadedListener() {

+		// EGFPlatformPlugin.getPlatformManager().addPlatformExtensionPointListener(_platformListener);

+		PDECore.getDefault().getModelManager().addPluginModelListener(listener);

+	}

+

+	private TransactionalEditingDomain getEditingDomain() {

+		return TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);

+	}

+

+	public synchronized boolean handleResourcePersisted(Resource resource) {

+		for (Iterator<ResourceListener> iterator = getResourceManager().listeners.iterator(); iterator.hasNext();) {

+			ResourceListener resourceListener = iterator.next();

+			resourceListener.internalUpdate(resource);

+		}

+		return true;

+	}

+

+	public synchronized boolean handleResourceMoved(Resource movedResource, URI newURI) {

+		// check whether or not we face a moved fcore to non fcore

+		boolean isFcore = IPlatformFcoreConstants.FCORE_FILE_EXTENSION.equals(movedResource.getURI().fileExtension());

+		boolean isMovedToFcore = IPlatformFcoreConstants.FCORE_FILE_EXTENSION.equals(newURI.fileExtension());

+		// Not sure here is we need to let process non fcore file

+		if ((isFcore && isMovedToFcore) || isFcore == false) {

+			// Moved resource are always in non dirty editors

+			// when moving a dirty resource the platform request to save the

+			// resource

+			// if not saved the resource is not moved

+			Resource resource = getEditingDomain().getResourceSet().getResource(movedResource.getURI(), false);

+			if (resource != null || getEditingDomain().getResourceSet().getResource(newURI, false) != null) {

+				// Notify moved resource

+				getResourceManager().movedResource(resource, newURI);

+			}

+		} else {

+			// an fcore has moved to a non fcore resource, process a remove

+			return handleResourceDeleted(movedResource);

+		}

+		return true;

+	}

+

+	public synchronized boolean handleResourceDeleted(Resource deletedResource) {

+		IPlatformFcore fcore = EGFCorePlugin.getPlatformFcore(deletedResource);

+		// Either a non Fcore resource or an already processed deleted fcore

+		// from _platformListener

+		if (fcore == null) {

+			// _platformListener has been called first, Process workspace

+			// removed fcores detected in _platformListener

+			getResourceManager().removeResource(deletedResource);

+		}

+		return true;

+	}

+

+	public synchronized boolean handleResourceChanged(final Resource changedResource) {

+		List<ResourceUser> users = getResourceManager().observers.get(changedResource);

+		// No one edit this resource, process a standard reload

+		if (users == null) {

+			getResourceManager().reloadResource(changedResource);

+			return true;

+		}

+		// Check the state of this edited resource

+		boolean hasSavedResource = false;

+		boolean isDirty = false;

+		for (ResourceUser user : users) {

+			// We need to deeply analyze users as anyone could have saved this

+			// resource if any

+			hasSavedResource |= user.userHasSavedResource();

+			// This state is propagated, the first user is enough to check this

+			// state

+			isDirty |= user.isDirty();

+		}

+		// Nothing to do, we just reload the resource

+		if (hasSavedResource == false && isDirty == false) {

+			getResourceManager().reloadResource(changedResource);

+			return true;

+		}

+		// Dirty resource

+		if (hasSavedResource == false && isDirty) { // Give a chance to cancel

+													// dirty editors while

+													// reloading external

+													// changed resource

+			for (Iterator<ResourceListener> iterator = getResourceManager().listeners.iterator(); iterator.hasNext();) {

+				ResourceListener resourceListener = iterator.next();

+				resourceListener.externalUpdate(changedResource);

+			}

+			return true;

+		}

+		// Non dirty resource

+		for (Iterator<ResourceListener> iterator = getResourceManager().listeners.iterator(); iterator.hasNext();) {

+			ResourceListener resourceListener = iterator.next();

+			resourceListener.internalUpdate(changedResource);

+		}

+		return true;

+	}

+

+	public synchronized void dispose() {

+		PDECore.getDefault().getModelManager().removePluginModelListener(listener);

+		EGFPlatformPlugin.getPlatformManager().removePlatformExtensionPointListener(platformListener);

+		getResourceManager().dispose();

+		resourceManager = null;

+	}

+

+	public class WorkspaceListener implements IPluginModelListener {

+

+		public void modelsChanged(PluginModelDelta delta) {

+			TransactionalEditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(EGFCorePlugin.EDITING_DOMAIN_ID);

+			for (ModelEntry entry : delta.getChangedEntries()) {

+				String id = entry.getId();

+				for (Resource r : editingDomain.getResourceSet().getResources()) {

+					if (id.equals(r.getURI().segment(1)))

+						reloadResource(r);

+				}

+			}

+		}

+

+		private void reloadResource(Resource r) {

+			System.out.println("reload " + r.getURI());

+			r.unload();

+			try {

+				r.load(Collections.EMPTY_MAP);

+			} catch (IOException e) {

+				EGFPlatformPlugin.getDefault().logError(e);

+			}

+

+		}

+

+	}

+

+}

diff --git a/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/RuntimePlatformResourceSet.java b/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/RuntimePlatformResourceSet.java
index 6c55b8b..fa11acd 100644
--- a/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/RuntimePlatformResourceSet.java
+++ b/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/RuntimePlatformResourceSet.java
@@ -14,8 +14,7 @@
  * @author Xavier Maysonnave

  * 

  */

-

-//TODO WIU a virer

+//kept for compatibility

 public class RuntimePlatformResourceSet extends EgfResourceSet {

 

 	public RuntimePlatformResourceSet() {

diff --git a/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/TargetPlatformResourceSet.java b/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/TargetPlatformResourceSet.java
index 1419a9a..b5939ca 100644
--- a/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/TargetPlatformResourceSet.java
+++ b/plugins/org.eclipse.egf.core/src/org/eclipse/egf/core/domain/TargetPlatformResourceSet.java
@@ -15,7 +15,7 @@
  * 

  */

 

-//TODO a virer

+// kept for compatibility

 public class TargetPlatformResourceSet extends EgfResourceSet {

 

 }

diff --git a/plugins/org.eclipse.egf.model/generated/org/eclipse/egf/model/types/util/TypesValidator.java b/plugins/org.eclipse.egf.model/generated/org/eclipse/egf/model/types/util/TypesValidator.java
index 7c21f29..05f2050 100644
--- a/plugins/org.eclipse.egf.model/generated/org/eclipse/egf/model/types/util/TypesValidator.java
+++ b/plugins/org.eclipse.egf.model/generated/org/eclipse/egf/model/types/util/TypesValidator.java
@@ -936,17 +936,7 @@
 		InputStream inputStream = null;

 		// Try to open an InputStream

 		try {

-			//TODO WIU switch runtime

-			//            if (typeURI.eResource() != null && typeURI.eResource() instanceof IPlatformFcoreProvider) {

-			//                IPlatformFcore fcore = ((IPlatformFcoreProvider) typeURI.eResource()).getIPlatformFcore();

-			//                if (fcore != null && fcore.isRuntime()) {

-			//                    inputStream = EGFPlatformPlugin.getRuntimePlatformURIConverter().createInputStream(uri);

-			//                } else {

-			//                    inputStream = EGFPlatformPlugin.getPlatformURIConverter().createInputStream(uri);

-			//                }

-			//            } else {

 			inputStream = EGFPlatformPlugin.getPlatformURIConverter().createInputStream(uri);

-			//            }

 		} catch (IOException exception) {

 			valid = false;

 		}

diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/buckminster.cspec b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/buckminster.cspec
index f6aded1..c39fe9a 100644
--- a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/buckminster.cspec
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/buckminster.cspec
@@ -4,6 +4,16 @@
 -->
 <cs:cspec xmlns:cs="http://www.eclipse.org/buckminster/CSpec-1.0" name="BuildStep_10" componentType="buckminster" version="1.0.0">
     <cs:dependencies>
+        <cs:dependency name="org.eclipse.egf.test" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.portfolio.task.ant.test" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.sdk" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.examples" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.portfolio.acceleo3" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.portfolio.acceleo3.examples" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.portfolio.atl" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.portfolio.atl.examples" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.portfolio.genchain.ecoretools" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.egf.releng2" componentType="osgi.bundle"/>
         <cs:dependency name="org.eclipse.equinox.executable" componentType="eclipse.feature"/>
         <cs:dependency name="org.eclipse.rcp" componentType="eclipse.feature"/>
     </cs:dependencies>
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/build.rmap b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/build.rmap
index 8528f57..f573c00 100644
--- a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/build.rmap
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/build.rmap
@@ -22,8 +22,204 @@
 	</searchPath>
 
 
-		<locator searchPathRef="BuildStep_10_UpdateSiteBuildLocation_1"  failOnError="false" />
-	<searchPath name="BuildStep_10_UpdateSiteBuildLocation_1">
+		<locator searchPathRef="BuildStep_10_GITBuildLocation_1" pattern="^org\.eclipse\.egf.*" failOnError="false" />
+	<searchPath name="BuildStep_10_GITBuildLocation_1">
+	    <!-- provider for windows if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file:/{0}/git/git_eclipse/plugins/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- provider for unix if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file://{0}/git/git_eclipse/plugins/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- standalone provider -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="git" source="true">
+			<property key="git.remote.uri" value="https://:@git.eclipse.org/r/egf/org.eclipse.emf.egf"/>
+      		<property key="git.auto.fetch" value="true"/>
+  			<uri format="{0}/git,plugins/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_10_GITBuildLocation_2" pattern="^org\.eclipse\.egf.*" failOnError="false" />
+	<searchPath name="BuildStep_10_GITBuildLocation_2">
+	    <!-- provider for windows if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file:/{0}/git/git_eclipse/doc/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- provider for unix if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file://{0}/git/git_eclipse/doc/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- standalone provider -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="git" source="true">
+			<property key="git.remote.uri" value="https://:@git.eclipse.org/r/egf/org.eclipse.emf.egf"/>
+      		<property key="git.auto.fetch" value="true"/>
+  			<uri format="{0}/git,doc/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_10_GITBuildLocation_3" pattern="^org\.eclipse\.egf.*" failOnError="false" />
+	<searchPath name="BuildStep_10_GITBuildLocation_3">
+	    <!-- provider for windows if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file:/{0}/git/git_eclipse/examples/workspace/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- provider for unix if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file://{0}/git/git_eclipse/examples/workspace/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- standalone provider -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="git" source="true">
+			<property key="git.remote.uri" value="https://:@git.eclipse.org/r/egf/org.eclipse.emf.egf"/>
+      		<property key="git.auto.fetch" value="true"/>
+  			<uri format="{0}/git,examples/workspace/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_10_GITBuildLocation_4" pattern="^org\.eclipse\.egf.*" failOnError="false" />
+	<searchPath name="BuildStep_10_GITBuildLocation_4">
+	    <!-- provider for windows if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file:/{0}/git/git_eclipse/features/{1}.feature">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- provider for unix if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file://{0}/git/git_eclipse/features/{1}.feature">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- standalone provider -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="git" source="true">
+			<property key="git.remote.uri" value="https://:@git.eclipse.org/r/egf/org.eclipse.emf.egf"/>
+      		<property key="git.auto.fetch" value="true"/>
+  			<uri format="{0}/git,features/{1}.feature">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_10_GITBuildLocation_5" pattern="^org\.eclipse\.egf.*" failOnError="false" />
+	<searchPath name="BuildStep_10_GITBuildLocation_5">
+	    <!-- provider for windows if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file:/{0}/git/git_eclipse/portfolio/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- provider for unix if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file://{0}/git/git_eclipse/portfolio/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- standalone provider -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="git" source="true">
+			<property key="git.remote.uri" value="https://:@git.eclipse.org/r/egf/org.eclipse.emf.egf"/>
+      		<property key="git.auto.fetch" value="true"/>
+  			<uri format="{0}/git,portfolio/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_10_GITBuildLocation_6" pattern="^org\.eclipse\.egf.*" failOnError="false" />
+	<searchPath name="BuildStep_10_GITBuildLocation_6">
+	    <!-- provider for windows if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file:/{0}/git/git_eclipse/tests/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- provider for unix if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file://{0}/git/git_eclipse/tests/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- standalone provider -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="git" source="true">
+			<property key="git.remote.uri" value="https://:@git.eclipse.org/r/egf/org.eclipse.emf.egf"/>
+      		<property key="git.auto.fetch" value="true"/>
+  			<uri format="{0}/git,tests/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_10_GITBuildLocation_7" pattern="^org\.eclipse\.egf.*" failOnError="false" />
+	<searchPath name="BuildStep_10_GITBuildLocation_7">
+	    <!-- provider for windows if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file:/{0}/git/git_eclipse/releng/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- provider for unix if checkouted with Hudson -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="local" source="true">
+			<uri format="file://{0}/git/git_eclipse/releng/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	    <!-- standalone provider -->
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="git" source="true">
+			<property key="git.remote.uri" value="https://:@git.eclipse.org/r/egf/org.eclipse.emf.egf"/>
+      		<property key="git.auto.fetch" value="true"/>
+  			<uri format="{0}/git,releng/{1}">
+				<bc:propertyRef key="build.root" />
+				<bc:propertyRef key="buckminster.component" />
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_10_UpdateSiteBuildLocation_8"  failOnError="false" />
+	<searchPath name="BuildStep_10_UpdateSiteBuildLocation_8">
 		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="p2" source="false" mutable="false">
 			<uri format="{0}">
 				<bc:replace>
@@ -34,4 +230,30 @@
 		</provider>
 	</searchPath>
 
+
+		<locator searchPathRef="BuildStep_10_UpdateSiteBuildLocation_9"  failOnError="false" />
+	<searchPath name="BuildStep_10_UpdateSiteBuildLocation_9">
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="p2" source="false" mutable="false">
+			<uri format="{0}">
+				<bc:replace>
+					<bc:constant value="${ecoretoolsSiteURL}" />
+					<bc:match pattern="\\" replacement="/" /> 
+				</bc:replace>
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_10_UpdateSiteBuildLocation_10" pattern="^" failOnError="false" />
+	<searchPath name="BuildStep_10_UpdateSiteBuildLocation_10">
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="p2" source="false" mutable="false">
+			<uri format="{0}">
+				<bc:replace>
+					<bc:constant value="${siriusSiteURL}" />
+					<bc:match pattern="\\" replacement="/" /> 
+				</bc:replace>
+			</uri>
+		</provider>
+	</searchPath>
+
 </rmap>
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/build.target b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/build.target
index 0575399..4de7f84 100644
--- a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/build.target
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_10/build.target
@@ -7,5 +7,7 @@
 <target name="build.target">
 	<locations>
 		<location path="${workspace_loc}/../tp" type="Directory"/>
+		<location path="${workspace_loc}/../tp" type="Directory"/>
+		<location path="${workspace_loc}/../tp" type="Directory"/>
 	</locations>
 </target>
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/buckminster.ant b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/buckminster.ant
new file mode 100644
index 0000000..31fdf18
--- /dev/null
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/buckminster.ant
@@ -0,0 +1,7 @@
+<project>
+	<import file="${buckminster.pdetasks}"/>
+
+	<target name="convertSiteToRuntime">
+		<buckminster.convertSiteToRuntime siteDir="${siteDir}" />
+	</target>
+</project>
\ No newline at end of file
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/buckminster.cspec b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/buckminster.cspec
new file mode 100644
index 0000000..b1b3f13
--- /dev/null
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/buckminster.cspec
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+This file was generated by Eclipse EGF
+-->
+<cs:cspec xmlns:cs="http://www.eclipse.org/buckminster/CSpec-1.0" name="BuildStep_12" componentType="buckminster" version="1.0.0">
+    <cs:dependencies>
+        <cs:dependency name="org.eclipse.equinox.executable" componentType="eclipse.feature"/>
+        <cs:dependency name="org.eclipse.rcp" componentType="eclipse.feature"/>
+    </cs:dependencies>
+    
+	<cs:actions>
+		<cs:public name="convertSiteToRuntime" actor="ant">
+			<cs:actorProperties>
+				<cs:property key="buildFile" value="buckminster.ant"/>
+				<cs:property key="targets" value="convertSiteToRuntime"/>
+			</cs:actorProperties>
+		</cs:public>
+	</cs:actions>
+</cs:cspec>
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.cquery b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.cquery
new file mode 100644
index 0000000..82f777d
--- /dev/null
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.cquery
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+This file was generated by Eclipse EGF
+-->
+<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="build.rmap">
+    <cq:rootRequest name="BuildStep_12" componentType="buckminster"/>
+
+    <!-- we ignore source plugin and feature by default -->
+    <cq:advisorNode namePattern=".*\.source" skipComponent="true"/>
+
+    <cq:advisorNode namePattern=".*" useMaterialization="false" useTargetPlatform="false"/>
+</cq:componentQuery>
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.mspec b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.mspec
new file mode 100644
index 0000000..a356729
--- /dev/null
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.mspec
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+This file was generated by Eclipse EGF
+-->
+<mspec:mspec xmlns:mspec="http://www.eclipse.org/buckminster/MetaData-1.0" materializer="p2" name="build.mspec" url="build.cquery">
+  <mspec:mspecNode materializer="workspace" namePattern="" filter="(buckminster.source=true)"/>
+</mspec:mspec>
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.rmap b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.rmap
new file mode 100644
index 0000000..52216b2
--- /dev/null
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.rmap
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+This file was generated by Eclipse EGF
+-->
+<rmap xmlns="http://www.eclipse.org/buckminster/RMap-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mp="http://www.eclipse.org/buckminster/MavenProvider-1.0"
+	xmlns:pmp="http://www.eclipse.org/buckminster/PDEMapProvider-1.0" xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0">
+
+	<locator searchPathRef="buckminster" failOnError="false" />
+	<searchPath name="buckminster">
+		<!-- buckminster provider for windows -->
+		<provider componentTypes="buckminster" readerType="local" source="true">
+			<uri format="file:/{0}/buckminster_BuildStep_12">
+				<bc:propertyRef key="relengDir" />
+			</uri>
+		</provider>
+		<!-- buckminster provider for unix -->
+		<provider componentTypes="buckminster" readerType="local" source="true">
+			<uri format="file://{0}/buckminster_BuildStep_12">
+				<bc:propertyRef key="relengDir" />
+			</uri>
+		</provider>
+	</searchPath>
+
+
+		<locator searchPathRef="BuildStep_12_UpdateSiteBuildLocation_1"  failOnError="false" />
+	<searchPath name="BuildStep_12_UpdateSiteBuildLocation_1">
+		<provider componentTypes="eclipse.feature,osgi.bundle" readerType="p2" source="false" mutable="false">
+			<uri format="{0}">
+				<bc:replace>
+					<bc:constant value="${updateSiteURL}" />
+					<bc:match pattern="\\" replacement="/" /> 
+				</bc:replace>
+			</uri>
+		</provider>
+	</searchPath>
+
+</rmap>
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.target b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.target
new file mode 100644
index 0000000..0575399
--- /dev/null
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/buckminster_BuildStep_12/build.target
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+This file was generated by Eclipse EGF
+-->
+<?pde version="3.5"?>
+
+<target name="build.target">
+	<locations>
+		<location path="${workspace_loc}/../tp" type="Directory"/>
+	</locations>
+</target>
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/build.properties b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/build.properties
index afd5b75..c75b027 100644
--- a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/build.properties
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/build.properties
@@ -1,52 +1,52 @@
 #This file was generated by Eclipse EGF
-

-#site servers

-eclipse.download.prefix=http://download.eclipse.org

-cloudsmith.download.prefix=http://download.cloudsmith.com

-polarion.download.prefix=http://community.polarion.com

-

-#director

-director.url=${eclipse.download.prefix}/tools/buckminster/products/director_latest.zip

-

-#buckminster installation

-buckminster.release=4.2

-bm.headless.site=${eclipse.download.prefix}/tools/buckminster/headless-${buckminster.release}

-bm.external.site=${cloudsmith.download.prefix}/buckminster/external-${buckminster.release}

-polarion.site=${polarion.download.prefix}/projects/subversive/download/eclipse/2.0/update-site/

-

-#egf installation

-egf.release=helios

-egf.site=${eclipse.download.prefix}/egf/updates/${egf.release}/official/

-egf.eclipse.site=${eclipse.download.prefix}/releases/${egf.release}

-

-#buckminster build

-buckminster.loglevel=INFO

-buckminster.output.root=${result}/output

-buckminster.temp.root=${result}/temp

-

-#buckminster qualifier

-qualifier.replacement.*=generator:buildTimestamp

-generator.buildTimestamp.format='v'yyyyMMdd-HHmm

-

-#buckminster signing

-signing.type=eclipse.local

-eclipse.staging.area=${result}/signing

-site.pack200=true

-site.retain.unpacked=true

-

-#buckminster : do not generate version range in manifest.mf and content.jar

-pde.bundle.range.generation=false

-

-build.root=${relengDir}/../workspace

-tools=${build.root}/tools

-result=${build.root}/result

-publish=${result}/publish

-workspace=${result}/workspace

-timestamp=${myTimestamp}

-releaseName=mars

-updateSiteURL=${eclipse.download.prefix}/releases/${releaseName}

-ecoretoolsSiteURL=${eclipse.download.prefix}/ecoretools/updates/nightly/3.0.x/luna

-siriusSiteURL=http://download.eclipse.org/sirius/updates/milestones/3.0.0rc2/mars

-eclipse.download.prefix=file:/home/data/httpd/download.eclipse.org

-eclipse.staging.area=/shared/download-staging.priv/modeling/egf/

-git.branch=master

+
+#site servers
+eclipse.download.prefix=http://download.eclipse.org
+cloudsmith.download.prefix=http://download.cloudsmith.com
+polarion.download.prefix=http://community.polarion.com
+
+#director
+director.url=${eclipse.download.prefix}/tools/buckminster/products/director_latest.zip
+
+#buckminster installation
+buckminster.release=4.2
+bm.headless.site=${eclipse.download.prefix}/tools/buckminster/headless-${buckminster.release}
+bm.external.site=${cloudsmith.download.prefix}/buckminster/external-${buckminster.release}
+polarion.site=${polarion.download.prefix}/projects/subversive/download/eclipse/2.0/update-site/
+
+#egf installation
+egf.release=helios
+egf.site=${eclipse.download.prefix}/egf/updates/${egf.release}/official/
+egf.eclipse.site=${eclipse.download.prefix}/releases/${egf.release}
+
+#buckminster build
+buckminster.loglevel=INFO
+buckminster.output.root=${result}/output
+buckminster.temp.root=${result}/temp
+
+#buckminster qualifier
+qualifier.replacement.*=generator:buildTimestamp
+generator.buildTimestamp.format='v'yyyyMMdd-HHmm
+
+#buckminster signing
+signing.type=eclipse.local
+eclipse.staging.area=${result}/signing
+site.pack200=true
+site.retain.unpacked=true
+
+#buckminster : do not generate version range in manifest.mf and content.jar
+pde.bundle.range.generation=false
+
+build.root=${relengDir}/../workspace
+tools=${build.root}/tools
+result=${build.root}/result
+publish=${result}/publish
+workspace=${result}/workspace
+timestamp=${myTimestamp}
+releaseName=mars
+updateSiteURL=${eclipse.download.prefix}/releases/${releaseName}
+ecoretoolsSiteURL=${eclipse.download.prefix}/ecoretools/updates/nightly/3.0.x/luna
+siriusSiteURL=http://download.eclipse.org/sirius/updates/milestones/3.0.0rc2/mars
+eclipse.download.prefix=file:/home/data/httpd/download.eclipse.org
+eclipse.staging.area=/shared/download-staging.priv/modeling/egf/
+git.branch=master
diff --git a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/build.xml b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/build.xml
index 922f80d..993599c 100644
--- a/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/build.xml
+++ b/releng/org.eclipse.egf.releng2/jobs/buckminster-egf-mars/releng/build.xml
@@ -315,14 +315,14 @@
         </echoproperties>
     </target>
 	
-	<target name="all" depends="CleanStep_1,CleanStep_2,BuildStep_3,PublishStep_4,PublishStep_5,InstallStep_6,AntStep_7,CleanStep_8,BuildStep_9,AntStep_10,BuildStep_11,TestStep_12,TestStep_13,EgfStep_14,PublishStep_15,EgfStep_16,PublishStep_17,EgfStep_18,PublishStep_19,PublishStep_20,AggregateStep_21,AntStep_22,JavadocStep_23" />
+	<target name="all" depends="CleanStep_1,CleanStep_2,BuildStep_3,PublishStep_4,PublishStep_5,InstallStep_6,InstallStep_7,AntStep_8,CleanStep_9,BuildStep_10,AntStep_11,BuildStep_12,TestStep_13,TestStep_14,EgfStep_15,PublishStep_16,EgfStep_17,PublishStep_18,EgfStep_19,PublishStep_20,PublishStep_21,AggregateStep_22,AntStep_23,JavadocStep_24" />
 	<target name="CleanStep_1" >
 		<antcall target="clean.result" />
 	</target>
 	<target name="CleanStep_2" >
 		<antcall target="clean.workspace" />
 	</target>
-	<target name="CleanStep_8" >
+	<target name="CleanStep_9" >
 		<antcall target="clean.result" />
 	</target>
     <target name="BuildStep_3" depends="init,install.buckminster">
@@ -362,7 +362,7 @@
 		</buckminster>
     </target>
 
-    <target name="BuildStep_9" depends="init,install.buckminster">
+    <target name="BuildStep_10" depends="init,install.buckminster">
         <echo message="Importing projects into workspace ${workspace} and binaries into target platform" />
 
 		<echo message="install JRE ${env.JAVA_HOME}" />
@@ -378,14 +378,14 @@
         <buckminster command="importtargetdefinition">
             <cmdargs>
                 <arg value="--active" />
-                <arg value="${relengDir}/buckminster_BuildStep_9/build.target" />
+                <arg value="${relengDir}/buckminster_BuildStep_10/build.target" />
             </cmdargs>
         </buckminster>
 		<echo message="provision : import projects in workspace" />
         <buckminster command="import">
             <!-- Uncomment to debug <globargs><jvmarg value="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"/></globargs> -->
             <cmdargs>
-                <arg value="${relengDir}/buckminster_BuildStep_9/build.mspec" />
+                <arg value="${relengDir}/buckminster_BuildStep_10/build.mspec" />
             </cmdargs>
         </buckminster>
 
@@ -393,7 +393,7 @@
         <echo message="No builders invocation specified" />
     </target>
 
-    <target name="BuildStep_11" depends="init,install.buckminster">
+    <target name="BuildStep_12" depends="init,install.buckminster">
         <echo message="Importing projects into workspace ${workspace} and binaries into target platform" />
 
 		<echo message="install JRE ${env.JAVA_HOME}" />
@@ -409,14 +409,14 @@
         <buckminster command="importtargetdefinition">
             <cmdargs>
                 <arg value="--active" />
-                <arg value="${relengDir}/buckminster_BuildStep_11/build.target" />
+                <arg value="${relengDir}/buckminster_BuildStep_12/build.target" />
             </cmdargs>
         </buckminster>
 		<echo message="provision : import projects in workspace" />
         <buckminster command="import">
             <!-- Uncomment to debug <globargs><jvmarg value="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"/></globargs> -->
             <cmdargs>
-                <arg value="${relengDir}/buckminster_BuildStep_11/build.mspec" />
+                <arg value="${relengDir}/buckminster_BuildStep_12/build.mspec" />
             </cmdargs>
         </buckminster>
 
@@ -488,7 +488,7 @@
 		
 	</target>
 
-	<target name="PublishStep_15" depends="init,install.buckminster" >
+	<target name="PublishStep_16" depends="init,install.buckminster" >
 
 		
 		<echo message="Generate Site"/>
@@ -517,7 +517,7 @@
 		
 	</target>
 
-	<target name="PublishStep_17" depends="init,install.buckminster" >
+	<target name="PublishStep_18" depends="init,install.buckminster" >
 
 		
 		<echo message="Generate Site"/>
@@ -546,7 +546,7 @@
 		
 	</target>
 
-	<target name="PublishStep_19" depends="init,install.buckminster" >
+	<target name="PublishStep_20" depends="init,install.buckminster" >
 
 		
 		<echo message="Generate Site"/>
@@ -575,7 +575,7 @@
 		
 	</target>
 
-	<target name="PublishStep_20" depends="init,install.buckminster" >
+	<target name="PublishStep_21" depends="init,install.buckminster" >
 
 		
 		<echo message="Generate Site"/>
@@ -604,26 +604,12 @@
 		
 	</target>
 
-	<target name="TestStep_12" depends="init,install.buckminster">
-	  <echo message="Running Junit tests " />
-      <buckminster command="junit">
-        <cmdargs>
-          <arg value="-l" />
-          <arg value="org.eclipse.egf.core.test/EGF_Core_Tests.launch" />
-          <arg value="-o" />
-          <arg value="${result}/testReportTestStep_12.xml" />
-          <arg value="--terseXML" />
-          <arg value="--flatXML"/>
-        </cmdargs>
-      </buckminster>
-	</target>
-
 	<target name="TestStep_13" depends="init,install.buckminster">
 	  <echo message="Running Junit tests " />
       <buckminster command="junit">
         <cmdargs>
           <arg value="-l" />
-          <arg value="org.eclipse.egf.portfolio.task.ant.test/Ant_Tests.launch" />
+          <arg value="org.eclipse.egf.core.test/EGF_Core_Tests.launch" />
           <arg value="-o" />
           <arg value="${result}/testReportTestStep_13.xml" />
           <arg value="--terseXML" />
@@ -632,8 +618,22 @@
       </buckminster>
 	</target>
 
+	<target name="TestStep_14" depends="init,install.buckminster">
+	  <echo message="Running Junit tests " />
+      <buckminster command="junit">
+        <cmdargs>
+          <arg value="-l" />
+          <arg value="org.eclipse.egf.portfolio.task.ant.test/Ant_Tests.launch" />
+          <arg value="-o" />
+          <arg value="${result}/testReportTestStep_14.xml" />
+          <arg value="--terseXML" />
+          <arg value="--flatXML"/>
+        </cmdargs>
+      </buckminster>
+	</target>
 
-	<target name="AntStep_7">
+
+	<target name="AntStep_8">
 		<antcall target="copy_egf_to_tools"/>
 	</target>
 
@@ -644,7 +644,7 @@
 	</copy>
 </target>
 
-	<target name="AntStep_10" depends="init,install.egf" >
+	<target name="AntStep_11" depends="init,install.egf" >
 		<anteclipse target="recompile_egf_patterns" />
 	</target>	
 
@@ -656,7 +656,7 @@
 </target>
 
 
-	<target name="AntStep_22">
+	<target name="AntStep_23">
 		<antcall target="stats"/>
 	</target>
 
@@ -678,7 +678,7 @@
 	<delete file="${p2.site.path}/artifacts.xml.orig" />
 </target>
 
-	<target name="JavadocStep_23">
+	<target name="JavadocStep_24">
 		<delete dir="${build.root}/../javadoc" />
 		<javadoc
 			destdir="${build.root}/../javadoc"
@@ -709,7 +709,7 @@
 	</javadoc>
 </target>
 
-	<target name="EgfStep_14" depends="init,install.egf">
+	<target name="EgfStep_15" depends="init,install.egf">
 		<egf>
             <globargs>
 				<jvmarg value="-Degf.target.bundle.priority=true" />
@@ -722,7 +722,7 @@
 			</activities>
 		</egf>
 	</target>
-	<target name="EgfStep_16" depends="init,install.egf">
+	<target name="EgfStep_17" depends="init,install.egf">
 		<egf>
             <globargs>
 				<jvmarg value="-Degf.target.bundle.priority=true" />
@@ -735,7 +735,7 @@
 			</activities>
 		</egf>
 	</target>
-	<target name="EgfStep_18" depends="init,install.egf">
+	<target name="EgfStep_19" depends="init,install.egf">
 		<egf>
             <globargs>
 				<jvmarg value="-Degf.target.bundle.priority=true" />
@@ -748,15 +748,15 @@
 			</activities>
 		</egf>
 	</target>
-	<target name="AggregateStep_21" depends="init,install.egf" >
-		<anteclipse target="AggregateStep_21_dropins" />
-		<anteclipse target="AggregateStep_21_sitep2" />
+	<target name="AggregateStep_22" depends="init,install.egf" >
+		<anteclipse target="AggregateStep_22_dropins" />
+		<anteclipse target="AggregateStep_22_sitep2" />
 	</target>	
 
-	<target name="AggregateStep_21_dropins">
+	<target name="AggregateStep_22_dropins">
 	</target>	
 
-	<target name="AggregateStep_21_sitep2">
+	<target name="AggregateStep_22_sitep2">
 		<!-- see http://wiki.eclipse.org/Equinox/p2/Ant_Tasks -->
 		<p2.mirror>
 			<repository location="file:/${publish}/org.eclipse.egf.site/site.p2" name="buckminster-egf-mars/org.eclipse.egf.site" />
@@ -800,15 +800,56 @@
                 <arg value="-r" />
                 <arg value="${updateSiteURL}" />
 
-                <arg value="-r" />
-                <arg value="file:/${publish}/org.eclipse.egf/site.p2" />
-                <arg value="-r" />
-                <arg value="file:/${publish}/org.eclipse.egf.releng/site.p2" />
                 
 
                 <arg value="-i" />
                 <arg value="org.eclipse.platform.ide" />
 
+
+            </args>
+        </eclipse.launch>
+	</target>	
+	<target name="InstallStep_7" depends="init,install.director" >
+        <eclipse.launch app="director">
+            <args>
+                <jvmarg value="-Declipse.p2.mirrors=false" />
+                    <jvmarg value="-Xmx1024m"/>
+                    <jvmarg value="-XX:MaxPermSize=256m"/>
+                    
+                    <jvmarg value="-Dhttp.proxyHost=proxy.eclipse.org"/>
+                    <jvmarg value="-Dhttp.proxyPort=9898"/>
+                    <jvmarg value="-Dhttps.proxyHost=proxy.eclipse.org"/>
+                    <jvmarg value="-Dhttps.proxyPort=9898"/>
+                    <jvmarg value="-Dhttp.nonProxyHosts=*.eclipse.org"/>
+                    <jvmarg value="-Dhttps.nonProxyHosts=*.eclipse.org"/>
+                    <jvmarg value="-Dftp.proxyHost=proxy.eclipse.org"/>
+                    <jvmarg value="-Dftp.proxyPort=9898"/>
+                    <jvmarg value="-Dftp.nonProxyHosts=*.eclipse.org"/>
+
+
+
+            	<arg value="-roaming" />
+            	<arg value="-profileProperties" />
+                <arg value="org.eclipse.update.install.features=true " />
+
+                <arg value="-d" />
+                <arg value="${publish}/egf" />
+                
+                <arg value="-p" />
+                <arg value="EGF" />
+
+                <arg value="-r" />
+                <arg value="${updateSiteURL}" />
+
+                <arg value="-r" />
+                <arg value="file:/${publish}/org.eclipse.egf/site.p2" />
+                <arg value="-r" />
+                <arg value="file:/${publish}/org.eclipse.egf.releng/site.p2" />
+
+                <arg value="-i" />
+                <arg value="org.eclipse.egf.feature.group" />                
+
+
                 <arg value="-i" />
                 <arg value="org.eclipse.egf.feature.group" />
                 <arg value="-i" />
diff --git a/releng/org.eclipse.egf.releng2/model/buckminster-egf-mars.egfbuild b/releng/org.eclipse.egf.releng2/model/buckminster-egf-mars.egfbuild
index 5298b95..db34202 100644
--- a/releng/org.eclipse.egf.releng2/model/buckminster-egf-mars.egfbuild
+++ b/releng/org.eclipse.egf.releng2/model/buckminster-egf-mars.egfbuild
@@ -21,10 +21,14 @@
   </steps>
   <steps xsi:type="buildstep:PublishStep" xmi:id="_s3vmwKSsEeWdJq8DhT0Nfw" component="_wQp78KSvEeWdJq8DhT0Nfw"/>
   <steps xsi:type="buildstep:PublishStep" xmi:id="_-TnB8AF8EeGO5KzPHjNKFQ" component="_2fryrgF8EeGO5KzPHjNKFQ"/>
-  <steps xsi:type="buildstep:InstallStep" xmi:id="_BfnD4AF9EeGO5KzPHjNKFQ" id="egf" profile="EGF" resultSteps="_-TnB8AF8EeGO5KzPHjNKFQ _s3vmwKSsEeWdJq8DhT0Nfw">
+  <steps xsi:type="buildstep:InstallStep" xmi:id="_BfnD4AF9EeGO5KzPHjNKFQ" id="egf" profile="EGF">
     <updateSiteUrls>${updateSiteURL}</updateSiteUrls>
     <productNames>org.eclipse.platform.ide</productNames>
   </steps>
+  <steps xsi:type="buildstep:InstallStep" xmi:id="_27Q7ULXdEeWcK7feYwOw2Q" id="egf" profile="EGF" resultSteps="_-TnB8AF8EeGO5KzPHjNKFQ _s3vmwKSsEeWdJq8DhT0Nfw" p2_os="">
+    <updateSiteUrls>${updateSiteURL}</updateSiteUrls>
+    <featureNames>org.eclipse.egf</featureNames>
+  </steps>
   <steps xsi:type="buildstep:AntStep" xmi:id="_bfnpIAF9EeGO5KzPHjNKFQ" targetName="copy_egf_to_tools" xml="&lt;target name=&quot;copy_egf_to_tools&quot;>&#xD;&#xA;&#x9;&lt;delete dir=&quot;${tools}/egf&quot;/>&#xD;&#xA;&#x9;&lt;copy todir=&quot;${tools}/egf&quot;>&#xD;&#xA;&#x9;&#x9;&lt;fileset dir=&quot;${publish}/egf&quot;/>&#xD;&#xA;&#x9;&lt;/copy>&#xD;&#xA;&lt;/target>"/>
   <steps xsi:type="buildstep:CleanStep" xmi:id="_Y0Q2IAF9EeGO5KzPHjNKFQ" type="Result"/>
   <steps xsi:type="buildstep:BuildStep" xmi:id="_VP8DASR_EeCpI_U_Er6QNA" noBuildersInvocation="true">