/* * 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.metamodels.xsd; import java.io.IOException; import java.io.InputStream; import java.util.Map; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.xsd.util.XSDResourceFactoryImpl; import org.eclipse.xsd.util.XSDResourceImpl; import org.teiid.core.designer.id.UUID; import org.teiid.designer.core.resource.XResource; import org.teiid.designer.core.resource.XResourceDelegate; /** * @since 8.0 */ public final class XsdResourceFactory extends XSDResourceFactoryImpl { /** * @see org.eclipse.xsd.util.XSDResourceFactoryImpl#createResource(org.eclipse.emf.common.util.URI) * @since 5.0.3 */ @Override public Resource createResource( URI uri ) { return new XsdResource(uri); } private class XsdResource extends XSDResourceImpl implements XResource { private XResourceDelegate delegate = new XResourceDelegate(); XsdResource( URI uri ) { super(uri); } /** * {@inheritDoc} * * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#attachedHelper(org.eclipse.emf.ecore.EObject) */ @Override protected void attachedHelper( EObject eObject ) { delegate.attachedHelper(eObject); super.attachedHelper(eObject); } /** * {@inheritDoc} * * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#detachedHelper(org.eclipse.emf.ecore.EObject) */ @Override protected void detachedHelper( EObject eObject ) { delegate.detachedHelper(eObject); super.detachedHelper(eObject); } /** * {@inheritDoc} * * @see org.eclipse.xsd.util.XSDResourceImpl#doLoad(java.io.InputStream, java.util.Map) */ @Override public void doLoad( InputStream inputStream, Map<?, ?> options ) throws IOException { if (delegate.isLoading()) { return; } delegate.setLoading(true); try { super.doLoad(inputStream, options); } finally { delegate.setLoading(false); } } @Override protected void doUnload() { if (delegate.isUnloading()) { return; } delegate.setUnloading(true); try { super.doUnload(); delegate.doUnload(); } finally { delegate.setUnloading(false); } } /** * {@inheritDoc} * * @see org.eclipse.xsd.util.XSDResourceImpl#getEObject(java.lang.String) */ @Override public EObject getEObject( String uriFragment ) { // if the URI fragment has the UUID protocol we need to look up the object using // the resources maps if ((uriFragment != null) && uriFragment.startsWith(UUID.PROTOCOL)) { return getEObjectByID(uriFragment); } return super.getEObject(uriFragment); } /** * {@inheritDoc} * * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#getEObjectByID(java.lang.String) */ @Override protected EObject getEObjectByID( String uuid ) { EObject eObject = delegate.getEObjectById(uuid); if (eObject != null) { return eObject; } return super.getEObjectByID(uuid); } /** * {@inheritDoc} * * @see org.teiid.designer.core.resource.XResource#getUuid(org.eclipse.emf.ecore.EObject) */ @Override public String getUuid( EObject object ) { return delegate.getUuid(object); } /** * {@inheritDoc} * * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#isAttachedDetachedHelperRequired() */ @Override protected boolean isAttachedDetachedHelperRequired() { return true; } /** * @see org.teiid.designer.core.resource.XResource#isLoading() * @since 5.0.3 */ @Override public boolean isLoading() { return delegate.isLoading(); } /** * @see org.teiid.designer.core.resource.XResource#isLoading() * @since 5.0.3 */ @Override public boolean isUnloading() { return delegate.isUnloading(); } /** * {@inheritDoc} * * @see org.teiid.designer.core.resource.XResource#setUuid(org.eclipse.emf.ecore.EObject, java.lang.String) */ @Override public void setUuid( EObject object, String uuid ) { delegate.setUuid(object, uuid); } /** * {@inheritDoc} * * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#toKeyString() */ @Override public String toKeyString() { return delegate.toKeyString(); } } }