Skip to content

Commit

Permalink
Added very basic support for instances, only the object is created fo…
Browse files Browse the repository at this point in the history
…r now.
  • Loading branch information
thomasfruehwirth committed Dec 1, 2020
1 parent a4be52c commit 1526404
Show file tree
Hide file tree
Showing 7 changed files with 139 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ library Classes;

import ClassDiagram.References;
import ClassDiagram.Operations;
import ClassDiagram.Instances;

modeltype UML uses 'http://www.eclipse.org/uml2/5.0.0/UML';
modeltype OPCUA uses set('http://opcfoundation.org/UA/2011/03/UANodeSet.xsd');
Expand Down
15 changes: 15 additions & 0 deletions QvtoTransformationRules/transforms/ClassDiagram/Instances.qvto
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
library Instances;

import Common.Helpers;

modeltype UML uses 'http://www.eclipse.org/uml2/5.0.0/UML';
modeltype OPCUA uses set('http://opcfoundation.org/UA/2011/03/UANodeSet.xsd');
modeltype ECORE uses ecore('http://www.eclipse.org/emf/2002/Ecore');

mapping UML::InstanceSpecification::instanceSpecification2OPCUAObject(inout nodeset : OPCUA::UANodeSetType) : OPCUA::UAObject {
log("instanceSpecification2OPCUAObject for UML element " + self.name);
// set attributes of the OPCUA::UAObject
browseName := self.createBrowseName();
nodeId := self.createNodeId();
displayName := (object OPCUA::LocalizedText {value := browseName})->asOrderedSet();
}
10 changes: 8 additions & 2 deletions QvtoTransformationRules/transforms/Uml2Opcua.qvto
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ mapping UML::Model::model2OPCUANodeSetType() : OPCUA::UANodeSetType {
// map UML::Classes to OPCUA::UAObjectTypes that are not included in any namspeace
uAObjectType += self.ownedElement->selectByType(UML::Class)->map class2OPCUAObjectType(result);

// map UML::InstanceSpecification to OPCUA::UAObject that are not included in any namspeace
uAObject += self.ownedElement->selectByType(UML::InstanceSpecification)->map instanceSpecification2OPCUAObject(result);

// map UML::StateMachines to OPCUA::UAObjectTypes that are not included in any namspeace
uAObjectType += self.ownedElement->selectByType(UML::StateMachine)->map statemachine2FiniteStateMachineType(result);

Expand All @@ -72,10 +75,13 @@ mapping UML::Model::model2OPCUANodeSetType() : OPCUA::UANodeSetType {
}

helper UML::Package::package2Namespace(inout nodeset : OPCUA::UANodeSetType) {
// map all UML::Classes in this package to OPCUA::UAObjectTypes and collect them in a set
// map all UML::Class in this package to OPCUA::UAObjectTypes and collect them in a set
nodeset.uAObjectType += self.ownedElement->selectByType(UML::Class)->map class2OPCUAObjectType(nodeset);

// map UML::StateMachines to OPCUA::UAObjectTypes that are not included in any namspeace
// map all UML::InstanceSpecification in this package to OPCUA::UAObject and collect them in a set
nodeset.uAObject += self.ownedElement->selectByType(UML::InstanceSpecification)->map instanceSpecification2OPCUAObject(nodeset);

// map all UML::StateMachine in this package to OPCUA::FinitStateMachineType and collect them in a set
nodeset.uAObjectType += self.ownedElement->selectByType(UML::StateMachine)->map statemachine2FiniteStateMachineType(nodeset);
}

Expand Down
2 changes: 2 additions & 0 deletions Uml2OpcuaTransformationTests/Instance.di
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<architecture:ArchitectureDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:architecture="http://www.eclipse.org/papyrus/infra/core/architecture" contextId="org.eclipse.papyrus.infra.services.edit.TypeContext"/>
63 changes: 63 additions & 0 deletions Uml2OpcuaTransformationTests/Instance.notation
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/gmfdiag/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_n9rskMdPEeqBwPQ5-6UCwg" type="PapyrusUMLClassDiagram" name="Class Diagram" measurementUnit="Pixel">
<children xmi:type="notation:Shape" xmi:id="_pu7AsMdPEeqBwPQ5-6UCwg" type="Class_Shape">
<children xmi:type="notation:DecorationNode" xmi:id="_pvEKoMdPEeqBwPQ5-6UCwg" type="Class_NameLabel">
<element xmi:type="uml:Class" href="Instance.uml#_punesMdPEeqBwPQ5-6UCwg"/>
</children>
<children xmi:type="notation:DecorationNode" xmi:id="_pvEKocdPEeqBwPQ5-6UCwg" type="Class_FloatingNameLabel">
<element xmi:type="uml:Class" href="Instance.uml#_punesMdPEeqBwPQ5-6UCwg"/>
<layoutConstraint xmi:type="notation:Location" xmi:id="_pvEKosdPEeqBwPQ5-6UCwg" y="15"/>
</children>
<children xmi:type="notation:BasicCompartment" xmi:id="_pvN7oMdPEeqBwPQ5-6UCwg" type="Class_AttributeCompartment">
<children xmi:type="notation:Shape" xmi:id="_Q-eSQDPhEeusqo4eorF9lg" type="Property_ClassAttributeLabel">
<element xmi:type="uml:Property" href="Instance.uml#_Q-UhQDPhEeusqo4eorF9lg"/>
<layoutConstraint xmi:type="notation:Location" xmi:id="_Q-eSQTPhEeusqo4eorF9lg"/>
</children>
<styles xmi:type="notation:TitleStyle" xmi:id="_pvN7ocdPEeqBwPQ5-6UCwg"/>
<styles xmi:type="notation:SortingStyle" xmi:id="_pvN7osdPEeqBwPQ5-6UCwg"/>
<styles xmi:type="notation:FilteringStyle" xmi:id="_pvN7o8dPEeqBwPQ5-6UCwg"/>
<element xmi:type="uml:Class" href="Instance.uml#_punesMdPEeqBwPQ5-6UCwg"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_pvN7pMdPEeqBwPQ5-6UCwg"/>
</children>
<children xmi:type="notation:BasicCompartment" xmi:id="_pvN7pcdPEeqBwPQ5-6UCwg" type="Class_OperationCompartment">
<styles xmi:type="notation:TitleStyle" xmi:id="_pvN7psdPEeqBwPQ5-6UCwg"/>
<styles xmi:type="notation:SortingStyle" xmi:id="_pvN7p8dPEeqBwPQ5-6UCwg"/>
<styles xmi:type="notation:FilteringStyle" xmi:id="_pvN7qMdPEeqBwPQ5-6UCwg"/>
<element xmi:type="uml:Class" href="Instance.uml#_punesMdPEeqBwPQ5-6UCwg"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_pvN7qcdPEeqBwPQ5-6UCwg"/>
</children>
<children xmi:type="notation:BasicCompartment" xmi:id="_pvN7qsdPEeqBwPQ5-6UCwg" type="Class_NestedClassifierCompartment">
<styles xmi:type="notation:TitleStyle" xmi:id="_pvN7q8dPEeqBwPQ5-6UCwg"/>
<styles xmi:type="notation:SortingStyle" xmi:id="_pvN7rMdPEeqBwPQ5-6UCwg"/>
<styles xmi:type="notation:FilteringStyle" xmi:id="_pvN7rcdPEeqBwPQ5-6UCwg"/>
<element xmi:type="uml:Class" href="Instance.uml#_punesMdPEeqBwPQ5-6UCwg"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_pvN7rsdPEeqBwPQ5-6UCwg"/>
</children>
<element xmi:type="uml:Class" href="Instance.uml#_punesMdPEeqBwPQ5-6UCwg"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_pu7AscdPEeqBwPQ5-6UCwg" x="677" y="276"/>
</children>
<children xmi:type="notation:Shape" xmi:id="_KYTPgDPhEeusqo4eorF9lg" type="InstanceSpecification_Shape">
<children xmi:type="notation:DecorationNode" xmi:id="_KYTPgjPhEeusqo4eorF9lg" type="InstanceSpecification_NameLabel"/>
<children xmi:type="notation:DecorationNode" xmi:id="_KYTPgzPhEeusqo4eorF9lg" type="InstanceSpecification_FloatingNameLabel">
<layoutConstraint xmi:type="notation:Location" xmi:id="_KYTPhDPhEeusqo4eorF9lg" y="15"/>
</children>
<children xmi:type="notation:BasicCompartment" xmi:id="_KYTPhTPhEeusqo4eorF9lg" type="InstanceSpecification_SlotCompartment">
<children xmi:type="notation:Shape" xmi:id="_J7uLwDPiEeusqo4eorF9lg" type="Slot_SlotLabel">
<element xmi:type="uml:Slot" href="Instance.uml#_J7neEDPiEeusqo4eorF9lg"/>
<layoutConstraint xmi:type="notation:Location" xmi:id="_J7uLwTPiEeusqo4eorF9lg"/>
</children>
<styles xmi:type="notation:TitleStyle" xmi:id="_KYTPhjPhEeusqo4eorF9lg"/>
<styles xmi:type="notation:SortingStyle" xmi:id="_KYTPhzPhEeusqo4eorF9lg"/>
<styles xmi:type="notation:FilteringStyle" xmi:id="_KYTPiDPhEeusqo4eorF9lg"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_KYTPiTPhEeusqo4eorF9lg"/>
</children>
<element xmi:type="uml:InstanceSpecification" href="Instance.uml#_KYJegDPhEeusqo4eorF9lg"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_KYTPgTPhEeusqo4eorF9lg" x="1020" y="300"/>
</children>
<styles xmi:type="notation:StringValueStyle" xmi:id="_n9rskcdPEeqBwPQ5-6UCwg" name="diagram_compatibility_version" stringValue="1.4.0"/>
<styles xmi:type="notation:DiagramStyle" xmi:id="_n9rsksdPEeqBwPQ5-6UCwg"/>
<styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_n9rsk8dPEeqBwPQ5-6UCwg" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
<owner xmi:type="uml:Model" href="Instance.uml#_n7J9AMdPEeqBwPQ5-6UCwg"/>
</styles>
<element xmi:type="uml:Model" href="Instance.uml#_n7J9AMdPEeqBwPQ5-6UCwg"/>
</notation:Diagram>
16 changes: 16 additions & 0 deletions Uml2OpcuaTransformationTests/Instance.uml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_n7J9AMdPEeqBwPQ5-6UCwg" name="Instance">
<packageImport xmi:type="uml:PackageImport" xmi:id="_oCcQwMdPEeqBwPQ5-6UCwg">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Class" xmi:id="_punesMdPEeqBwPQ5-6UCwg" name="Class5">
<ownedAttribute xmi:type="uml:Property" xmi:id="_Q-UhQDPhEeusqo4eorF9lg" name="Manufacturer">
<type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:InstanceSpecification" xmi:id="_KYJegDPhEeusqo4eorF9lg" name="Class5Instance" classifier="_punesMdPEeqBwPQ5-6UCwg">
<slot xmi:type="uml:Slot" xmi:id="_J7neEDPiEeusqo4eorF9lg" definingFeature="_Q-UhQDPhEeusqo4eorF9lg">
<value xmi:type="uml:LiteralString" xmi:id="_fLmp4DPiEeusqo4eorF9lg" value="MyManufacturer"/>
</slot>
</packagedElement>
</uml:Model>
34 changes: 34 additions & 0 deletions Uml2OpcuaTransformationTests/Instance.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<UANodeSet xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
<NamespaceUris>
<Uri>Instance</Uri>
</NamespaceUris>
<Aliases>
<Alias Alias="HasSubtype">i=45</Alias>
<Alias Alias="HasTypeDefinition">i=40</Alias>
<Alias Alias="BaseObjectType">i=58</Alias>
<Alias Alias="String">i=12</Alias>
<Alias Alias="HasComponent">i=47</Alias>
<Alias Alias="ModellingRule_Mandatory">i=78</Alias>
<Alias Alias="BaseDataVariableType">i=63</Alias>
<Alias Alias="HasModellingRule">i=37</Alias>
</Aliases>
<UAVariable BrowseName="Manufacturer" NodeId="ns=1;s=Manufacturer" ParentNodeId="ns=1;s=Class5Type" DataType="String">
<DisplayName>Manufacturer</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">BaseDataVariableType</Reference>
<Reference ReferenceType="HasModellingRule">ModellingRule_Mandatory</Reference>
<Reference IsForward="false" ReferenceType="HasComponent">ns=1;s=Class5Type</Reference>
</References>
</UAVariable>
<UAObjectType BrowseName="Class5Type" NodeId="ns=1;s=Class5Type">
<DisplayName>Class5Type</DisplayName>
<References>
<Reference IsForward="false" ReferenceType="HasSubtype">BaseObjectType</Reference>
<Reference ReferenceType="HasComponent">ns=1;s=Manufacturer</Reference>
</References>
</UAObjectType>
<UAObject BrowseName="Class5Instance" NodeId="ns=1;s=Class5Instance">
<DisplayName>Class5Instance</DisplayName>
</UAObject>
</UANodeSet>

0 comments on commit 1526404

Please sign in to comment.