diff options
Diffstat (limited to 'plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java')
-rw-r--r-- | plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java | 77 |
1 files changed, 74 insertions, 3 deletions
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java index 1b242f9c..3e825e65 100644 --- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java +++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java @@ -11,15 +11,33 @@ */ package org.eclipse.uml2.uml.internal.resource; +import java.util.Map; + +import org.eclipse.uml2.uml.UMLPackage; +import org.eclipse.uml2.uml.resource.UML302UMLExtendedMetaData; import org.eclipse.uml2.uml.resource.UML302UMLResource; +import org.eclipse.uml2.uml.resource.UML302UMLResourceHandler; +import org.eclipse.uml2.uml.resource.UMLResource; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.impl.EPackageRegistryImpl; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.ecore.util.ExtendedMetaData; +import org.eclipse.emf.ecore.xmi.XMLResource; +import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLPackage; +import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLRegistry; +import org.eclipse.emf.mapping.ecore2xml.impl.Ecore2XMLRegistryImpl; /** * Resource factory that converts .uml models. - * OMG: UML 2.2 and UML 2.4 - * API: UML2 3.x and UML2 4.0 + * OMG: UML 2.2 and UML 2.4 + * API: UML2 3.x and UML2 4.0.x * - * @since 3.0 + * @since 4.0 */ public class UML302UMLResourceFactoryImpl extends UMLResourceFactoryImpl @@ -29,4 +47,57 @@ public class UML302UMLResourceFactoryImpl super(); } + @Override + public Resource createResourceGen(URI uri) { + UML302UMLResource result = new UML302UMLResourceImpl(uri); + result.setEncoding(UML302UMLResource.DEFAULT_ENCODING); + return result; + } + + @Override + public Resource createResource(URI uri) { + UMLResource resource = (UMLResource) super.createResource(uri); + + Map<Object, Object> defaultLoadOptions = resource + .getDefaultLoadOptions(); + + EPackage.Registry ePackageRegistry = new EPackageRegistryImpl( + EPackage.Registry.INSTANCE); + ePackageRegistry.put(UML302UMLResource.UML_METAMODEL_NS_URI, + UMLPackage.eINSTANCE); + + ePackageRegistry + .put( + "platform:/plugin/org.eclipse.uml2.uml/model/UML.ecore", UMLPackage.eINSTANCE); //$NON-NLS-1$ + + ResourceSet resourceSet = new ResourceSetImpl(); + resourceSet.setPackageRegistry(ePackageRegistry); + + Ecore2XMLRegistry ecore2xmlRegistry = new Ecore2XMLRegistryImpl( + Ecore2XMLRegistry.INSTANCE); + ecore2xmlRegistry + .put( + UML302UMLResource.UML_METAMODEL_NS_URI, + EcoreUtil + .getObjectByType( + resourceSet + .getResource( + URI + .createURI("platform:/plugin/org.eclipse.uml2.uml/model/UML30_2_UML.ecore2xml"), //$NON-NLS-1$ + true).getContents(), + Ecore2XMLPackage.Literals.XML_MAP)); + + ExtendedMetaData extendedMetaData = new UML302UMLExtendedMetaData( + ePackageRegistry, ecore2xmlRegistry); + + defaultLoadOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, + extendedMetaData); + defaultLoadOptions.put(XMLResource.OPTION_LAX_FEATURE_PROCESSING, + Boolean.FALSE); + defaultLoadOptions.put(XMLResource.OPTION_RESOURCE_HANDLER, + new UML302UMLResourceHandler()); + + return resource; + } + } |