| /** |
| * ******************************************************************************* |
| * Copyright (c) 2020 Robert Bosch GmbH. |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Robert Bosch GmbH - initial API and implementation |
| * ******************************************************************************* |
| */ |
| |
| package org.eclipse.app4mc.slg.commons.m2t; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.app4mc.amalthea.model.Amalthea; |
| import org.eclipse.app4mc.amalthea.model.AmaltheaPackage; |
| import org.eclipse.app4mc.amalthea.model.emf.AmaltheaResourceFactory; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.EObject; |
| 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.sphinx.emf.resource.ExtendedResourceSet; |
| import org.eclipse.sphinx.emf.resource.ExtendedResourceSetImpl; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| /** |
| * AmaltheaMultiFileLoader |
| * |
| * Should be replaced by standard AmaltheaLoader (APP4MC version > 1.0.0) |
| * |
| */ |
| public class AmaltheaMultiFileLoader implements IMultiFileLoader{ |
| |
| private static final Logger LOG = LoggerFactory.getLogger(AmaltheaMultiFileLoader.class); |
| |
| public ResourceSet loadMultipleFiles(String directoryPath) { |
| |
| File folder = new File(directoryPath); |
| |
| if (folder.isDirectory()) { |
| File[] listFiles = folder.listFiles((file, name) -> name.endsWith(".amxmi")); |
| |
| ResourceSet resourceSet = initializeResourceSet(); |
| |
| loadMultipleFiles(resourceSet, listFiles); |
| |
| return resourceSet; |
| } |
| |
| return new ResourceSetImpl(); |
| |
| } |
| |
| private List<Amalthea> loadMultipleFiles(ResourceSet resourceSet, File[] listFiles) { |
| |
| List<Amalthea> models = new ArrayList<>(); |
| |
| for (File amxmiFile : listFiles) { |
| |
| final Resource res = resourceSet.createResource(URI.createURI("file:////" + amxmiFile.getAbsolutePath())); |
| try { |
| res.load(null); |
| for (final EObject content : res.getContents()) { |
| if (content instanceof Amalthea) { |
| models.add((Amalthea) content); |
| } |
| } |
| } catch (IOException e) { |
| LOG.error(e.getMessage(),e); |
| } |
| } |
| return models; |
| } |
| |
| private static ResourceSet initializeResourceSet() { |
| AmaltheaPackage.eINSTANCE.eClass(); // register the package |
| final ExtendedResourceSet resSet = new ExtendedResourceSetImpl(); |
| resSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("amxmi", new AmaltheaResourceFactory(true)); |
| |
| return resSet; |
| } |
| |
| } |