Add DyVE to test suite

This commit is contained in:
Roland Kluge 2019-01-30 15:59:45 +01:00
parent cee1239f82
commit bf19bbd73d
23 changed files with 1325 additions and 55 deletions

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>EMoflonTieGtTestSuite</name>
<name>_EMoflonTieGtTestSuite</name>
<comment></comment>
<projects>
</projects>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/_EMoflonTieGtTestSuite/src/org/moflon/tie/gt/testsuite/EMoflonTieGtTestSuite.java"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
<booleanAttribute key="org.eclipse.jdt.junit.IS_RUN_WITH_JUNIT_PLATFORM" value="true"/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.moflon.tie.gt.testsuite.EMoflonTieGtTestSuite"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="_EMoflonTieGtTestSuite"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
</launchConfiguration>

View file

@ -1,10 +1,11 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: EMoflonTieGtTestSuite
Bundle-SymbolicName: EMoflonTieGtTestSuite
Bundle-SymbolicName: _EMoflonTieGtTestSuite
Bundle-Version: 1.0.0.qualifier
Export-Package: org.moflon.tie.gt.testsuite
Require-Bundle: GraphOperations,
test2
test2,
dyve-model;bundle-version="0.0.1"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Automatic-Module-Name: EMoflonTieGtTestSuite

View file

@ -7,10 +7,13 @@ import org.junit.runner.RunWith;
import GraphOperations.ConstantUtilsTest;
import GraphOperations.EIntContainerTest;
import GraphOperations.GraphTest;
import de.tud.es.dyve.model.NetworkTest;
import de.tud.es.dyve.model.RootTest;
import test2.MatchBoxTest;
@RunWith(JUnitPlatform.class)
@SelectClasses({ ConstantUtilsTest.class, EIntContainerTest.class, GraphTest.class, MatchBoxTest.class })
@SelectClasses({ ConstantUtilsTest.class, EIntContainerTest.class, GraphTest.class, MatchBoxTest.class,
NetworkTest.class, RootTest.class })
public class EMoflonTieGtTestSuite {
}

View file

@ -184,57 +184,6 @@ rule triangleWithLongestEdge() {
}
}
attributeConditionLibrary {
eqI(x : EInt, y : EInt) {
check [B B] {
Java : '$x$ == $y$'
}
extend [F B] {
Java : '$x$ = $y$'
}
extend [B F] {
Java : '$y$ = $x$'
}
}
eqL(x : ELong, y : ELong) reuse eqI
eqF(x : EFloat, y : EFloat) reuse eqI
eqD(x : EDouble, y : EDouble) reuse eqI
eqShort(x : EShort, y : EShort) reuse eqI
eqByte(x : EByte, y : EByte) reuse eqI
eqS(x : EString, y : EString) {
check [ B B ] {
Java : '$x$ == null ? $y$ == null : $x$.equals($y$)'
}
extend [F B] {
Java : '$x$ = $y$'
}
extend [B F] {
Java : '$y$ = $x$'
}
}
timesI(result : EInt, x : EInt, y : EInt) {
check [B B B] {
Java : '$result$ == $x$ * $y$'
}
extend [F B B] {
Java : '$result$ = $x$ * $y$'
}
extend [B F B] {
Java : '$x$ = $result$ / $y$'
}
extend [B B F] {
Java : '$y$ = $result$ / $x$'
}
}
timesL(result : ELong, x : ELong, y : ELong) reuse timesI
timesF(result : EFloat, x : EFloat, y : EFloat) reuse timesI
timesD(result : EDouble, x : EDouble, y : EDouble) reuse timesI
timesShort(result : EShort, x : EShort, y : EShort) reuse timesI
timesByte(result : EByte, x : EByte, y : EByte) reuse timesI
}
pattern nodeWithIdCAC {
graph: Graph
@ -247,5 +196,6 @@ pattern nodeWithIdCAC {
timesD(10.0, tmp1, 5.0) // Just for fun abc should be 10/5, but is not used further
tmp2 : EDouble
timesD(tmp2, tmp1, tmp1) // Ensure that calculations can be chained
}
}

View file

