| /** |
| ******************************************************************************** |
| * Copyright (c) 2018-2019 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 templates.m2m.sw |
| |
| import com.google.inject.Inject |
| import com.google.inject.Singleton |
| import com.inchron.realtime.root.model.CallSequenceItem |
| import com.inchron.realtime.root.model.Component |
| import java.util.List |
| import org.eclipse.app4mc.amalthea.model.ChannelReceive |
| import org.eclipse.app4mc.amalthea.model.ChannelSend |
| import org.eclipse.app4mc.amalthea.model.CustomEventTrigger |
| import org.eclipse.app4mc.amalthea.model.LabelAccessEnum |
| import org.eclipse.app4mc.amalthea.model.ModeLabelAccess |
| import org.eclipse.app4mc.amalthea.model.Process |
| import org.eclipse.app4mc.amalthea.model.RunnableCall |
| import org.eclipse.app4mc.amalthea.model.RunnableItem |
| import org.eclipse.app4mc.amalthea.model.RunnableModeSwitch |
| import org.eclipse.app4mc.amalthea.model.Ticks |
| import templates.AbstractAmaltheaInchronTransformer |
| import templates.m2m.sw.runnableItem.ChannelAccessTransformer |
| import templates.m2m.sw.runnableItem.RunnableCallTransformer |
| import templates.m2m.sw.runnableItem.TicksTransformer |
| |
| @Singleton |
| class RunnableItemTransformer extends AbstractAmaltheaInchronTransformer{ |
| |
| @Inject RunnableCallTransformer runnableCallTransformer |
| @Inject TicksTransformer ticksTransformer |
| @Inject ModeSwitchTransformer modeSwitchTransformer |
| @Inject CustomEventTriggerTransformer customEventTriggerTransformer |
| @Inject ModeLabelTransformer modeLabelTransformer |
| @Inject ChannelAccessTransformer channelAccessTransformer |
| |
| def List<CallSequenceItem> transformRunnableItem(Component inchronComponent, Process amltTask, |
| RunnableItem amltRunnableItem) { |
| val List<CallSequenceItem> list=newArrayList |
| |
| if (amltRunnableItem instanceof RunnableCall) { |
| var inchronFunctionCall = runnableCallTransformer.createFunctionCall(inchronComponent, amltTask, |
| amltRunnableItem) |
| list.add(inchronFunctionCall) |
| } else if (amltRunnableItem instanceof Ticks) { |
| var inchronResourceConsumption = ticksTransformer.createResourceConsumption(amltTask, amltRunnableItem) |
| list.add(inchronResourceConsumption) |
| }else if(amltRunnableItem instanceof RunnableModeSwitch){ |
| var inchronFunctionCall = modeSwitchTransformer.transformRunnableModeSwitch(inchronComponent, amltTask,amltRunnableItem) |
| list.add(inchronFunctionCall) |
| } else if(amltRunnableItem instanceof CustomEventTrigger){ |
| var inchronFunctionCall = customEventTriggerTransformer.transformCustomEventTrigger(inchronComponent, amltTask,amltRunnableItem) |
| list.add(inchronFunctionCall) |
| } else if(amltRunnableItem instanceof ModeLabelAccess){ |
| if(amltRunnableItem.access.equals(LabelAccessEnum.WRITE)){ |
| var inchronModeSwitchPoint=inchronModelFactory.createModeSwitchPoint |
| val amltModeLabel=amltRunnableItem.data |
| val amltModeLiteral=amltRunnableItem.modeValue |
| val inchronMode=modeLabelTransformer.getInchronMode(amltModeLabel, amltModeLiteral) |
| inchronModeSwitchPoint.mode = inchronMode |
| list.add(inchronModeSwitchPoint) |
| } |
| } else if (amltRunnableItem instanceof ChannelReceive) { |
| list.add(channelAccessTransformer.createVariableAccess(amltTask, amltRunnableItem as ChannelReceive)) |
| } else if (amltRunnableItem instanceof ChannelSend) { |
| list.add(channelAccessTransformer.createVariableAccess(amltTask, amltRunnableItem as ChannelSend)) |
| } |
| |
| return list |
| } |
| } |