| /******************************************************************************* |
| * Copyright (c) 2013, 2018 Willink Transformations and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * E.D.Willink - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ocl.examples.uml25; |
| |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.emf.ecore.resource.ContentHandler; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.emf.ecore.resource.URIConverter; |
| import org.eclipse.emf.ecore.util.ExtendedMetaData; |
| import org.eclipse.emf.ecore.xmi.XMLResource; |
| import org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl; |
| import org.eclipse.jdt.annotation.NonNull; |
| import org.eclipse.uml2.uml.internal.resource.XMI2UMLResourceFactoryImpl; |
| import org.eclipse.uml2.uml.resource.CMOF2UMLResourceHandler; |
| import org.eclipse.uml2.uml.resource.XMI2UMLResource; |
| |
| /** |
| * XMI252UMLResourceFactoryImpl supports loading OMG UML 2.5 XMI files as Eclipse UML 4.0 resources. |
| * <p> |
| * install() should be invoked to initialize a ResourceSet with the locations of the UML 2.5 XMI files. |
| * <p> |
| * Thereafter ReseourceSet.getResource(...) should work. |
| * |
| */ |
| @SuppressWarnings("restriction") |
| public class XMI252UMLResourceFactoryImpl extends XMI2UMLResourceFactoryImpl implements XMI2UMLResource.Factory |
| { |
| private static final String MYUML_2_5_CONTENT_TYPE_IDENTIFIER = "org.omg.myuml_2_5"; //$NON-NLS-1$ |
| public static final String MYUML_METAMODEL_2_5_NS_URI = "http://www.omg.org/spec/UML/20131001"; |
| |
| private static final ContentHandler MYOMG_2_5_CONTENT_HANDLER = new RootXMLContentHandlerImpl( |
| MYUML_2_5_CONTENT_TYPE_IDENTIFIER, new String[]{XMI2UMLResource.FILE_EXTENSION}, |
| RootXMLContentHandlerImpl.XMI_KIND, MYUML_METAMODEL_2_5_NS_URI, null); |
| |
| public static void install(@NonNull ResourceSet resourceSet, @NonNull URI uml25uri) { |
| URIConverter uriConverter = resourceSet.getURIConverter(); |
| List<ContentHandler> contentHandlers = uriConverter.getContentHandlers(); |
| if (!contentHandlers.contains(MYOMG_2_5_CONTENT_HANDLER)) { |
| contentHandlers.add(0, MYOMG_2_5_CONTENT_HANDLER); |
| } |
| resourceSet.getResourceFactoryRegistry().getContentTypeToFactoryMap().put( |
| MYUML_2_5_CONTENT_TYPE_IDENTIFIER, new XMI252UMLResourceFactoryImpl()); |
| Map<URI, URI> uriMap = uriConverter.getURIMap(); |
| uriMap.put(URI.createURI("http://www.omg.org/spec/DD/20131001/"), uml25uri); |
| uriMap.put(URI.createURI("http://www.omg.org/spec/UML/20131001/"), uml25uri); |
| // resourceSet.getPackageRegistry().put("http://www.omg.org/spec/UML/20131001", UMLPackage.eINSTANCE); |
| } |
| |
| public XMI252UMLResourceFactoryImpl() { |
| } |
| |
| @Override |
| public Resource createResource(URI uri) { |
| XMI2UMLResource resource = (XMI2UMLResource) createResourceGen(uri); |
| |
| ExtendedMetaData extendedMetaData = new XMI252UMLExtendedMetaData(EPackage.Registry.INSTANCE); |
| |
| Map<Object, Object> defaultSaveOptions = resource.getDefaultSaveOptions(); |
| |
| defaultSaveOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData); |
| defaultSaveOptions.put(XMLResource.OPTION_SAVE_TYPE_INFORMATION, Boolean.TRUE); |
| |
| Map<Object, Object> defaultLoadOptions = resource.getDefaultLoadOptions(); |
| |
| defaultLoadOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData); |
| defaultLoadOptions.put(XMLResource.OPTION_RESOURCE_HANDLER, new CMOF2UMLResourceHandler(null)); |
| |
| return resource; |
| } |
| } |