@ -0,0 +1,84 @@
import "http://www.eclipse.org/emf/2002/Ecore"
attributeConditionLibrary {
// Semantics: x equals y
eqI(x : EInt, y : EInt) {
check [B B] {
Java : '$x$ == $y$'
}
extend [F B] {
Java : '$x$ = $y$'
}
extend [B F] {
Java : '$y$ = $x$'
}
}
eqL(x : ELong, y : ELong) reuse eqI
eqF(x : EFloat, y : EFloat) reuse eqI
eqD(x : EDouble, y : EDouble) reuse eqI
eqShort(x : EShort, y : EShort) reuse eqI
eqByte(x : EByte, y : EByte) reuse eqI
eqS(x : EString, y : EString) {
check [ B B ] {
Java : '$x$ == null ? $y$ == null : $x$.equals($y$)'
}
extend [F B] {
Java : '$x$ = $y$'
}
extend [B F] {
Java : '$y$ = $x$'
}
}
// Semantics: result = x * y
timesI(result : EInt, x : EInt, y : EInt) {
check [B B B] {
Java : '$result$ == $x$ * $y$'
}
extend [F B B] {
Java : '$result$ = $x$ * $y$'
}
extend [B F B] {
Java : '$x$ = $result$ / $y$'
}
extend [B B F] {
Java : '$y$ = $result$ / $x$'
}
}
timesL(result : ELong, x : ELong, y : ELong) reuse timesI
timesF(result : EFloat, x : EFloat, y : EFloat) reuse timesI
timesD(result : EDouble, x : EDouble, y : EDouble) reuse timesI
timesShort(result : EShort, x : EShort, y : EShort) reuse timesI
timesByte(result : EByte, x : EByte, y : EByte) reuse timesI
// Semantics: result = x + y
addI(result : EInt, x : EInt, y : EInt) {
check [B B B] {
Java : '$result$ == $x$ + $y$'
}
extend [F B B] {
Java : '$result$ = $x$ + $y$'
}
extend [B F B] {
Java : '$x$ = $result$ - $y$'
}
extend [B B F] {
Java : '$y$ = $result$ - $x$'
}
}
addL(result : ELong, x : ELong, y : ELong) reuse addI
addF(result : EFloat, x : EFloat, y : EFloat) reuse addI
addD(result : EDouble, x : EDouble, y : EDouble) reuse addI
addShort(result : EShort, x : EShort, y : EShort) reuse addI
addByte(result : EByte, x : EByte, y : EByte) reuse addI
addString(result : EString, x : EString, y : EString) {
check [B B B] {
Java : '$result$.equals($x$ + $y$)'
}
extend [F B B] {
Java : '$result$ = $x$ + $y$'
}
}
}

View file

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="ASCII"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:emf="http://gervarro.org/democles/constraint/emf.ecore" xmlns:specification="http://gervarro.org/democles/specification.ecore">
<specification:Pattern name="pattern_SokobanValidator_move_2_moveSokobanUp_red">
<symbolicParameters xsi:type="emf:EMFVariable" name="sok">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Sokoban"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="from">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<bodies>
<constraints xsi:type="emf:Reference">
<parameters reference="/0/@symbolicParameters.0"/>
<parameters reference="/0/@symbolicParameters.1"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
</bodies>
</specification:Pattern>
<specification:Pattern name="pattern_SokobanValidator_move_4_moveSokobanDown_red">
<symbolicParameters xsi:type="emf:EMFVariable" name="sok">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Sokoban"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="from">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<bodies>
<constraints xsi:type="emf:Reference">
<parameters reference="/1/@symbolicParameters.0"/>
<parameters reference="/1/@symbolicParameters.1"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
</bodies>
</specification:Pattern>
<specification:Pattern name="pattern_SokobanValidator_move_6_moveSokobanLeft_red">
<symbolicParameters xsi:type="emf:EMFVariable" name="sok">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Sokoban"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="from">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<bodies>
<constraints xsi:type="emf:Reference">
<parameters reference="/2/@symbolicParameters.0"/>
<parameters reference="/2/@symbolicParameters.1"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
</bodies>
</specification:Pattern>
<specification:Pattern name="pattern_SokobanValidator_move_8_moveSokobanRight_red">
<symbolicParameters xsi:type="emf:EMFVariable" name="sok">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Sokoban"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="from">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<bodies>
<constraints xsi:type="emf:Reference">
<parameters reference="/3/@symbolicParameters.0"/>
<parameters reference="/3/@symbolicParameters.1"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
</bodies>
</specification:Pattern>
<specification:Pattern name="pattern_SokobanValidator_move_10_pushBlockRight_red">
<symbolicParameters xsi:type="emf:EMFVariable" name="block">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Block"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="to">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="sok">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Sokoban"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="from">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<bodies>
<constraints xsi:type="emf:Reference">
<parameters reference="/4/@symbolicParameters.0"/>
<parameters reference="/4/@symbolicParameters.1"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
<constraints xsi:type="emf:Reference">
<parameters reference="/4/@symbolicParameters.2"/>
<parameters reference="/4/@symbolicParameters.3"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
</bodies>
</specification:Pattern>
<specification:Pattern name="pattern_SokobanValidator_move_12_pushBlockLeft_red">
<symbolicParameters xsi:type="emf:EMFVariable" name="block">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Block"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="to">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="sok">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Sokoban"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="from">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<bodies>
<constraints xsi:type="emf:Reference">
<parameters reference="/5/@symbolicParameters.0"/>
<parameters reference="/5/@symbolicParameters.1"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
<constraints xsi:type="emf:Reference">
<parameters reference="/5/@symbolicParameters.2"/>
<parameters reference="/5/@symbolicParameters.3"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
</bodies>
</specification:Pattern>
<specification:Pattern name="pattern_SokobanValidator_move_14_pushBlockUp_red">
<symbolicParameters xsi:type="emf:EMFVariable" name="block">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Block"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="to">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="sok">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Sokoban"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="from">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<bodies>
<constraints xsi:type="emf:Reference">
<parameters reference="/6/@symbolicParameters.0"/>
<parameters reference="/6/@symbolicParameters.1"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
<constraints xsi:type="emf:Reference">
<parameters reference="/6/@symbolicParameters.2"/>
<parameters reference="/6/@symbolicParameters.3"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
</bodies>
</specification:Pattern>
<specification:Pattern name="pattern_SokobanValidator_move_16_pushBlockDown_red">
<symbolicParameters xsi:type="emf:EMFVariable" name="block">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Block"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="to">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="sok">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Sokoban"/>
</symbolicParameters>
<symbolicParameters xsi:type="emf:EMFVariable" name="from">
<eClassifier xsi:type="ecore:EClass" href="SokobanLanguage.ecore#//Field"/>
</symbolicParameters>
<bodies>
<constraints xsi:type="emf:Reference">
<parameters reference="/7/@symbolicParameters.0"/>
<parameters reference="/7/@symbolicParameters.1"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
<constraints xsi:type="emf:Reference">
<parameters reference="/7/@symbolicParameters.2"/>
<parameters reference="/7/@symbolicParameters.3"/>
<eModelElement xsi:type="ecore:EReference" href="SokobanLanguage.ecore#//Figure/field"/>
</constraints>
</bodies>
</specification:Pattern>
</xmi:XMI>

