blob: 0a8d2f87f24b4a3a9bf5f158dcb982c5e2b51bbc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2007 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
/*
* Created on Mar 3, 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package org.eclipse.wst.common.internal.emfworkbench.edit;
import java.util.Hashtable;
import java.util.Map;
import org.eclipse.core.internal.jobs.LockManager;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.jobs.ILock;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jem.internal.util.emf.workbench.EMFWorkbenchContextFactory;
import org.eclipse.jem.util.emf.workbench.EMFWorkbenchContextBase;
import org.eclipse.jem.util.emf.workbench.IEMFContextContributor;
import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
import org.eclipse.wst.common.internal.emfworkbench.integration.ResourceSetWorkbenchEditSynchronizer;
/**
* @author schacher
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class EMFWorkbenchEditContextFactory extends EMFWorkbenchContextFactory {
/**
*
*/
public EMFWorkbenchEditContextFactory() {
super();
}
protected EMFWorkbenchContextBase primCreateEMFContext(IProject aProject) {
return new EMFWorkbenchContext(aProject);
}
public ResourceSetWorkbenchSynchronizer createSynchronizer(ResourceSet aResourceSet, IProject aProject) {
return new ResourceSetWorkbenchEditSynchronizer(aResourceSet, aProject);
}
protected static LockManager lockManager = new LockManager();
protected static Map projectLocks = new Hashtable();
public static ILock getProjectLockObject(IProject aProject){
if(null == aProject){
return null;
}
Integer hashCode = new Integer(aProject.hashCode());
synchronized (projectLocks) {
ILock lock = (ILock)projectLocks.get(hashCode);
if(lock == null){
lock = lockManager.newLock();
projectLocks.put(hashCode, lock);
}
return lock;
}
}
public EMFWorkbenchContextBase createEMFContext(IProject aProject, IEMFContextContributor contributor) {
ILock lock = getProjectLockObject(aProject);
try{
if(null != lock){
lock.acquire();
}
return super.createEMFContext(aProject, contributor);
} finally{
if(null != lock){
lock.release();
}
}
}
protected EMFWorkbenchContextBase getCachedEMFContext(IProject aProject) {
ILock lock = getProjectLockObject(aProject);
try{
if(null != lock){
lock.acquire();
}
return super.getCachedEMFContext(aProject);
} finally{
if(null != lock){
lock.release();
}
}
}
}