/******************************************************************************* * Copyright (c) 2011 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation ******************************************************************************/ package com.sap.furcas.runtime.common.util; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.Set; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.Resource.Diagnostic; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import com.sap.furcas.runtime.common.exceptions.MetaModelLookupException; public class FileResourceHelper { public static ResourceSet loadResourceSet(File... fileArr) throws MetaModelLookupException { ResourceSet resourceSet = new ResourceSetImpl(); return loadResourceSet(resourceSet, fileArr); } public static ResourceSet loadResourceSet(ResourceSet resourceSet, File... fileArr) throws MetaModelLookupException { for (File file : fileArr) { java.net.URI uri = file.toURI(); java.net.URI normUri = uri.normalize(); loadResourceFromUri(resourceSet, normUri.toString()); } return resourceSet; } private static void loadResourceFromUri(ResourceSet resourceSet, String uri) throws MetaModelLookupException { Resource resource = resourceSet.createResource(URI.createURI(uri)); try { resource.load(null); checkForErrors(resource); } catch (IOException e) { throw new MetaModelLookupException("Unable to parse ecore xmi for file uri " + uri + " : " + e.getMessage(), e); } EList<EObject> list = resource.getContents(); for (EObject object : list) { if (object instanceof EPackage) { EPackage new_package = (EPackage) object; EPackage.Registry.INSTANCE.put(new_package.getNsURI(), new_package); } } } private static void checkForErrors(Resource resource) { if (resource.getErrors().size() > 0) { StringBuilder buff = new StringBuilder(); for (Diagnostic err : resource.getErrors()) { buff.append(err.getMessage() + "\n"); } throw new RuntimeException("Loaded resource contains errors: \n" + buff.toString()); } } public static Set<URI> getResourceSetAsScope(ResourceSet resourceSet) { Set<URI> referenceScope = new HashSet<URI>(); for (Resource resource : resourceSet.getResources()) { referenceScope.add(resource.getURI()); } return referenceScope; } }