36
dyve-model/.classpath Normal file
View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry including="**/*.java" kind="src" output="target/classes" path="gen">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="injection"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>

3
dyve-model/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
/gen/
/target
/bin

41
dyve-model/.project Normal file
View file

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>dyve-model</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.moflon.tie.gt.ide.core.runtime.builders.TieGtBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.moflon.tie.gt.ide.core.runtime.natures.TieGtNature</nature>
<nature>org.moflon.emf.build.MoflonEmfNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,18 @@
Manifest-Version: 1.0
Automatic-Module-Name: model
Bundle-SymbolicName: dyve-model;singleton:=true
Export-Package: de.tud.es.dyve.model.util,
de.tud.es.dyve.model,
de.tud.es.dyve.model.impl
Bundle-Name: dyve-model
Bundle-Version: 0.0.1.qualifier
Require-Bundle: org.eclipse.emf.ecore,
org.eclipse.emf.ecore.xmi,
org.emoflon.ibex.common,
org.emoflon.ibex.gt,
org.emoflon.ibex.gt.democles,
org.eclipse.emf.common
Bundle-ManifestVersion: 2
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Vendor:

View file

@ -0,0 +1,5 @@
#
#Wed Jan 16 20:46:16 CET 2019
src.excludes=injection/,src/test/java/
bin.includes=META-INF/, bin/, model/, plugin.xml, moflon.properties.xmi
source..=src/main/java,gen/

9
dyve-model/model/.gitignore vendored Normal file
View file

