blob: bedff60f22205f764787224c751e02c53f55e1ae [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
*******************************************************************************/
/*
* $$RCSfile: EMFWorkbenchContextBase.java,v $$
* $$Revision: 1.2 $$ $$Date: 2005/02/15 23:04:14 $$
*/
package org.eclipse.jem.util.emf.workbench;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jem.internal.util.emf.workbench.*;
import org.eclipse.jem.internal.util.emf.workbench.nls.EMFWorkbenchResourceHandler;
import org.eclipse.jem.util.plugin.JEMUtilPlugin;
/**
* ContextBase for EMFWorkbench.
*
* <p>
* This is meant to be subclassed as needed for additional or override function. It will be instantiated by default.
* </p>
*
* @since 1.0.0
*/
public class EMFWorkbenchContextBase {
protected IProject project;
protected ProjectResourceSet resourceSet;
/**
* Construct with a project.
*
* @param aProject
*
* @since 1.0.0
*/
public EMFWorkbenchContextBase(IProject aProject) {
if (aProject == null)
throw new IllegalArgumentException(EMFWorkbenchResourceHandler.getString("EMFWorkbenchContextBase_ERROR_1")); //$NON-NLS-1$
project = aProject;
}
/**
* Dispose of the context base.
*
*
* @since 1.0.0
*/
public void dispose() {
if (resourceSet != null)
resourceSet.release();
resourceSet = null;
project = null;
}
/**
* Get the project this context is associated with.
*
* @return project
*
* @since 1.0.0
*/
public IProject getProject() {
return project;
}
/**
* Return the resource set (creating if needed) for context.
*
* @return resource set
*
* @since 1.0.0
*/
public ProjectResourceSet getResourceSet() {
if (resourceSet == null) {
resourceSet = createResourceSet();
initializeResourceSet(resourceSet);
}
return resourceSet;
}
/**
* Used for optimization; answer whether a resourceSet has been created
*
* @return <code>true</code> if a resource set has been created.
*
* @since 1.0.0
*/
public boolean hasResourceSet() {
return resourceSet != null;
}
/**
* Initialize the resource set.
*
* @param aResourceSet
*
* @since 1.0.0
*/
protected void initializeResourceSet(ProjectResourceSet aResourceSet) {
createResourceSetSynchronizer(aResourceSet);
aResourceSet.setURIConverter(createURIConverter(aResourceSet));
aResourceSet.add(new WorkspaceResourceHandler());
JEMUtilPlugin.getDefault().addExtendedResourceHandlers(aResourceSet);
}
/**
* Create the resource set. By default it is a ProjectResourceSetImpl.
*
* @return project's new resource set.
*
* @since 1.0.0
*/
protected ProjectResourceSet createResourceSet() {
if (project == null)
throw new IllegalStateException(EMFWorkbenchResourceHandler.getString("EMFWorkbenchContextBase_ERROR_2")); //$NON-NLS-1$
return new ProjectResourceSetImpl(project);
}
/**
* Create a URIConverter for the resource set.
*
* @param aResourceSet
* @return a uri converter.
*
* @since 1.0.0
*/
protected WorkbenchURIConverter createURIConverter(ProjectResourceSet aResourceSet) {
return new WorkbenchURIConverterImpl(getProject(), aResourceSet.getSynchronizer());
}
/**
* Create a resource set workbench synchronizer.
*
* @param aResourceSet
* @return a resource set workbench synchronizer.
*
* @since 1.0.0
*/
protected ResourceSetWorkbenchSynchronizer createResourceSetSynchronizer(ProjectResourceSet aResourceSet) {
return EMFWorkbenchContextFactory.INSTANCE.createSynchronizer(aResourceSet, getProject());
}
/**
* Delete the resource from the workspace.
*
* @param aResource
* @throws CoreException
*
* @since 1.0.0
*/
public void deleteResource(Resource aResource) throws CoreException {
if (aResource != null)
deleteFile(aResource);
}
/**
* Delete the file associated with the resource.
*
* @param resource
*
* @since 1.0.0
*/
public void deleteFile(Resource resource) {
throw new UnsupportedOperationException(EMFWorkbenchResourceHandler.getString("EMFWorkbenchContextBase_ERROR_0")); //$NON-NLS-1$
}
/**
* Get resource (with the given URI) from the project resource set. Load it if not already loaded.
*
* @param uri
* @return resource for the uri, or <code>null</code> if not found.
*
* @since 1.0.0
*/
public Resource getResource(URI uri) {
return this.resourceSet.getResource(uri, true);
}
}