blob: a2484fb4cc3b1bfd4f63f9a1645e341a6fbe275f [file] [log] [blame]
/*
* Copyright (c) 2022 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Pauker (TU Wien) pauker@ift.at
* Thomas Fruhwirth (TU Wien) thomas.fruehwirth@tuwien.ac.at
*******************************************************************************/
library StateMachines;
import Common.Helpers;
import States;
import Transitions;
modeltype UML uses 'http://www.eclipse.org/uml2/5.0.0/UML';
modeltype OPCUA uses set('http://opcfoundation.org/UA/2011/03/UANodeSet.xsd');
// State machines in OPC UA are UAObjects of Supertype FiniteStateMachineType
mapping UML::StateMachine::statemachine2FiniteStateMachineType(inout nodeset : OPCUA::UANodeSetType) : OPCUA::UAObjectType {
log("statemachine2FiniteStateMachineType for UML element " + self.name);
// set attributes of the OPCUA::UAObjectType
browseName := self.createBrowseName();
nodeId := self.createNodeId();
displayName := object OPCUA::LocalizedText{value := browseName};
// create the list of references object and add FiniteStateMachineType as supertype
_references := object OPCUA::ListOfReferences{};
_references.reference += object OPCUA::Reference{referenceType := getIdOrAlias("HasSubtype"); value := getIdOrAlias("FiniteStateMachineType"); isForward := false};
// create an OPCUA::Object of type InitialStateType for each state
nodeset.uAObject += self.ownedElement->selectByType(UML::Region).ownedElement->selectByKind(UML::Pseudostate)->map pseudostate2InitialState(result);
nodeset.uAObject += self.ownedElement->selectByType(UML::Region).ownedElement->selectByKind(UML::State)->map state2State(result);
nodeset.uAObject += self.ownedElement->selectByType(UML::Region).ownedElement->selectByKind(UML::Transition)->map transition2Transition(nodeset, result);
}