blob: 221299c0c675fe54754fbc7bf27d254ba8b56fb0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 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 Feb 17, 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.eclipse.jst.j2ee.navigator.internal;
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
/**
* @author Admin
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class NonFlexibleEMFModelManager extends EMFModelManager implements EditModelListener{
private EditModel editModel;
private Object rootObject;
private static final Object[] EMPTY_OBJECT = new Object[0];
/**
* @param aProject
* @param provider
*/
public NonFlexibleEMFModelManager(IProject aProject, EMFRootObjectProvider provider) {
super(aProject, provider);
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see org.eclipse.jst.j2ee.navigator.internal.EMFModelManager#getModels()
*/
public Object[] getModels() {
// TODO Auto-generated method stub
if (getProject() == null || !getProject().isAccessible())
return EMPTY_OBJECT;
//synchronized (rootObject) {
if (rootObject == null || ((EObject) rootObject).eResource() == null) {
EditModel editModel = getEditModel();
if (editModel != null) {
rootObject = editModel.getPrimaryRootObject();
}
}
//}
if (rootObject==null)
return EMPTY_OBJECT;
else {
Object[] objects = new Object[1];
objects[0] = rootObject;
return objects;
}
}
/* (non-Javadoc)
* @see org.eclipse.jst.j2ee.navigator.internal.EMFModelManager#dispose()
*/
public void dispose() {
if (editModel != null) {
editModel.removeListener(this);
editModel.releaseAccess(this);
editModel = null;
}
}
/* (non-Javadoc)
* @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener#editModelChanged(org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent)
*/
public void editModelChanged(EditModelEvent anEvent) {
IProject affectedProject = anEvent.getEditModel().getProject();
switch (anEvent.getEventCode()) {
case EditModelEvent.UNLOADED_RESOURCE :
case EditModelEvent.REMOVED_RESOURCE :
if (rootObject != null){
notifyListeners(affectedProject);
}
break;
case EditModelEvent.SAVE : {
if (rootObject == null)
notifyListeners(affectedProject);
}
break;
case EditModelEvent.PRE_DISPOSE :
dispose();
break;
default :
break;
}
}
protected EditModel getEditModel() {
IProject project = getProject();
if (project == null)
return null;
//TODO fix up
//synchronized (editModel) {
// if (editModel == null && project.isAccessible()) {
// //System.out.println("getEditModelForProject " + project.getName());
// J2EENature nature = J2EENature.getRegisteredRuntime(project);
// if (nature != null) {
// editModel = nature.getJ2EEEditModelForRead(this);
// if (editModel != null) {
// editModel.addListener(this);
// }
// }
// }
//}
return editModel;
}
protected void disposeCache(IProject affectedProject) {
//synchronized (editModel) {
if (editModel != null) {
editModel.removeListener(this);
editModel.releaseAccess(this);
editModel = null;
}
//}
}
}