| /******************************************************************************* |
| * Copyright (c) 2018 Robert Bosch GmbH. |
| * 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: |
| * Robert Bosch GmbH - initial API and implementation |
| *******************************************************************************/ |
| |
| package app4mc.example.transform.m2m.transformers |
| |
| import app4mc.example.transform.samplemodel.SampleModelFactory |
| import java.io.File |
| import java.util.Map |
| import org.eclipse.app4mc.amalthea.model.Amalthea |
| import org.eclipse.app4mc.amalthea.model.HWModel |
| import org.eclipse.app4mc.transformation.ServiceConstants |
| import org.eclipse.app4mc.transformation.transformers.Model2ModelRootTransformer |
| import org.eclipse.emf.common.util.URI |
| import org.eclipse.emf.ecore.resource.ResourceSet |
| import org.osgi.service.component.annotations.Activate |
| import org.osgi.service.component.annotations.Component |
| import org.osgi.service.component.annotations.ConfigurationPolicy |
| import org.osgi.service.component.annotations.Reference |
| import org.slf4j.Logger |
| import org.slf4j.LoggerFactory |
| |
| @Component( |
| configurationPid = ServiceConstants.SESSION_CONFIGURATION_PID, |
| configurationPolicy = ConfigurationPolicy.REQUIRE, |
| property=#[ |
| "transformation=Amalthea2SampleModel" |
| ], service=Model2ModelRootTransformer) |
| class AmaltheaModel2ModelTransformer extends Model2ModelRootTransformer { |
| |
| static final Logger LOG = LoggerFactory.getLogger(typeof(AmaltheaModel2ModelTransformer)) |
| |
| /*- Factory initiaization */ |
| val outputModelFactory = SampleModelFactory.eINSTANCE |
| |
| String outputFolder |
| |
| @Reference HWTransformer hardwareTransformer |
| |
| @Activate |
| def package void activate(Map<String, ?> properties) { |
| LOG.debug("AmaltheaModel2ModelTransformer activated") |
| |
| outputFolder = getProperty("m2m_output_folder", properties) |
| } |
| |
| override m2mTransformation(ResourceSet inputResourceSet, ResourceSet outputResourceSet) { |
| |
| LOG.debug("HWTransformer : "+hardwareTransformer.hashCode()) |
| |
| var int fileIndex = 1 |
| |
| for (resource : inputResourceSet.resources) { |
| for (content : resource.contents) { |
| |
| LOG.info("Processing file : " + resource.URI) |
| |
| val simulationModelRoot = transform(content as Amalthea) |
| |
| val out_uri = URI.createFileURI( |
| outputFolder + File.separator + fileIndex++ + ".root") |
| |
| val out_resource = outputResourceSet.createResource(out_uri) |
| |
| out_resource.contents.add(simulationModelRoot) |
| |
| out_resource.save(null) |
| |
| LOG.info("Transformed model file generated at : " + out_uri) |
| |
| } |
| } |
| } |
| |
| def create outputModelFactory.createModel transform(Amalthea amalthea) { |
| hardwareTransformer.transfromHWModel(amalthea.hwModel as HWModel, it) |
| } |
| |
| } |