/* * 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.resource; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.xmi.XMLResource; import org.teiid.core.designer.id.IDGenerator; import org.teiid.designer.core.resource.xmi.MtkXmiResourceImpl; /** * @author John Verhaeg * * @since 8.0 */ public final class XResourceDelegate extends XmlXResourceDelegate { private Map<String, EObject> uuidToEObjectMap = new HashMap<String, EObject>(); private Map<EObject, String> eObjectToUuidMap = new HashMap<EObject, String>(); public void attachedHelper( EObject eObject ) { String uuid = eObjectToUuidMap.get(eObject); if (uuid == null) { uuid = MtkXmiResourceImpl.DETACHED_EOBJECT_TO_UUID_MAP.remove(eObject); if (uuid == null) { uuid = IDGenerator.getInstance().create().toString(); } else { MtkXmiResourceImpl.DETACHED_UUID_TO_EOBJECT_MAP.remove(uuid); } setUuid(eObject, uuid); } else { uuidToEObjectMap.put(uuid, eObject); } } /** * Unsupported operation. * <p> * {@inheritDoc} * </p> * * @see org.teiid.designer.core.resource.XmlXResourceDelegate#attachedHelper(org.eclipse.emf.ecore.xmi.XMLResource, * org.eclipse.emf.ecore.EObject) */ @Override public void attachedHelper( XMLResource resource, EObject object ) { throw new UnsupportedOperationException(); } public void detachedHelper( EObject eObject ) { String uuid = getUuid(eObject); MtkXmiResourceImpl.DETACHED_EOBJECT_TO_UUID_MAP.put(eObject, uuid); MtkXmiResourceImpl.DETACHED_UUID_TO_EOBJECT_MAP.put(uuid, eObject); setUuid(eObject, null); } /** * Unsupported operation. * <p> * {@inheritDoc} * </p> * * @see org.teiid.designer.core.resource.XmlXResourceDelegate#detachedHelper(org.eclipse.emf.ecore.xmi.XMLResource, * org.eclipse.emf.ecore.EObject) */ @Override public void detachedHelper( XMLResource resource, EObject object ) { throw new UnsupportedOperationException(); } public void doUnload() { eObjectToUuidMap.clear(); uuidToEObjectMap.clear(); } public EObject getEObjectById( String uuid ) { return uuidToEObjectMap.get(uuid); } public String getUuid( EObject eObject ) { return eObjectToUuidMap.get(eObject); } /** * <p> * {@inheritDoc} * </p> * * @see org.teiid.designer.core.resource.XmlXResourceDelegate#initialize(org.eclipse.emf.ecore.xmi.XMLResource) */ @Override public void initialize( XMLResource resource ) { throw new UnsupportedOperationException(); } public void setUuid( EObject eObject, String uuid ) { Object oldUuid = uuid != null ? eObjectToUuidMap.put(eObject, uuid) : eObjectToUuidMap.remove(eObject); if (oldUuid != null) { uuidToEObjectMap.remove(oldUuid); } if (uuid != null) { uuidToEObjectMap.put(uuid, eObject); } } public String toKeyString() { StringBuilder result = new StringBuilder(); result.append(getClass().toString()); if (uuidToEObjectMap != null) { TreeMap<String, String> tree = new TreeMap<String, String>(); for (String key : uuidToEObjectMap.keySet()) { if (key != null) { tree.put(key, key); } } // add the key/value pairs to the output string for (String key : tree.values()) { Object value = uuidToEObjectMap.get(key); result.append("\r\n\t[").append(key).append("=").append(value).append("]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } return result.toString(); } }