@ -0,0 +1,9 @@
/*.black
/*.expression
/*.green
/*.red
/*.binding
/*.bindingAndBlack
/*.cf
/*.genmodel
/*.ecore

View file

@ -0,0 +1,206 @@
@GenModel(documentation="Model for DyVE", basePackage ="de.tud.es.dyve")
@namespace(uri="platform:/resource/dyve-model/model/Dyve-model.ecore", prefix="de.tud.es.dyve")
package model;
class Root {
op Network createNetwork(EString name, Status status, Topology topology, EBoolean isVirtual);
op Organization createOrganization(EString name, Status status);
op EBoolean idExists(EString name);
val Network[*]#root networks;
val NetworkToNetwork[*]#root networkEmbeddings;
val Organization[*]#root organizations;
}
abstract class Element {
ref Organization[0..1]#elements organization;
attr EString[1] name;
attr Status[1] status;
}
abstract class Network extends Element {
op Server createServer(EString name, EInt cpu, EInt memory, EInt storage, EInt depth, Status status);
op Switch createSwitch(EString name, EInt depth, Status status);
op Link createLink(EString name, EString sourceName, EString targetName, EInt bandwidth, Status status);
op EBoolean createFailoverNode(EString masterId, EString failoverId);
op Path createPath(EString name, EString sourceName, EString targetName, EInt bandwidth, Status status);
op Process createProcess(EString name, EBoolean hasDatabase, EString serverName, Status status);
ref Root[1]#networks root;
val Node[*]#network nodes;
val Link[*]#network links;
val Path[*]#network paths;
val Process[*]#network processes;
attr Topology[1] topology;
}
abstract class Node extends Element {
ref Network[1]#nodes network;
ref Link[*]#source outgoingLinks;
ref Link[*]#target incomingLinks;
ref Path[*]#nodes paths;
ref Path[*]#sourceNode outgoingPaths;
ref Path[*]#targetNode incomingPaths;
attr EInt[1] depth = 0;
}
abstract class Server extends Node {
ref Server[0..1]#master failover;
ref Server[0..1]#failover master;
ref Process[*]#server processes;
attr EInt[1] cpu = 0;
attr EInt[1] memory = 0;
attr EInt[1] storage = 0;
}
abstract class Switch extends Node {
}
abstract class Link extends Element {
ref Network[1]#links network;
ref Path[*]#links paths;
ref Node[1]#outgoingLinks source;
ref Node[1]#incomingLinks target;
attr EInt[1] bandwidth = 0;
}
abstract class Path extends Element {
ref Network[1]#paths network;
ref Link[*]#paths links;
ref Node[*]#paths nodes;
ref Node[1]#outgoingPaths sourceNode;
ref Node[1]#incomingPaths targetNode;
attr EInt[1] bandwidth;
attr EInt[1] hops;
}
abstract class Process extends Element {
ref Network[1]#processes network;
ref Server[1]#processes server;
attr EBoolean[1] hasDatabase = false;
}
class Organization extends Element {
ref Root[1]#organizations root;
ref Element[*]#organization elements;
ref Organization[*] mistrusts;
}
abstract class SubstrateElement extends Element {
}
class SubstrateNetwork extends SubstrateElement, Network {
op SubstrateLink createLink (EString name, EString sourceName, EString targetName, EInt bandwidth, Status status);
op SubstrateServer createServer(EString name, EInt cpu, EInt memory, EInt storage, EInt depth, Status status);
op SubstrateSwitch createSwitch(EString name, EInt depth, Status status);
op SubstrateNetwork createSubstrateNetwork(EString name, Status status, Topology topology);
op SubstratePath createPath(EString name, EString sourceName, EString targetName, EInt bandwidth, Status status);
op EBoolean createFailoverNode(EString masterId, EString failoverId);
}
abstract class SubstrateNode extends SubstrateElement, Node {}
class SubstrateServer extends SubstrateNode, Server {}
class SubstrateSwitch extends SubstrateNode, Switch {}
class SubstrateLink extends SubstrateElement, Link {}
class SubstratePath extends SubstrateElement, Path {}
abstract class VirtualElement extends Element {
}
class VirtualNetwork extends VirtualElement, Network {
op VirtualLink createLink (EString name, EString sourceName, EString targetName, EInt bandwidth, Status status);
op VirtualNetwork createVirtualNetwork(EString name, Status status, Topology topology);
op VirtualServer createServer(EString name, EInt cpu, EInt memory, EInt storage, EInt depth, Status status);
op VirtualSwitch createSwitch(EString name, EInt depth, Status status);
op VirtualProcess createProcess(EString name, EBoolean hasDatabase, EString serverName, Status status);
}
class VirtualProcess extends VirtualElement, Process {}
abstract class VirtualNode extends VirtualElement, Node {
}
class VirtualServer extends VirtualNode, Server {
}
class VirtualSwitch extends VirtualNode, Switch {
}
class VirtualLink extends VirtualElement, Link {
}
abstract class Embedding {
attr EString[1] name;
}
class NetworkToNetwork extends Embedding {
ref Root[1]#networkEmbeddings root;
val ServerToServer[*]#networkEmbedding serverEmbeddings;
val SwitchToNode[*]#networkEmbedding switchEmbeddings;
val LinkToLink[*]#networkEmbedding linkToLinkEmbeddings;
val LinkToPath[*]#networkEmbedding linkToPathEmbeddings;
ref SubstrateNetwork[1] substrate;
ref VirtualNetwork[1] virtual;
}
class ServerToServer extends Embedding {
ref NetworkToNetwork[1]#serverEmbeddings networkEmbedding;
ref SubstrateServer[1] substrate;
ref VirtualServer[1] virtual;
}
class SwitchToNode extends Embedding {
ref NetworkToNetwork[1]#switchEmbeddings networkEmbedding;
ref SubstrateNode[1] substrate;
ref VirtualSwitch[1] virtual;
}
class LinkToLink extends Embedding {
ref NetworkToNetwork[1]#linkToLinkEmbeddings networkEmbedding;
ref SubstrateLink[1] substrate;
ref VirtualLink[1] virtual;
}
class LinkToPath extends Embedding {
ref NetworkToNetwork[1]#linkToPathEmbeddings networkEmbedding;
ref SubstratePath[1] substrate;
ref VirtualLink[1] virtual;
}
enum Topology {
ONE_TIER = 1;
TWO_TIER = 2;
THREE_TIER = 3;
GOOGLE_FAT_TREE = 4;
CUSTOM = 99;
FACEBOOK_FAT_TREE = 5;
DCELL = 11;
BCUBE = 10;
}
enum Status {
ACTIVE = 1;
INACTIVE = 2;
ERROR = 3;
}
class EBooleanContainer {
attr EBoolean [1] value = false;
}

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="ASCII"?>
<org.moflon.core.propertycontainer:MoflonPropertiesContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.moflon.core.propertycontainer="platform:/plugin/org.moflon.core.propertycontainer/model/Propertycontainer.ecore" projectName="model">
<replaceGenModel/>
</org.moflon.core.propertycontainer:MoflonPropertiesContainer>

6
dyve-model/plugin.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse version="3.0"?><plugin>
<extension point="org.eclipse.emf.ecore.generated_package">
<package class="de.tud.es.dyve.model.ModelPackage" genModel="model/Dyve-model.genmodel" uri="platform:/resource/dyve-model/model/Dyve-model.ecore"/>
</extension>
</plugin>

62
dyve-model/pom.xml Normal file
View file

@ -0,0 +1,62 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>model</artifactId>
<parent>
<groupId>de.tud.es.dyve</groupId>
<artifactId>modules</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>gen</directory>
<includes>
<include>**/*.java</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<failOnError>false</failOnError>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>gen</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View file

