blob: cb779fa34ed710cda49b4cdf5854dfee9faf1c1b [file] [log] [blame]
/**
********************************************************************************
* 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
import templates.m2m.sw.runnableItem.CustomEventTriggerTransformer
@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){
val inchronCallSequenceItems = customEventTriggerTransformer.transformCustomEventTrigger(inchronComponent, amltRunnableItem)
inchronCallSequenceItems.forEach[inchronCallSequenceItem | list.add(inchronCallSequenceItem)]
} 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
}
}