/*
* 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.container;
import java.util.Collection;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.teiid.core.designer.id.UUID;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.core.resource.XResource;
import org.teiid.designer.core.resource.xmi.MtkXmiResourceImpl;
/**
* ObjectManager - manager of maps containing EObject instances for models in the workspace. The maps are keyed on the UUID
* associated with the EObject. Models not found in the "Model Container" cannot be found through the ObjectManager.
*
* @since 8.0
*/
public class ObjectManagerImpl implements ObjectManager {
private final Container container;
public ObjectManagerImpl( final Container container ) {
CoreArgCheck.isNotNull(container);
this.container = container;
}
/**
* @see org.teiid.designer.core.container.ObjectManager#addEObject(org.eclipse.emf.ecore.EObject)
*/
public void addEObject( EObject eObject ) {
}
/**
* @see org.teiid.designer.core.container.ObjectManager#clear()
*/
public void clear() {
}
/**
* @see org.teiid.designer.core.container.ObjectManager#findEObject(java.lang.String)
*/
@Override
public EObject findEObject( String id ) {
CoreArgCheck.isNotNull(id);
// loop through resource sets resources, calling resource.getEObject()
for (Resource resrc : container.getResources()) {
if (resrc.isLoaded()) {
EObject obj = findEObject(id, resrc);
if (obj != null) {
return obj;
}
}
}
// check unattached objects
//return MtkXmiResourceImpl.DETACHED_UUID_TO_EOBJECT_MAP.get(id);
return null;
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.container.ObjectManager#findEObject(java.lang.String, org.eclipse.emf.ecore.resource.Resource)
*/
@Override
public EObject findEObject( String id,
Resource resource ) {
CoreArgCheck.isNotNull(resource);
return resource.getEObject(id);
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.container.ObjectManager#getObjectId(org.eclipse.emf.ecore.EObject)
*/
@Override
public String getObjectId( EObject object ) {
CoreArgCheck.isNotNull(object);
Resource resrc = object.eResource();
if (resrc == null) {
// check unattached objects
return MtkXmiResourceImpl.DETACHED_EOBJECT_TO_UUID_MAP.get(object);
}
String uuid = resrc instanceof XResource ? ((XResource)resrc).getUuid(object) : resrc.getURIFragment(object);
if ((uuid != null) && uuid.startsWith(UUID.PROTOCOL)) {
return uuid;
}
return null;
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.container.ObjectManager#processMassAdd(java.util.Collection)
*/
public void processMassAdd( Collection newObjects ) {
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.container.ObjectManager#processMassRemove(java.util.Collection)
*/
public void processMassRemove( Collection objects ) {
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.container.ObjectManager#processResourceChange(java.lang.Object,
* org.eclipse.emf.ecore.resource.Resource, org.eclipse.emf.ecore.resource.Resource)
*/
public void processResourceChange( Object eObject,
Resource newResource,
Resource oldResource ) {
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.container.ObjectManager#removeEObject(org.eclipse.emf.ecore.EObject)
*/
public void removeEObject( EObject eObject ) {
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.container.ObjectManager#setObjectId(org.eclipse.emf.ecore.EObject, java.lang.String)
*/
@Override
public void setObjectId( EObject object,
String uuid ) {
Resource resrc = object.eResource();
if (resrc instanceof XResource) {
((XResource)resrc).setUuid(object, uuid);
} else {
MtkXmiResourceImpl.DETACHED_EOBJECT_TO_UUID_MAP.put(object, uuid);
MtkXmiResourceImpl.DETACHED_UUID_TO_EOBJECT_MAP.put(uuid, object);
}
}
}