@ -0,0 +1,209 @@
package de.tud.es.dyve.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class NetworkTest {
// Substrate network values
private static final String SUB_NET_ID = "SubstrateNetwork";
private static final Status SUB_STATUS = Status.ACTIVE;
private static final Topology SUB_TOPOLOGY = Topology.CUSTOM;
private static final String SUB_SWITCH = "SubstrateSwitch";
private static final String SUB_SERVER_1 = "SubstrateServer1";
private static final String SUB_SERVER_2 = "SubstrateServer2";
private static final String SUB_LINK_1_TO_2 = "SubstrateLink_Server1_To_Server2";
// Virtual network values
private static final String VIR_NET_ID = "VirtualNetwork";
private static final Status VIR_STATUS = Status.ACTIVE;
private static final Topology VIR_TOPOLOGY = Topology.CUSTOM;
private static final String VIR_SWITCH = "VirtualSwitch";
private static final String VIR_LINK_1_TO_2 = "VirtualLink_Server1_To_Server2";
private static final String VIR_SERVER_2 = "VirtualServer2";
private static final String VIR_SERVER_1 = "VirtualServer1";
// Common network values
// private static final String NETWORK_ID = "NetworkId";
private static final Status STATUS = Status.INACTIVE;
// private static final Topology TOPOLOGY = Topology.CUSTOM;
private static final int CPU = 2;
private static final int MEMORY = 4;
private static final int STORAGE = 6;
private static final int BANDWIDTH = 10;
private static final int DEPTH = 2;
private static ModelFactory factory;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
factory = ModelFactory.eINSTANCE;
}
private Root root;
private Network subNet;
private Network virNet;
@Before
public void setUp() throws Exception {
root = factory.createRoot();
subNet = root.createNetwork(SUB_NET_ID, SUB_STATUS, SUB_TOPOLOGY, false);
virNet = root.createNetwork(VIR_NET_ID, VIR_STATUS, VIR_TOPOLOGY, true);
}
@After
public void tearDown() throws Exception {
root = null;
}
@Test
public void testCreateSubstrateFailoverNode() {
final Server master = subNet.createServer(SUB_SERVER_1, CPU, MEMORY, STORAGE, DEPTH, STATUS);
final Server failover = subNet.createServer(SUB_SERVER_2, CPU, MEMORY, STORAGE, DEPTH, STATUS);
assertNull(master.getFailover());
assertNull(master.getMaster());
assertNull(failover.getMaster());
assertNull(failover.getFailover());
assertTrue(subNet.createFailoverNode(master.getName(), failover.getName()));
assertEquals(failover, master.getFailover());
assertNull(master.getMaster());
assertEquals(master, failover.getMaster());
assertNull(failover.getFailover());
}
@Test
public void testCreateSubstrateLink() {
assertNull(subNet.createLink(SUB_LINK_1_TO_2, null, SUB_SERVER_2, BANDWIDTH, STATUS));
assertNull(subNet.createLink(SUB_LINK_1_TO_2, SUB_SERVER_1, null, BANDWIDTH, STATUS));
assertNull(subNet.createLink(SUB_LINK_1_TO_2, SUB_SERVER_1, SUB_SERVER_2, BANDWIDTH, STATUS));
subNet.createServer(SUB_SERVER_1, CPU, MEMORY, STORAGE, DEPTH, STATUS);
subNet.createServer(SUB_SERVER_2, CPU, MEMORY, STORAGE, DEPTH, STATUS);
final Link link = subNet.createLink(SUB_LINK_1_TO_2, SUB_SERVER_1, SUB_SERVER_2, BANDWIDTH, STATUS);
assertEquals(SUB_LINK_1_TO_2, link.getName());
assertEquals(SUB_SERVER_1, link.getSource().getName());
assertEquals(SUB_SERVER_2, link.getTarget().getName());
assertEquals(BANDWIDTH, link.getBandwidth());
assertEquals(STATUS, link.getStatus());
assertEquals(subNet, link.getNetwork());
}
@Test
public void testCreateSubstratePath() {
final Server server1 = subNet.createServer(SUB_SERVER_1, CPU, MEMORY, STORAGE, DEPTH, STATUS);
final Server server2 = subNet.createServer(SUB_SERVER_2, CPU, MEMORY, STORAGE, DEPTH, STATUS);
assertTrue(subNet.getPaths().isEmpty());
final String pathName = "PathId";
final Path path = subNet.createPath(pathName, SUB_SERVER_1, SUB_SERVER_2, BANDWIDTH, STATUS);
assertTrue(path instanceof SubstratePath);
assertEquals(pathName, path.getName());
assertEquals(BANDWIDTH, path.getBandwidth());
assertEquals(server1, path.getSourceNode());
assertEquals(server2, path.getTargetNode());
assertEquals(subNet, path.getNetwork());
assertEquals(Arrays.asList(path), subNet.getPaths());
}
@Test
public void testCreateSubstrateServer() {
final Server server = subNet.createServer(SUB_SERVER_1, CPU, MEMORY, STORAGE, DEPTH, STATUS);
assertEquals(SUB_SERVER_1, server.getName());
assertEquals(STATUS, server.getStatus());
assertEquals(CPU, server.getCpu());
assertEquals(MEMORY, server.getMemory());
assertEquals(STORAGE, server.getStorage());
assertEquals(DEPTH, server.getDepth());
assertEquals(subNet, server.getNetwork());
// Error tests
Server errorServer = subNet.createServer(null, CPU, MEMORY, STORAGE, DEPTH, STATUS);
assertNull(errorServer);
errorServer = subNet.createServer("", CPU, MEMORY, STORAGE, DEPTH, STATUS);
assertNull(errorServer);
}
@Test
public void testCreateSubstrateSwitch() {
assertTrue(subNet.getNodes().isEmpty());
final Switch sw = subNet.createSwitch(SUB_SWITCH, DEPTH, STATUS);
assertTrue(sw instanceof SubstrateSwitch);
assertEquals(SUB_SWITCH, sw.getName());
assertEquals(STATUS, sw.getStatus());
assertEquals(DEPTH, sw.getDepth());
assertEquals(subNet, sw.getNetwork());
}
@Test
public void testCreateVirtualLink() {
assertNull(virNet.createLink(VIR_LINK_1_TO_2, null, VIR_SERVER_2, BANDWIDTH, STATUS));
assertNull(virNet.createLink(VIR_LINK_1_TO_2, VIR_SERVER_1, null, BANDWIDTH, STATUS));
assertNull(virNet.createLink(VIR_LINK_1_TO_2, VIR_SERVER_1, VIR_SERVER_2, BANDWIDTH, STATUS));
virNet.createServer(VIR_SERVER_1, CPU, MEMORY, STORAGE, DEPTH, STATUS);
virNet.createServer(VIR_SERVER_2, CPU, MEMORY, STORAGE, DEPTH, STATUS);
final Link link = virNet.createLink(VIR_LINK_1_TO_2, VIR_SERVER_1, VIR_SERVER_2, BANDWIDTH, STATUS);
assertEquals(VIR_LINK_1_TO_2, link.getName());
assertEquals(VIR_SERVER_1, link.getSource().getName());
assertEquals(VIR_SERVER_2, link.getTarget().getName());
assertEquals(BANDWIDTH, link.getBandwidth());
assertEquals(STATUS, link.getStatus());
assertEquals(virNet, link.getNetwork());
}
@Test
public void testCreateVirtualProcess() {
assertTrue(virNet.getProcesses().isEmpty());
final Server server1 = virNet.createServer(VIR_SERVER_1, CPU, MEMORY, STORAGE, DEPTH, STATUS);
final boolean hasDatabase = true;
final String processName = "Process";
final Process process = virNet.createProcess(processName, hasDatabase, VIR_SERVER_1, STATUS);
assertTrue(process instanceof VirtualProcess);
assertEquals(processName, process.getName());
assertEquals(hasDatabase, process.isHasDatabase());
assertEquals(server1, process.getServer());
assertEquals(STATUS, process.getStatus());
}
@Test
public void testCreateVirtualServer() {
final Server server = virNet.createServer(VIR_SERVER_1, CPU, MEMORY, STORAGE, DEPTH, STATUS);
assertEquals(VIR_SERVER_1, server.getName());
assertEquals(STATUS, server.getStatus());
assertEquals(CPU, server.getCpu());
assertEquals(MEMORY, server.getMemory());
assertEquals(STORAGE, server.getStorage());
assertEquals(DEPTH, server.getDepth());
assertEquals(virNet, server.getNetwork());
// Error tests
Server errorServer = virNet.createServer(null, CPU, MEMORY, STORAGE, DEPTH, STATUS);
assertNull(errorServer);
errorServer = virNet.createServer("", CPU, MEMORY, STORAGE, DEPTH, STATUS);
assertNull(errorServer);
}
@Test
public void testCreateVirtualSwitch() {
assertTrue(virNet.getNodes().isEmpty());
final Switch sw = virNet.createSwitch(VIR_SWITCH, DEPTH, STATUS);
assertTrue(sw instanceof VirtualSwitch);
assertEquals(VIR_SWITCH, sw.getName());
assertEquals(STATUS, sw.getStatus());
assertEquals(DEPTH, sw.getDepth());
assertEquals(virNet, sw.getNetwork());
}
}

