/* * 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.webservice; import java.io.IOException; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.impl.XSDSchemaImpl; import org.eclipse.xsd.util.XSDResourceFactoryImpl; import org.eclipse.xsd.util.XSDResourceImpl; import org.teiid.core.designer.util.StringConstants; import org.teiid.designer.metamodels.wsdl.Definitions; import org.teiid.designer.metamodels.wsdl.WsdlPackage; import org.teiid.designer.metamodels.wsdl.io.DelegatingResourceSet; import org.teiid.designer.metamodels.wsdl.io.WsdlResourceFactoryImpl; import org.teiid.designer.metamodels.wsdl.io.WsdlResourceImpl; /** * @since 8.0 */ public class WebServiceResources implements StringConstants { private final ResourceSet resourceSet; public class Reference { public final String namespace; public final String location; public final Resource resource; public Reference( final String namespace, final String location, final Resource resource ) { this.namespace = namespace; this.location = location; this.resource = resource; } } /** * * @since 4.2 */ public WebServiceResources() { super(); // Create a resource set that can delegate to the XSDSchema's global resource set ... this.resourceSet = new DelegatingResourceSet(); final ResourceSet xsdGlobalResourceSet = XSDSchemaImpl.getGlobalResourceSet(); ((DelegatingResourceSet)this.resourceSet).addDelegateResourceSet(xsdGlobalResourceSet); // Register the resource factory for each of the 4 WSDL metamodels ... final Resource.Factory.Registry registry = this.resourceSet.getResourceFactoryRegistry(); Map map = registry.getExtensionToFactoryMap(); if (!map.containsKey(WSDL)) { map.put(WSDL, new WsdlResourceFactoryImpl()); } if (!map.containsKey(XSD)) { map.put(XSD, new XSDResourceFactoryImpl()); } registry.getProtocolToFactoryMap().put(WsdlPackage.eNS_URI, new WsdlResourceFactoryImpl()); } public Resource add( final URI uri ) { final Resource resource = this.resourceSet.getResource(uri,true); return resource; } public Resource get( final URI uri ) { final Resource resource = this.resourceSet.getResource(uri,true); return resource; } public void refresh( final Resource resource ) throws IOException { resource.unload(); Map options = (resource.getResourceSet() != null ? resource.getResourceSet().getLoadOptions() : Collections.EMPTY_MAP); resource.load(options); } public void remove( final URI uri ) { final Resource existing = this.resourceSet.getResource(uri,false); if ( existing != null ) { this.resourceSet.getResources().remove(existing); } } public void remove( final Resource resource ) { this.resourceSet.getResources().remove(resource); } public boolean isWsdl( final Resource resource ) { if ( resource instanceof WsdlResourceImpl ) { return true; } return false; } public boolean isXsd( final Resource resource ) { if ( resource instanceof XSDResourceImpl ) { return true; } return false; } public String getTargetNamespace( final Resource resource ) { if ( isWsdl(resource) ) { return doGetTargetNamespace((WsdlResourceImpl)resource); } if ( isXsd(resource) ) { return doGetTargetNamespace((XSDResourceImpl)resource); } return null; } protected String doGetTargetNamespace( final WsdlResourceImpl resource ) { final List roots = resource.getContents(); final Iterator iter = roots.iterator(); while (iter.hasNext()) { final Object object = iter.next(); if ( object instanceof Definitions ) { final Definitions defns = (Definitions)object; return defns.getTargetNamespace(); } } return null; } protected String doGetTargetNamespace( final XSDResourceImpl resource ) { // Get the XSDSchema ... final XSDSchema schema = resource.getSchema(); return schema.getTargetNamespace(); } }