From 74bfddec876b1af6d3da027ffc5aa87d6db222d2 Mon Sep 17 00:00:00 2001 From: Anne Hermann Date: Thu, 9 May 2024 19:39:57 +0200 Subject: [PATCH 1/6] initialized smartHome UML Java project --- .../.classpath | 7 +++++ .../.project | 29 ++++++++++++++++++ .../META-INF/MANIFEST.MF | 7 +++++ .../model/smartHomeumljava.aird | 30 +++++++++++++++++++ .../model/smartHomeumljava.ecore | 4 +++ .../model/smartHomeumljava.genmodel | 13 ++++++++ 6 files changed, 90 insertions(+) create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/.classpath create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/.project create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.aird create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.ecore create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.genmodel diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/.classpath b/bundles/tools.vitruv.applications.smartHomeumljava/.classpath new file mode 100644 index 000000000..1a821310b --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/.project b/bundles/tools.vitruv.applications.smartHomeumljava/.project new file mode 100644 index 000000000..22f592008 --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/.project @@ -0,0 +1,29 @@ + + + tools.vitruv.applications.smartHomeumljava + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.sirius.nature.modelingproject + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature + + diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF b/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF new file mode 100644 index 000000000..52b06d1f1 --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF @@ -0,0 +1,7 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: tools.vitruv.applications.smartHomeumljava +Bundle-SymbolicName: tools.vitruv.applications.smartHomeumljava; singleton:=true +Bundle-Version: 0.1.0.qualifier +Require-Bundle: org.eclipse.emf.ecore;visibility:=reexport, + org.eclipse.core.runtime diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.aird b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.aird new file mode 100644 index 000000000..20461472e --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.aird @@ -0,0 +1,30 @@ + + + + smartHomeumljava.ecore + smartHomeumljava.genmodel + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.ecore b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.ecore new file mode 100644 index 000000000..11400bc14 --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.ecore @@ -0,0 +1,4 @@ + + diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.genmodel b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.genmodel new file mode 100644 index 000000000..6723053a4 --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.genmodel @@ -0,0 +1,13 @@ + + + smartHomeumljava.ecore + + + From 9ab2afbd3c02baac4da37c0084197aa35b06ad38 Mon Sep 17 00:00:00 2001 From: Anne Hermann Date: Thu, 16 May 2024 19:04:57 +0200 Subject: [PATCH 2/6] project settings and wip: first reaction --- .../.classpath | 4 ++- .../.project | 7 ++++- .../META-INF/MANIFEST.MF | 11 ++++++- .../model/smartHomeumljava.aird | 30 ------------------- .../model/smartHomeumljava.ecore | 4 --- .../model/smartHomeumljava.genmodel | 13 -------- .../smartHome2uml/SmartHomeToUml.reactions | 11 +++++++ .../uml2smartHome/UmlToSmartHome.reactions | 0 .../SmartHomeJavaApplication.java | 26 ++++++++++++++++ ...eToUmlChangePropagationSpecification.xtend | 5 ++++ ...rtHomeChangePropagationSpecification.xtend | 5 ++++ 11 files changed, 66 insertions(+), 50 deletions(-) delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.aird delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.ecore delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.genmodel create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/smartHome2uml/SmartHomeToUml.reactions create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/uml2smartHome/UmlToSmartHome.reactions create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeJavaApplication.java create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeToUmlChangePropagationSpecification.xtend create mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/UmlToSmartHomeChangePropagationSpecification.xtend diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/.classpath b/bundles/tools.vitruv.applications.smartHomeumljava/.classpath index 1a821310b..53b9d6d5a 100644 --- a/bundles/tools.vitruv.applications.smartHomeumljava/.classpath +++ b/bundles/tools.vitruv.applications.smartHomeumljava/.classpath @@ -1,7 +1,9 @@ - + + + diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/.project b/bundles/tools.vitruv.applications.smartHomeumljava/.project index 22f592008..da06c78ba 100644 --- a/bundles/tools.vitruv.applications.smartHomeumljava/.project +++ b/bundles/tools.vitruv.applications.smartHomeumljava/.project @@ -5,6 +5,11 @@ + + org.eclipse.xtext.ui.shared.xtextBuilder + + + org.eclipse.jdt.core.javabuilder @@ -22,8 +27,8 @@ - org.eclipse.sirius.nature.modelingproject org.eclipse.jdt.core.javanature org.eclipse.pde.PluginNature + org.eclipse.xtext.ui.shared.xtextNature diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF b/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF index 52b06d1f1..1e6fcdce2 100644 --- a/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF +++ b/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF @@ -2,6 +2,15 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: tools.vitruv.applications.smartHomeumljava Bundle-SymbolicName: tools.vitruv.applications.smartHomeumljava; singleton:=true +Bundle-Vendor: vitruv.tools Bundle-Version: 0.1.0.qualifier Require-Bundle: org.eclipse.emf.ecore;visibility:=reexport, - org.eclipse.core.runtime + org.eclipse.core.runtime, + org.eclipse.uml2.uml;visibility:=reexport, + org.emftext.language.java;visibility:=reexport, + edu.kit.ipd.sdq.activextendannotations, + edu.kit.ipd.sdq.commons.util.emf, + edu.kit.ipd.sdq.commons.util.java, + tools.vitruv.framework.applications, + tools.vitruv.dsls.reactions.runtime, + tools.vitruv.applications.util.temporary;visibility:=reexport \ No newline at end of file diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.aird b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.aird deleted file mode 100644 index 20461472e..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.aird +++ /dev/null @@ -1,30 +0,0 @@ - - - - smartHomeumljava.ecore - smartHomeumljava.genmodel - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.ecore b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.ecore deleted file mode 100644 index 11400bc14..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.ecore +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.genmodel b/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.genmodel deleted file mode 100644 index 6723053a4..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/model/smartHomeumljava.genmodel +++ /dev/null @@ -1,13 +0,0 @@ - - - smartHomeumljava.ecore - - - diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/smartHome2uml/SmartHomeToUml.reactions b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/smartHome2uml/SmartHomeToUml.reactions new file mode 100644 index 000000000..248f22d9c --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/smartHome2uml/SmartHomeToUml.reactions @@ -0,0 +1,11 @@ +import "http://www.eclipse.org/uml2/5.0.0/UML" as uml +import "??" as smartHome + +reactions: smartHomeToUml +in reaction to changes in smartHome +execute actions in uml + +reaction ServerCreated { + after element smartHome::Field inserted in java::Class[members] + call createOrFindUmlAttributeInClass(affectedEObject, newValue) +} \ No newline at end of file diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/uml2smartHome/UmlToSmartHome.reactions b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/uml2smartHome/UmlToSmartHome.reactions new file mode 100644 index 000000000..e69de29bb diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeJavaApplication.java b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeJavaApplication.java new file mode 100644 index 000000000..180c89264 --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeJavaApplication.java @@ -0,0 +1,26 @@ +package tools.vitruv.applications.smartHomeumljava; + +import java.util.HashSet; +import java.util.Set; + +import tools.vitruv.framework.applications.VitruvApplication; +import tools.vitruv.change.propagation.ChangePropagationSpecification; + +public class SmartHomeJavaApplication implements VitruvApplication { + + @Override + public Set getChangePropagationSpecifications() { + Set specs = new HashSet(); + specs.add(new UmlToSmartHomeChangePropagationSpecification()); + specs.add(new SmartHomeToUmlChangePropagationSpecification()); + return specs; + } + + @Override + public String getName() { + return "UML <> Java"; + } + +} + + diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeToUmlChangePropagationSpecification.xtend b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeToUmlChangePropagationSpecification.xtend new file mode 100644 index 000000000..e5936e6ba --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeToUmlChangePropagationSpecification.xtend @@ -0,0 +1,5 @@ +package tools.vitruv.applications.smartHomeumljava + +class SmartHomeToUmlChangePropagationSpecification extends mir.reactions.javaToUml.JavaToUmlChangePropagationSpecification { + +} \ No newline at end of file diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/UmlToSmartHomeChangePropagationSpecification.xtend b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/UmlToSmartHomeChangePropagationSpecification.xtend new file mode 100644 index 000000000..3dfccbbff --- /dev/null +++ b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/UmlToSmartHomeChangePropagationSpecification.xtend @@ -0,0 +1,5 @@ +package tools.vitruv.applications.smartHomeumljava + +class UmlToSmartHomeChangePropagationSpecification extends mir.reactions.javaToUml.JavaToUmlChangePropagationSpecification { + +} \ No newline at end of file From 5e5d6695b771c18043d3cf18bd813eb798bdbd49 Mon Sep 17 00:00:00 2001 From: Anne Hermann Date: Fri, 5 Jul 2024 11:32:41 +0200 Subject: [PATCH 3/6] deletes old consistency project --- .../.classpath | 9 ----- .../.project | 34 ------------------- .../META-INF/MANIFEST.MF | 16 --------- .../smartHome2uml/SmartHomeToUml.reactions | 11 ------ .../uml2smartHome/UmlToSmartHome.reactions | 0 .../SmartHomeJavaApplication.java | 26 -------------- ...eToUmlChangePropagationSpecification.xtend | 5 --- ...rtHomeChangePropagationSpecification.xtend | 5 --- 8 files changed, 106 deletions(-) delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/.classpath delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/.project delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/smartHome2uml/SmartHomeToUml.reactions delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/uml2smartHome/UmlToSmartHome.reactions delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeJavaApplication.java delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeToUmlChangePropagationSpecification.xtend delete mode 100644 bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/UmlToSmartHomeChangePropagationSpecification.xtend diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/.classpath b/bundles/tools.vitruv.applications.smartHomeumljava/.classpath deleted file mode 100644 index 53b9d6d5a..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/.project b/bundles/tools.vitruv.applications.smartHomeumljava/.project deleted file mode 100644 index da06c78ba..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - tools.vitruv.applications.smartHomeumljava - - - - - - org.eclipse.xtext.ui.shared.xtextBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.pde.PluginNature - org.eclipse.xtext.ui.shared.xtextNature - - diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF b/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF deleted file mode 100644 index 1e6fcdce2..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/META-INF/MANIFEST.MF +++ /dev/null @@ -1,16 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: tools.vitruv.applications.smartHomeumljava -Bundle-SymbolicName: tools.vitruv.applications.smartHomeumljava; singleton:=true -Bundle-Vendor: vitruv.tools -Bundle-Version: 0.1.0.qualifier -Require-Bundle: org.eclipse.emf.ecore;visibility:=reexport, - org.eclipse.core.runtime, - org.eclipse.uml2.uml;visibility:=reexport, - org.emftext.language.java;visibility:=reexport, - edu.kit.ipd.sdq.activextendannotations, - edu.kit.ipd.sdq.commons.util.emf, - edu.kit.ipd.sdq.commons.util.java, - tools.vitruv.framework.applications, - tools.vitruv.dsls.reactions.runtime, - tools.vitruv.applications.util.temporary;visibility:=reexport \ No newline at end of file diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/smartHome2uml/SmartHomeToUml.reactions b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/smartHome2uml/SmartHomeToUml.reactions deleted file mode 100644 index 248f22d9c..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/smartHome2uml/SmartHomeToUml.reactions +++ /dev/null @@ -1,11 +0,0 @@ -import "http://www.eclipse.org/uml2/5.0.0/UML" as uml -import "??" as smartHome - -reactions: smartHomeToUml -in reaction to changes in smartHome -execute actions in uml - -reaction ServerCreated { - after element smartHome::Field inserted in java::Class[members] - call createOrFindUmlAttributeInClass(affectedEObject, newValue) -} \ No newline at end of file diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/uml2smartHome/UmlToSmartHome.reactions b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeuml/uml2smartHome/UmlToSmartHome.reactions deleted file mode 100644 index e69de29bb..000000000 diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeJavaApplication.java b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeJavaApplication.java deleted file mode 100644 index 180c89264..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeJavaApplication.java +++ /dev/null @@ -1,26 +0,0 @@ -package tools.vitruv.applications.smartHomeumljava; - -import java.util.HashSet; -import java.util.Set; - -import tools.vitruv.framework.applications.VitruvApplication; -import tools.vitruv.change.propagation.ChangePropagationSpecification; - -public class SmartHomeJavaApplication implements VitruvApplication { - - @Override - public Set getChangePropagationSpecifications() { - Set specs = new HashSet(); - specs.add(new UmlToSmartHomeChangePropagationSpecification()); - specs.add(new SmartHomeToUmlChangePropagationSpecification()); - return specs; - } - - @Override - public String getName() { - return "UML <> Java"; - } - -} - - diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeToUmlChangePropagationSpecification.xtend b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeToUmlChangePropagationSpecification.xtend deleted file mode 100644 index e5936e6ba..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/SmartHomeToUmlChangePropagationSpecification.xtend +++ /dev/null @@ -1,5 +0,0 @@ -package tools.vitruv.applications.smartHomeumljava - -class SmartHomeToUmlChangePropagationSpecification extends mir.reactions.javaToUml.JavaToUmlChangePropagationSpecification { - -} \ No newline at end of file diff --git a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/UmlToSmartHomeChangePropagationSpecification.xtend b/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/UmlToSmartHomeChangePropagationSpecification.xtend deleted file mode 100644 index 3dfccbbff..000000000 --- a/bundles/tools.vitruv.applications.smartHomeumljava/src/tools/vitruv/applications/smartHomeumljava/UmlToSmartHomeChangePropagationSpecification.xtend +++ /dev/null @@ -1,5 +0,0 @@ -package tools.vitruv.applications.smartHomeumljava - -class UmlToSmartHomeChangePropagationSpecification extends mir.reactions.javaToUml.JavaToUmlChangePropagationSpecification { - -} \ No newline at end of file From 84d6735106691b5a77c8a0eb8bfc71a90b064dc6 Mon Sep 17 00:00:00 2001 From: Anne Hermann Date: Fri, 5 Jul 2024 11:34:05 +0200 Subject: [PATCH 4/6] adds new consistency project for consistency between smart home and uml --- .../.classpath | 9 ++ .../.project | 34 ++++++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 9 ++ .../META-INF/MANIFEST.MF | 12 ++ .../build.properties | 4 + .../smarthomeuml/SmarthomeToUml.reactions | 108 ++++++++++++++++++ ...eToUmlChangePropagationSpecification.xtend | 4 + .../smarthomeuml/SmarthomeUmlApplication.java | 26 +++++ 9 files changed, 208 insertions(+) create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/.classpath create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/.project create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.core.resources.prefs create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.jdt.core.prefs create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/META-INF/MANIFEST.MF create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/build.properties create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUml.reactions create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUmlChangePropagationSpecification.xtend create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeUmlApplication.java diff --git a/bundles/tools.vitruv.applications.smarthomeuml/.classpath b/bundles/tools.vitruv.applications.smarthomeuml/.classpath new file mode 100644 index 000000000..435940f20 --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/bundles/tools.vitruv.applications.smarthomeuml/.project b/bundles/tools.vitruv.applications.smarthomeuml/.project new file mode 100644 index 000000000..da8d65b02 --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/.project @@ -0,0 +1,34 @@ + + + tools.vitruv.applications.smarthomeuml + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + org.eclipse.xtext.ui.shared.xtextNature + + diff --git a/bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.core.resources.prefs b/bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..99f26c020 --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.jdt.core.prefs b/bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..62ef3488c --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/bundles/tools.vitruv.applications.smarthomeuml/META-INF/MANIFEST.MF b/bundles/tools.vitruv.applications.smarthomeuml/META-INF/MANIFEST.MF new file mode 100644 index 000000000..9d6ce74ca --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/META-INF/MANIFEST.MF @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Smarthomeuml +Bundle-SymbolicName: tools.vitruv.applications.smarthomeuml +Bundle-Version: 1.0.0.qualifier +Export-Package: tools.vitruv.applications.smarthomeuml +Automatic-Module-Name: tools.vitruv.applications.smarthomeuml +Bundle-RequiredExecutionEnvironment: JavaSE-17 +Require-Bundle: edu.kit.ipd.sdq.metamodels.smarthome;visibility:=reexport, + org.eclipse.uml2.uml;visibility:=reexport, + tools.vitruv.framework.applications, + tools.vitruv.dsls.reactions.runtime diff --git a/bundles/tools.vitruv.applications.smarthomeuml/build.properties b/bundles/tools.vitruv.applications.smarthomeuml/build.properties new file mode 100644 index 000000000..34d2e4d2d --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUml.reactions b/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUml.reactions new file mode 100644 index 000000000..6ab250e5b --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUml.reactions @@ -0,0 +1,108 @@ +import org.eclipse.emf.common.util.URI +import edu.kit.ipd.sdq.metamodels.smarthome.SmarthomePackage +import org.eclipse.uml2.uml.UMLPackage +import edu.kit.ipd.sdq.metamodels.smarthome.impl.SmarthomeFactoryImpl + +import "http://www.eclipse.org/uml2/5.0.0/UML" as uml +import "edu.kit.ipd.sdq.metamodels.smarthome" as smarthome + +reactions: smarthomeToUml +in reaction to changes in smarthome +execute actions in uml + +reaction SystemArchitectureCreation { + after element smarthome::SmartHomeSystem created + call createUmlModel(affectedEObject) +} + +routine createUmlModel(smarthome::SmartHomeSystem smartHomeSystem) { + match { + require absence of uml::Model corresponding to smartHomeSystem + } + create { + val model = new uml::Model + } + update { + addCorrespondenceBetween(smartHomeSystem, model) + addCorrespondenceBetween(SmarthomePackage.eINSTANCE, smartHomeSystem) + addCorrespondenceBetween(UMLPackage.eINSTANCE, model) + model.URI = smartHomeSystem.eResource.URI.appendFileExtension("uml").toString + var res = smartHomeSystem.eResource.resourceSet.createResource(URI.createURI(model.URI)) + res.contents.add(model) + createComponentUmlInterface(smartHomeSystem) + createProtocolUmlInterface() + } +} + + +routine createProtocolUmlInterface() { + match { +// require absence of uml::Action corresponding to service + val model = retrieve uml::Model corresponding to UMLPackage.eINSTANCE + } + create { + val interf = new uml::Interface + } + update { + addCorrespondenceBetween(smartHomeSystem, interf) + model.packagedElements += interf + } +} + +routine createComponentUmlInterface() { + match { +// require absence of uml::Action corresponding to service + val model = retrieve uml::Model corresponding to UMLPackage.eINSTANCE + } + create { + val interf = new uml::Interface + } + update { + val smartHomeFactory = SmarthomeFactoryImpl.init() + val component = smartHomeFactory.createComponent() + addCorrespondenceBetween(component, interf) + model.packagedElements += interf + } +} + +reaction DeviceInserted { + after element smarthome::Device inserted in smarthome::SmartHomeSystem[device] + call { + createDeviceUmlClass(newValue) + } +} + +routine createDeviceUmlClass(smarthome::Device device) { + match { +// require absence of uml::Action corresponding to service + val model = retrieve uml::Model corresponding to UMLPackage.eINSTANCE + } + create { + val class = new uml::Class + } + update { + addCorrespondenceBetween(device, class) + model.packagedElements += class + } +} + +reaction ServerInserted { + after element smarthome::Server inserted in smarthome::SmartHomeSystem[server] + call { + createServerUmlClass(newValue) + } +} + +routine createServerUmlClass(smarthome::Server server) { + match { +// require absence of uml::Action corresponding to service + val model = retrieve uml::Model corresponding to UMLPackage.eINSTANCE + } + create { + val class = new uml::Class + } + update { + addCorrespondenceBetween(server, class) + model.packagedElements += class + } +} \ No newline at end of file diff --git a/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUmlChangePropagationSpecification.xtend b/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUmlChangePropagationSpecification.xtend new file mode 100644 index 000000000..2dec97cfb --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUmlChangePropagationSpecification.xtend @@ -0,0 +1,4 @@ +package tools.vitruv.applications.smarthomeuml + +class SmarthomeToUmlChangePropagationSpecification extends mir.reactions.smarthomeToUml.SmarthomeToUmlChangePropagationSpecification { +} diff --git a/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeUmlApplication.java b/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeUmlApplication.java new file mode 100644 index 000000000..51fc4f5b6 --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeUmlApplication.java @@ -0,0 +1,26 @@ +package tools.vitruv.applications.smarthomeuml; + +import java.util.HashSet; +import java.util.Set; + +import tools.vitruv.change.propagation.ChangePropagationSpecification; +import tools.vitruv.framework.applications.VitruvApplication; + +import tools.vitruv.applications.smarthomeuml.*; + +public class SmarthomeUmlApplication implements VitruvApplication{ + + @Override + public Set getChangePropagationSpecifications() { + Set specs = new HashSet(); + specs.add(new SmarthomeToUmlChangePropagationSpecification()); +// specs.add(new CombinedUmlClassToPcmReactionsChangePropagationSpecification()); + return specs; + } + + @Override + public String getName() { + return "Smarthome <-> UML Class"; + } + +} From a280277e06a83c7fd1a7099d329a00f74aae7dbd Mon Sep 17 00:00:00 2001 From: larsk21 <57503246+larsk21@users.noreply.github.com> Date: Fri, 5 Jul 2024 17:25:03 +0200 Subject: [PATCH 5/6] fix project structure of smarthomeuml --- .../.classpath | 1 - .../.maven_enable_dsls-compiler | 0 .../.project | 17 +++++++ .../META-INF/MANIFEST.MF | 5 +- .../build.properties | 9 ++-- .../plugin.xml | 16 +++++++ .../.project | 34 +++++++++++++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.m2e.core.prefs | 4 ++ .../build.properties | 2 + .../feature.properties | 7 +++ .../feature.xml | 42 ++++++++++++++++ .../META-INF/MANIFEST.MF | 1 + .../tools.vitruv.casestudies.parent/pom.xml | 15 +++++- .../.classpath | 16 +++++++ .../.project | 45 ++++++++++++++++++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 0 .../.settings/org.eclipse.m2e.core.prefs | 4 ++ .../META-INF/MANIFEST.MF | 18 +++++++ .../build.properties | 4 ++ .../lib/slf4j-api-2.0.13.jar | Bin 0 -> 68605 bytes 22 files changed, 237 insertions(+), 7 deletions(-) create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/.maven_enable_dsls-compiler create mode 100644 bundles/tools.vitruv.applications.smarthomeuml/plugin.xml create mode 100644 features/tools.vitruv.applications.smarthomeuml.feature/.project create mode 100644 features/tools.vitruv.applications.smarthomeuml.feature/.settings/org.eclipse.core.resources.prefs create mode 100644 features/tools.vitruv.applications.smarthomeuml.feature/.settings/org.eclipse.m2e.core.prefs create mode 100644 features/tools.vitruv.applications.smarthomeuml.feature/build.properties create mode 100644 features/tools.vitruv.applications.smarthomeuml.feature/feature.properties create mode 100644 features/tools.vitruv.applications.smarthomeuml.feature/feature.xml create mode 100644 tests/tools.vitruv.applications.smarthomeuml.tests/.classpath create mode 100644 tests/tools.vitruv.applications.smarthomeuml.tests/.project create mode 100644 tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.core.resources.prefs rename {bundles/tools.vitruv.applications.smarthomeuml => tests/tools.vitruv.applications.smarthomeuml.tests}/.settings/org.eclipse.jdt.core.prefs (100%) create mode 100644 tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.m2e.core.prefs create mode 100644 tests/tools.vitruv.applications.smarthomeuml.tests/META-INF/MANIFEST.MF create mode 100644 tests/tools.vitruv.applications.smarthomeuml.tests/build.properties create mode 100644 tests/tools.vitruv.applications.smarthomeuml.tests/lib/slf4j-api-2.0.13.jar diff --git a/bundles/tools.vitruv.applications.smarthomeuml/.classpath b/bundles/tools.vitruv.applications.smarthomeuml/.classpath index 435940f20..946fb3d34 100644 --- a/bundles/tools.vitruv.applications.smarthomeuml/.classpath +++ b/bundles/tools.vitruv.applications.smarthomeuml/.classpath @@ -3,7 +3,6 @@ - diff --git a/bundles/tools.vitruv.applications.smarthomeuml/.maven_enable_dsls-compiler b/bundles/tools.vitruv.applications.smarthomeuml/.maven_enable_dsls-compiler new file mode 100644 index 000000000..e69de29bb diff --git a/bundles/tools.vitruv.applications.smarthomeuml/.project b/bundles/tools.vitruv.applications.smarthomeuml/.project index da8d65b02..c42ee3cad 100644 --- a/bundles/tools.vitruv.applications.smarthomeuml/.project +++ b/bundles/tools.vitruv.applications.smarthomeuml/.project @@ -25,10 +25,27 @@ + + org.eclipse.m2e.core.maven2Builder + + + + org.eclipse.m2e.core.maven2Nature org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature org.eclipse.xtext.ui.shared.xtextNature + + + 1720168160022 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/bundles/tools.vitruv.applications.smarthomeuml/META-INF/MANIFEST.MF b/bundles/tools.vitruv.applications.smarthomeuml/META-INF/MANIFEST.MF index 9d6ce74ca..9636d2307 100644 --- a/bundles/tools.vitruv.applications.smarthomeuml/META-INF/MANIFEST.MF +++ b/bundles/tools.vitruv.applications.smarthomeuml/META-INF/MANIFEST.MF @@ -1,8 +1,9 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Smarthomeuml -Bundle-SymbolicName: tools.vitruv.applications.smarthomeuml -Bundle-Version: 1.0.0.qualifier +Bundle-SymbolicName: tools.vitruv.applications.smarthomeuml;singleton:=true +Bundle-Version: 3.0.1.qualifier +Bundle-Vendor: vitruv.tools Export-Package: tools.vitruv.applications.smarthomeuml Automatic-Module-Name: tools.vitruv.applications.smarthomeuml Bundle-RequiredExecutionEnvironment: JavaSE-17 diff --git a/bundles/tools.vitruv.applications.smarthomeuml/build.properties b/bundles/tools.vitruv.applications.smarthomeuml/build.properties index 34d2e4d2d..547fc3655 100644 --- a/bundles/tools.vitruv.applications.smarthomeuml/build.properties +++ b/bundles/tools.vitruv.applications.smarthomeuml/build.properties @@ -1,4 +1,7 @@ -source.. = src/ -output.. = bin/ +source.. = src/,\ + src-gen/,\ + xtend-gen/ +output.. = target/classes/ bin.includes = META-INF/,\ - . + .,\ + plugin.xml diff --git a/bundles/tools.vitruv.applications.smarthomeuml/plugin.xml b/bundles/tools.vitruv.applications.smarthomeuml/plugin.xml new file mode 100644 index 000000000..8608e29a8 --- /dev/null +++ b/bundles/tools.vitruv.applications.smarthomeuml/plugin.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/features/tools.vitruv.applications.smarthomeuml.feature/.project b/features/tools.vitruv.applications.smarthomeuml.feature/.project new file mode 100644 index 000000000..e8b195cb6 --- /dev/null +++ b/features/tools.vitruv.applications.smarthomeuml.feature/.project @@ -0,0 +1,34 @@ + + + tools.vitruv.applications.smarthomeuml.feature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.pde.FeatureNature + + + + 1720168160024 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/features/tools.vitruv.applications.smarthomeuml.feature/.settings/org.eclipse.core.resources.prefs b/features/tools.vitruv.applications.smarthomeuml.feature/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..99f26c020 --- /dev/null +++ b/features/tools.vitruv.applications.smarthomeuml.feature/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/features/tools.vitruv.applications.smarthomeuml.feature/.settings/org.eclipse.m2e.core.prefs b/features/tools.vitruv.applications.smarthomeuml.feature/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 000000000..f897a7f1c --- /dev/null +++ b/features/tools.vitruv.applications.smarthomeuml.feature/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/features/tools.vitruv.applications.smarthomeuml.feature/build.properties b/features/tools.vitruv.applications.smarthomeuml.feature/build.properties new file mode 100644 index 000000000..b3a611b5c --- /dev/null +++ b/features/tools.vitruv.applications.smarthomeuml.feature/build.properties @@ -0,0 +1,2 @@ +bin.includes = feature.xml,\ + feature.properties diff --git a/features/tools.vitruv.applications.smarthomeuml.feature/feature.properties b/features/tools.vitruv.applications.smarthomeuml.feature/feature.properties new file mode 100644 index 000000000..03a1d700d --- /dev/null +++ b/features/tools.vitruv.applications.smarthomeuml.feature/feature.properties @@ -0,0 +1,7 @@ +featureName=Vitruv SmartHome-UML Application +description=A Vitruv application for SmartHome and UML models +providerName=vitruv.tools +copyrightURL=http://vitruv.tools +copyright=\ +Copyright (c) 2014-2022 Vitruv Tools Team\n\ +Karlsruhe Institute of Technology (KIT), Karlsruhe, Germany \ No newline at end of file diff --git a/features/tools.vitruv.applications.smarthomeuml.feature/feature.xml b/features/tools.vitruv.applications.smarthomeuml.feature/feature.xml new file mode 100644 index 000000000..9d4512202 --- /dev/null +++ b/features/tools.vitruv.applications.smarthomeuml.feature/feature.xml @@ -0,0 +1,42 @@ + + + + + %description + + + + %copyright + + + + %license + + + + + + + + + + + + + + + + + + diff --git a/releng/tools.vitruv.casestudies.dependencywrapper/META-INF/MANIFEST.MF b/releng/tools.vitruv.casestudies.dependencywrapper/META-INF/MANIFEST.MF index 20df567e6..16e4fb373 100644 --- a/releng/tools.vitruv.casestudies.dependencywrapper/META-INF/MANIFEST.MF +++ b/releng/tools.vitruv.casestudies.dependencywrapper/META-INF/MANIFEST.MF @@ -24,5 +24,6 @@ Require-Bundle: tools.vitruv.dsls.reactions, tools.vitruv.dsls.demo.insurancepersons, edu.kit.ipd.sdq.metamodels.autosar, edu.kit.ipd.sdq.metamodels.simulink, + edu.kit.ipd.sdq.metamodels.smarthome, tools.vitruv.dsls.demo.insurancepersons.tests Bundle-Vendor: tools.vitruv diff --git a/releng/tools.vitruv.casestudies.parent/pom.xml b/releng/tools.vitruv.casestudies.parent/pom.xml index bfe13d74b..796fa34b3 100644 --- a/releng/tools.vitruv.casestudies.parent/pom.xml +++ b/releng/tools.vitruv.casestudies.parent/pom.xml @@ -17,6 +17,7 @@ https://vitruv-tools.github.io/updatesite/nightly/change https://vitruv-tools.github.io/updatesite/nightly/framework https://vitruv-tools.github.io/updatesite/nightly/dsls + https://kit-sdq.github.io/updatesite/release/metamodels/demo/${sdq.demometamodels.version} @@ -39,7 +40,7 @@ Demo Metamodels p2 - https://kit-sdq.github.io/updatesite/release/metamodels/demo/${sdq.demometamodels.version} + ${kit-sdq.demometamodels.url} SDQ Commons @@ -123,6 +124,18 @@ + + local-demometamodels + + + kit-sdq.demometamodels.path + + + + file:///${kit-sdq.demometamodels.path}/releng/edu.kit.ipd.sdq.metamodels.demo.updatesite/target/repository + + + compile-dsls diff --git a/tests/tools.vitruv.applications.smarthomeuml.tests/.classpath b/tests/tools.vitruv.applications.smarthomeuml.tests/.classpath new file mode 100644 index 000000000..2d8e2a152 --- /dev/null +++ b/tests/tools.vitruv.applications.smarthomeuml.tests/.classpath @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/tests/tools.vitruv.applications.smarthomeuml.tests/.project b/tests/tools.vitruv.applications.smarthomeuml.tests/.project new file mode 100644 index 000000000..6c29aa9b3 --- /dev/null +++ b/tests/tools.vitruv.applications.smarthomeuml.tests/.project @@ -0,0 +1,45 @@ + + + tools.vitruv.applications.smarthomeuml.tests + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + + + 1720168160025 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.core.resources.prefs b/tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..99f26c020 --- /dev/null +++ b/tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.jdt.core.prefs b/tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from bundles/tools.vitruv.applications.smarthomeuml/.settings/org.eclipse.jdt.core.prefs rename to tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.jdt.core.prefs diff --git a/tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.m2e.core.prefs b/tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 000000000..f897a7f1c --- /dev/null +++ b/tests/tools.vitruv.applications.smarthomeuml.tests/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/tests/tools.vitruv.applications.smarthomeuml.tests/META-INF/MANIFEST.MF b/tests/tools.vitruv.applications.smarthomeuml.tests/META-INF/MANIFEST.MF new file mode 100644 index 000000000..be31ceb1e --- /dev/null +++ b/tests/tools.vitruv.applications.smarthomeuml.tests/META-INF/MANIFEST.MF @@ -0,0 +1,18 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Tests +Bundle-SymbolicName: tools.vitruv.applications.smarthomeuml.tests +Bundle-Version: 1.0.0.qualifier +Automatic-Module-Name: tools.vitruv.applications.smarthomeuml.tests +Bundle-RequiredExecutionEnvironment: JavaSE-17 +Require-Bundle: tools.vitruv.testutils.vsum, + tools.vitruv.applications.util.temporary, + tools.vitruv.applications.smarthomeuml, + org.junit, + junit-jupiter-api, + ch.qos.logback.core, + org.slf4j.api, + ch.qos.logback.classic, + edu.kit.ipd.sdq.commons.util.emf, + edu.kit.ipd.sdq.commons.util.java, + org.eclipse.emf.edit diff --git a/tests/tools.vitruv.applications.smarthomeuml.tests/build.properties b/tests/tools.vitruv.applications.smarthomeuml.tests/build.properties new file mode 100644 index 000000000..34d2e4d2d --- /dev/null +++ b/tests/tools.vitruv.applications.smarthomeuml.tests/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/tests/tools.vitruv.applications.smarthomeuml.tests/lib/slf4j-api-2.0.13.jar b/tests/tools.vitruv.applications.smarthomeuml.tests/lib/slf4j-api-2.0.13.jar new file mode 100644 index 0000000000000000000000000000000000000000..a800cc2b50b05f1018a72f6099888afab0351eb7 GIT binary patch literal 68605 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 literal 0 HcmV?d00001 From 4f911f4b9cc30c5c440955aa36a133f631ba7d88 Mon Sep 17 00:00:00 2001 From: larsk21 <57503246+larsk21@users.noreply.github.com> Date: Fri, 5 Jul 2024 17:25:24 +0200 Subject: [PATCH 6/6] small fixes in smarthomeuml reactions --- .../applications/smarthomeuml/SmarthomeToUml.reactions | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUml.reactions b/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUml.reactions index 6ab250e5b..bc4cf8e5d 100644 --- a/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUml.reactions +++ b/bundles/tools.vitruv.applications.smarthomeuml/src/tools/vitruv/applications/smarthomeuml/SmarthomeToUml.reactions @@ -29,13 +29,13 @@ routine createUmlModel(smarthome::SmartHomeSystem smartHomeSystem) { model.URI = smartHomeSystem.eResource.URI.appendFileExtension("uml").toString var res = smartHomeSystem.eResource.resourceSet.createResource(URI.createURI(model.URI)) res.contents.add(model) - createComponentUmlInterface(smartHomeSystem) - createProtocolUmlInterface() + createComponentUmlInterface() + createProtocolUmlInterface(smartHomeSystem) } } -routine createProtocolUmlInterface() { +routine createProtocolUmlInterface(smarthome::SmartHomeSystem smartHomeSystem) { match { // require absence of uml::Action corresponding to service val model = retrieve uml::Model corresponding to UMLPackage.eINSTANCE @@ -66,7 +66,7 @@ routine createComponentUmlInterface() { } reaction DeviceInserted { - after element smarthome::Device inserted in smarthome::SmartHomeSystem[device] + after element smarthome::Device inserted in smarthome::SmartHomeSystem[components] call { createDeviceUmlClass(newValue) } @@ -87,7 +87,7 @@ routine createDeviceUmlClass(smarthome::Device device) { } reaction ServerInserted { - after element smarthome::Server inserted in smarthome::SmartHomeSystem[server] + after element smarthome::Server inserted in smarthome::SmartHomeSystem[components] call { createServerUmlClass(newValue) }