View file

@ -0,0 +1,88 @@
package de.tud.es.dyve.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class RootTest {
private static final String NETWORK_ID = "NetworkId";
private static final Status STATUS = Status.ERROR;
private static final Topology TOPOLOGY = Topology.CUSTOM;
private static final String ORGANIZATION_ID = "Organization";
private static ModelFactory factory;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
factory = ModelFactory.eINSTANCE;
}
private Root root;
@Before
public void setUp() throws Exception {
root = factory.createRoot();
}
@After
public void tearDown() throws Exception {
root = null;
}
@Test
public void testCreateOrganization() {
// assertNull(root.createOrganization(null, STATUS));
// assertNull(root.createOrganization(ORGANIZATION_ID, null));
final Organization organization = root.createOrganization(ORGANIZATION_ID, STATUS);
assertEquals(ORGANIZATION_ID, organization.getName());
assertEquals(STATUS, organization.getStatus());
assertEquals(root, organization.getRoot());
}
@Test
public void testCreateSubstrateNetwork() {
final Network network = root.createNetwork(NETWORK_ID, STATUS, TOPOLOGY, false);
assertTrue(network instanceof SubstrateNetwork);
assertEquals(NETWORK_ID, network.getName());
assertEquals(STATUS, network.getStatus());
assertEquals(TOPOLOGY, network.getTopology());
}
@Test
public void testCreateVirtualNetwork() {
final Network network = root.createNetwork(NETWORK_ID, STATUS, TOPOLOGY, true);
assertTrue(network instanceof VirtualNetwork);
assertEquals(NETWORK_ID, network.getName());
assertEquals(STATUS, network.getStatus());
assertEquals(TOPOLOGY, network.getTopology());
}
@Test
public void testMasterFailover() {
// final Network network = root.createNetwork(NETWORK_ID, STATUS, TOPOLOGY, false);
//
// String masterName = "master";
// final Server master = network.createServer(masterName, STATUS, CPU, MEMORY, STORAGE, DEPTH);
// master.setName("master");
// network.getNodes().add(master);
//
// final Server failover = factory.createServer();
// failover.setName("failover");
// network.getNodes().add(failover);
//
// assertTrue(root.createFailoverNode("master", "failover"));
// assertEquals(master, failover.getMaster());
// assertEquals(failover, master.getFailover());
}
}

