/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.core.workspace;
import java.util.List;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.ecore.EObject;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.util.ModelContents;
import org.teiid.designer.core.util.ModelResourceContainerFactory;
import org.teiid.designer.metamodels.diagram.Diagram;
/**
* ModelDiagramsImpl
*
* @since 8.0
*/
public class ModelDiagramsImpl extends NonOpenableModelWorkspaceItemImpl implements ModelDiagrams {
protected static final String DEFAULT_NAME = ModelerCore.Util.getString("ModelDiagramsImpl.defaultName"); //$NON-NLS-1$
/**
* Constructor needed for test cases.
*/
ModelDiagramsImpl() {
super(DIAGRAMS, null, DEFAULT_NAME);
}
/**
* Construct an instance of ModelProjectImpl.
*
* @since 4.0
*/
public ModelDiagramsImpl( final ModelWorkspaceItem parent ) {
super(DIAGRAMS, parent, DEFAULT_NAME);
}
public ModelResource getModelResource() {
return (ModelResource)this.getParent();
}
/* (non-Javadoc)
* @See org.teiid.designer.core.workspace.ModelWorkspaceItem#getResource()
*/
@Override
public IResource getResource() {
return this.getModelResource().getResource();
}
/* (non-Javadoc)
* @See org.teiid.designer.core.workspace.ModelWorkspaceItem#getUnderlyingResource()
*/
@Override
public IResource getUnderlyingResource() {
return getResource();
}
/* (non-Javadoc)
* @See org.teiid.designer.core.workspace.ModelWorkspaceItem#getPath()
*/
@Override
public IPath getPath() {
return this.getModelResource().getPath();
}
protected ModelBufferImpl getModelBuffer() throws ModelWorkspaceException {
final ModelResourceImpl modelResourceImpl = (ModelResourceImpl)this.getModelResource();
return (ModelBufferImpl)modelResourceImpl.getBuffer(); // loads if req'd
}
/* (non-Javadoc)
* @See org.teiid.designer.core.workspace.ModelResource#getDiagrams(org.eclipse.emf.ecore.EObject)
*/
@Override
public List getDiagrams( final EObject target ) throws ModelWorkspaceException {
final ModelBufferImpl buffer = getModelBuffer();
final ModelContents contents = buffer.getModelContents();
if (contents == null) {
final Object[] params = new Object[] {this.getParent().getPath()};
final String msg = ModelerCore.Util.getString("ModelDiagramsImpl.No_ModelContents_found_for_resource", params); //$NON-NLS-1$
CoreArgCheck.isTrue(false, msg);
}
return contents.getDiagrams(target);
}
/* (non-Javadoc)
* @See org.teiid.designer.core.workspace.ModelResource#getDiagrams(org.eclipse.emf.ecore.EObject)
*/
@Override
public List getDiagrams() throws ModelWorkspaceException {
return getModelBuffer().getModelContents().getDiagrams();
}
/**
* This method provides a robust method to completely create a diagram and add it correctly to a ModelResource. This is
* accomplished by specifically calling a ModelResourceContainerFactory method which requires a Resource. This call will
* assert this requirement. If user desires to create an diagram with fewer restrictions... see
* org.teiid.designer.core.util.ModelResourceContainerFactory.createNewDiagram(...) methods.
*
* @see org.teiid.designer.core.workspace.ModelDiagrams#createNewDiagram(org.eclipse.emf.ecore.EObject, boolean)
* @since 4.3
*/
@Override
public Diagram createNewDiagram( final EObject target,
final boolean persistent ) throws ModelWorkspaceException {
EObject finalTarget = target;
if (finalTarget == null) finalTarget = getModelBuffer().getModelContents().getModelAnnotation();
return ModelResourceContainerFactory.createNewDiagram(finalTarget, getModelResource().getEmfResource(), persistent);
}
/* (non-Javadoc)
* @See org.teiid.designer.core.workspace.ModelDiagrams#delete(org.teiid.designer.metamodels.diagram.Diagram)
*/
@Override
public boolean delete( final Diagram diagram ) {
return ModelResourceContainerFactory.deleteDiagram(diagram);
}
/* (non-Javadoc)
* @See org.teiid.designer.core.workspace.ModelDiagrams#isPersistent(org.teiid.designer.metamodels.diagram.Diagram)
*/
@Override
public boolean isPersistent( final Diagram diagram ) {
return ModelResourceContainerFactory.isPersistent(diagram);
}
/**
* This method assumes a diagram is changing persistence and it already exists in a model resource or ModelContents
*
* @see org.teiid.designer.core.workspace.ModelDiagrams#setPersistent(org.teiid.designer.metamodels.diagram.Diagram, boolean)
* @since 4.3
*/
@Override
public void setPersistent( final Diagram diagram,
boolean persistent ) throws ModelWorkspaceException {
if (persistent == isPersistent(diagram)) {
return;
}
ModelResourceContainerFactory.setDiagramPersistence(diagram, getModelResource().getEmfResource(), persistent);
}
/* (non-Javadoc)
* @See org.teiid.designer.core.workspace.ModelWorkspaceItem#getOpenable()
*/
@Override
public Openable getOpenable() {
return getOpenableParent();
}
}