View file

@ -0,0 +1,178 @@
import "http://www.eclipse.org/emf/2002/Ecore"
import "platform:/resource/dyve-model/model/Dyve-model.ecore"
abstract rule createServer(name: EString, cpu: EInt, memory: EInt, storage: EInt, depth: EInt, status: Status) {
network : Network {
++ -nodes->server
}
++ server : Server{
.name := param::name
.status := param::status
.cpu := param::cpu
.memory := param::memory
.storage := param::storage
.depth := param::depth
}
attributeCondition {
serverNameValid(param::name)
}
}
rule createSubstrateServer(name: EString, cpu: EInt, memory: EInt, storage: EInt, depth: EInt, status: Status) refines createServer {
network: SubstrateNetwork
++ server: SubstrateServer
}
rule createVirtualServer(name: EString, cpu: EInt, memory: EInt, storage: EInt, depth: EInt, status: Status) refines createServer {
network: VirtualNetwork
++ server: VirtualServer
}
abstract rule createSwitch(name: EString, depth: EInt, status: Status) {
network : Network {
++ -nodes->sw
}
++ sw : Switch {
.name := param::name
.depth := param::depth
.status := param::status
}
}
rule createSubstrateSwitch(name: EString, depth: EInt, status: Status) refines createSwitch {
network : SubstrateNetwork
++ sw : SubstrateSwitch
}
rule createVirtualSwitch(name: EString, depth: EInt, status: Status) refines createSwitch {
network : VirtualNetwork
++ sw : VirtualSwitch
}
abstract rule createLink(name: EString, sourceName: EString, targetName: EString, bandwidth: EInt, status: Status) {
network : Network {
-nodes->source
-nodes->target
}
source: Node {
.name == param::sourceName
}
target : Node {
.name == param::targetName
}
++ link : Link {
.name := param::name
.status := param::status
.bandwidth := param::bandwidth
++ -network->network
++ -source->source
++ -target->target
}
}
rule createVirtualLink(name: EString, sourceName: EString, targetName: EString, bandwidth: EInt, status: Status) refines createLink {
source : VirtualNode
target : VirtualNode
++ link: VirtualLink
}
rule createSubstrateLink(name: EString, sourceName: EString, targetName: EString, bandwidth: EInt, status: Status) refines createLink {
source : SubstrateNode
target : SubstrateNode
++ link: SubstrateLink
}
abstract rule createPath(name: EString, sourceName: EString, targetName: EString, bandwidth: EInt, status: Status) {
network : Network {
-nodes->source
-nodes->target
++ -paths->path
}
source : Node {
.name == param::sourceName
}
target : Node {
.name == param::targetName
}
++ path : Path {
.name := param::name
.status := param::status
.bandwidth := param::bandwidth
++ -sourceNode-> source
++ -targetNode->target
}
}
rule createSubstratePath(name: EString, sourceName: EString, targetName: EString, bandwidth: EInt, status: Status) refines createPath {
network : SubstrateNetwork
source : SubstrateNode
target : SubstrateNode
++ path : SubstratePath
}
abstract rule createProcess(name: EString, hasDatabase: EBoolean, serverName: EString, status: Status) {
network : Network {
-nodes->server
++ -processes->process
}
server : Server {
.name == param::serverName
++ -processes->process
}
++ process : Process {
.name := param::name
.status := param::status
.hasDatabase := param::hasDatabase
}
}
rule createVirtualProcess(name: EString, hasDatabase: EBoolean, serverName: EString, status: Status) refines createProcess {
network : VirtualNetwork
server : VirtualServer
++ process : VirtualProcess
}
abstract rule createFailoverNode(masterId: EString, failoverId: EString) {
network : Network {
-nodes-> master
-nodes-> failover
}
master : Server {
.name == param::masterId
++ -failover-> failover
}
failover : Server {
.name == param::failoverId
}
}
rule createSubstrateFailoverNode(masterId: EString, failoverId: EString) refines createFailoverNode {
network : SubstrateNetwork
master : SubstrateServer
failover : SubstrateServer
}
attributeConditionLibrary {
serverNameValid(x : EString) {
check [ B ] {
Java : '$x$ != null && !$x$.equals("")'
}
}
}

View file

@ -0,0 +1,107 @@
import "platform:/resource/dyve-model/model/Dyve-model.ecore"
import "http://www.eclipse.org/emf/2002/Ecore"
using "networkModel.gt"
class SubstrateNetwork {
operation createServer (name:EString, cpu:EInt, memory:EInt, storage:EInt, depth:EInt, status:Status):SubstrateServer {
this : SubstrateNetwork
server : SubstrateServer
if (createSubstrateServer(network=this, name=name, cpu=cpu, memory=memory, storage=storage, depth=depth, status=status)) {
return server
} else {
return null
}
}
operation createSwitch (name:EString, depth:EInt, status:Status):SubstrateSwitch {
this : SubstrateNetwork
sw : SubstrateSwitch
if (createSubstrateSwitch(network=this , name=name, depth=depth, status=status)) {
return sw
} else {
return null
}
}
operation createLink (name:EString, sourceName:EString, targetName:EString, bandwidth:EInt, status:Status):SubstrateLink {
this : SubstrateNetwork
target : SubstrateNode
source : SubstrateNode
link : SubstrateLink
if (createSubstrateLink(network=this, name=name, sourceName=sourceName, targetName=targetName, bandwidth=bandwidth, status=status)) {
return link
} else {
return null
}
}
operation createPath (name:EString, sourceName:EString, targetName:EString, bandwidth:EInt, status:Status):SubstratePath {
this : SubstrateNetwork
source : SubstrateNode
target : SubstrateNode
path : SubstratePath
if (createSubstratePath(network=this, name=name, sourceName=sourceName, targetName=targetName, bandwidth=bandwidth, status=status)) {
return path
} else {
return null
}
}
operation createFailoverNode (masterId:EString, failoverId:EString):EBoolean {
this : SubstrateNetwork
master : SubstrateServer
failover : SubstrateServer
if (createFailoverNode(network=this, masterId=masterId, failoverId=failoverId)) {
return true
} else {
return false
}
}
}
class VirtualNetwork {
operation createServer (name:EString, cpu:EInt, memory:EInt, storage:EInt, depth:EInt, status:Status):VirtualServer {
this : VirtualNetwork
server : VirtualServer
if (createVirtualServer(network=this, name=name, cpu=cpu, memory=memory, storage=storage, depth=depth, status=status)) {
return server
} else {
return null
}
}
operation createSwitch (name:EString, depth:EInt, status:Status):VirtualSwitch {
this : VirtualNetwork
sw : VirtualSwitch
if (createVirtualSwitch(network=this, name=name, depth=depth, status=status)) {
return sw
} else {
return null
}
}
operation createLink (name:EString, sourceName:EString, targetName:EString, bandwidth:EInt, status:Status):VirtualLink {
this : VirtualNetwork
target : VirtualNode
source : VirtualNode
link : VirtualLink
if (createVirtualLink(network=this, name=name, sourceName=sourceName, targetName=targetName, bandwidth=bandwidth, status=status)) {
return link
} else {
return null
}
}
operation createProcess (name:EString, hasDatabase:EBoolean, serverName:EString, status:Status):VirtualProcess {
this : VirtualNetwork
server : VirtualServer
process : VirtualProcess
if (createVirtualProcess(network=this, name=name, hasDatabase=hasDatabase, serverName=serverName, status=status)) {
return process
} else {
return null
}
}
}

View file

@ -0,0 +1,44 @@
import "http://www.eclipse.org/emf/2002/Ecore"
import "platform:/resource/dyve-model/model/Dyve-model.ecore"
rule createOrganization(name: EString, status: Status) {
root : Root {
++ -organizations->organization
}
++ organization : Organization {
.name := param::name
.status := param::status
}
}
abstract rule createNetwork(name: EString, status: Status, topology: Topology) {
root : Root {
++ -networks->network
}
++ network : Network{
.name := param::name
.status := param::status
.topology := param::topology
}
}
rule createVirtualNetwork(name: EString, status: Status, topology: Topology) refines createNetwork {
++ network : VirtualNetwork
}
rule createSubstrateNetwork(name: EString, status: Status, topology: Topology) refines createNetwork {
++ network : SubstrateNetwork
}
rule createContainer(value : EBoolean) {
++ object : EBooleanContainer {
.value := param::value
}
}
pattern isTrue() {
booleanContainer : EBooleanContainer {
.value == true
}
}

View file

@ -0,0 +1,32 @@
import "http://www.eclipse.org/emf/2002/Ecore"
import "platform:/resource/dyve-model/model/Dyve-model.ecore"
using "rootModel.gt"
class Root {
operation createNetwork(name:EString, status:Status, topology:Topology, isVirtual:EBoolean):Network {
this : Root
booleanContainer : EBooleanContainer
createContainer(object=booleanContainer, value=isVirtual)
if (isTrue(booleanContainer=booleanContainer)) {
network : VirtualNetwork
createVirtualNetwork(root=this, status=status, topology=topology, network=network, name=name)
return network
} else{
network2 : SubstrateNetwork
createSubstrateNetwork(root=this, status=status, topology=topology, network=network2, name=name)
return network2
}
}
operation createOrganization(name:EString, status:Status):Organization {
this : Root
organization : Organization
if (createOrganization(root=this, name=name, status=status)) {
return organization
} else {
return null
}
}
}