From b74434a54e748752337096bfeff4604edc120507 Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Fri, 31 Aug 2007 13:12:53 +0000 Subject: [201839] Net4j/CDO Components must comform to incubation rules https://bugs.eclipse.org/bugs/show_bug.cgi?id=201839 --- plugins/org.eclipse.emf.cdo.tests/.classpath | 9 + plugins/org.eclipse.emf.cdo.tests/.cvsignore | 3 + plugins/org.eclipse.emf.cdo.tests/.project | 28 + .../.settings/org.eclipse.jdt.core.prefs | 7 + .../org.eclipse.emf.cdo.tests/CDO2 AllTests.launch | 21 + .../CDO2 ContainmentTest.launch | 21 + .../CDO2 CrossReferenceTest.launch | 21 + .../CDO2 InitialTest.launch | 21 + .../CDO2 InvalidationTest.launch | 21 + plugins/org.eclipse.emf.cdo.tests/CDO2 TDD.launch | 19 + .../org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF | 17 + .../net4j/embedded/net4j-embedded.properties | 6 - .../META-INF/net4j/embedded/net4j-embedded.xml | 64 - .../META-INF/net4j/net4j.properties | 4 - .../META-INF/net4j/net4j.xml | 56 - plugins/org.eclipse.emf.cdo.tests/My.ecore | 3 + plugins/org.eclipse.emf.cdo.tests/about.html | 42 + plugins/org.eclipse.emf.cdo.tests/build.properties | 9 + plugins/org.eclipse.emf.cdo.tests/copyright.txt | 8 + .../org.eclipse.emf.cdo.tests/ecore/Ecore.ecore | 498 + .../ecore/XMLNamespace.ecore | 94 + .../org.eclipse.emf.cdo.tests/ecore/XMLType.ecore | 518 + plugins/org.eclipse.emf.cdo.tests/epl-v10.html | 319 + plugins/org.eclipse.emf.cdo.tests/license.html | 319 + plugins/org.eclipse.emf.cdo.tests/model1.ecore | 69 + plugins/org.eclipse.emf.cdo.tests/model2.ecore | 9 + .../org.eclipse.emf.cdo.tests/plugin.properties | 19 + .../org/eclipse/emf/cdo/tests/AbstractCDOTest.java | 243 + .../src/org/eclipse/emf/cdo/tests/Activator.java | 60 + .../src/org/eclipse/emf/cdo/tests/AllTests.java | 36 + .../org/eclipse/emf/cdo/tests/ContainmentTest.java | 273 + .../eclipse/emf/cdo/tests/CrossReferenceTest.java | 263 + .../eclipse/emf/cdo/tests/DymamicEcoreTest.java | 80 + .../org/eclipse/emf/cdo/tests/DymamicUmlTest.java | 105 + .../src/org/eclipse/emf/cdo/tests/EMFTest.java | 73 + .../eclipse/emf/cdo/tests/GeneratedEcoreTest.java | 58 + .../src/org/eclipse/emf/cdo/tests/InitialTest.java | 627 + .../eclipse/emf/cdo/tests/InvalidationTest.java | 341 + .../eclipse/emf/cdo/tests/PackageRegistryTest.java | 112 + .../src/org/eclipse/emf/cdo/tests/TDD.java | 88 + .../emf/cdo/tests/internal/CDOTestPlugin.java | 40 - plugins/org.eclipse.emf.cdo.tests/uml2/10536.uml | 42 + plugins/org.eclipse.emf.cdo.tests/uml2/10537.uml | 69 + plugins/org.eclipse.emf.cdo.tests/uml2/Ecore.uml | 977 ++ .../uml2/Infrastructure.uml | 4818 ++++++ plugins/org.eclipse.emf.cdo.tests/uml2/L0.uml | 18 + plugins/org.eclipse.emf.cdo.tests/uml2/L1.uml | 45 + plugins/org.eclipse.emf.cdo.tests/uml2/L2.uml | 57 + plugins/org.eclipse.emf.cdo.tests/uml2/L3.uml | 57 + plugins/org.eclipse.emf.cdo.tests/uml2/LM.uml | 18 + .../uml2/Superstructure.uml | 14306 +++++++++++++++++ plugins/org.eclipse.emf.cdo.tests/uml2/UML.ecore | 15558 ++++++++++++++++++ .../org.eclipse.emf.cdo.tests/uml2/UML.merged.uml | 15806 +++++++++++++++++++ plugins/org.eclipse.emf.cdo.tests/uml2/UML.uml | 1947 +++ 54 files changed, 58172 insertions(+), 170 deletions(-) create mode 100644 plugins/org.eclipse.emf.cdo.tests/.classpath create mode 100644 plugins/org.eclipse.emf.cdo.tests/.cvsignore create mode 100644 plugins/org.eclipse.emf.cdo.tests/.project create mode 100644 plugins/org.eclipse.emf.cdo.tests/.settings/org.eclipse.jdt.core.prefs create mode 100644 plugins/org.eclipse.emf.cdo.tests/CDO2 AllTests.launch create mode 100644 plugins/org.eclipse.emf.cdo.tests/CDO2 ContainmentTest.launch create mode 100644 plugins/org.eclipse.emf.cdo.tests/CDO2 CrossReferenceTest.launch create mode 100644 plugins/org.eclipse.emf.cdo.tests/CDO2 InitialTest.launch create mode 100644 plugins/org.eclipse.emf.cdo.tests/CDO2 InvalidationTest.launch create mode 100644 plugins/org.eclipse.emf.cdo.tests/CDO2 TDD.launch create mode 100644 plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF delete mode 100644 plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/embedded/net4j-embedded.properties delete mode 100644 plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/embedded/net4j-embedded.xml delete mode 100644 plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/net4j.properties delete mode 100644 plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/net4j.xml create mode 100644 plugins/org.eclipse.emf.cdo.tests/My.ecore create mode 100644 plugins/org.eclipse.emf.cdo.tests/about.html create mode 100644 plugins/org.eclipse.emf.cdo.tests/build.properties create mode 100644 plugins/org.eclipse.emf.cdo.tests/copyright.txt create mode 100644 plugins/org.eclipse.emf.cdo.tests/ecore/Ecore.ecore create mode 100644 plugins/org.eclipse.emf.cdo.tests/ecore/XMLNamespace.ecore create mode 100644 plugins/org.eclipse.emf.cdo.tests/ecore/XMLType.ecore create mode 100644 plugins/org.eclipse.emf.cdo.tests/epl-v10.html create mode 100644 plugins/org.eclipse.emf.cdo.tests/license.html create mode 100644 plugins/org.eclipse.emf.cdo.tests/model1.ecore create mode 100644 plugins/org.eclipse.emf.cdo.tests/model2.ecore create mode 100644 plugins/org.eclipse.emf.cdo.tests/plugin.properties create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/Activator.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DymamicEcoreTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DymamicUmlTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/GeneratedEcoreTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TDD.java delete mode 100644 plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/internal/CDOTestPlugin.java create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/10536.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/10537.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/Ecore.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/Infrastructure.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/L0.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/L1.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/L2.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/L3.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/LM.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/Superstructure.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/UML.ecore create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/UML.merged.uml create mode 100644 plugins/org.eclipse.emf.cdo.tests/uml2/UML.uml (limited to 'plugins') diff --git a/plugins/org.eclipse.emf.cdo.tests/.classpath b/plugins/org.eclipse.emf.cdo.tests/.classpath new file mode 100644 index 0000000000..9e7e4b0614 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/.cvsignore b/plugins/org.eclipse.emf.cdo.tests/.cvsignore new file mode 100644 index 0000000000..f43b3874ca --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/.cvsignore @@ -0,0 +1,3 @@ +bin +doc +model1X.ecore diff --git a/plugins/org.eclipse.emf.cdo.tests/.project b/plugins/org.eclipse.emf.cdo.tests/.project new file mode 100644 index 0000000000..e05af07d91 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/.project @@ -0,0 +1,28 @@ + + + org.eclipse.emf.cdo.tests + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/plugins/org.eclipse.emf.cdo.tests/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.cdo.tests/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..85dc5b8c67 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +#Sun Jan 07 14:27:04 CET 2007 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/plugins/org.eclipse.emf.cdo.tests/CDO2 AllTests.launch b/plugins/org.eclipse.emf.cdo.tests/CDO2 AllTests.launch new file mode 100644 index 0000000000..d13c4a9d2a --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/CDO2 AllTests.launch @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/CDO2 ContainmentTest.launch b/plugins/org.eclipse.emf.cdo.tests/CDO2 ContainmentTest.launch new file mode 100644 index 0000000000..3a7041df70 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/CDO2 ContainmentTest.launch @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/CDO2 CrossReferenceTest.launch b/plugins/org.eclipse.emf.cdo.tests/CDO2 CrossReferenceTest.launch new file mode 100644 index 0000000000..f3e604c50f --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/CDO2 CrossReferenceTest.launch @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/CDO2 InitialTest.launch b/plugins/org.eclipse.emf.cdo.tests/CDO2 InitialTest.launch new file mode 100644 index 0000000000..a431a65d5d --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/CDO2 InitialTest.launch @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/CDO2 InvalidationTest.launch b/plugins/org.eclipse.emf.cdo.tests/CDO2 InvalidationTest.launch new file mode 100644 index 0000000000..5f6f90f4e5 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/CDO2 InvalidationTest.launch @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/CDO2 TDD.launch b/plugins/org.eclipse.emf.cdo.tests/CDO2 TDD.launch new file mode 100644 index 0000000000..45c76017c4 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/CDO2 TDD.launch @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..a163542480 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/META-INF/MANIFEST.MF @@ -0,0 +1,17 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-SymbolicName: org.eclipse.emf.cdo.tests +Bundle-Version: 0.8.0.qualifier +Bundle-Activator: org.eclipse.emf.cdo.tests.Activator +Bundle-Vendor: %providerName +Require-Bundle: org.eclipse.core.runtime, + org.eclipse.net4j.tests, + org.eclipse.net4j.tcp, + org.eclipse.emf.cdo.server, + org.eclipse.emf.cdo.server.db, + org.eclipse.emf.cdo, + org.eclipse.emf.cdo.tests.model1, + org.eclipse.emf.ecore.xmi +Eclipse-LazyStart: true +Bundle-RequiredExecutionEnvironment: J2SE-1.5 diff --git a/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/embedded/net4j-embedded.properties b/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/embedded/net4j-embedded.properties deleted file mode 100644 index c79f2c2014..0000000000 --- a/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/embedded/net4j-embedded.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Service -acceptor.listenAddr=0.0.0.0 -acceptor.listenPort=2037 - -# Internal -connectionManager.maxConnections=50 diff --git a/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/embedded/net4j-embedded.xml b/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/embedded/net4j-embedded.xml deleted file mode 100644 index a5751d197f..0000000000 --- a/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/embedded/net4j-embedded.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - plugin:/META-INF/net4j/embedded/net4j-embedded.properties - - - - - - - - - - - - - - - - - - - - - - ${connectionManager.maxConnections} - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/net4j.properties b/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/net4j.properties deleted file mode 100644 index 451c04300d..0000000000 --- a/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/net4j.properties +++ /dev/null @@ -1,4 +0,0 @@ -# Internal -randomizer.algorithm=SHA1PRNG -bufferPool.bufferSize=4096 -channel.responseTimeoutMillis=2000 diff --git a/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/net4j.xml b/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/net4j.xml deleted file mode 100644 index c0ce91cccc..0000000000 --- a/plugins/org.eclipse.emf.cdo.tests/META-INF/net4j/net4j.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - plugin:/META-INF/net4j/net4j.properties - - - - - - - - ${randomizer.algorithm} - - - - - - - ${bufferPool.bufferSize} - - - - - - - - - - - - - - - - ${channel.responseTimeoutMillis} - - - - - - - - - - diff --git a/plugins/org.eclipse.emf.cdo.tests/My.ecore b/plugins/org.eclipse.emf.cdo.tests/My.ecore new file mode 100644 index 0000000000..e9428b96cf --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/My.ecore @@ -0,0 +1,3 @@ + + diff --git a/plugins/org.eclipse.emf.cdo.tests/about.html b/plugins/org.eclipse.emf.cdo.tests/about.html new file mode 100644 index 0000000000..81a265f458 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/about.html @@ -0,0 +1,42 @@ + + + + + + + + About + + + + + +

About This Content

+ +

May 17, 2007

+ +

License

+ +

The Eclipse Foundation makes available all content in this + plug-in ("Content"). Unless otherwise indicated below, + the Content is provided to you under the terms and conditions of + the Eclipse Public License Version 1.0 ("EPL"). A copy of + the EPL is available at + + http://www.eclipse.org/legal/epl-v10.html. For purposes of the + EPL, "Program" will mean the Content.

+ +

If you did not receive this Content directly from the Eclipse + Foundation, the Content is being redistributed by another party + ("Redistributor") and different terms and conditions may + apply to your use of any object code in the Content. Check the + Redistributor's license that was provided with the Content. If + no such license exists, contact the Redistributor. Unless otherwise + indicated below, the terms and conditions of the EPL still apply to + any source code in the Content.

+ + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/build.properties b/plugins/org.eclipse.emf.cdo.tests/build.properties new file mode 100644 index 0000000000..42d4758112 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/build.properties @@ -0,0 +1,9 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + about.html,\ + copyright.txt,\ + epl-v10.html,\ + license.html,\ + plugin.properties diff --git a/plugins/org.eclipse.emf.cdo.tests/copyright.txt b/plugins/org.eclipse.emf.cdo.tests/copyright.txt new file mode 100644 index 0000000000..025f15218e --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/copyright.txt @@ -0,0 +1,8 @@ +Copyright (c) 2004 - 2007 Eike Stepper, Germany. +All rights reserved. This program and the accompanying materials +are made available under the terms of the Eclipse Public License v1.0 +which accompanies this distribution, and is available at +http://www.eclipse.org/legal/epl-v10.html + +Contributors: + Eike Stepper - initial API and implementation \ No newline at end of file diff --git a/plugins/org.eclipse.emf.cdo.tests/ecore/Ecore.ecore b/plugins/org.eclipse.emf.cdo.tests/ecore/Ecore.ecore new file mode 100644 index 0000000000..7e266df1e8 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/ecore/Ecore.ecore @@ -0,0 +1,498 @@ + + + + +
+ + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + +
+ + + + + + + +
+
+ + + + + + + + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ + + + +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+
+ + + + +
+
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+
+ + + + +
+ + + + +
+ + + + +
+
+ + + + + +
+
+ + + + + + +
+ + + + +
+
+ + + + + + + + + + +
+ + + + +
+
+ + + + +
+ + + + +
+
+ + + + + + + + +
+ + + + +
+
+ + + + + + + + + + +
+ + + + +
+
+ + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/ecore/XMLNamespace.ecore b/plugins/org.eclipse.emf.cdo.tests/ecore/XMLNamespace.ecore new file mode 100644 index 0000000000..ed4ba16ab9 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/ecore/XMLNamespace.ecore @@ -0,0 +1,94 @@ + + + +
+ + + +
+
+ + + + +
+
+
+ + + + +
+ + + + + + +
+
+ + + + +
+
+ + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/ecore/XMLType.ecore b/plugins/org.eclipse.emf.cdo.tests/ecore/XMLType.ecore new file mode 100644 index 0000000000..a24509bdf7 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/ecore/XMLType.ecore @@ -0,0 +1,518 @@ + + + + +
+ + + + +
+
+ + + +
+
+ + + + +
+
+
+
+ + + + +
+
+
+
+ + + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+ + + + +
+
+ + + + +
+ + + + +
+ + + + +
+
+ + + + +
+
+
+ + + + +
+ + + + +
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+ + + + +
+
+
+ + + + +
+
+ + + +
+
+ + + + +
+
+ + + + + +
+
+ + + + +
+ + + + +
+
+ + + + +
+
+ + + +
+
+ + + + +
+
+ + + + +
+
+ + + + + +
+
+ + + + +
+
+ + + + +
+
+
+ + + + +
+
+
+ + + + +
+
+ + + + +
+
+
+ + + + +
+
+ + + + +
+
+
+
+ + + + +
+
+
+ + + + +
+
+ + + + +
+
+ + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+ + +
+ + + + +
+
+
+ + +
+ + + + +
+
+
+ + +
+ + + + +
+
+
+ + +
+ + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/epl-v10.html b/plugins/org.eclipse.emf.cdo.tests/epl-v10.html new file mode 100644 index 0000000000..d7b88e9416 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/epl-v10.html @@ -0,0 +1,319 @@ + + + + + +Eclipse Public License - Version 1.0 + + + + + + +
+ +

Eclipse Public License - v 1.0 +

+ +

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER +THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, +REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE +OF THIS AGREEMENT.

+ +

1. DEFINITIONS

+ +

"Contribution" means:

+ +

a) +in the case of the initial Contributor, the initial code and documentation +distributed under this Agreement, and
+b) in the case of each subsequent Contributor:

+ +

i) +changes to the Program, and

+ +

ii) +additions to the Program;

+ +

where +such changes and/or additions to the Program originate from and are distributed +by that particular Contributor. A Contribution 'originates' from a Contributor +if it was added to the Program by such Contributor itself or anyone acting on +such Contributor's behalf. Contributions do not include additions to the +Program which: (i) are separate modules of software distributed in conjunction +with the Program under their own license agreement, and (ii) are not derivative +works of the Program.

+ +

"Contributor" means any person or +entity that distributes the Program.

+ +

"Licensed Patents " mean patent +claims licensable by a Contributor which are necessarily infringed by the use +or sale of its Contribution alone or when combined with the Program.

+ +

"Program" means the Contributions +distributed in accordance with this Agreement.

+ +

"Recipient" means anyone who +receives the Program under this Agreement, including all Contributors.

+ +

2. GRANT OF RIGHTS

+ +

a) +Subject to the terms of this Agreement, each Contributor hereby grants Recipient +a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly +display, publicly perform, distribute and sublicense the Contribution of such +Contributor, if any, and such derivative works, in source code and object code +form.

+ +

b) +Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free +patent license under Licensed Patents to make, use, sell, offer to sell, import +and otherwise transfer the Contribution of such Contributor, if any, in source +code and object code form. This patent license shall apply to the combination +of the Contribution and the Program if, at the time the Contribution is added +by the Contributor, such addition of the Contribution causes such combination +to be covered by the Licensed Patents. The patent license shall not apply to +any other combinations which include the Contribution. No hardware per se is +licensed hereunder.

+ +

c) +Recipient understands that although each Contributor grants the licenses to its +Contributions set forth herein, no assurances are provided by any Contributor +that the Program does not infringe the patent or other intellectual property +rights of any other entity. Each Contributor disclaims any liability to Recipient +for claims brought by any other entity based on infringement of intellectual +property rights or otherwise. As a condition to exercising the rights and +licenses granted hereunder, each Recipient hereby assumes sole responsibility +to secure any other intellectual property rights needed, if any. For example, +if a third party patent license is required to allow Recipient to distribute +the Program, it is Recipient's responsibility to acquire that license before +distributing the Program.

+ +

d) +Each Contributor represents that to its knowledge it has sufficient copyright +rights in its Contribution, if any, to grant the copyright license set forth in +this Agreement.

+ +

3. REQUIREMENTS

+ +

A Contributor may choose to distribute the +Program in object code form under its own license agreement, provided that: +

+ +

a) +it complies with the terms and conditions of this Agreement; and

+ +

b) +its license agreement:

+ +

i) +effectively disclaims on behalf of all Contributors all warranties and +conditions, express and implied, including warranties or conditions of title +and non-infringement, and implied warranties or conditions of merchantability +and fitness for a particular purpose;

+ +

ii) +effectively excludes on behalf of all Contributors all liability for damages, +including direct, indirect, special, incidental and consequential damages, such +as lost profits;

+ +

iii) +states that any provisions which differ from this Agreement are offered by that +Contributor alone and not by any other party; and

+ +

iv) +states that source code for the Program is available from such Contributor, and +informs licensees how to obtain it in a reasonable manner on or through a +medium customarily used for software exchange.

+ +

When the Program is made available in source +code form:

+ +

a) +it must be made available under this Agreement; and

+ +

b) a +copy of this Agreement must be included with each copy of the Program.

+ +

Contributors may not remove or alter any +copyright notices contained within the Program.

+ +

Each Contributor must identify itself as the +originator of its Contribution, if any, in a manner that reasonably allows +subsequent Recipients to identify the originator of the Contribution.

+ +

4. COMMERCIAL DISTRIBUTION

+ +

Commercial distributors of software may +accept certain responsibilities with respect to end users, business partners +and the like. While this license is intended to facilitate the commercial use +of the Program, the Contributor who includes the Program in a commercial +product offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes the +Program in a commercial product offering, such Contributor ("Commercial +Contributor") hereby agrees to defend and indemnify every other +Contributor ("Indemnified Contributor") against any losses, damages and +costs (collectively "Losses") arising from claims, lawsuits and other +legal actions brought by a third party against the Indemnified Contributor to +the extent caused by the acts or omissions of such Commercial Contributor in +connection with its distribution of the Program in a commercial product +offering. The obligations in this section do not apply to any claims or Losses +relating to any actual or alleged intellectual property infringement. In order +to qualify, an Indemnified Contributor must: a) promptly notify the Commercial +Contributor in writing of such claim, and b) allow the Commercial Contributor +to control, and cooperate with the Commercial Contributor in, the defense and +any related settlement negotiations. The Indemnified Contributor may participate +in any such claim at its own expense.

+ +

For example, a Contributor might include the +Program in a commercial product offering, Product X. That Contributor is then a +Commercial Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance claims and +warranties are such Commercial Contributor's responsibility alone. Under this +section, the Commercial Contributor would have to defend claims against the +other Contributors related to those performance claims and warranties, and if a +court requires any other Contributor to pay any damages as a result, the +Commercial Contributor must pay those damages.

+ +

5. NO WARRANTY

+ +

EXCEPT AS EXPRESSLY SET FORTH IN THIS +AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, +WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely +responsible for determining the appropriateness of using and distributing the +Program and assumes all risks associated with its exercise of rights under this +Agreement , including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs or +equipment, and unavailability or interruption of operations.

+ +

6. DISCLAIMER OF LIABILITY

+ +

EXCEPT AS EXPRESSLY SET FORTH IN THIS +AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF +THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGES.

+ +

7. GENERAL

+ +

If any provision of this Agreement is invalid +or unenforceable under applicable law, it shall not affect the validity or +enforceability of the remainder of the terms of this Agreement, and without +further action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable.

+ +

If Recipient institutes patent litigation +against any entity (including a cross-claim or counterclaim in a lawsuit) +alleging that the Program itself (excluding combinations of the Program with +other software or hardware) infringes such Recipient's patent(s), then such +Recipient's rights granted under Section 2(b) shall terminate as of the date +such litigation is filed.

+ +

All Recipient's rights under this Agreement +shall terminate if it fails to comply with any of the material terms or +conditions of this Agreement and does not cure such failure in a reasonable +period of time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use and +distribution of the Program as soon as reasonably practicable. However, +Recipient's obligations under this Agreement and any licenses granted by +Recipient relating to the Program shall continue and survive.

+ +

Everyone is permitted to copy and distribute +copies of this Agreement, but in order to avoid inconsistency the Agreement is +copyrighted and may only be modified in the following manner. The Agreement +Steward reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement Steward has +the right to modify this Agreement. The Eclipse Foundation is the initial +Agreement Steward. The Eclipse Foundation may assign the responsibility to +serve as the Agreement Steward to a suitable separate entity. Each new version +of the Agreement will be given a distinguishing version number. The Program +(including Contributions) may always be distributed subject to the version of +the Agreement under which it was received. In addition, after a new version of +the Agreement is published, Contributor may elect to distribute the Program +(including its Contributions) under the new version. Except as expressly stated +in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to +the intellectual property of any Contributor under this Agreement, whether +expressly, by implication, estoppel or otherwise. All rights in the Program not +expressly granted under this Agreement are reserved.

+ +

This Agreement is governed by the laws of the +State of New York and the intellectual property laws of the United States of +America. No party to this Agreement will bring a legal action under this +Agreement more than one year after the cause of action arose. Each party waives +its rights to a jury trial in any resulting litigation.

+ +

 

+ +
+ + \ No newline at end of file diff --git a/plugins/org.eclipse.emf.cdo.tests/license.html b/plugins/org.eclipse.emf.cdo.tests/license.html new file mode 100644 index 0000000000..d7b88e9416 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/license.html @@ -0,0 +1,319 @@ + + + + + +Eclipse Public License - Version 1.0 + + + + + + +
+ +

Eclipse Public License - v 1.0 +

+ +

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER +THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, +REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE +OF THIS AGREEMENT.

+ +

1. DEFINITIONS

+ +

"Contribution" means:

+ +

a) +in the case of the initial Contributor, the initial code and documentation +distributed under this Agreement, and
+b) in the case of each subsequent Contributor:

+ +

i) +changes to the Program, and

+ +

ii) +additions to the Program;

+ +

where +such changes and/or additions to the Program originate from and are distributed +by that particular Contributor. A Contribution 'originates' from a Contributor +if it was added to the Program by such Contributor itself or anyone acting on +such Contributor's behalf. Contributions do not include additions to the +Program which: (i) are separate modules of software distributed in conjunction +with the Program under their own license agreement, and (ii) are not derivative +works of the Program.

+ +

"Contributor" means any person or +entity that distributes the Program.

+ +

"Licensed Patents " mean patent +claims licensable by a Contributor which are necessarily infringed by the use +or sale of its Contribution alone or when combined with the Program.

+ +

"Program" means the Contributions +distributed in accordance with this Agreement.

+ +

"Recipient" means anyone who +receives the Program under this Agreement, including all Contributors.

+ +

2. GRANT OF RIGHTS

+ +

a) +Subject to the terms of this Agreement, each Contributor hereby grants Recipient +a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly +display, publicly perform, distribute and sublicense the Contribution of such +Contributor, if any, and such derivative works, in source code and object code +form.

+ +

b) +Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free +patent license under Licensed Patents to make, use, sell, offer to sell, import +and otherwise transfer the Contribution of such Contributor, if any, in source +code and object code form. This patent license shall apply to the combination +of the Contribution and the Program if, at the time the Contribution is added +by the Contributor, such addition of the Contribution causes such combination +to be covered by the Licensed Patents. The patent license shall not apply to +any other combinations which include the Contribution. No hardware per se is +licensed hereunder.

+ +

c) +Recipient understands that although each Contributor grants the licenses to its +Contributions set forth herein, no assurances are provided by any Contributor +that the Program does not infringe the patent or other intellectual property +rights of any other entity. Each Contributor disclaims any liability to Recipient +for claims brought by any other entity based on infringement of intellectual +property rights or otherwise. As a condition to exercising the rights and +licenses granted hereunder, each Recipient hereby assumes sole responsibility +to secure any other intellectual property rights needed, if any. For example, +if a third party patent license is required to allow Recipient to distribute +the Program, it is Recipient's responsibility to acquire that license before +distributing the Program.

+ +

d) +Each Contributor represents that to its knowledge it has sufficient copyright +rights in its Contribution, if any, to grant the copyright license set forth in +this Agreement.

+ +

3. REQUIREMENTS

+ +

A Contributor may choose to distribute the +Program in object code form under its own license agreement, provided that: +

+ +

a) +it complies with the terms and conditions of this Agreement; and

+ +

b) +its license agreement:

+ +

i) +effectively disclaims on behalf of all Contributors all warranties and +conditions, express and implied, including warranties or conditions of title +and non-infringement, and implied warranties or conditions of merchantability +and fitness for a particular purpose;

+ +

ii) +effectively excludes on behalf of all Contributors all liability for damages, +including direct, indirect, special, incidental and consequential damages, such +as lost profits;

+ +

iii) +states that any provisions which differ from this Agreement are offered by that +Contributor alone and not by any other party; and

+ +

iv) +states that source code for the Program is available from such Contributor, and +informs licensees how to obtain it in a reasonable manner on or through a +medium customarily used for software exchange.

+ +

When the Program is made available in source +code form:

+ +

a) +it must be made available under this Agreement; and

+ +

b) a +copy of this Agreement must be included with each copy of the Program.

+ +

Contributors may not remove or alter any +copyright notices contained within the Program.

+ +

Each Contributor must identify itself as the +originator of its Contribution, if any, in a manner that reasonably allows +subsequent Recipients to identify the originator of the Contribution.

+ +

4. COMMERCIAL DISTRIBUTION

+ +

Commercial distributors of software may +accept certain responsibilities with respect to end users, business partners +and the like. While this license is intended to facilitate the commercial use +of the Program, the Contributor who includes the Program in a commercial +product offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes the +Program in a commercial product offering, such Contributor ("Commercial +Contributor") hereby agrees to defend and indemnify every other +Contributor ("Indemnified Contributor") against any losses, damages and +costs (collectively "Losses") arising from claims, lawsuits and other +legal actions brought by a third party against the Indemnified Contributor to +the extent caused by the acts or omissions of such Commercial Contributor in +connection with its distribution of the Program in a commercial product +offering. The obligations in this section do not apply to any claims or Losses +relating to any actual or alleged intellectual property infringement. In order +to qualify, an Indemnified Contributor must: a) promptly notify the Commercial +Contributor in writing of such claim, and b) allow the Commercial Contributor +to control, and cooperate with the Commercial Contributor in, the defense and +any related settlement negotiations. The Indemnified Contributor may participate +in any such claim at its own expense.

+ +

For example, a Contributor might include the +Program in a commercial product offering, Product X. That Contributor is then a +Commercial Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance claims and +warranties are such Commercial Contributor's responsibility alone. Under this +section, the Commercial Contributor would have to defend claims against the +other Contributors related to those performance claims and warranties, and if a +court requires any other Contributor to pay any damages as a result, the +Commercial Contributor must pay those damages.

+ +

5. NO WARRANTY

+ +

EXCEPT AS EXPRESSLY SET FORTH IN THIS +AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, +WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely +responsible for determining the appropriateness of using and distributing the +Program and assumes all risks associated with its exercise of rights under this +Agreement , including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs or +equipment, and unavailability or interruption of operations.

+ +

6. DISCLAIMER OF LIABILITY

+ +

EXCEPT AS EXPRESSLY SET FORTH IN THIS +AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF +THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGES.

+ +

7. GENERAL

+ +

If any provision of this Agreement is invalid +or unenforceable under applicable law, it shall not affect the validity or +enforceability of the remainder of the terms of this Agreement, and without +further action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable.

+ +

If Recipient institutes patent litigation +against any entity (including a cross-claim or counterclaim in a lawsuit) +alleging that the Program itself (excluding combinations of the Program with +other software or hardware) infringes such Recipient's patent(s), then such +Recipient's rights granted under Section 2(b) shall terminate as of the date +such litigation is filed.

+ +

All Recipient's rights under this Agreement +shall terminate if it fails to comply with any of the material terms or +conditions of this Agreement and does not cure such failure in a reasonable +period of time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use and +distribution of the Program as soon as reasonably practicable. However, +Recipient's obligations under this Agreement and any licenses granted by +Recipient relating to the Program shall continue and survive.

+ +

Everyone is permitted to copy and distribute +copies of this Agreement, but in order to avoid inconsistency the Agreement is +copyrighted and may only be modified in the following manner. The Agreement +Steward reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement Steward has +the right to modify this Agreement. The Eclipse Foundation is the initial +Agreement Steward. The Eclipse Foundation may assign the responsibility to +serve as the Agreement Steward to a suitable separate entity. Each new version +of the Agreement will be given a distinguishing version number. The Program +(including Contributions) may always be distributed subject to the version of +the Agreement under which it was received. In addition, after a new version of +the Agreement is published, Contributor may elect to distribute the Program +(including its Contributions) under the new version. Except as expressly stated +in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to +the intellectual property of any Contributor under this Agreement, whether +expressly, by implication, estoppel or otherwise. All rights in the Program not +expressly granted under this Agreement are reserved.

+ +

This Agreement is governed by the laws of the +State of New York and the intellectual property laws of the United States of +America. No party to this Agreement will bring a legal action under this +Agreement more than one year after the cause of action arose. Each party waives +its rights to a jury trial in any resulting litigation.

+ +

 

+ +
+ + \ No newline at end of file diff --git a/plugins/org.eclipse.emf.cdo.tests/model1.ecore b/plugins/org.eclipse.emf.cdo.tests/model1.ecore new file mode 100644 index 0000000000..9c39d345f6 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/model1.ecore @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/model2.ecore b/plugins/org.eclipse.emf.cdo.tests/model2.ecore new file mode 100644 index 0000000000..c193111dbf --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/model2.ecore @@ -0,0 +1,9 @@ + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/plugin.properties b/plugins/org.eclipse.emf.cdo.tests/plugin.properties new file mode 100644 index 0000000000..3e4b3372e3 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/plugin.properties @@ -0,0 +1,19 @@ +# +# +# +# $Id$ + +# ==================================================================== +# To code developer: +# Do NOT change the properties between this line and the +# "%%% END OF TRANSLATED PROPERTIES %%%" line. +# Make a new property name, append to the end of the file and change +# the code to use the new property. +# ==================================================================== + +# ==================================================================== +# %%% END OF TRANSLATED PROPERTIES %%% +# ==================================================================== + +pluginName = CDO Tests TDD (Incubation) +providerName = Eclipse.org diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java new file mode 100644 index 0000000000..53fa8774b1 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java @@ -0,0 +1,243 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOObject; +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOState; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.internal.server.ContainerRepositoryProvider; +import org.eclipse.emf.cdo.internal.server.Repository; +import org.eclipse.emf.cdo.server.CDOServerUtil; +import org.eclipse.emf.cdo.server.db.IMappingStrategy; +import org.eclipse.emf.cdo.server.internal.db.DBStore; +import org.eclipse.emf.cdo.server.internal.db.HorizontalMappingStrategy; +import org.eclipse.emf.cdo.tests.model1.Model1Package; +import org.eclipse.emf.cdo.util.CDOUtil; + +import org.eclipse.net4j.db.ConnectionProvider; +import org.eclipse.net4j.db.DBUtil; +import org.eclipse.net4j.db.IDBAdapter; +import org.eclipse.net4j.db.internal.derby.DerbyAdapter; +import org.eclipse.net4j.tests.AbstractTransportTest; +import org.eclipse.net4j.util.container.IManagedContainer; + +import org.eclipse.emf.internal.cdo.util.FSMUtil; + +import javax.sql.DataSource; + +import java.util.Properties; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; + +/** + * @author Eike Stepper + */ +public abstract class AbstractCDOTest extends AbstractTransportTest +{ + public static final String REPOSITORY_NAME = "repo1"; + + @Override + protected IManagedContainer createContainer() + { + IManagedContainer container = super.createContainer(); + CDOUtil.prepareContainer(container); + CDOServerUtil.prepareContainer(container, new ContainerRepositoryProvider(container)); + CDOServerUtil.addRepository(container, createRepository()); + return container; + } + + protected Repository createRepository() + { + IMappingStrategy mappingStrategy = new HorizontalMappingStrategy(); + IDBAdapter dbAdapter = new DerbyAdapter(); + + Properties properties = new Properties(); + properties.put("driverClass", "org.apache.derby.jdbc.EmbeddedDataSource"); + properties.put("databaseName", "C:/temp/cdo-repo1"); + properties.put("createDatabase", "create"); + DataSource dataSource = DBUtil.createDataSource(properties); + ConnectionProvider connectionProvider = DBUtil.createConnectionProvider(dataSource); + + DBStore store = new DBStore(mappingStrategy, dbAdapter, connectionProvider); + mappingStrategy.setStore(store); + + Repository repository = new Repository(); + repository.setName(REPOSITORY_NAME); + repository.setStore(store); + + store.setRepository(repository); + return repository; + } + + @Override + protected void doSetUp() throws Exception + { + super.doSetUp(); + startTransport(); + } + + protected CDOSession openModel1Session() + { + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + session.getPackageRegistry().putEPackage(Model1Package.eINSTANCE); + return session; + } + + protected void assertTransient(CDOObject object) + { + assertTrue(FSMUtil.isTransient(object)); + assertEquals(null, object.cdoID()); + assertEquals(null, object.cdoRevision()); + assertEquals(null, object.cdoView()); + assertEquals(object.eResource(), object.cdoResource()); + } + + protected void assertNotTransient(CDOObject object) + { + assertFalse(FSMUtil.isTransient(object)); + assertNotNull(object.cdoID()); + assertNotNull(object.cdoRevision()); + assertNotNull(object.cdoView()); + assertNotNull(object.cdoResource()); + assertNotNull(object.eResource()); + assertEquals(object.eResource(), object.cdoResource()); + } + + protected void assertNew(CDOObject object) + { + assertNotTransient(object); + assertEquals(CDOState.NEW, object.cdoState()); + } + + protected void assertDirty(CDOObject object) + { + assertNotTransient(object); + assertEquals(CDOState.DIRTY, object.cdoState()); + } + + protected void assertClean(CDOObject object) + { + assertNotTransient(object); + assertEquals(CDOState.CLEAN, object.cdoState()); + } + + protected void assertProxy(CDOObject object) + { + assertFalse(FSMUtil.isTransient(object)); + assertNotNull(object.cdoID()); + assertNotNull(object.cdoView()); + assertNotNull(object.cdoResource()); + assertNotNull(object.eResource()); + assertEquals(object.eResource(), object.cdoResource()); + assertEquals(CDOState.PROXY, object.cdoState()); + } + + protected void assertContent(CDOObject container, CDOObject contained) + { + assertEquals(container.eResource(), contained.eResource()); + assertEquals(container.cdoResource(), contained.cdoResource()); + assertTrue(container.eContents().contains(contained)); + if (container instanceof CDOResource) + { + assertEquals(null, contained.eContainer()); + assertTrue(((CDOResource)container).getContents().contains(contained)); + } + else + { + assertEquals(container, contained.eContainer()); + } + } + + /** + * @author Eike Stepper + */ + public static interface ITimeOuter + { + public boolean timedOut() throws InterruptedException; + } + + /** + * @author Eike Stepper + */ + public static abstract class PollingTimeOuter implements ITimeOuter + { + private int retries; + + private long interval; + + public PollingTimeOuter(int retries, long interval) + { + this.retries = retries; + this.interval = interval; + } + + public int getRetries() + { + return retries; + } + + public long getInterval() + { + return interval; + } + + public boolean timedOut() throws InterruptedException + { + for (int i = 0; i < retries; i++) + { + if (successful()) + { + return false; + } + + Thread.sleep(interval); + } + + return true; + } + + protected abstract boolean successful(); + } + + /** + * @author Eike Stepper + */ + public static class LockTimeOuter implements ITimeOuter + { + private Lock lock; + + private long millis; + + public LockTimeOuter(Lock lock, long millis) + { + this.lock = lock; + this.millis = millis; + } + + public Lock getLock() + { + return lock; + } + + public long getMillis() + { + return millis; + } + + public boolean timedOut() throws InterruptedException + { + Condition condition = lock.newCondition(); + return !condition.await(millis, TimeUnit.MILLISECONDS); + } + } +} \ No newline at end of file diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/Activator.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/Activator.java new file mode 100644 index 0000000000..1c67941b69 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/Activator.java @@ -0,0 +1,60 @@ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.core.runtime.Plugin; + +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class Activator extends Plugin +{ + + // The plug-in ID + public static final String PLUGIN_ID = "org.eclipse.emf.cdo.tests"; + + // The shared instance + private static Activator plugin; + + /** + * The constructor + */ + public Activator() + { + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) + */ + @Override + public void start(BundleContext context) throws Exception + { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) + */ + @Override + public void stop(BundleContext context) throws Exception + { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static Activator getDefault() + { + return plugin; + } + +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java new file mode 100644 index 0000000000..ceac314dbb --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTests.java @@ -0,0 +1,36 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import junit.framework.Test; +import junit.framework.TestSuite; + +/** + * @author Eike Stepper + */ +public class AllTests +{ + public static Test suite() + { + TestSuite suite = new TestSuite("Tests for CDO"); + + // $JUnit-BEGIN$ + suite.addTestSuite(InitialTest.class); + suite.addTestSuite(ContainmentTest.class); + suite.addTestSuite(InvalidationTest.class); + suite.addTestSuite(CrossReferenceTest.class); + suite.addTestSuite(PackageRegistryTest.class); + suite.addTestSuite(GeneratedEcoreTest.class); + // $JUnit-END$ + + return suite; + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java new file mode 100644 index 0000000000..8c7427f1c8 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/ContainmentTest.java @@ -0,0 +1,273 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOTransaction; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.tests.model1.Category; +import org.eclipse.emf.cdo.tests.model1.Company; +import org.eclipse.emf.cdo.tests.model1.Model1Factory; +import org.eclipse.emf.cdo.tests.model1.Supplier; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; + +/** + * @author Eike Stepper + */ +public class ContainmentTest extends AbstractCDOTest +{ + public void testTransientContainment() throws Exception + { + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Creating company"); + Company company = Model1Factory.eINSTANCE.createCompany(); + + msg("Adding supplier"); + company.getSuppliers().add(supplier); + + assertTransient(company); + assertTransient(supplier); + assertContent(company, supplier); + } + + public void testBasicContainment() throws Exception + { + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Creating company"); + Company company = Model1Factory.eINSTANCE.createCompany(); + + msg("Adding supplier"); + company.getSuppliers().add(supplier); + + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Adding company"); + resource.getContents().add(company); + + msg("Committing"); + transaction.commit(); + + assertClean(resource); + assertClean(company); + assertClean(supplier); + assertContent(resource, company); + assertContent(company, supplier); + } + + public void test3Levels() throws Exception + { + msg("Creating category1"); + Category category1 = Model1Factory.eINSTANCE.createCategory(); + category1.setName("category1"); + + msg("Creating category2"); + Category category2 = Model1Factory.eINSTANCE.createCategory(); + category2.setName("category2"); + + msg("Creating category3"); + Category category3 = Model1Factory.eINSTANCE.createCategory(); + category3.setName("category3"); + + msg("Creating company"); + Company company = Model1Factory.eINSTANCE.createCompany(); + + msg("Adding categories"); + company.getCategories().add(category1); + category1.getCategories().add(category2); + category2.getCategories().add(category3); + + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Adding company"); + resource.getContents().add(company); + + msg("Committing"); + transaction.commit(); + + assertClean(resource); + assertClean(company); + assertClean(category1); + assertClean(category2); + assertClean(category3); + assertContent(resource, company); + assertContent(company, category1); + assertContent(category1, category2); + assertContent(category2, category3); + } + + public void testSeparateView() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + { + msg("Creating category1"); + Category category1 = Model1Factory.eINSTANCE.createCategory(); + category1.setName("category1"); + + msg("Creating category2"); + Category category2 = Model1Factory.eINSTANCE.createCategory(); + category2.setName("category2"); + + msg("Creating category3"); + Category category3 = Model1Factory.eINSTANCE.createCategory(); + category3.setName("category3"); + + msg("Creating company"); + Company company = Model1Factory.eINSTANCE.createCompany(); + + msg("Adding categories"); + company.getCategories().add(category1); + category1.getCategories().add(category2); + category2.getCategories().add(category3); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Adding company"); + resource.getContents().add(company); + + msg("Committing"); + transaction.commit(); + } + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Loading resource"); + CDOResource resource = transaction.getResource("/test1"); + assertProxy(resource); + + EList contents = resource.getContents(); + Company company = (Company)contents.get(0); + assertClean(company); + assertClean(resource); + assertContent(resource, company); + + Category category1 = company.getCategories().get(0); + assertClean(category1); + assertClean(company); + assertContent(company, category1); + + Category category2 = category1.getCategories().get(0); + assertClean(category2); + assertClean(category1); + assertContent(category1, category2); + + Category category3 = category2.getCategories().get(0); + assertClean(category3); + assertClean(category2); + assertContent(category2, category3); + assertClean(category3); + } + + public void testSeparateSession() throws Exception + { + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Creating category1"); + Category category1 = Model1Factory.eINSTANCE.createCategory(); + category1.setName("category1"); + + msg("Creating category2"); + Category category2 = Model1Factory.eINSTANCE.createCategory(); + category2.setName("category2"); + + msg("Creating category3"); + Category category3 = Model1Factory.eINSTANCE.createCategory(); + category3.setName("category3"); + + msg("Creating company"); + Company company = Model1Factory.eINSTANCE.createCompany(); + + msg("Adding categories"); + company.getCategories().add(category1); + category1.getCategories().add(category2); + category2.getCategories().add(category3); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Adding company"); + resource.getContents().add(company); + + msg("Committing"); + transaction.commit(); + } + + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Loading resource"); + CDOResource resource = transaction.getResource("/test1"); + assertProxy(resource); + + EList contents = resource.getContents(); + Company company = (Company)contents.get(0); + assertClean(company); + assertClean(resource); + assertContent(resource, company); + + Category category1 = company.getCategories().get(0); + assertClean(category1); + assertClean(company); + assertContent(company, category1); + + Category category2 = category1.getCategories().get(0); + assertClean(category2); + assertClean(category1); + assertContent(category1, category2); + + Category category3 = category2.getCategories().get(0); + assertClean(category3); + assertClean(category2); + assertContent(category2, category3); + assertClean(category3); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java new file mode 100644 index 0000000000..b69d25a1a8 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CrossReferenceTest.java @@ -0,0 +1,263 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOTransaction; +import org.eclipse.emf.cdo.CDOView; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.tests.model1.Company; +import org.eclipse.emf.cdo.tests.model1.Customer; +import org.eclipse.emf.cdo.tests.model1.Model1Factory; +import org.eclipse.emf.cdo.tests.model1.SalesOrder; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; + +/** + * @author Eike Stepper + */ +public class CrossReferenceTest extends AbstractCDOTest +{ + public void testLoadViaContainment() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + // ************************************************************* // + + msg("Creating customer"); + Customer customerA = Model1Factory.eINSTANCE.createCustomer(); + customerA.setName("customer"); + + msg("Creating salesOrder1"); + SalesOrder salesOrder1A = Model1Factory.eINSTANCE.createSalesOrder(); + salesOrder1A.setId(1); + salesOrder1A.setCustomer(customerA); + + msg("Creating salesOrder2"); + SalesOrder salesOrder2A = Model1Factory.eINSTANCE.createSalesOrder(); + salesOrder2A.setId(2); + salesOrder2A.setCustomer(customerA); + + msg("Creating company"); + Company companyA = Model1Factory.eINSTANCE.createCompany(); + companyA.getCustomers().add(customerA); + companyA.getSalesOrders().add(salesOrder1A); + companyA.getSalesOrders().add(salesOrder2A); + + msg("Attaching transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resourceA = transaction.createResource("/test1"); + + msg("Adding company"); + resourceA.getContents().add(companyA); + + msg("Committing"); + transaction.commit(); + + assertEquals(2, customerA.getSalesOrders().size()); + + // ************************************************************* // + + msg("Attaching viewB"); + CDOView viewB = session.openTransaction(new ResourceSetImpl()); + + msg("Loading resource"); + CDOResource resourceB = viewB.getResource("/test1"); + assertProxy(resourceB); + + EList contents = resourceB.getContents(); + Company companyB = (Company)contents.get(0); + assertClean(companyB); + assertClean(resourceB); + assertContent(resourceB, companyB); + + Customer customerB = companyB.getCustomers().get(0); + assertClean(customerB); + assertClean(companyB); + assertContent(companyB, customerB); + + SalesOrder salesOrder1B = companyB.getSalesOrders().get(0); + assertClean(salesOrder1B); + assertClean(companyB); + assertContent(companyB, salesOrder1B); + + SalesOrder salesOrder2B = companyB.getSalesOrders().get(1); + assertClean(salesOrder2B); + assertClean(companyB); + assertContent(companyB, salesOrder2B); + assertClean(salesOrder2B); + + assertEquals(2, customerB.getSalesOrders().size()); + } + + public void testLoadViaXRef() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + // ************************************************************* // + + msg("Creating customer"); + Customer customerA = Model1Factory.eINSTANCE.createCustomer(); + customerA.setName("customer"); + + msg("Creating salesOrder1"); + SalesOrder salesOrder1A = Model1Factory.eINSTANCE.createSalesOrder(); + salesOrder1A.setId(1); + salesOrder1A.setCustomer(customerA); + + msg("Creating salesOrder2"); + SalesOrder salesOrder2A = Model1Factory.eINSTANCE.createSalesOrder(); + salesOrder2A.setId(2); + salesOrder2A.setCustomer(customerA); + + msg("Creating company"); + Company companyA = Model1Factory.eINSTANCE.createCompany(); + companyA.getCustomers().add(customerA); + companyA.getSalesOrders().add(salesOrder1A); + companyA.getSalesOrders().add(salesOrder2A); + + msg("Attaching transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resourceA = transaction.createResource("/test1"); + + msg("Adding company"); + resourceA.getContents().add(companyA); + + msg("Committing"); + transaction.commit(); + + assertEquals(2, customerA.getSalesOrders().size()); + + // ************************************************************* // + + msg("Attaching viewB"); + CDOView viewB = session.openTransaction(new ResourceSetImpl()); + + msg("Loading resource"); + CDOResource resourceB = viewB.getResource("/test1"); + assertProxy(resourceB); + + EList contents = resourceB.getContents(); + Company companyB = (Company)contents.get(0); + assertClean(companyB); + assertClean(resourceB); + assertContent(resourceB, companyB); + + Customer customerB = companyB.getCustomers().get(0); + assertClean(customerB); + assertClean(companyB); + assertContent(companyB, customerB); + + SalesOrder salesOrder1B = customerB.getSalesOrders().get(0); + assertClean(salesOrder1B); + assertClean(companyB); + assertContent(companyB, salesOrder1B); + + SalesOrder salesOrder2B = customerB.getSalesOrders().get(1); + assertClean(salesOrder2B); + assertClean(companyB); + assertContent(companyB, salesOrder2B); + assertClean(salesOrder2B); + } + + public void testTwoResources() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Attaching transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + // ************************************************************* // + + msg("Creating customer"); + Customer customerA = Model1Factory.eINSTANCE.createCustomer(); + customerA.setName("customer"); + + msg("Creating company1"); + Company company1A = Model1Factory.eINSTANCE.createCompany(); + company1A.getCustomers().add(customerA); + + msg("Creating resource1"); + CDOResource resource1A = transaction.createResource("/test1"); + + msg("Adding company1"); + resource1A.getContents().add(company1A); + + // ************************************************************* // + + msg("Creating salesOrder1"); + SalesOrder salesOrder1A = Model1Factory.eINSTANCE.createSalesOrder(); + assertTransient(salesOrder1A); + salesOrder1A.setId(1); + salesOrder1A.setCustomer(customerA); + assertTransient(salesOrder1A); + + msg("Creating salesOrder2"); + SalesOrder salesOrder2A = Model1Factory.eINSTANCE.createSalesOrder(); + assertTransient(salesOrder2A); + salesOrder2A.setId(2); + salesOrder2A.setCustomer(customerA); + assertTransient(salesOrder2A); + + msg("Creating company2"); + Company company2A = Model1Factory.eINSTANCE.createCompany(); + company2A.getSalesOrders().add(salesOrder1A); + company2A.getSalesOrders().add(salesOrder2A); + + msg("Creating resource2"); + CDOResource resource2A = transaction.createResource("/test2"); + + msg("Adding company"); + resource2A.getContents().add(company2A); + + // ************************************************************* // + + msg("Committing"); + transaction.commit(); + + assertEquals(2, customerA.getSalesOrders().size()); + + // ************************************************************* // + + msg("Attaching viewB"); + CDOView viewB = session.openTransaction(new ResourceSetImpl()); + + msg("Loading resource1"); + CDOResource resource1B = viewB.getResource("/test1"); + assertProxy(resource1B); + + EList contents = resource1B.getContents(); + Company company1B = (Company)contents.get(0); + assertClean(company1B); + assertClean(resource1B); + assertContent(resource1B, company1B); + + Customer customerB = company1B.getCustomers().get(0); + assertClean(customerB); + assertClean(company1B); + assertContent(company1B, customerB); + + SalesOrder salesOrder1B = customerB.getSalesOrders().get(0); + assertClean(salesOrder1B); + + SalesOrder salesOrder2B = customerB.getSalesOrders().get(1); + assertClean(salesOrder2B); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DymamicEcoreTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DymamicEcoreTest.java new file mode 100644 index 0000000000..f01010cbfa --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DymamicEcoreTest.java @@ -0,0 +1,80 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOTransaction; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.util.CDOUtil; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; + +import java.io.IOException; + +/** + * @author Eike Stepper + */ +public class DymamicEcoreTest extends AbstractCDOTest +{ + public void testDynamicEcore() throws Exception + { + { + // Obtain model + EPackage ecore = (EPackage)loadModel("ecore/Ecore.ecore", EPackage.Registry.INSTANCE); + + // Create resource in session 1 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + session.getPackageRegistry().putEPackage(ecore); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.createResource("/res"); + + EObject root = loadModel("model1.ecore", session.getPackageRegistry()); + res.getContents().add(root); + transaction.commit(); + } + + { + // Load resource in session 2 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.getResource("/res"); + + EObject root = res.getContents().get(0); + saveModel("model1X.ecore", root); + } + } + + private static EObject loadModel(String fileName, EPackage.Registry packageRegistry) throws IOException + { + ResourceSet resourceSet = new ResourceSetImpl(); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); + resourceSet.setPackageRegistry(packageRegistry); + + Resource resource = resourceSet.getResource(URI.createFileURI(fileName), true); + return resource.getContents().get(0); + } + + private static void saveModel(String fileName, EObject root) throws IOException + { + ResourceSet resourceSet = new ResourceSetImpl(); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); + Resource resource = resourceSet.getResource(URI.createFileURI(fileName), true); + resource.getContents().add(EcoreUtil.copy(root)); + resource.save(null); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DymamicUmlTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DymamicUmlTest.java new file mode 100644 index 0000000000..f3594c5825 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/DymamicUmlTest.java @@ -0,0 +1,105 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOObject; +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOTransaction; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.tests.model1.Company; +import org.eclipse.emf.cdo.tests.model1.Model1Factory; +import org.eclipse.emf.cdo.tests.model1.Model1Package; +import org.eclipse.emf.cdo.util.CDOUtil; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; + +import java.io.IOException; + +/** + * @author Eike Stepper + */ +public class DymamicUmlTest extends AbstractCDOTest +{ + public void testGeneratedPackage() throws Exception + { + { + // Create resource in session 1 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + session.getPackageRegistry().putEPackage(Model1Package.eINSTANCE); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.createResource("/res"); + + Company company = Model1Factory.eINSTANCE.createCompany(); + company.setName("Eike"); + res.getContents().add(company); + transaction.commit(); + } + + { + // Load resource in session 2 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.getResource("/res"); + + Company company = (Company)res.getContents().get(0); + assertEquals("Eike", company.getName()); + } + } + + public void testDynamicPackage() throws Exception + { + { + // Obtain model + EPackage model1 = loadModel("model1.ecore"); + EClass companyClass = (EClass)model1.getEClassifier("Company"); + EAttribute nameAttribute = (EAttribute)companyClass.getEStructuralFeature("name"); + + // Create resource in session 1 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + session.getPackageRegistry().putEPackage(model1); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.createResource("/res"); + + CDOObject company = transaction.newInstance(companyClass); + company.eSet(nameAttribute, "Eike"); + res.getContents().add(company); + transaction.commit(); + } + + { + // Load resource in session 2 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.getResource("/res"); + + CDOObject company = (CDOObject)res.getContents().get(0); + EClass companyClass = company.eClass(); + EAttribute nameAttribute = (EAttribute)companyClass.getEStructuralFeature("name"); + String name = (String)company.eGet(nameAttribute); + assertEquals("Eike", name); + } + } + + private static EPackage loadModel(String fileName) throws IOException + { + ResourceSet resourceSet = new ResourceSetImpl(); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); + Resource resource = resourceSet.getResource(URI.createFileURI(fileName), true); + return (EPackage)resource.getContents().get(0); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFTest.java new file mode 100644 index 0000000000..370d417f9b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/EMFTest.java @@ -0,0 +1,73 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.util.EMFUtil; + +import org.eclipse.net4j.util.tests.AbstractOMTest; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.InternalEObject; + +/** + * @author Eike Stepper + */ +public class EMFTest extends AbstractOMTest +{ + public EMFTest() + { + } + + public void testProxy() + { + EPackage model2 = (EPackage)EMFUtil.loadXMI("model2.ecore"); + EClass companyProxy = (EClass)model2.getEClassifier("CompanyProxy"); + EReference reference = (EReference)companyProxy.getEStructuralFeature("company"); + + EClass type = (EClass)reference.getEType(); + dumpProxy(type); + System.out.println(type.getName()); + dumpProxy(type); + + System.out.println(); + + if (false) + { + model2.eResource().getResourceSet().getResources().get(1).unload(); + } + else + { + ((InternalEObject)type).eSetProxyURI(URI.createURI("model1.ecore#//Company")); + } + + if (true) + { + type = (EClass)reference.getEType(); + } + + dumpProxy(type); + System.out.println(type.getName()); + dumpProxy(type); + } + + private void dumpProxy(EObject object) + { + InternalEObject eObject = (InternalEObject)object; + String label = eObject.eClass().getName(); + + System.out.println(label + ": " + eObject.eIsProxy()); + System.out.println(label + ": " + eObject.eProxyURI()); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/GeneratedEcoreTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/GeneratedEcoreTest.java new file mode 100644 index 0000000000..cb362bd591 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/GeneratedEcoreTest.java @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOTransaction; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.util.CDOUtil; +import org.eclipse.emf.cdo.util.EMFUtil; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EcorePackage; + +/** + * @author Eike Stepper + */ +public class GeneratedEcoreTest extends AbstractCDOTest +{ + public void testGeneratedEcore() throws Exception + { + // Obtain model + EPackage ecore = EcorePackage.eINSTANCE; + + // Create resource in session 1 + CDOSession session1 = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + session1.getPackageRegistry().putEPackage(ecore); + CDOTransaction transaction1 = session1.openTransaction(); + CDOResource res1 = transaction1.createResource("/res"); + + EPackage root1 = (EPackage)EMFUtil.loadEcore("model1.ecore", session1.getPackageRegistry()); + res1.getContents().add(root1); + transaction1.commit(); + + // Load resource in session 2 + CDOSession session2 = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + CDOTransaction transaction2 = session2.openTransaction(); + CDOResource res2 = transaction2.getResource("/res"); + + EList contents = res2.getContents(); + EPackage root2 = (EPackage)contents.get(0); + assertFalse("Unresolved proxy", root2.eIsProxy()); + assertEquals(res2, root2.eResource()); + + CDOUtil.load(root2, transaction2);// FIXME + EMFUtil.saveEcore("model1X.ecore", root2); + // assertTrue("Models differ", EcoreUtil.equals(root1, root2)); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java new file mode 100644 index 0000000000..03591e9564 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java @@ -0,0 +1,627 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOState; +import org.eclipse.emf.cdo.CDOTransaction; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.tests.model1.Model1Factory; +import org.eclipse.emf.cdo.tests.model1.PurchaseOrder; +import org.eclipse.emf.cdo.tests.model1.Supplier; +import org.eclipse.emf.cdo.util.CDOUtil; + +import org.eclipse.net4j.IBufferHandler; +import org.eclipse.net4j.IChannel; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; + +import java.util.Date; + +/** + * @author Eike Stepper + */ +public class InitialTest extends AbstractCDOTest +{ + public void testTransientObject() throws Exception + { + final Date date = new Date(); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + assertTransient(supplier); + + msg("Setting name"); + supplier.setName("Stepper"); + assertTransient(supplier); + + msg("Verifying name"); + assertEquals("Stepper", supplier.getName()); + assertTransient(supplier); + + msg("Creating purchaseOrder"); + PurchaseOrder purchaseOrder = Model1Factory.eINSTANCE.createPurchaseOrder(); + assertTransient(purchaseOrder); + + msg("Setting date"); + purchaseOrder.setDate(date); + assertTransient(purchaseOrder); + + msg("Verifying date"); + assertEquals(date, purchaseOrder.getDate()); + assertTransient(purchaseOrder); + + msg("Setting supplier"); + purchaseOrder.setSupplier(supplier); + assertTransient(supplier); + assertTransient(purchaseOrder); + + msg("Verifying supplier"); + assertEquals(supplier, purchaseOrder.getSupplier()); + assertTransient(supplier); + assertTransient(purchaseOrder); + } + + public void testTransientResource() throws Exception + { + final URI uri = URI.createURI("cdo:/test1"); + + msg("Creating resourceSet"); + ResourceSet resourceSet = new ResourceSetImpl(); + CDOUtil.prepareResourceSet(resourceSet); + + msg("Creating resource"); + CDOResource resource = (CDOResource)resourceSet.createResource(uri); + assertTransient(resource); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + assertTransient(supplier); + assertEquals(null, supplier.eContainer()); + + msg("Verifying contents"); + EList contents = resource.getContents(); + assertNotNull(contents); + assertTrue(contents.isEmpty()); + assertEquals(0, contents.size()); + assertTransient(resource); + + msg("Adding supplier"); + contents.add(supplier); + assertTransient(resource); + assertTransient(supplier); + assertContent(resource, supplier); + } + + public void testOpenSession() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + assertNotNull(session); + + IChannel channel = session.getChannel(); + assertNotNull(channel); + + IBufferHandler receiveHandler = channel.getReceiveHandler(); + assertNotNull(receiveHandler); + } + + public void testStartTransaction() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + assertNotNull(transaction); + assertEquals(session, transaction.getSession()); + } + + public void testAttachResource() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + assertNew(resource); + assertEquals(URI.createURI("cdo:/test1"), resource.getURI()); + ResourceSet expected = transaction.getResourceSet(); + ResourceSet actual = resource.getResourceSet(); + assertEquals(expected, actual); + + } + + public void testAttachView() throws Exception + { + final URI uri = URI.createURI("cdo:/test1"); + + msg("Creating resourceSet"); + ResourceSet resourceSet = new ResourceSetImpl(); + CDOUtil.prepareResourceSet(resourceSet); + + msg("Creating resource"); + CDOResource resource = (CDOResource)resourceSet.createResource(uri); + assertTransient(resource); + + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(resourceSet); + + msg("Verifying resource"); + assertNew(resource); + assertEquals(uri, resource.getURI()); + assertEquals(transaction.getResourceSet(), resource.getResourceSet()); + } + + public void testAttachViewWithObject() throws Exception + { + final URI uri = URI.createURI("cdo:/test1"); + + msg("Creating resourceSet"); + ResourceSet resourceSet = new ResourceSetImpl(); + CDOUtil.prepareResourceSet(resourceSet); + + msg("Creating resource"); + CDOResource resource = (CDOResource)resourceSet.createResource(uri); + assertTransient(resource); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + assertTransient(supplier); + + msg("Setting name"); + supplier.setName("Stepper"); + assertTransient(supplier); + + msg("Verifying name"); + assertEquals("Stepper", supplier.getName()); + assertTransient(supplier); + + msg("Adding supplier"); + EList contents = resource.getContents(); + contents.add(supplier); + assertTransient(resource); + assertTransient(supplier); + assertContent(resource, supplier); + + msg("Verifying supplier"); + contents = resource.getContents(); + assertNotNull(contents); + assertEquals(1, contents.size()); + + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(resourceSet); + + msg("Verifying resource"); + assertNew(resource); + assertEquals(uri, resource.getURI()); + assertEquals(transaction.getResourceSet(), resource.getResourceSet()); + + msg("Verifying contents"); + contents = resource.getContents(); + assertNotNull(contents); + assertEquals(1, contents.size()); + + msg("Verifying supplier"); + Supplier s = (Supplier)contents.get(0); + assertNew(supplier); + assertNew(resource); + assertEquals(supplier, s); + assertEquals(resource, s.cdoResource()); + assertEquals(null, s.eContainer()); + } + + public void testAttachObject() throws Exception + { + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Getting contents"); + EList contents = resource.getContents(); + + msg("Adding supplier"); + contents.add(supplier); + assertNew(supplier); + assertEquals(transaction, supplier.cdoView()); + assertEquals(resource, supplier.cdoResource()); + assertEquals(resource, supplier.eResource()); + assertEquals(null, supplier.eContainer()); + } + + public void testCommitNew() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + assertEquals(CDOState.CLEAN, resource.cdoState()); + assertEquals(CDOState.CLEAN, supplier.cdoState()); + } + + public void testReadResourceClean() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + + msg("Getting supplier"); + EList contents = resource.getContents(); + Supplier s = (Supplier)contents.get(0); + assertEquals(supplier, s); + } + + public void testReadObjectClean() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + + msg("Getting supplier"); + Supplier s = (Supplier)resource.getContents().get(0); + + msg("Verifying name"); + assertEquals("Stepper", s.getName()); + } + + public void testWriteClean() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + + msg("Getting supplier"); + Supplier s = (Supplier)resource.getContents().get(0); + + msg("Setting name"); + s.setName("Eike"); + assertEquals("Eike", s.getName()); + assertEquals(CDOState.DIRTY, supplier.cdoState()); + assertEquals(CDOState.CLEAN, resource.cdoState()); + } + + public void testCommitDirty() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + + msg("Setting name"); + supplier.setName("Eike"); + + msg("Committing"); + transaction.commit(); + assertEquals(CDOState.CLEAN, resource.cdoState()); + assertEquals(CDOState.CLEAN, supplier.cdoState()); + } + + public void testGetResource() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + { + disableConsole(); + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + enableConsole(); + } + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Getting resource"); + CDOResource resource = transaction.getResource("/test1"); + assertNotNull(resource); + assertEquals(URI.createURI("cdo:/test1"), resource.getURI()); + assertEquals(transaction.getResourceSet(), resource.getResourceSet()); + assertEquals(CDOState.PROXY, resource.cdoState()); + assertEquals(transaction, resource.cdoView()); + assertNull(resource.cdoRevision()); + } + + public void testGetContents() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + { + disableConsole(); + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + enableConsole(); + } + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Getting resource"); + CDOResource resource = transaction.getResource("/test1"); + + msg("Getting contents"); + EList contents = resource.getContents(); + assertNotNull(contents); + } + + public void testReadObjectProxy() throws Exception + { + msg("Opening session"); + CDOSession session = openModel1Session(); + + { + disableConsole(); + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + enableConsole(); + } + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Getting resource"); + CDOResource resource = transaction.getResource("/test1"); + + msg("Getting contents"); + EList contents = resource.getContents(); + + msg("Getting supplier"); + Supplier s = (Supplier)contents.get(0); + assertNotNull(s); + + msg("Verifying name"); + assertEquals("Stepper", s.getName()); + } + + public void testLoadResource() throws Exception + { + { + // disableConsole(); + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + // XXX session.close(); + // enableConsole(); + } + + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Getting resource"); + CDOResource resource = transaction.getResource("/test1"); + assertNotNull(resource); + assertEquals(URI.createURI("cdo:/test1"), resource.getURI()); + assertEquals(transaction.getResourceSet(), resource.getResourceSet()); + assertEquals(CDOState.PROXY, resource.cdoState()); + assertEquals(transaction, resource.cdoView()); + assertNull(resource.cdoRevision()); + } + + public void testLoadObject() throws Exception + { + { + // disableConsole(); + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + CDOResource resource = transaction.createResource("/test1"); + + msg("Creating supplier"); + Supplier supplier = Model1Factory.eINSTANCE.createSupplier(); + + msg("Setting name"); + supplier.setName("Stepper"); + + msg("Adding supplier"); + resource.getContents().add(supplier); + + msg("Committing"); + transaction.commit(); + // XXX session.close(); + enableConsole(); + } + + msg("Opening session"); + CDOSession session = openModel1Session(); + + msg("Opening transaction"); + CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Getting resource"); + CDOResource resource = transaction.getResource("/test1"); + + msg("Getting contents"); + EList contents = resource.getContents(); + + msg("Getting supplier"); + Supplier s = (Supplier)contents.get(0); + assertNotNull(s); + + msg("Verifying name"); + assertEquals("Stepper", s.getName()); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java new file mode 100644 index 0000000000..c860c2bfbf --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java @@ -0,0 +1,341 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOSessionInvalidationEvent; +import org.eclipse.emf.cdo.CDOTransaction; +import org.eclipse.emf.cdo.CDOView; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.tests.model1.Category; +import org.eclipse.emf.cdo.tests.model1.Company; +import org.eclipse.emf.cdo.tests.model1.Model1Factory; + +import org.eclipse.net4j.util.event.IEvent; +import org.eclipse.net4j.util.event.IListener; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +/** + * @author Eike Stepper + */ +public class InvalidationTest extends AbstractCDOTest +{ + public void testSeparateView() throws Exception + { + msg("Opening session"); + final CDOSession session = openModel1Session(); + + // ************************************************************* // + + msg("Creating category1"); + final Category category1A = Model1Factory.eINSTANCE.createCategory(); + category1A.setName("category1"); + + msg("Creating category2"); + final Category category2A = Model1Factory.eINSTANCE.createCategory(); + category2A.setName("category2"); + + msg("Creating category3"); + final Category category3A = Model1Factory.eINSTANCE.createCategory(); + category3A.setName("category3"); + + msg("Creating company"); + final Company companyA = Model1Factory.eINSTANCE.createCompany(); + + msg("Adding categories"); + companyA.getCategories().add(category1A); + category1A.getCategories().add(category2A); + category2A.getCategories().add(category3A); + + msg("Attaching transaction"); + final CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + final CDOResource resourceA = transaction.createResource("/test1"); + + msg("Adding company"); + resourceA.getContents().add(companyA); + + msg("Committing"); + transaction.commit(); + + // ************************************************************* // + + msg("Attaching viewB"); + final CDOView viewB = session.openTransaction(new ResourceSetImpl()); + + msg("Loading resource"); + final CDOResource resourceB = viewB.getResource("/test1"); + assertProxy(resourceB); + + EList contents = resourceB.getContents(); + final Company companyB = (Company)contents.get(0); + assertClean(companyB); + assertClean(resourceB); + assertContent(resourceB, companyB); + + final Category category1B = companyB.getCategories().get(0); + assertClean(category1B); + assertClean(companyB); + assertContent(companyB, category1B); + + final Category category2B = category1B.getCategories().get(0); + assertClean(category2B); + assertClean(category1B); + assertContent(category1B, category2B); + + final Category category3B = category2B.getCategories().get(0); + assertClean(category3B); + assertClean(category2B); + assertContent(category2B, category3B); + assertClean(category3B); + + // ************************************************************* // + + msg("Changing name"); + category1A.setName("CHANGED NAME"); + Thread.sleep(500); + + msg("Checking before commit"); + assertEquals("category1", category1B.getName()); + + msg("Committing"); + transaction.commit(); + + msg("Checking after commit"); + boolean timedOut = new PollingTimeOuter(4, 100) + { + @Override + protected boolean successful() + { + return "CHANGED NAME".equals(category1B.getName()); + } + }.timedOut(); + + assertEquals(false, timedOut); + } + + public void testSeparateViewNotification() throws Exception + { + msg("Opening session"); + final CDOSession session = openModel1Session(); + + // ************************************************************* // + + msg("Creating category1"); + final Category category1A = Model1Factory.eINSTANCE.createCategory(); + category1A.setName("category1"); + + msg("Creating category2"); + final Category category2A = Model1Factory.eINSTANCE.createCategory(); + category2A.setName("category2"); + + msg("Creating category3"); + final Category category3A = Model1Factory.eINSTANCE.createCategory(); + category3A.setName("category3"); + + msg("Creating company"); + final Company companyA = Model1Factory.eINSTANCE.createCompany(); + + msg("Adding categories"); + companyA.getCategories().add(category1A); + category1A.getCategories().add(category2A); + category2A.getCategories().add(category3A); + + msg("Attaching transaction"); + final CDOTransaction transaction = session.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + final CDOResource resourceA = transaction.createResource("/test1"); + + msg("Adding company"); + resourceA.getContents().add(companyA); + + msg("Committing"); + transaction.commit(); + + // ************************************************************* // + + msg("Attaching viewB"); + final CDOView viewB = session.openTransaction(new ResourceSetImpl()); + + msg("Loading resource"); + final CDOResource resourceB = viewB.getResource("/test1"); + assertProxy(resourceB); + + EList contents = resourceB.getContents(); + final Company companyB = (Company)contents.get(0); + assertClean(companyB); + assertClean(resourceB); + assertContent(resourceB, companyB); + + final Category category1B = companyB.getCategories().get(0); + assertClean(category1B); + assertClean(companyB); + assertContent(companyB, category1B); + + final Category category2B = category1B.getCategories().get(0); + assertClean(category2B); + assertClean(category1B); + assertContent(category1B, category2B); + + final Category category3B = category2B.getCategories().get(0); + assertClean(category3B); + assertClean(category2B); + assertContent(category2B, category3B); + assertClean(category3B); + + // ************************************************************* // + + final boolean unlocked[] = { false }; + final Lock lock = new ReentrantLock(); + lock.lock(); + viewB.getSession().addListener(new IListener() + { + public void notifyEvent(IEvent event) + { + if (event instanceof CDOSessionInvalidationEvent) + { + CDOSessionInvalidationEvent e = (CDOSessionInvalidationEvent)event; + if (e.getView() == viewB) + { + msg("CDOSessionInvalidationEvent: " + e); + // TODO This code has no influence + unlocked[0] = true; + lock.unlock(); + } + } + } + }); + + msg("Changing name"); + category1A.setName("CHANGED NAME"); + + msg("Checking before commit"); + LockTimeOuter timeOuter = new LockTimeOuter(lock, 500); + boolean timedOut = timeOuter.timedOut(); + assertEquals(true, timedOut); + assertEquals(false, unlocked[0]); + + msg("Committing"); + transaction.commit(); + + msg("Checking after commit"); + if (!unlocked[0]) + { + timedOut = timeOuter.timedOut(); + assertEquals(true, timedOut); + } + } + + public void testSeparateSession() throws Exception + { + msg("Creating category1"); + final Category category1A = Model1Factory.eINSTANCE.createCategory(); + category1A.setName("category1"); + + msg("Creating category2"); + final Category category2A = Model1Factory.eINSTANCE.createCategory(); + category2A.setName("category2"); + + msg("Creating category3"); + final Category category3A = Model1Factory.eINSTANCE.createCategory(); + category3A.setName("category3"); + + msg("Creating company"); + final Company companyA = Model1Factory.eINSTANCE.createCompany(); + + msg("Adding categories"); + companyA.getCategories().add(category1A); + category1A.getCategories().add(category2A); + category2A.getCategories().add(category3A); + + msg("Opening sessionA"); + final CDOSession sessionA = openModel1Session(); + + msg("Attaching transaction"); + final CDOTransaction transaction = sessionA.openTransaction(new ResourceSetImpl()); + + msg("Creating resource"); + final CDOResource resourceA = transaction.createResource("/test1"); + + msg("Adding company"); + resourceA.getContents().add(companyA); + + msg("Committing"); + transaction.commit(); + + // ************************************************************* // + + msg("Opening sessionB"); + final CDOSession sessionB = openModel1Session(); + + msg("Attaching viewB"); + final CDOView viewB = sessionB.openTransaction(new ResourceSetImpl()); + + msg("Loading resource"); + final CDOResource resourceB = viewB.getResource("/test1"); + assertProxy(resourceB); + + EList contents = resourceB.getContents(); + final Company companyB = (Company)contents.get(0); + assertClean(companyB); + assertClean(resourceB); + assertContent(resourceB, companyB); + + final Category category1B = companyB.getCategories().get(0); + assertClean(category1B); + assertClean(companyB); + assertContent(companyB, category1B); + + final Category category2B = category1B.getCategories().get(0); + assertClean(category2B); + assertClean(category1B); + assertContent(category1B, category2B); + + final Category category3B = category2B.getCategories().get(0); + assertClean(category3B); + assertClean(category2B); + assertContent(category2B, category3B); + assertClean(category3B); + + // ************************************************************* // + + msg("Changing name"); + category1A.setName("CHANGED NAME"); + + ITimeOuter timeOuter = new PollingTimeOuter(4, 100) + { + @Override + protected boolean successful() + { + return "CHANGED NAME".equals(category1B.getName()); + } + }; + + msg("Checking before commit"); + boolean timedOut = timeOuter.timedOut(); + assertEquals(true, timedOut); + + msg("Committing"); + transaction.commit(); + + msg("Checking after commit"); + timedOut = timeOuter.timedOut(); + assertEquals(false, timedOut); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java new file mode 100644 index 0000000000..26983e1f25 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/PackageRegistryTest.java @@ -0,0 +1,112 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.CDOObject; +import org.eclipse.emf.cdo.CDOSession; +import org.eclipse.emf.cdo.CDOTransaction; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.tests.model1.Company; +import org.eclipse.emf.cdo.tests.model1.Model1Factory; +import org.eclipse.emf.cdo.tests.model1.Model1Package; +import org.eclipse.emf.cdo.util.CDOUtil; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl; + +import java.io.IOException; + +/** + * @author Eike Stepper + */ +public class PackageRegistryTest extends AbstractCDOTest +{ + public void testGeneratedPackage() throws Exception + { + { + // Create resource in session 1 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + session.getPackageRegistry().putEPackage(Model1Package.eINSTANCE); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.createResource("/res"); + + Company company = Model1Factory.eINSTANCE.createCompany(); + company.setName("Eike"); + res.getContents().add(company); + transaction.commit(); + } + + { + // Load resource in session 2 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.getResource("/res"); + + Company company = (Company)res.getContents().get(0); + assertEquals("Eike", company.getName()); + } + } + + /** + * TODO Fix testDynamicPackage() + */ + public void _testDynamicPackage() throws Exception + { + { + // Obtain model + EPackage model1 = loadModel("model1.ecore"); + // EClass supplierClass = (EClass)model1.getEClassifier("Supplier"); + // EStructuralFeature firstFeature = + // supplierClass.getEStructuralFeatures().get(0); + + EClass companyClass = (EClass)model1.getEClassifier("Company"); + EAttribute nameAttribute = (EAttribute)companyClass.getEStructuralFeature("name"); + + // Create resource in session 1 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + session.getPackageRegistry().putEPackage(model1); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.createResource("/res"); + + CDOObject company = transaction.newInstance(companyClass); + company.eSet(nameAttribute, "Eike"); + res.getContents().add(company); + transaction.commit(); + } + + { + // Load resource in session 2 + CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME); + CDOTransaction transaction = session.openTransaction(); + CDOResource res = transaction.getResource("/res"); + + CDOObject company = (CDOObject)res.getContents().get(0); + EClass companyClass = company.eClass(); + EAttribute nameAttribute = (EAttribute)companyClass.getEStructuralFeature("name"); + String name = (String)company.eGet(nameAttribute); + assertEquals("Eike", name); + } + } + + private static EPackage loadModel(String fileName) throws IOException + { + ResourceSet resourceSet = new ResourceSetImpl(); + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new EcoreResourceFactoryImpl()); + Resource resource = resourceSet.getResource(URI.createFileURI(fileName), true); + return (EPackage)resource.getContents().get(0); + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TDD.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TDD.java new file mode 100644 index 0000000000..469d67e684 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TDD.java @@ -0,0 +1,88 @@ +/*************************************************************************** + * Copyright (c) 2004-2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.net4j.util.tests.AbstractOMTest; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * @author Eike Stepper + */ +public class TDD +{ + private static final AbstractOMTest test = new PackageRegistryTest(); + + private static final String METHOD_NAME = "testDynamicPackage"; + + public static void main(String[] args) throws Throwable + { + if (METHOD_NAME != null && METHOD_NAME.length() != 0) + { + runTest(test, METHOD_NAME); + } + else + { + Method[] methods = test.getClass().getMethods(); + for (Method method : methods) + { + + String methodName = method.getName(); + if (methodName.startsWith("test")) + { + runTest(test, methodName); + } + } + } + + System.out.println("******* COMPLETED *******"); + } + + private static void runTest(AbstractOMTest test, String methodName) throws Exception, Throwable + { + test.setName(methodName); + test.setUp(); + callMethod(test, methodName); + test.tearDown(); + } + + private static void callMethod(Object object, String methodName) throws Throwable + { + try + { + Method method = object.getClass().getMethod(methodName, new Class[0]); + method.invoke(object, new Object[0]); + } + catch (InvocationTargetException ex) + { + throw filterException(ex.getTargetException(), object.getClass()); + } + } + + private static Throwable filterException(Throwable t, Class entry) + { + StackTraceElement[] stackTrace = t.getStackTrace(); + int len; + for (len = stackTrace.length - 1; len >= 0; len--) + { + if (stackTrace[len].getClassName().equals(entry.getName())) + { + StackTraceElement[] filtered = new StackTraceElement[++len]; + System.arraycopy(stackTrace, 0, filtered, 0, len); + t.setStackTrace(filtered); + break; + } + } + + return t; + } +} diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/internal/CDOTestPlugin.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/internal/CDOTestPlugin.java deleted file mode 100644 index dceb8de298..0000000000 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/internal/CDOTestPlugin.java +++ /dev/null @@ -1,40 +0,0 @@ -/*************************************************************************** - * Copyright (c) 2004, 2005, 2006 Eike Stepper, Germany. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Eike Stepper - initial API and implementation - **************************************************************************/ -package org.eclipse.emf.cdo.tests.internal; - - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; - - -public class CDOTestPlugin implements BundleActivator -{ - private static CDOTestPlugin instance; - - public CDOTestPlugin() - { - super(); - instance = this; - } - - public static CDOTestPlugin getPlugin() - { - return instance; - } - - public void start(BundleContext context) throws Exception - { - } - - public void stop(BundleContext context) throws Exception - { - } -} diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/10536.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/10536.uml new file mode 100644 index 0000000000..7c50b81281 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/10536.uml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/10537.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/10537.uml new file mode 100644 index 0000000000..bd271b4ac6 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/10537.uml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/Ecore.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/Ecore.uml new file mode 100644 index 0000000000..ca43ec675f --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/Ecore.uml @@ -0,0 +1,977 @@ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+
+ + + + + +
+ + + + +
+ + + + +
+
+ + + + + + +
+
+ + + + + + + +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + + +
+ + + + +
+
+ + + + + + + + + + + + + +
+ + + + +
+
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/Infrastructure.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/Infrastructure.uml new file mode 100644 index 0000000000..7c6f83b9d3 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/Infrastructure.uml @@ -0,0 +1,4818 @@ + + + + + + + + + + + An element is a constituent of a model. As such, it has the capability of owning other elements. + + + + An element may not directly or indirectly own itself. + + + OCL + not self.allOwnedElements()->includes(self) + + + + + Elements that must be owned must have an owner. + + + OCL + self.mustBeOwned() implies owner->notEmpty() + + + + + The Elements owned by this element. + + + + + + + The Element that owns this element. + + + + + + + The Comments owned by this element. + + + + + + + The query allOwnedElements() gives all of the direct and indirect owned elements of an element. + + + + OCL + result = ownedElement->union(ownedElement->collect(e | e.allOwnedElements())) + + + + + + + + + + The query mustBeOwned() indicates whether elements of this type must have an owner. Subclasses of Element that do not require an owner must override this operation. + + + + OCL + result = true + + + + + + + + + + + + + + + + + + A named element is an element in a model that may have a name. + + + + If there is no name, or one of the containing namespaces has no name, there is no qualified name. + + + OCL + (self.name->isEmpty() or self.allNamespaces()->select(ns | ns.name->isEmpty())->notEmpty()) implies self.qualifiedName->isEmpty() + + + + + When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces. + + + OCL + (self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty()) implies self.qualifiedName = self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result)) + + + + + + The name of the NamedElement. + + + + + + + A name which allows the NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from the names of the containing namespaces starting at the root of the hierarchy and ending with the name of the NamedElement itself. + + + + + + + Specifies the namespace that owns the NamedElement. + + + + + + + The query allNamespaces() gives the sequence of namespaces in which the NamedElement is nested, working outwards. + + + + OCL + result = if self.namespace->isEmpty() then Sequence{} else self.namespace.allNamespaces()->prepend(self.namespace) endif + + + + + + + + + + The query isDistinguishableFrom() determines whether two NamedElements may logically co-exist within a Namespace. By default, two named elements are distinguishable if (a) they have unrelated types or (b) they have related types but different names. + + + + OCL + result = if self.oclIsKindOf(n.oclType) or n.oclIsKindOf(self.oclType) then ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->isEmpty() else true endif + + + + + + + + + The query separator() gives the string that is used to separate names when constructing a qualified name. + + + + OCL + result = '::' + + + + + + + When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces. + + + + OCL + result = if self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty() then self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result)) else Set{} endif + + + + + + + + A namespace is an element in a model that contains a set of named elements that can be identified by name. + + + + All the members of a Namespace are distinguishable within it. + + + OCL + membersAreDistinguishable() + + + + + + A collection of NamedElements owned by the Namespace. + + + + + + + A collection of NamedElements identifiable within the Namespace, either by being owned or by being introduced by importing or inheritance. + + + + + + + The query getNamesOfMember() gives a set of all of the names that a member would have in a Namespace. In general a member can have multiple names in a Namespace if it is imported more than once with different aliases. Those semantics are specified by overriding the getNamesOfMember operation. The specification here simply returns a set containing a single name, or the empty set if no name. + + + + OCL + result = if member->includes(element) then Set{}->including(element.name) else Set{} endif + + + + + + + + + + + The Boolean query membersAreDistinguishable() determines whether all of the namespaces members are distinguishable within it. + + + + OCL + result = self.member->forAll( memb | self.member->excluding(memb)->forAll(other | memb.isDistinguishableFrom(other, self))) + + + + + + + + + + + + + + + + + + + A classifier is a classification of instances - it describes a set of instances that have features in common. + + + + + Specifies each feature defined in the classifier. + + + + + + + The query allFeatures() gives all of the features in the namespace of the classifier. In general, through mechanisms such as inheritance, this will be a larger set than feature. + + + + OCL + result = member->select(oclIsKindOf(Feature)) + + + + + + + + + + + A feature declares a behavioral or structural characteristic of instances of classifiers. + + + + + The Classifiers that have this Feature as a feature. + + + + + + + + + + + + An opaque expression is an uninterpreted textual statement that denotes a (possibly empty) set of values when evaluated in a context. + + + + + The text of the expression, possibly in multiple languages. + + + + + + + Specifies the languages in which the expression is stated. The interpretation of the expression body depends on the languages. If the languages are unspecified, they might be implicit from the expression body or the context. Languages are matched to body strings by order. + + + + + + + + A value specification is the specification of a (possibly empty) set of instances, including both objects and data values. + + + + + The query isComputable() determines whether a value specification can be computed in a model. This operation cannot be fully defined in OCL. A conforming implementation is expected to deliver true for this operation for all value specifications that it can compute, and to compute all of those for which the operation is true. A conforming implementation is expected to be able to compute the value of all literals. + + + + OCL + result = false + + + + + + + The query integerValue() gives a single Integer value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query booleanValue() gives a single Boolean value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query stringValue() gives a single String value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query unlimitedValue() gives a single UnlimitedNatural value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query isNull() returns true when it can be computed that the value is null. + + + + OCL + result = false + + + + + + + + An expression is a structured tree of symbols that denotes a (possibly empty) set of values when evaluated in a context. + + + + + The symbol associated with the node in the expression tree. + + + + + + + Specifies a sequence of operands. + + + + + + + + + + + + + + + + + + MultiplicityElement supports the use of value specifications to define each bound of the multiplicity. + + + + + Specifies the lower bound of the multiplicity interval. + + + + + + + + Specifies the upper bound of the multiplicity interval. + + + + + + + + The specification of the upper bound for this multiplicity. + + + + + + + The specification of the lower bound for this multiplicity. + + + + + + + The derived lower attribute must equal the lowerBound. + + + + OCL + result = lowerBound() + + + + + + + The derived upper attribute must equal the upperBound. + + + + OCL + result = upperBound() + + + + + + + The query lowerBound() returns the lower bound of the multiplicity as an integer. + + + + OCL + result = if lowerValue->isEmpty() then 1 else lowerValue.integerValue() endif + + + + + + + The query upperBound() returns the upper bound of the multiplicity as an unlimited natural. + + + + OCL + result = if upperValue->isEmpty() then 1 else upperValue.unlimitedValue() endif + + + + + + + + + + + + + + + + + + + + + + + + A behavioral feature is a feature of a classifier that specifies an aspect of the behavior of its instances. + + + + + + Specifies the parameters of the BehavioralFeature. + + + + + + + The query isDistinguishableFrom() determines whether two BehavioralFeatures may coexist in the same Namespace. It specifies that they have to have different signatures. + + + + OCL + result = if n.oclIsKindOf(BehavioralFeature) then if ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->notEmpty() then Set{}->including(self)->including(n)->isUnique( bf | bf.parameter->collect(type)) else true endif else true endif + + + + + + + + + + A parameter is a specification of an argument used to pass information into or out of an invocation of a behavioral feature. + + + + + + + + + + + + + + + + + An instance specification is a model element that represents an instance in a modeled system. + + + + The defining feature of each slot is a structural feature (directly or inherited) of a classifier of the instance specification. + + + OCL + slot->forAll(s | classifier->exists(c | c.allFeatures()->includes(s.definingFeature)) ) + + + + + One structural feature (including the same feature inherited from multiple classifiers) is the defining feature of at most one slot in an instance specification. + + + OCL + classifier->forAll(c | (c.allFeatures()->forAll(f | slot->select(s | s.definingFeature = f)->size() <= 1) ) + + + + + + A slot giving the value or values of a structural feature of the instance. An instance specification can have one slot per structural feature of its classifiers, including inherited features. It is not necessary to model a slot for each structural feature, in which case the instance specification is a partial description. + + + + + + + The classifier or classifiers of the represented instance. If multiple classifiers are specified, the instance is classified by all of them. + + + + + + + A specification of how to compute, derive, or construct the instance. + + + + + + + + A slot specifies that an entity modeled by an instance specification has a value or values for a specific structural feature. + + + + + The instance specification that owns this slot. + + + + + + + The value or values corresponding to the defining feature for the owning instance specification. + + + + + + + The structural feature that specifies the values that may be held by the slot. + + + + + + + + An instance value is a value specification that identifies an instance. + + + + + The instance that is the specified value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A redefinable element is an element that, when defined in the context of a classifier, can be redefined more specifically or differently in the context of another classifier that specializes (directly or indirectly) the context classifier. + + + + At least one of the redefinition contexts of the redefining element must be a specialization of at least one of the redefinition contexts for each redefined element. + + + OCL + self.redefinedElement->forAll(e | self.isRedefinitionContextValid(e)) + + + + + A redefining element must be consistent with each redefined element. + + + OCL + self.redefinedElement->forAll(re | re.isConsistentWith(self)) + + + + + + The redefinable element that is being redefined by this element. + + + + + + + References the contexts that this element may be redefined from. + + + + + + + The query isConsistentWith() specifies, for any two RedefinableElements in a context in which redefinition is possible, whether redefinition would be logically consistent. By default, this is false; this operation must be overridden for subclasses of RedefinableElement to define the consistency conditions. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = false + + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of this RedefinableElement are properly related to the redefinition contexts of the specified RedefinableElement to allow this element to redefine the other. By default at least one of the redefinition contexts of this element must be a specialization of at least one of the redefinition contexts of the specified element. + + + + OCL + result = redefinitionContext->exists(c | c.allParents()->includes (redefined.redefinitionContext))) + + + + + + + + + + + + + + + + + + + + + + + + + + A generalization is a taxonomic relationship between a more general classifier and a more specific classifier. Each instance of the specific classifier is also an instance of the general classifier. Thus, the specific classifier indirectly has features of the more general classifier. + + + + + References the specializing classifier in the Generalization relationship. + + + + + + + References the general classifier in the Generalization relationship. + + + + + + + + A classifier is a type and can own generalizations, thereby making it possible to define generalization relationships to +other classifiers. + + + + + Specifies the Generalization relationships for this Classifier. These Generalizations navigate to more general classifiers in the generalization hierarchy. + + + + + + + Specifies the general Classifiers for this Classifier. + + + + + + + The general classifiers are the classifiers referenced by the generalization relationships. + + + + OCL + result = self.parents() + + + + + + + + + + The query parents() gives all of the immediate ancestors of a generalized Classifier. + + + + OCL + result = generalization.general + + + + + + + + + + The query conformsTo() gives true for a classifier that defines a type that conforms to another. This is used, for example, in the specification of signature conformance for operations. + + + + OCL + result = (self=other) or (self.allParents()->includes(other)) + + + + + + + + + + + + + + + + + + + + + + + + + A comment is a textual annotation that can be attached to a set of elements. + + + + + Specifies a string that is the comment + + + + + + + References the Element(s) being commented. + + + + + + + + + + + + + + + + + A directed relationship represents a relationship between a collection of source model elements and a collection of target model elements. + + + + + Specifies the sources of the DirectedRelationship. + + + + + + + Specifies the targets of the DirectedRelationship. + + + + + + + + Relationship is an abstract concept that specifies some kind of relationship between elements. + + + + + Specifies the elements related by the Relationship. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + StructuralFeature has an attribute that determines whether a client may modify its value. + + + + States whether the feature's value may be modified by a client. + + + + + + + + + + + A structural feature is a typed feature of a classifier that specifies the structure of instances of the classifier. + + + + + + + + + + + + A constraint is a condition or restriction expressed in natural language text or in a machine readable language for the purpose of declaring some of the semantics of an element. + + + + A constraint cannot be applied to itself. + + + OCL + not constrainedElement->includes(self) + + + + + The value specification for a constraint must evaluate to a Boolean value. + + + OCL + self.specification().booleanValue().isOclKindOf(Boolean) + + + + + + The Namespace that owns this NamedElement. + + + + + + + A condition that must be true when evaluated in order for the constraint to be satisfied. + + + + + + + The ordered set of Elements referenced by this Constraint. + + + + + + + + A namespace can own constraints. A constraint associated with a namespace may either apply to the namespace itself, or it may apply to elements in the namespace. + + + + + Specifies a set of Constraints owned by this Namespace. + + + + + + + A collection of NamedElements owned by the Namespace. + + + + + + + A collection of NamedElements identifiable within the Namespace, either by being owned or by being introduced by importing or inheritance. + + + + + + + + A named element is an element in a model that may have a name. + + + + + Specifies the namespace that owns the NamedElement. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NamedElement has a visibility attribute. + + + + If a NamedElement is not owned by a Namespace, it does not have a visibility. + + + OCL + namespace->isEmpty() implies visibility->isEmpty() + + + + + Determines where the NamedElement appears within different Namespaces within the overall model, and its accessibility. + + + + + + + + VisibilityKind is an enumeration type that defines literals to determine the visibility of elements in a model. + + + + The query bestVisibility() examines a set of VisibilityKinds, and returns public as the preferred visibility. + + + + OCL + result = if vis->includes(#public) then #public else #private endif + + + + + + + + + + + A public element is visible to all elements that can access the contents of the namespace that owns it. + + + + + A private element is only visible inside the namespace that owns it. + + + + + A protected element is visible to elements that have a generalization relationship to the namespace that owns it. + + + + + A package element is owned by a namespace that is not a package, and is visible to elements that are in the same package as its owning namespace. Only named elements that are not owned by packages can be marked as having package visibility. Any element marked as having package visibility is visible to all elements within the nearest enclosing package (given that other owning elements have proper visibility). Outside the nearest enclosing package, an element marked as having package visibility is not visible. + + + + + + + + + A classifier can specify a generalization hierarchy by referencing its general classifiers. + + + + Generalization hierarchies must be directed and acyclical. A classifier can not be both a transitively general and transitively specific classifier of the same classifier. + + + OCL + not self.allParents()->includes(self) + + + + + A classifier may only specialize classifiers of a valid type. + + + OCL + self.parents()->forAll(c | self.maySpecializeType(c)) + + + + + + If true, the Classifier does not provide a complete declaration and can typically not be instantiated. An abstract classifier is intended to be used by other classifiers e.g. as the target of general metarelationships or generalization relationships. + + + + + + Specifies all elements inherited by this classifier from the general classifiers. + + + + + + + Specifies the more general classifiers in the generalization hierarchy for this Classifier. + + + + + + + The inheritedMember association is derived by inheriting the inheritable members of the parents. + + + + OCL + result = self.inherit(self.parents()->collect(p | p.inheritableMembers(self)) + + + + + + + + + + The query parents() gives all of the immediate ancestors of a generalized Classifier. + + + + OCL + result = general + + + + + + + + + + The query allParents() gives all of the direct and indirect ancestors of a generalized Classifier. + + + + OCL + result = self.parents()->union(self.parents()->collect(p | p.allParents()) + + + + + + + + + + The query inheritableMembers() gives all of the members of a classifier that may be inherited in one of its descendants, subject to whatever visibility restrictions apply. + + + + OCL + c.allParents()->includes(self) + + + + + OCL + result = member->select(m | c.hasVisibilityOf(m)) + + + + + + + + + + + The query hasVisibilityOf() determines whether a named element is visible in the classifier. By default all are visible. It is only called when the argument is something owned by a parent. + + + + OCL + self.allParents()->collect(c | c.member)->includes(n) + + + + + OCL + result = if (self.inheritedMember->includes (n)) then (n.visibility <> #private) else true + + + + + + + + The query inherit() defines how to inherit a set of elements. Here the operation is defined to inherit them all. It is intended to be redefined in circumstances where inheritance is affected by redefinition. + + + + OCL + result = inhs + + + + + + + + + + + + + + The query maySpecializeType() determines whether this classifier may have a generalization relationship to classifiers of the specified type. By default a classifier may specialize classifiers of the same or a more general type. It is intended to be redefined by classifiers that have different specialization constraints. + + + + OCL + result = self.oclIsKindOf(c.oclType) + + + + + + + + + + + + + + + + + + + + + + + + A literal Boolean is a specification of a Boolean value. + + + + + The specified Boolean value. + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query booleanValue() gives the value. + + + + OCL + result = value + + + + + + + + A literal string is a specification of a string value. + + + + + The specified String value. + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query stringValue() gives the value. + + + + OCL + result = value + + + + + + + + A literal specification identifies a literal constant being modeled. + + + + + + A literal null specifies the lack of a value. + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query isNull() returns true. + + + + OCL + result = true + + + + + + + + A literal integer is a specification of an integer value. + + + + + The specified Integer value. + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query integerValue() gives the value. + + + + OCL + result = value + + + + + + + + A literal unlimited natural is a specification of an unlimited natural number. + + + + + The specified UnlimitedNatural value. + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query unlimitedValue() gives the value. + + + + OCL + result = value + + + + + + + + + + + A multiplicity is a definition of an inclusive interval of non-negative integers beginning with a lower bound and ending with a (possibly infinite) upper bound. A multiplicity element embeds this information to specify the allowable cardinalities for an instantiation of this element. + + + + A multiplicity must define at least one valid cardinality that is greater than zero. + + + OCL + upperBound()->notEmpty() implies upperBound() > 0 + + + + + The lower bound must be a non-negative integer literal. + + + OCL + lowerBound()->notEmpty() implies lowerBound() >= 0 + + + + + The upper bound must be greater than or equal to the lower bound. + + + OCL + (upperBound()->notEmpty() and lowerBound()->notEmpty()) implies upperBound() >= lowerBound() + + + + + + For a multivalued multiplicity, this attribute specifies whether the values in an instantiation of this element are sequentially ordered. + + + + + + For a multivalued multiplicity, this attributes specifies whether the values in an instantiation of this element are unique. + + + + + + Specifies the lower bound of the multiplicity interval. + + + + + + + + Specifies the upper bound of the multiplicity interval. + + + + + + + + The query lowerBound() returns the lower bound of the multiplicity as an integer. + + + + OCL + result = if lower->notEmpty() then lower else 1 endif + + + + + + + The query upperBound() returns the upper bound of the multiplicity for a bounded multiplicity as an unlimited natural. + + + + OCL + result = if upper->notEmpty() then upper else 1 endif + + + + + + + The query isMultivalued() checks whether this multiplicity has an upper bound greater than one. + + + + OCL + upperBound()->notEmpty() + + + + + OCL + result = upperBound() > 1 + + + + + + + The query includesCardinality() checks whether the specified cardinality is valid for this multiplicity. + + + + OCL + upperBound()->notEmpty() and lowerBound()->notEmpty() includesCardinality = (lowerBound() <= C) and (upperBound() >= C) + + + + + OCL + result = (lowerBound() <= C) and (upperBound() >= C) + + + + + + + + The query includesMultiplicity() checks whether this multiplicity includes all the cardinalities allowed by the specified multiplicity. + + + + OCL + self.upperBound()->notEmpty() and self.lowerBound()->notEmpty() and M.upperBound()->notEmpty() and M.lowerBound()->notEmpty() + + + + + OCL + result = (self.lowerBound() <= M.lowerBound()) and (self.upperBound() >= M.upperBound()) + + + + + + + + + + + An element is a constituent of a model. + + + + + + + + A type constrains the values represented by a typed element. + + + + + The query conformsTo() gives true for a type that conforms to another. By default, two types do not conform to each other. This query is intended to be redefined for specific conformance situations. + + + + OCL + result = false + + + + + + + + + A typed element has a type. + + + + + The type of the TypedElement. + + + + + + + + + + + + + + + + + An integer is a primitive type representing integer values. + + + + + A Boolean type is used for logical expression, consisting of the predefined values true and false. + + + + + A string is a sequence of characters in some suitable character set used to display information about the model. Character sets may include non-Roman alphabets and characters. + + + + + An unlimited natural is a primitive type representing unlimited natural values. + + + + + + + + A class is a type that has objects as its instances. + + + + + True when a class is abstract. + + + + + + The attributes owned by a class. These do not include the inherited attributes. Attributes are represented by instances of Property. + + + + + + + The operations owned by a class. These do not include the inherited operations. + + + + + + + The immediate superclasses of a class, from which the class inherits. + + + + + + + + An operation is owned by a class and may be invoked in the context of objects that are instances of that class. It is a typed element and a multiplicity element. + + + + + + The exceptions that are declared as possible during an invocation of the operation. + + + + + + + The parameters to the operation. + + + + + + + The class that owns the operation. + + + + + + + + A parameter is a typed element that represents a parameter of an operation. + + + + + + The operation that owns the parameter. + + + + + + + + A property is a typed element that represents an attribute of a class. + + + + + + If isReadOnly is true, the attribute may not be written to after initialization. + + + + + + A string that is evaluated to give a default value for the attribute when an object of the owning class is instantiated. + + + + + + + If isComposite is true, the object containing the attribute is a container for the object or value contained in the attribute. + + + + + + If isDerived is true, the value of the attribute is derived from information elsewhere. + + + + + + The class that owns the property, and of which the property is an attribute. + + + + + + + Two attributes attr1 and attr2 of two objects o1 and o2 (which may be the same object) may be paired with each other so that o1.attr1 refers to o2 if and only if o2.attr2 refers to o1. In such a case attr1 is the opposite of attr2 and attr2 is the opposite of attr1. + + + + + + + + A type is a named element that is used as the type for a typed element. A type can be contained in a package. + + + + + Specifies the owning package of this classifier, if any. + + + + + + + + A named element represents an element with a name. + + + + + The name of the NamedElement. + + + + + + + + A typed element is a kind of named element that represents an element with a type. + + + + + The type of the TypedElement. + + + + + + + + An enumeration defines a set of literals that can be used as its values. + + + + + The ordered set of literals for this Enumeration. + + + + + + + + An enumeration literal is a value of an enumeration. + + + + + The Enumeration that this EnumerationLiteral is a member of. + + + + + + + + A primitive type is a data type implemented by the underlying infrastructure and made available for modeling. + + + + + + A package is a container for types and other packages. + + + + + The set of contained packages. + + + + + + + The containing package. + + + + + + + The set of contained types. + + + + + + + + DataType is an abstract class that acts as a common superclass for different kinds of data types. + + + + + + A multiplicity is a definition of an inclusive interval of non-negative integers beginning with a lower bound and ending with a (possibly infinite) upper bound. A multiplicity element embeds this information to specify the allowable cardinalities for an instantiation of this element. + + + + A multiplicity must define at least one valid cardinality that is greater than zero. + + + OCL + upperBound()->notEmpty() implies upperBound() > 0 + + + + + The lower bound must be a non-negative integer literal. + + + OCL + lowerBound()->notEmpty() implies lowerBound() >= 0 + + + + + The upper bound must be greater than or equal to the lower bound. + + + OCL + (upperBound()->notEmpty() and lowerBound()->notEmpty()) implies upperBound() >= lowerBound() + + + + + + For a multivalued multiplicity, this attribute specifies whether the values in an instantiation of this element are sequentially ordered. + + + + + + For a multivalued multiplicity, this attributes specifies whether the values in an instantiation of this element are unique. + + + + + + Specifies the lower bound of the multiplicity interval. + + + + + + + + Specifies the upper bound of the multiplicity interval. + + + + + + + + The query lowerBound() returns the lower bound of the multiplicity as an integer. + + + + OCL + result = if lower->notEmpty() then lower else 1 endif + + + + + + + The query upperBound() returns the upper bound of the multiplicity for a bounded multiplicity as an unlimited natural. + + + + OCL + result = if upper->notEmpty() then upper else 1 endif + + + + + + + The query isMultivalued() checks whether this multiplicity has an upper bound greater than one. + + + + OCL + upperBound()->notEmpty() + + + + + OCL + result = upperBound() > 1 + + + + + + + The query includesCardinality() checks whether the specified cardinality is valid for this multiplicity. + + + + OCL + upperBound()->notEmpty() and lowerBound()->notEmpty() + + + + + OCL + result = (lowerBound() <= C) and (upperBound() >= C) + + + + + + + + The query includesMultiplicity() checks whether this multiplicity includes all the cardinalities allowed by the specified multiplicity. + + + + OCL + self.upperBound()->notEmpty() and self.lowerBound()->notEmpty() and M.upperBound()->notEmpty() and M.lowerBound()->notEmpty() + + + + + OCL + result = (self.lowerBound() <= M.lowerBound()) and (self.upperBound() >= M.upperBound()) + + + + + + + + + An element is a constituent of a model. + + + + The Comments owned by this element. + + + + + + + + A comment is a textual annotation that can be attached to a set of elements. + + + + + Specifies a string that is the comment. + + + + + + + References the Element(s) being commented. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A classifier is a classification of instances - it describes a set of instances that have features in common. A classifier can specify a generalization hierarchy by referencing its general classifiers. + + + + Generalization hierarchies must be directed and acyclical. A classifier can not be both a transitively general and transitively specific classifier of the same classifier. + + + OCL + not self.allParents()->includes(self) + + + + + A classifier may only specialize classifiers of a valid type. + + + OCL + self.parents()->forAll(c | self.maySpecializeType(c)) + + + + + + + Refers to all of the Properties that are direct (i.e. not inherited or imported) attributes of the classifier. + + + + + + + Note that there may be members of the Classifier that are of the type Feature but are not included in this association, e.g. inherited features. + + + + + + + References the general classifier in the Generalization relationship. + + + + + + + Specifies all elements inherited by this classifier from the general classifiers. + + + + + + + The query conformsTo() gives true for a classifier that defines a type that conforms to another. This is used, for example, in the specification of signature conformance for operations. + + + + OCL + result = (self=other) or (self.allParents()->includes(other)) + + + + + + + + The query allFeatures() gives all of the features in the namespace of the classifier. In general, through mechanisms such as inheritance, this will be a larger set than feature. + + + + OCL + result = member->select(oclIsKindOf(Feature)) + + + + + + + + + + The general classifiers are the classifiers referenced by the generalization relationships. + + + + OCL + result = self.parents() + + + + + + + + + + The query parents() gives all of the immediate ancestors of a generalized Classifier. + + + + OCL + result = generalization.general + + + + + + + + + + The inheritedMember association is derived by inheriting the inheritable members of the parents. + + + + OCL + result = self.inherit(self.parents()->collect(p | p.inheritableMembers(self)) + + + + + + + + + + The query allParents() gives all of the direct and indirect ancestors of a generalized Classifier. + + + + OCL + result = self.parents()->union(self.parents()->collect(p | p.allParents()) + + + + + + + + + + The query inheritableMembers() gives all of the members of a classifier that may be inherited in one of its descendants, subject to whatever visibility restrictions apply. + + + + OCL + c.allParents()->includes(self) + + + + + OCL + result = member->select(m | c.hasVisibilityOf(m)) + + + + + + + + + + + The query hasVisibilityOf() determines whether a named element is visible in the classifier. By default all are visible. It is only called when the argument is something owned by a parent. + + + + OCL + self.allParents()->collect(c | c.member)->includes(n) + + + + + OCL + result = if (self.inheritedMember->includes(n)) then (n.visibility <> #private) else true + + + + + + + + The inherit operation is overridden to exclude redefined properties. + + + + OCL + result = inhs + + + + + + + + + + + + + + The query maySpecializeType() determines whether this classifier may have a generalization relationship to classifiers of the specified type. By default a classifier may specialize classifiers of the same or a more general type. It is intended to be redefined by classifiers that have different specialization constraints. + + + + OCL + result = self.oclIsKindOf(c.oclType) + + + + + + + + + A directed relationship represents a relationship between a collection of source model elements and a collection of target model elements. + + + + + Specifies the sources of the DirectedRelationship. + + + + + + + Specifies the targets of the DirectedRelationship. + + + + + + + + An element is a constituent of a model. As such, it has the capability of owning other elements. + + + + An element may not directly or indirectly own itself. + + + OCL + not self.allOwnedElements()->includes(self) + + + + + Elements that must be owned must have an owner. + + + OCL + self.mustBeOwned() implies owner->notEmpty() + + + + + The Elements owned by this element. + + + + + + + The Element that owns this element. + + + + + + + The Comments owned by this element. + + + + + + + The query allOwnedElements() gives all of the direct and indirect owned elements of an element. + + + + OCL + result = ownedElement->union(ownedElement->collect(e | e.allOwnedElements())) + + + + + + + + + + The query mustBeOwned() indicates whether elements of this type must have an owner. Subclasses of Element that do not require an owner must override this operation. + + + + OCL + result = true + + + + + + + + A feature declares a behavioral or structural characteristic of instances of classifiers. + + + + + The Classifiers that have this Feature as a feature. + + + + + + + + A multiplicity is a definition of an inclusive interval of non-negative integers beginning with a lower bound and ending with a (possibly infinite) upper bound. A multiplicity element embeds this information to specify the allowable cardinalities for an instantiation of this element. + + + + A multiplicity must define at least one valid cardinality that is greater than zero. + + + OCL + upperBound()->notEmpty() implies upperBound() > 0 + + + + + The upper bound must be greater than or equal to the lower bound. + + + OCL + (upperBound()->notEmpty() and lowerBound()->notEmpty()) implies upperBound() >= lowerBound() + + + + + The lower bound must be a non-negative integer literal. + + + OCL + lowerBound()->notEmpty() implies lowerBound() >= 0 + + + + + + For a multivalued multiplicity, this attribute specifies whether the values in an instantiation of this element are sequentially ordered. + + + + + + For a multivalued multiplicity, this attributes specifies whether the values in an instantiation of this element are unique. + + + + + + Specifies the lower bound of the multiplicity interval. + + + + + + + + Specifies the upper bound of the multiplicity interval. + + + + + + + + The query isMultivalued() checks whether this multiplicity has an upper bound greater than one. + + + + OCL + upperBound()->notEmpty() + + + + + OCL + result = upperBound() > 1 + + + + + + + The query includesMultiplicity() checks whether this multiplicity includes all the cardinalities allowed by the specified multiplicity. + + + + OCL + self.upperBound()->notEmpty() and self.lowerBound()->notEmpty() and M.upperBound()->notEmpty() and M.lowerBound()->notEmpty() + + + + + OCL + result = (self.lowerBound() <= M.lowerBound()) and (self.upperBound() >= M.upperBound()) + + + + + + + + The query includesCardinality() checks whether the specified cardinality is valid for this multiplicity. + + + + OCL + upperBound()->notEmpty() and lowerBound()->notEmpty() + + + + + OCL + result = (lowerBound() <= C) and (upperBound() >= C) + + + + + + + + The query lowerBound() returns the lower bound of the multiplicity as an integer. + + + + OCL + result = if lower->notEmpty() then lower else 1 endif + + + + + + + The query upperBound() returns the upper bound of the multiplicity for a bounded multiplicity as an unlimited natural. + + + + OCL + result = if upper->notEmpty() then upper else 1 endif + + + + + + + + A namespace is an element in a model that contains a set of named elements that can be identified by name. + + + + All the members of a Namespace are distinguishable within it. + + + OCL + membersAreDistinguishable() + + + + + + References the PackageableElements that are members of this Namespace as a result of either PackageImports or ElementImports. + + + + + + + References the ElementImports owned by the Namespace. + + + + + + + References the PackageImports owned by the Namespace. + + + + + + + A collection of NamedElements owned by the Namespace. + + + + + + + A collection of NamedElements identifiable within the Namespace, either by being owned or by being introduced by importing or inheritance. + + + + + + + + + + + The importedMember property is derived from the ElementImports and the PackageImports. References the PackageableElements that are members of this Namespace as a result of either PackageImports or ElementImports. + + + + OCL + result = self.importMembers(self.elementImport.importedElement.asSet()->union(self.packageImport.importedPackage->collect(p | p.visibleMembers()))) + + + + + + + + + + The query getNamesOfMember() takes importing into account. It gives back the set of names that an element would have in an importing namespace, either because it is owned, or if not owned then imported individually, or if not individually then from a package. + + + + OCL + result = if self.ownedMember->includes(element) then Set{}->include(element.name) else let elementImports: ElementImport = self.elementImport->select(ei | ei.importedElement = element) in if elementImports->notEmpty() then elementImports->collect(el | el.getName()) else self.packageImport->select(pi | pi.importedPackage.visibleMembers()->includes(element))->collect(pi | pi.importedPackage.getNamesOfMember(element)) endif endif + + + + + + + + + + + The query importMembers() defines which of a set of PackageableElements are actually imported into the namespace. This excludes hidden ones, i.e., those which have names that conflict with names of owned members, and also excludes elements which would have the same name when imported. + + + + OCL + result = self.excludeCollisions(imps)->select(imp | self.ownedMember->forAll(mem | mem.imp.isDistinguishableFrom(mem, self))) + + + + + + + + + + + + + + The query excludeCollisions() excludes from a set of PackageableElements any that would not be distinguishable from each other in this namespace. + + + + OCL + result = imps->reject(imp1 | imps.exists(imp2 | not imp1.isDistinguishableFrom(imp2, self))) + + + + + + + + + + + + + + The Boolean query membersAreDistinguishable() determines whether all of the namespace's members are distinguishable within it. + + + + OCL + result = self.member->forAll( memb | self.member->excluding(memb)->forAll(other | memb.isDistinguishableFrom(other, self))) + + + + + + + + A packageable element indicates a named element that may be owned directly by a package. + + + + + + A redefinable element is an element that, when defined in the context of a classifier, can be redefined more specifically or differently in the context of another classifier that specializes (directly or indirectly) the context classifier. + + + + At least one of the redefinition contexts of the redefining element must be a specialization of at least one of the redefinition contexts for each redefined element. + + + OCL + self.redefinedElement->forAll(e | self.isRedefinitionContextValid(e)) + + + + + A redefining element must be consistent with each redefined element. + + + OCL + self.redefinedElement->forAll(re | re.isConsistentWith(self)) + + + + + + References the contexts that this element may be redefined from. + + + + + + + The redefinable element that is being redefined by this element. + + + + + + + The query isConsistentWith() specifies, for any two RedefinableElements in a context in which redefinition is possible, whether redefinition would be logically consistent. By default, this is false; this operation must be overridden for subclasses of RedefinableElement to define the consistency conditions. + + + + OCL + result = false + + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of this RedefinableElement are properly related to the redefinition contexts of the specified RedefinableElement to allow this element to redefine the other. By default at least one of the redefinition contexts of this element must be a specialization of at least one of the redefinition contexts of the specified element. + + + + OCL + result = self.redefinitionContext->exists(c | redefined.redefinitionContext->exists(r | c.allParents()->includes(r))) + + + + + + + + + Relationship is an abstract concept that specifies some kind of relationship between elements. + + + + + Specifies the elements related by the Relationship. + + + + + + + + A structural feature is a typed feature of a classifier that specifies the structure of instances of the classifier. + + + + + + + + A typed element is a kind of named element that represents an element with a type. + + + + + This information is derived from the return result for this Operation. + + + + + + + + A value specification is the specification of a (possibly empty) set of instances, including both objects and data values. + + + + + + The query isComputable() determines whether a value specification can be computed in a model. This operation cannot be fully defined in OCL. A conforming implementation is expected to deliver true for this operation for all value specifications that it can compute, and to compute all of those for which the operation is true. A conforming implementation is expected to be able to compute the value of all literals. + + + + OCL + result = false + + + + + + + The query integerValue() gives a single Integer value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query booleanValue() gives a single Boolean value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query stringValue() gives a single String value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query unlimitedValue() gives a single UnlimitedNatural value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query isNull() returns true when it can be computed that the value is null. + + + + OCL + result = false + + + + + + + + An association describes a set of tuples whose values refer to typed instances. An instance of an association is called a link. + + + + Association ends of associations with more than two ends must be owned by the association. + + + OCL + if memberEnd->size() > 2 then ownedEnd->includesAll(memberEnd) + + + + + + + Specifies whether the association is derived from other model elements such as other associations or constraints. + + + + + + The ends that are owned by the association itself. + + + + + + + References the classifiers that are used as types of the ends of the association. + + + + + + + Each end represents participation of instances of the classifier connected to the end in links of the association. + + + + + + + The navigable ends that are owned by the association itself. + + + + + + + + A class describes a set of objects that share the same specifications of features, constraints, and semantics. + + + + + True when a class is abstract. + + + + + + The attributes (i.e. the properties) owned by the class. + + + + + + + The operations owned by the class. + + + + + + + This gives the superclasses of a class. + + + + + + + The inherit operation is overridden to exclude redefined properties. + + + + OCL + result = inhs->excluding(inh | ownedMember->select(oclIsKindOf(RedefinableElement))->select(redefinedElement->includes(inh))) + + + + + + + + + + + + + + + A property is a structural feature of a classifier that characterizes instances of the classifier. A property related by ownedAttribute to a classifier (other than an association) represents an attribute and might also represent an association end. It relates an instance of the class to a value or set of values of the type of the attribute. A property related by memberEnd or its specializations to an association represents an end of the association. The type of the property is the type of the end of the association. + + + + A multiplicity of a composite aggregation must not have an upper bound greater than 1. + + + OCL + isComposite implies (upperBound()->isEmpty() or upperBound() <= 1) + + + + + Subsetting may only occur when the context of the subsetting property conforms to the context of the subsetted property. + + + OCL + self.subsettedProperty->notEmpty() implies (self.subsettingContext()->notEmpty() and self.subsettingContext()->forAll (sc | self.subsettedProperty->forAll(sp | sp.subsettingContext()->exists(c | sc.conformsTo(c))))) + + + + + A redefined property must be inherited from a more general classifier containing the redefining property. + + + OCL + if (redefinedProperty->notEmpty()) then (redefinitionContext->notEmpty() and redefinedProperty->forAll(rp| ((redefinitionContext->collect(fc| fc.allParents()))->asSet())->collect(c| c.allFeatures())->asSet()->includes(rp)) + + + + + A subsetting property may strengthen the type of the subsetted property, and its upper bound may be less. + + + OCL + self.subsettedProperty->forAll(sp | self.type.conformsTo(sp.type) and ((self.upperBound()->notEmpty() and sp.upperBound()->notEmpty()) implies self.upperBound()<=sp.upperBound() )) + + + + + Only a navigable property can be marked as readOnly. + + + OCL + isReadOnly implies isNavigable() + + + + + A derived union is derived. + + + OCL + isDerivedUnion implies isDerived + + + + + A property may not subset a property with the same name. + + + OCL + true + + + + + + If isReadOnly is true, the attribute may not be written to after initialization. + + + + + + Specifies a String that represents a value to be used when no argument is supplied for the Property. + + + + + + + If isComposite is true, the object containing the attribute is a container for the object or value contained in the attribute. + + + + + + If isDerived is true, the value of the attribute is derived from information elsewhere. + + + + + + Specifies whether the property is derived as the union of all of the properties that are constrained to subset it. + + + + + + References the Class that owns the Property. + + + + + + + References the owning association of this property, if any. + + + + + + + References the properties that are redefined by this property. + + + + + + + References the properties of which this property is constrained to be a subset. + + + + + + + In the case where the property is one navigable end of a binary association with both ends navigable, this gives the other end. + + + + + + + The DataType that owns this Property. + + + + + + + References the association of which this property is a member, if any. + + + + + + + If this property is owned by a class, associated with a binary association, and the other end of the association is also owned by a class, then opposite gives the other end. + + + + OCL + result = if owningAssociation->isEmpty() and association.memberEnd->size() = 2 then let otherEnd = (association.memberEnd - self)->any() in if otherEnd.owningAssociation->isEmpty() then otherEnd else Set{} endif else Set {} endif + + + + + + + The query isConsistentWith() specifies, for any two Properties in a context in which redefinition is possible, whether redefinition would be logically consistent. A redefining property is consistent with a redefined property if the type of the redefining property conforms to the type of the redefined property, the multiplicity of the redefining property (if specified) is contained in the multiplicity of the redefined property, and the redefining property is derived if the redefined property is derived. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = redefinee.oclIsKindOf(Property) and let prop : Property = redefinee.oclAsType(Property) in (prop.type.conformsTo(self.type) and ((prop.lowerBound()->notEmpty() and self.lowerBound()->notEmpty()) implies prop.lowerBound() >= self.lowerBound()) and ((prop.upperBound()->notEmpty() and self.upperBound()->notEmpty()) implies prop.lowerBound() <= self.lowerBound()) and (self.isDerived implies prop.isDerived) and (self.isComposite implies prop.isComposite)) + + + + + + + + The query subsettingContext() gives the context for subsetting a property. It consists, in the case of an attribute, of the corresponding classifier, and in the case of an association end, all of the classifiers at the other ends. + + + + OCL + result = if association->notEmpty() then association.endType-type else if classifier->notEmpty then Set{classifier} else Set{} endif endif + + + + + + + + + + The query isNavigable() indicates whether it is possible to navigate across the property. + + + + OCL + result = not classifier->isEmpty() or association.owningAssociation.navigableOwnedEnd->includes(self) + + + + + + + The query isAttribute() is true if the Property is defined as an attribute of some classifier. + + + + OCL + result = Classifier->allInstances->exists(c | c.attribute->includes(p)) + + + + + + + + + A data type is a type whose instances are identified only by their value. A data type may contain attributes to support the modeling of structured data types. + + + + + The Attributes owned by the DataType. + + + + + + + The Operations owned by the DataType. + + + + + + + The inherit operation is overridden to exclude redefined properties. + + + + OCL + result = inhs->excluding(inh | ownedMember->select(oclIsKindOf(RedefinableElement))->select(redefinedElement->includes(inh))) + + + + + + + + + + + + + + + An enumeration is a data type whose values are enumerated in the model as enumeration literals. + + + + + The ordered set of literals for this Enumeration. + + + + + + + + An enumeration literal is a user-defined data value for an enumeration. + + + + + The Enumeration that this EnumerationLiteral is a member of. + + + + + + + + A primitive type defines a predefined data type, without any relevant substructure (i.e., it has no parts in the context of UML). A primitive datatype may have an algebra and operations defined outside of UML, for example, mathematically. + + + + + + A constraint is a condition or restriction expressed in natural language text or in a machine readable language for the purpose of declaring some of the semantics of an element. + + + + A constraint cannot be applied to itself. + + + OCL + not constrainedElement->includes(self) + + + + + The value specification for a constraint must evaluate to a Boolean value. + + + OCL + self.specification().booleanValue().isOclKindOf(Boolean) + + + + + + The ordered set of Elements referenced by this Constraint. + + + + + + + A condition that must be true when evaluated in order for the constraint to be satisfied. + + + + + + + + + + + + An opaque expression is an uninterpreted textual statement that denotes a (possibly empty) set of values when evaluated in a context. + + + + If the language attribute is not empty, then the size of the body and language arrays must be the same. + + + OCL + language->notEmpty() implies (body->size() = language->size()) + + + + + + The text of the expression, possibly in multiple languages. + + + + + + + Specifies the languages in which the expression is stated. The interpretation of the expression body depends on the languages. If the languages are unspecified, they might be implicit from the expression body or the context. Languages are matched to body strings by order. + + + + + + + + An operation is a behavioral feature of a classifier that specifies the name, type, parameters, and constraints for invoking an associated behavior. + + + + A bodyCondition can only be specified for a query operation. + + + OCL + bodyCondition->notEmpty() implies isQuery + + + + + An operation can have at most one return parameter; i.e., an owned parameter with the direction set to 'return' + + + OCL + self.ownedParameter->select(par | par.direction = #return)->size() <= 1 + + + + + + Specifies whether an execution of the BehavioralFeature leaves the state of the system unchanged (isQuery=true) or whether side effects may occur (isQuery=false). + + + + + + This information is derived from the return result for this Operation. + + + + + + This information is derived from the return result for this Operation. + + + + + + This information is derived from the return result for this Operation. + + + + + + + + This information is derived from the return result for this Operation. + + + + + + + + The class that owns the operation. + + + + + + + The DataType that owns this Operation. + + + + + + + References the Types representing exceptions that may be raised during an invocation of this operation. + + + + + + + References the Operations that are redefined by this Operation. + + + + + + + This information is derived from the return result for this Operation. + + + + + + + Specifies the ordered set of formal parameters of this BehavioralFeature. + + + + + + + + + + + + + + + + + + + If this operation has a return parameter, isOrdered equals the value of isOrdered for that parameter. Otherwise isOrdered is false. + + + + OCL + result = if returnResult->size() = 1 then returnResult->any().isOrdered else false endif + + + + + + + If this operation has a return parameter, isUnique equals the value of isUnique for that parameter. Otherwise isUnique is true. + + + + OCL + result = if returnResult->size() = 1 then returnResult->any().isUnique else true endif + + + + + + + If this operation has a return parameter, lower equals the value of lower for that parameter. Otherwise lower is not defined. + + + + OCL + result = if returnResult->size() = 1 then returnResult->any().lower else Set{} endif + + + + + + + If this operation has a return parameter, upper equals the value of upper for that parameter. Otherwise upper is not defined. + + + + OCL + result = if returnResult->size() = 1 then returnResult->any().upper else Set{} endif + + + + + + + If this operation has a return parameter, type equals the value of type for that parameter. Otherwise type is not defined. + + + + OCL + result = if returnResult->size() = 1 then returnResult->any().type else Set{} endif + + + + + + + The query isConsistentWith() specifies, for any two Operations in a context in which redefinition is possible, whether redefinition would be consistent in the sense of maintaining type covariance. Other senses of consistency may be required, for example to determine consistency in the sense of contravariance. Users may define alternative queries under names different from 'isConsistentWith()', as for example, users may define a query named 'isContravariantWith()'. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = (redefinee.oclIsKindOf(Operation) and let op: Operation = redefinee.oclAsType(Operation) in self.formalParameter.size() = op.formalParameter.size() and self.returnResult.size() = op.returnResult.size() and forAll(i | op.formalParameter[i].type.conformsTo(self.formalParameter[i].type)) and forAll(i | op.returnResult[i].type.conformsTo(self.returnResult[i].type)) ) + + + + + + + + + OCL + result = ownedParameter->select (par | par.direction = #return) + + + + + + + + + + + A parameter is a specification of an argument used to pass information into or out of an invocation of a behavioral feature. + + + + + + Specifies a String that represents a value to be used when no argument is supplied for the Parameter. + + + + + + + Indicates whether a parameter is being sent into or out of a behavioral element. + + + + + + References the Operation owning this parameter. + + + + + + + + A behavioral feature is a feature of a classifier that specifies an aspect of the behavior of its instances. + + + + + + Specifies the ordered set of formal parameters of this BehavioralFeature. + + + + + + + References the Types representing exceptions that may be raised during an invocation of this feature. + + + + + + + The query isDistinguishableFrom() determines whether two BehavioralFeatures may coexist in the same Namespace. It specifies that they have to have different signatures. + + + + OCL + result = if n.oclIsKindOf(BehavioralFeature) then if ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->notEmpty() then Set{}->include(self)->include(n)->isUnique( bf | bf.parameter->collect(type)) else true endif else true endif + + + + + + + + + + An element import identifies an element in another package, and allows the element to be referenced using its name without a qualifier. + + + + The visibility of an ElementImport is either public or private. + + + OCL + self.visibility = #public or self.visibility = #private + + + + + An importedElement has either public visibility or no visibility at all. + + + OCL + self.importedElement.visibility.notEmpty() implies self.importedElement.visibility = #public + + + + + + Specifies the visibility of the imported PackageableElement within the importing Package. The default visibility is the same as that of the imported element. If the imported element does not have a visibility, it is possible to add visibility to the element import. + + + + + + Specifies the name that should be added to the namespace of the importing package in lieu of the name of the imported packagable element. The aliased name must not clash with any other member name in the importing package. By default, no alias is used. + + + + + + + Specifies the PackageableElement whose name is to be added to a Namespace. + + + + + + + Specifies the Namespace that imports a PackageableElement from another Package. + + + + + + + The query getName() returns the name under which the imported PackageableElement will be known in the importing namespace. + + + + OCL + result = if self.alias->notEmpty() then self.alias else self.importedElement.name endif + + + + + + + + A package is used to group elements, and provides a namespace for the grouped elements. + + + + If an element that is owned by a package has visibility, it is public or private. + + + OCL + self.ownedElements->forAll(e | e.visibility->notEmpty() implies e.visbility = #public or e.visibility = #private) + + + + + + + Specifies the packageable elements that are owned by this Package. + + + + + + + References the packaged elements that are Types. + + + + + + + References the packaged elements that are Packages. + + + + + + + References the Package that owns this Package. + + + + + + + References the PackageMerges that are owned by this Package. + + + + + + + The query mustBeOwned() indicates whether elements of this type must have an owner. + + + + OCL + result = false + + + + + + + The query visibleMembers() defines which members of a Package can be accessed outside it. + + + + OCL + result = member->select( m | self.makesVisible(m)) + + + + + + + + + + The query makesVisible() defines whether a Package makes an element visible outside itself. Elements with no visibility and elements with public visibility are made visible. + + + + OCL + self.member->includes(el) + + + + + OCL + result = (ownedMember->includes(el)) or (elementImport-> select(ei|ei.visibility = #public)-> collect(ei|ei.importedElement)->includes(el)) or (packageImport-> select(pi|pi.visibility = #public)-> collect(pi| pi.importedPackage.member->includes(el))->notEmpty()) + + + + + + + + + A package import is a relationship that allows the use of unqualified names to refer to package members from other namespaces. + + + + The visibility of a PackageImport is either public or private. + + + OCL + self.visibility = #public or self.visibility = #private + + + + + + Specifies the visibility of the imported PackageableElements within the importing Namespace, i.e., whether imported elements will in turn be visible to other packages that use that importingPackage as an importedPackage. If the PackageImport is public, the imported elements will be visible outside the package, while if it is private they will not. + + + + + + Specifies the Package whose members are imported into a Namespace. + + + + + + + Specifies the Namespace that imports the members from a Package. + + + + + + + + A package merge defines how the contents of one package are extended by the contents of another package. + + + + + References the Package that is being extended with the contents of the merged package of the PackageMerge. + + + + + + + References the Package that is to be merged with the receiving package of the PackageMerge. + + + + + + + + A type is a named element that is used as the type for a typed element. A type can be contained in a package. + + + + + + Specifies the owning package of this classifier, if any. + + + + + + + The query conformsTo() gives true for a type that conforms to another. By default, two types do not conform to each other. This query is intended to be redefined for specific conformance situations. + + + + OCL + result = false + + + + + + + + + A named element is an element in a model that may have a name. + + + + If there is no name, or one of the containing namespaces has no name, there is no qualified name. + + + OCL + (self.name->isEmpty() or self.allNamespaces()->select(ns | ns.name->isEmpty())->notEmpty()) implies self.qualifiedName->isEmpty() + + + + + When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces. + + + OCL + (self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty()) implies self.qualifiedName = self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result)) + + + + + If a NamedElement is not owned by a Namespace, it does not have a visibility. + + + OCL + namespace->isEmpty() implies visibility->isEmpty() + + + + + + The name of the NamedElement. + + + + + + + Determines where the NamedElement appears within different Namespaces within the overall model, and its accessibility. + + + + + + + Specifies the namespace that owns the NamedElement. + + + + + + + A name which allows the NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from the names of the containing namespaces starting at the root of the hierarchy and ending with the name of the NamedElement itself. + + + + + + + The query allNamespaces() gives the sequence of namespaces in which the NamedElement is nested, working outwards. + + + + OCL + result = if self.namespace->isEmpty() then Sequence{} else self.namespace.allNamespaces()->prepend(self.namespace) endif + + + + + + + + + + The query isDistinguishableFrom() determines whether two NamedElements may logically co-exist within a Namespace. By default, two named elements are distinguishable if (a) they have unrelated types or (b) they have related types but different names. + + + + OCL + result = if self.oclIsKindOf(n.oclType) or n.oclIsKindOf(self.oclType) then ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->isEmpty() else true endif + + + + + + + + + The query separator() gives the string that is used to separate names when constructing a qualified name. + + + + OCL + result = '::' + + + + + + + When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces. + + + + OCL + result = if self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty() then self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result)) else Set{} endif + + + + + + + + An expression is a structured tree of symbols that denotes a (possibly empty) set of values when evaluated in a context. + + + + + Specifies a sequence of operands. + + + + + + + + A comment is a textual annotation that can be attached to a set of elements. + + + + + Specifies a string that is the comment. + + + + + + + References the Element(s) being commented. + + + + + + + + Parameter direction kind is an enumeration type that defines literals used to specify direction of parameters. + + + + Indicates that parameter values are passed into the behavioral element by the caller. + + + + + Indicates that parameter values are passed into a behavioral element by the caller and then back out to the caller from the behavioral element. + + + + + Indicates that parameter values are passed from a behavioral element out to the caller. + + + + + Indicates that parameter values are passed as return values from a behavioral element back to the caller. + + + + + + VisibilityKind is an enumeration type that defines literals to determine the visibility of elements in a model. + + + + The query bestVisibility() examines a set of VisibilityKinds, and returns public as the preferred visibility. + + + + OCL + result = if vis->includes(#public) then #public else #private endif + + + + + + + + + + + A public element is visible to all elements that can access the contents of the namespace that owns it. + + + + + A private element is only visible inside the namespace that owns it. + + + + + A protected element is visible to elements that have a generalization relationship to the namespace that owns it. + + + + + A package element is owned by a namespace that is not a package, and is visible to elements that are in the same package as its owning namespace. Only named elements that are not owned by packages can be marked as having package visibility. Any element marked as having package visibility is visible to all elements within the nearest enclosing package (given that other owning elements have proper visibility). Outside the nearest enclosing package, an element marked as having package visibility is not visible. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A stereotype defines how an existing metaclass may be extended, and enables the use of platform or domain specific terminology or notation in place of, or in addition to, the ones used for the extended metaclass. + + + + Stereotype names should not clash with keyword names for the extended model element. + + + OCL + true + + + + + A Stereotype may only generalize or specialize another Stereotype. + + + OCL + generalization.general->forAll(e |e.oclIsKindOf(Stereotype)) and generalization.specific->forAll(e | e.oclIsKindOf(Stereotype)) + + + + + + Stereotype can change the graphical appearance of the extended model element by using attached icons. When this association is not null, it references the location of the icon content to be displayed within diagrams presenting the extended model elements. + + + + + + + + A profile defines limited extensions to a reference metamodel with the purpose of adapting the metamodel to a specific platform or domain. + + + + An element imported as a metaclassReference is not specialized or generalized in a Profile. + + + OCL + self.metaclassReference.importedElement-> select(c | c.oclIsKindOf(Classifier) and (c.generalization.namespace = self or (c.specialization.namespace = self) )->isEmpty() + + + + + All elements imported either as metaclassReferences or through metamodelReferences are members of the same base reference metamodel. + + + OCL + self.metamodelReference.importedPackage.elementImport.importedElement.allOwningPackages())-> union(self.metaclassReference.importedElement.allOwningPackages() )->notEmpty() + + + + + + References the Stereotypes that are owned by the Profile. + + + + + + + References a metaclass that may be extended. + + + + + + + References a package containing (directly or indirectly) metaclasses that may be extended. + + + + + + + + A package can have one or more profile applications to indicate which profiles have been applied. Because a profile is a package, it is possible to apply a profile not only to packages, but also to profiles. + + + + + References the ProfileApplications that indicate which profiles have been applied to the Package. + + + + + + + + Class has derived association that indicates how it may be extended through one or more stereotypes. Stereotype is the only kind of metaclass that cannot be extended by stereotypes. + + + + References the Extensions that specify additional properties of the metaclass. The property is derived from the extensions whose memberEnds are typed by the Class. + + + + + + + + A profile application is used to show which profiles have been applied to a package. + + + + + References the Profiles that are applied to a Package through this ProfileApplication. + + + + + + + Specifies that the Profile filtering rules for the metaclasses of the referenced metamodel shall be strictly applied. + + + + + + The package that owns the profile application. + + + + + + + + An extension is used to indicate that the properties of a metaclass are extended through a stereotype, and gives the ability to flexibly add (and later remove) stereotypes to classes. + + + + The non-owned end of an Extension is typed by a Class. + + + OCL + metaclassEnd()->notEmpty() and metaclass()->oclIsKindOf(Class) + + + + + An Extension is binary, i.e., it has only two memberEnds. + + + OCL + memberEnd->size() = 2 + + + + + + Indicates whether an instance of the extending stereotype must be created when an instance of the extended class is created. The attribute value is derived from the multiplicity of the Property referenced by Extension::ownedEnd; a multiplicity of 1 means that isRequired is true, but otherwise it is false. Since the default multiplicity of an ExtensionEnd is 0..1, the default value of isRequired is false. + + + + + + References the Class that is extended through an Extension. The property is derived from the type of the memberEnd that is not the ownedEnd. + + + + + + + References the end of the extension that is typed by a Stereotype. + + + + + + + The query metaclassEnd() returns the Property that is typed by a metaclass (as opposed to a stereotype). + + + + OCL + result = memberEnd->reject(ownedEnd) + + + + + + + The query metaclass() returns the metaclass that is being extended (as opposed to the extending stereotype). + + + + OCL + result = metaclassEnd().type + + + + + + + The query isRequired() is true if the owned end has a multiplicity with the lower bound of 1. + + + + OCL + result = (ownedEnd->lowerBound() = 1) + + + + + + + + An extension end is used to tie an extension to a stereotype when extending a metaclass. + + + + The multiplicity of ExtensionEnd is 0..1 or 1. + + + OCL + (self->lowerBound() = 0 or self->lowerBound() = 1) and self->upperBound() = 1 + + + + + The aggregation of an ExtensionEnd is composite. + + + OCL + self.aggregation = #composite + + + + + + References the type of the ExtensionEnd. Note that this association restricts the possible types of an ExtensionEnd to only be Stereotypes. + + + + + + + This redefinition changes the default multiplicity of association ends, since model elements are usually extended by 0 or 1 instance of the extension stereotype. + + + + + + + + The query lowerBound() returns the lower bound of the multiplicity as an Integer. This is a redefinition of the default +lower bound, which normally, for MultiplicityElements, evaluates to 1 if empty. + + + + OCL + result = lowerBound = if lowerValue->isEmpty() then 0 else lowerValue->IntegerValue() endif + + + + + + + + Physical definition of a graphical image. + + + + + This contains the serialization of the image according to the format. The value could represent a bitmap, image such as a GIF file, or drawing 'instructions' using a standard such as Scalable Vector Graphic (SVG) (which is XML based). + + + + + + + This contains a location that can be used by a tool to locate the image as an alternative to embedding it in the stereotype. + + + + + + + This indicates the format of the content - which is how the string content should be interpreted. The following values are reserved: SVG, GIF, PNG, JPG, WMF, EMF, BMP. + +In addition the prefix 'MIME: ' is also reserved. This option can be used as an alternative to express the reserved values above, for example "SVG" could instead be expressed as "MIME: image/svg+xml". + + + + + + + + + + The query allOwningPackages() returns all the directly or indirectly owning packages. + + + + OCL + result = self.namespace->select(p | p.oclIsKindOf(Package))->union(p.allOwningPackages()) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/L0.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/L0.uml new file mode 100644 index 0000000000..5feb26ffef --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/L0.uml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/L1.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/L1.uml new file mode 100644 index 0000000000..d26bd08f32 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/L1.uml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/L2.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/L2.uml new file mode 100644 index 0000000000..c9983ad274 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/L2.uml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/L3.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/L3.uml new file mode 100644 index 0000000000..644863c8cf --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/L3.uml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/LM.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/LM.uml new file mode 100644 index 0000000000..80fa99255a --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/LM.uml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/Superstructure.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/Superstructure.uml new file mode 100644 index 0000000000..019ddd3aaa --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/Superstructure.uml @@ -0,0 +1,14306 @@ + + + + + + + + + + + + + + + A read extent action is an action that retrieves the current instances of a classifier. + + + + The type of the result output pin is the classifier. + + + OCL + true + + + + + The multiplicity of the result output pin is 0..*. + + + OCL + self.result.multiplicity.is(0,#null) + + + + + + The runtime instances of the classifier. + + + + + + + The classifier whose instances are to be retrieved. + + + + + + + + A reclassify object action is an action that changes which classifiers classify an object. + + + + None of the new classifiers may be abstract. + + + OCL + not self.newClassifier->exists(isAbstract = true) + + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.argument.multiplicity.is(1,1) + + + + + The input pin has no type. + + + OCL + self.argument.type->size() = 0 + + + + + + Specifies whether existing classifiers should be removed before adding the new classifiers. + + + + + + + A set of classifiers to be removed from the classifiers of the object. + + + + + + + A set of classifiers to be added to the classifiers of the object. + + + + + + + Holds the object to be reclassified. + + + + + + + + A read is classified object action is an action that determines whether a runtime object is classified by a given classifier. + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + The input pin has no type. + + + OCL + self.object.type->isEmpty() + + + + + The multiplicity of the output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + The type of the output pin is Boolean + + + OCL + self.result.type = Boolean + + + + + + Indicates whether the classifier must directly classify the input object. + + + + + + + The classifier against which the classification of the input object is tested. + + + + + + + After termination of the action, will hold the result of the test. + + + + + + + Holds the object whose classification is to be tested. + + + + + + + + A start classifier behavior action is an action that starts the classifier behavior of the input. + + + + The multiplicity of the input pin is 1..1 + + + OCL + true + + + + + If the input pin has a type, then the type must have a classifier behavior. + + + OCL + true + + + + + + Holds the object on which to start the owned behavior. + + + + + + + + A qualifier value is not an action. It is an element that identifies links. It gives a single qualifier within a link end data specification. + + + + The qualifier attribute must be a qualifier of the association end of the link-end data. + + + OCL + self.LinkEndData.end->collect(qualifier)->includes(self.qualifier) + + + + + The type of the qualifier value input pin is the same as the type of the qualifier attribute. + + + OCL + self.value.type = self.qualifier.type + + + + + The multiplicity of the qualifier value input pin is "1..1". + + + OCL + self.value.multiplicity.is(1,1) + + + + + + Attribute representing the qualifier for which the value is to be specified. + + + + + + + Input pin from which the specified value for the qualifier is taken. + + + + + + + + + The qualifiers include all and only the qualifiers of the association end. + + + OCL + self.qualifier->collect(qualifier) = self.end.qualifier + + + + + The end object input pin is not also a qualifier value input pin. + + + OCL + self.value->excludesAll(self.qualifier.value) + + + + + List of qualifier values + + + + + + + + A read link object end action is an action that retrieves an end object from a link object. + + + + The property must be an association end. + + + OCL + self.end.association.notEmpty() + + + + + The association of the association end must be an association class. + + + OCL + self.end.Association.oclIsKindOf(AssociationClass) + + + + + The ends of the association must not be static. + + + OCL + self.end.association.memberEnd->forall(e | not e.isStatic) + + + + + The type of the object input pin is the association class that owns the association end. + + + OCL + self.object.type = self.end.association + + + + + The multiplicity of the object input pin is 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + The type of the result output pin is the same as the type of the association end. + + + OCL + self.result.type = self.end.type + + + + + The multiplicity of the result output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Gives the input pin from which the link object is obtained. + + + + + + + Link end to be read. + + + + + + + Pin where the result value is placed. + + + + + + + + A read link object end qualifier action is an action that retrieves a qualifier end value from a link object. + + + + The qualifier attribute must be a qualifier attribute of an association end. + + + OCL + self.qualifier.associationEnd->size() = 1 + + + + + The association of the association end of the qualifier attribute must be an association class. + + + OCL + self.qualifier.associationEnd.association.oclIsKindOf(AssociationClass) + + + + + The ends of the association must not be static. + + + OCL + self.qualifier.associationEnd.association.memberEnd->forall(e | not e.isStatic) + + + + + The type of the object input pin is the association class that owns the association end that has the given qualifier attribute. + + + OCL + self.object.type = self.qualifier.associationEnd.association + + + + + The multiplicity of the qualifier attribute is 1..1. + + + OCL + self.qualifier.multiplicity.is(1,1) + + + + + The multiplicity of the object input pin is 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + The type of the result output pin is the same as the type of the qualifier attribute. + + + OCL + self.result.type = self.qualifier.type + + + + + The multiplicity of the result output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Gives the input pin from which the link object is obtained. + + + + + + + Pin where the result value is placed. + + + + + + + The attribute representing the qualifier to be read. + + + + + + + + A create link object action creates a link object. + + + + The association must be an association class. + + + OCL + self.association().oclIsKindOf(Class) + + + + + The type of the result pin must be the same as the association of the action. + + + OCL + self.result.type = self.association() + + + + + The multiplicity of the output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Gives the output pin on which the result is put. + + + + + + + + A accept event action is an action that waits for the occurrence of an event meeting specified conditions. + + + + AcceptEventActions may have no input pins. + + + OCL + true + + + + + There are no output pins if the trigger events are only ChangeEvents, or if they are only CallEvents when this action is an instance of AcceptEventAction and not an instance of a descendant of AcceptEventAction (such as AcceptCallAction). + + + OCL + true + + + + + If the trigger events are all TimeEvents, there is exactly one output pin. + + + OCL + true + + + + + If isUnmarshall is true, there must be exactly one trigger for events of type SignalEvent. The number of result output pins must be the same as the number of attributes of the signal. The type and ordering of each result output pin must be the same as the corresponding attribute of the signal. The multiplicity of each result output pin must be compatible with the multiplicity of the corresponding attribute. + + + OCL + true + + + + + + Indicates whether there is a single output pin for the event, or multiple output pins for attributes of the event. + + + + + + + Pins holding the received event objects or their attributes. Event objects may be copied in transmission, so identity might not be preserved. + + + + + + + The type of events accepted by the action, as specified by triggers. For triggers with signal events, a signal of the specified type or any subtype of the specified signal type is accepted. + + + + + + + + An accept call action is an accept event action representing the receipt of a synchronous call request. In addition to the normal operation parameters, the action produces an output that is needed later to supply the information to the reply action necessary to return control to the caller. This action is for synchronous calls. If it is used to handle an asynchronous call, execution of the subsequent reply action will complete immediately with no effects. + + + + The result pins must match the in and inout parameters of the operation specified by the trigger event in number, type, and order. + + + OCL + true + + + + + The trigger event must be a CallEvent. + + + OCL + trigger.event.oclIsKindOf(CallEvent) + + + + + isUnmrashall must be true for an AcceptCallAction. + + + OCL + isUnmarshall = true + + + + + + Pin where a value is placed containing sufficient information to perform a subsequent reply and return control to the caller. The contents of this value are opaque. It can be passed and copied but it cannot be manipulated by the model. + + + + + + + + A reply action is an action that accepts a set of return values and a value containing return information produced by a previous accept call action. The reply action returns the values to the caller of the previous call, completing execution of the call. + + + + The reply value pins must match the return, out, and inout parameters of the operation on the event on the trigger in number, type, and order. + + + OCL + true + + + + + The event on replyToCall trigger must be a CallEvent replyToCallEvent.oclIsKindOf(CallEvent) + + + OCL + replyToCallEvent.oclIsKindOf(CallEvent) + + + + + + The trigger specifying the operation whose call is being replied to. + + + + + + + A pin containing the return information value produced by an earlier AcceptCallAction. + + + + + + + A list of pins containing the reply values of the operation. These values are returned to the caller. + + + + + + + + An unmarshall action is an action that breaks an object of a known type into outputs each of which is equal to a value from a structural feature of the object. + + + + The type of the object input pin must be the same as the unmarshall classifier. + + + OCL + true + + + + + The multiplicity of the object input pin is 1..1 + + + OCL + true + + + + + The number of result output pins must be the same as the number of structural features of the unmarshall classifier. + + + OCL + true + + + + + The type and ordering of each result output pin must be the same as the corresponding structural feature of the unmarshall classifier. + + + OCL + true + + + + + The multiplicity of each result output pin must be compatible with the multiplicity of the corresponding structural features of the unmarshall classifier. + + + + OCL + true + + + + + The unmarshall classifier must have at least one structural feature. + + + OCL + true + + + + + unmarshallType must be a Classifier with ordered attributes + + + OCL + true + + + + + + The values of the structural features of the input object. + + + + + + + The type of the object to be unmarshalled. + + + + + + + The object to be unmarshalled. + + + + + + + + A reduce action is an action that reduces a collection to a single value by combining the elements of the collection. + + + + The type of the input must be a collection. + + + OCL + true + + + + + The type of the output must be compatible with the type of the output of the reducer behavior. + + + OCL + true + + + + + The reducer behavior must have two input parameters and one output parameter, of types compatible with the types of elements of the input collection. + + + OCL + true + + + + + + Behavior that is applied to two elements of the input collection to produce a value that is the same type as elements of the collection. + + + + + + + Gives the output pin on which the result is put. + + + + + + + The collection to be reduced. + + + + + + + Tells whether the order of the input collection should determine the order in which the behavior is applied to its elements. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A create object action is an action that creates an object that conforms to a statically specified classifier and puts it on an output pin at runtime. + + + + The classifier cannot be abstract. + + + OCL + not (self.classifier.isAbstract = #true) + + + + + The classifier cannot be an association class + + + OCL + not self.classifier.oclIsKindOf(AssociationClass) + + + + + The type of the result pin must be the same as the classifier of the action. + + + OCL + self.result.type = self.classifier + + + + + The multiplicity of the output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Classifier to be instantiated. + + + + + + + Gives the output pin on which the result is put. + + + + + + + + A destroy object action is an action that destroys objects. + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.target.multiplicity.is(1,1) + + + + + The input pin has no type. + + + OCL + self.target.type->size() = 0 + + + + + + Specifies whether links in which the object participates are destroyed along with the object. + + + + + + + Specifies whether objects owned by the object are destroyed along with the object. + + + + + + + The input pin providing the object to be destroyed. + + + + + + + + A test identity action is an action that tests if two values are identical objects. + + + + The input pins have no type. + + + OCL + self.first.type->size() = 0 and self.second.type->size() = 0 + + + + + The multiplicity of the input pins is 1..1. + + + OCL + self.first.multiplicity.is(1,1) and self.second.multiplicity.is(1,1) + + + + + The type of the result is Boolean. + + + OCL + self.result.type.oclIsTypeOf(Boolean) + + + + + + Gives the pin on which an object is placed. + + + + + + + Gives the pin on which an object is placed. + + + + + + + Tells whether the two input objects are identical. + + + + + + + + A read self action is an action that retrieves the host object of an action. + + + + The action must be contained in an behavior that has a host classifier. + + + OCL + self.context->size() = 1 + + + + + If the action is contained in an behavior that is acting as the body of a method, then the operation of the method must not be static. + + + OCL + true + + + + + The type of the result output pin is the host classifier. + + + OCL + self.result.type = self.context + + + + + The multiplicity of the result output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Gives the output pin on which the hosting object is placed. + + + + + + + + StructuralFeatureAction is an abstract class for all structural feature actions. + + + + The structural feature must not be static. + + + OCL + self.structuralFeature.isStatic = #false + + + + + The type of the object input pin is the same as the classifier of the object passed on this pin. + + + OCL + true + + + + + The multiplicity of the input pin must be 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + Visibility of structural feature must allow access to the object performing the action. + + + OCL + let host : Classifier = self.context in self.structuralFeature.visibility = #public or host = self.structuralFeature.featuringClassifier.type or (self.structuralFeature.visibility = #protected and host.allSupertypes ->includes(self.structuralFeature.featuringClassifier.type))) + + + + + A structural feature has exactly one featuringClassifier. + + + OCL + self.structuralFeature.featuringClassifier->size() = 1 + + + + + + Structural feature to be read. + + + + + + + Gives the input pin from which the object whose structural feature is to be read or written is obtained. + + + + + + + + + A read structural feature action is a structural feature action that retrieves the values of a structural feature. + + + + The type and ordering of the result output pin are the same as the type and ordering of the structural feature. + + + OCL + self.result.type = self.structuralFeature.type and self.result.ordering = self.structuralFeature.ordering + + + + + The multiplicity of the structural feature must be compatible with the multiplicity of the output pin. + + + OCL + self.structuralFeature.multiplicity.compatibleWith(self.result.multiplicity) + + + + + + Gives the output pin on which the result is put. + + + + + + + + WriteStructuralFeatureAction is an abstract class for structural feature actions that change structural feature values. + + + + The type input pin is the same as the classifier of the structural feature. + + + OCL + self.value.type = self.structuralFeature.featuringClassifier + + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.value.multiplicity.is(1,1) + + + + + + Value to be added or removed from the structural feature. + + + + + + + + A clear structural feature action is a structural feature action that removes all values of a structural feature. + + + + + + A remove structural feature value action is a write structural feature action that removes values from structural features. + + + + Actions removing a value from ordered nonunique structural features must have a single removeAt input pin if isRemoveDuplicates is false. It must be of type Unlimited Natural with multiplicity 1..1. Otherwise, the action has no removeAt input pin. + + + + OCL + true + + + + + + Specifies whether to remove duplicates of the value in nonunique structural features. + + + + + + + Specifies the position of an existing value to remove in ordered nonunique structural features. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. + + + + + + + + An add structural feature value action is a write structural feature action for adding values to a structural feature. + + + + Actions adding a value to ordered structural features must have a single input pin for the insertion point with type UnlimitedNatural and multiplicity of 1..1, otherwise the action has no input pin for the insertion point. + + + OCL + let insertAtPins : Collection = self.insertAt in if self.structuralFeature.isOrdered = #false then insertAtPins->size() = 0 else let insertAtPin : InputPin= insertAt->asSequence()->first() in insertAtPins->size() = 1 and insertAtPin.type = UnlimitedNatural and insertAtPin.multiplicity.is(1,1)) endif + + + + + + Specifies whether existing values of the structural feature of the object should be removed before adding the new value. + + + + + + + Gives the position at which to insert a new value or move an existing value in ordered structural features. The type of the pin is UnlimitedNatural, but the value cannot be zero. This pin is omitted for unordered structural features. + + + + + + + + LinkAction is an abstract class for all link actions that identify their links by the objects at the ends of the links and by the qualifiers at ends of the links. + + + + The association ends of the link end data must all be from the same association and include all and only the association ends of that association. + + + OCL + self.endData->collect(end) = self.association()->collect(connection)) + + + + + The association ends of the link end data must not be static. + + + OCL + self.endData->forall(end.oclisKindOf(NavigableEnd) implies end.isStatic = #false + + + + + The input pins of the action are the same as the pins of the link end data and insertion pins. + + + OCL + self.input->asSet() = let ledpins : Set = self.endData->collect(value) in if self.oclIsKindOf(LinkEndCreationData) then ledpins->union(self.endData.oclAsType(LinkEndCreationData).insertAt) else ledpins + + + + + + Data identifying one end of a link by the objects on its ends and qualifiers. + + + + + + + Pins taking end objects and qualifier values as input. + + + + + + + The association operates on LinkAction. It returns the association of the action. + + + + OCL + result = self.endData->asSequence().first().end.association + + + + + + + + A link end data is not an action. It is an element that identifies links. It identifies one end of a link to be read or written by the children of a link action. A link cannot be passed as a runtime value to or from an action. Instead, a link is identified by its end objects and qualifier values, if any. This requires more than one piece of data, namely, the statically-specified end in the user model, the object on the end, and the qualifier values for that end, if any. These pieces are brought together around a link end data. Each association end is identified separately with an instance of the LinkEndData class. + + + + The property must be an association end. + + + OCL + self.end.association->size() = 1 + + + + + The type of the end object input pin is the same as the type of the association end. + + + OCL + self.value.type = self.end.type + + + + + The multiplicity of the end object input pin must be 1..1. + + + OCL + self.value.multiplicity.is(1,1) + + + + + + Input pin that provides the specified object for the given end. This pin is omitted if the link-end data specifies an 'open' end for reading. + + + + + + + Association end for which this link-end data specifies values. + + + + + + + + A read link action is a link action that navigates across associations to retrieve objects on one end. + + + + Exactly one link-end data specification (the 'open' end) must not have an end object input pin. + + + OCL + self.endData->select(ed | ed.value->size() = 0)->size() = 1 + + + + + The type and ordering of the result output pin are same as the type and ordering of the open association end. + + + OCL + let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in self.result.type = openend.type and self.result.ordering = openend.ordering + + + + + The multiplicity of the open association end must be compatible with the multiplicity of the result output pin. + + + OCL + let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in openend.multiplicity.compatibleWith(self.result.multiplicity) + + + + + The open end must be navigable. + + + OCL + let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in openend.isNavigable() + + + + + Visibility of the open end must allow access to the object performing the action. + + + OCL + let host : Classifier = self.context in let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in openend.visibility = #public or self.endData->exists(oed | not oed.end = openend and (host = oed.end.participant or (openend.visibility = #protected and host.allSupertypes->includes(oed.end.participant)))) + + + + + + The pin on which are put the objects participating in the association at the end not specified by the inputs. + + + + + + + + + A link end creation data is not an action. It is an element that identifies links. It identifies one end of a link to be created by a create link action. + + + + LinkEndCreationData can only be end data for CreateLinkAction or one of its specializations. + + + OCL + self.LinkAction.oclIsKindOf(CreateLinkAction) + + + + + Link end creation data for ordered association ends must have a single input pin for the insertion point with type UnlimitedNatural and multiplicity of 1..1, otherwise the action has no input pin for the insertion point. + + + OCL + let insertAtPins : Collection = self.insertAt in if self.end.ordering = #unordered then insertAtPins->size() = 0 else let insertAtPin : InputPin = insertAts->asSequence()->first() in insertAtPins->size() = 1 and insertAtPin.type = UnlimitedNatural and insertAtPin.multiplicity.is(1,1)) endif + + + + + + Specifies whether the existing links emanating from the object on this end should be destroyed before creating a new link. + + + + + + + Specifies where the new link should be inserted for ordered association ends, or where an existing link should be moved to. The type of the input is UnlimitedNatural, but the input cannot be zero. This pin is omitted for association ends that are not ordered. + + + + + + + + A create link action is a write link action for creating links. + + + + The association cannot be an abstract classifier. + + + OCL + self.association().isAbstract = #false + + + + + + Specifies ends of association and inputs. + + + + + + + + A destroy link action is a write link action that destroys links and link objects. + + + + + Specifies ends of association and inputs. + + + + + + + + WriteLinkAction is an abstract class for link actions that create and destroy links. + + + + The visibility of at least one end must allow access to the class using the action. + + + OCL + true + + + + + + + A clear association action is an action that destroys all links of an association in which a particular object participates. + + + + The type of the input pin must be the same as the type of at least one of the association ends of the association. + + + OCL + self.association->exists(end.type = self.object.type) + + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + + Gives the input pin from which is obtained the object whose participation in the association is to be cleared. + + + + + + + Association to be cleared. + + + + + + + + A broadcast signal action is an action that transmits a signal instance to all the potential target objects in the system, which may cause the firing of a state machine transitions or the execution of associated activities of a target object. The argument values are available to the execution of associated behaviors. The requestor continues execution immediately after the signals are sent out. It does not wait for receipt. Any reply messages are ignored and are not transmitted to the requestor. + + + + The number and order of argument pins must be the same as the number and order of attributes in the signal. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument pin must be the same as the corresponding attribute of the signal. + + + OCL + true + + + + + + The specification of signal object transmitted to the target objects. + + + + + + + + A send object action is an action that transmits an object to the target object, where it may invoke behavior such as the firing of state machine transitions or the execution of an activity. The value of the object is available to the execution of invoked behaviors. The requestor continues execution immediately. Any reply message is ignored and is not transmitted to the requestor. + + + + + The target object to which the object is sent. + + + + + + + The request object, which is transmitted to the target object. The object may be copied in transmission, so identity might not be preserved. + + + + + + + + A link end destruction data is not an action. It is an element that identifies links. It identifies one end of a link to be destroyed by destroy link action. + + + + LinkEndDestructionData can only be end data for DestroyLinkAction or one of its specializations. + + + OCL + true + + + + + LinkEndDestructionData for ordered nonunique association ends must have a single destroyAt input pin if isDestroyDuplicates is false. It must be of type UnlimitedNatural and have a multiplicity of 1..1. Otherwise, the action has no input pin for the removal position. + + + OCL + true + + + + + + Specifies whether to destroy duplicates of the value in nonunique association ends. + + + + + + + Specifies the position of an existing link to be destroyed in ordered nonunique association ends. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. + + + + + + + + A value specification action is an action that evaluates a value specification. + + + + The type of value specification must be compatible with the type of the result pin. + + + OCL + true + + + + + The multiplicity of the result pin is 1..1 + + + OCL + true + + + + + + Value specification to be evaluated. + + + + + + + Gives the output pin on which the result is put. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An action with implementation-specific semantics. + + + + + Specifies the action in one or more languages. + + + + + + + + Languages the body strings use, in the same order as the body strings + + + + + + + + Provides input to the action. + + + + + + + Takes output from the action. + + + + + + + + A pin is a typed element and multiplicity element that provides values to actions and accept result values from them. + + + + + + + A value pin is an input pin that provides a value by evaluating a value specification. + + + + The type of value specification must be compatible with the type of the value pin. + + + OCL + true + + + + + + Value that the pin will provide. + + + + + + + + An output pin is a pin that holds output values produced by an action. + + + + + + An input pin is a pin that holds input values to be consumed by an action. + + + + + + InvocationAction is an abstract class for the various actions that invoke behavior. + + + + + Specification of the ordered set of argument values that appears during execution. + + + + + + + + CallAction is an abstract class for actions that invoke behavior and receive return values. + + + + Only synchronous call actions can have result pins. + + + OCL + true + + + + + The number and order of argument pins must be the same as the number and order of parameters of the invoked behavior or behavioral feature. Pins are matched to parameters by order. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument pin must be the same as the corresponding parameter of the behavior or behavioral feature. + + + OCL + true + + + + + + If true, the call is synchronous and the caller waits for completion of the invoked behavior. +If false, the call is asynchronous and the caller proceeds immediately and does not expect a return values. + + + + + + + + A list of output pins where the results of performing the invocation are placed. + + + + + + + + A send signal action is an action that creates a signal instance from its inputs, and transmits it to the target object, where it may cause the firing of a state machine transition or the execution of an activity. The argument values are available to the execution of associated behaviors. The requestor continues execution immediately. Any reply message is ignored and is not transmitted to the requestor. If the input is already a signal instance, use a send object action. + + + + The number and order of argument pins must be the same as the number and order of attributes in the signal. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument pin must be the same as the corresponding attribute of the signal. + + + OCL + true + + + + + + The target object to which the signal is sent. + + + + + + + The type of signal transmitted to the target object. + + + + + + + + A call operation action is an action that transmits an operation call request to the target object, where it may cause the invocation of associated behavior. The argument values of the action are available to the execution of the invoked behavior. If the action is marked synchronous, the execution of the call operation action waits until the execution of the invoked behavior completes and a reply transmission is returned to the caller; otherwise execution of the action is complete when the invocation of the operation is established and the execution of the invoked operation proceeds concurrently with the execution of the calling behavior. Any values returned as part of the reply transmission are put on the result output pins of the call operation action. Upon receipt of the reply transmission, execution of the call operation action is complete. + + + + The number of argument pins and the number of owned parameters of the operation of type in and in-out must be equal. + + + OCL + true + + + + + The number of result pins and the number of owned parameters of the operation of type return, out, and in-out must be equal. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument or result pin is derived from the corresponding owned parameter of the operation. + + + + OCL + true + + + + + The type of the target pin must be the same as the type that owns the operation. + + + OCL + true + + + + + + The operation to be invoked by the action execution. + + + + + + + The target object to which the request is sent. The classifier of the target object is used to dynamically determine a behavior to invoke. This object constitutes the context of the execution of the operation. + + + + + + + + A call behavior action is a call action that invokes a behavior directly rather than invoking a behavioral feature that, in turn, results in the invocation of that behavior. The argument values of the action are available to the execution of the invoked behavior. For synchronous calls the execution of the call behavior action waits until the execution of the invoked behavior completes and a result is returned on its output pin. The action completes immediately without a result, if the call is asynchronous. In particular, the invoked behavior may be an activity. + + + + The number of argument pins and the number of parameters of the behavior of type in and in-out must be equal. + + + OCL + true + + + + + The number of result pins and the number of parameters of the behavior of type return, out, and in-out must be equal. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument or result pin is derived from the corresponding parameter of the behavior. + + + + OCL + true + + + + + + The invoked behavior. It must be capable of accepting and returning control. + + + + + + + + An action is a named element that is the fundamental unit of executable functionality. The execution of an action represents some transformation or processing in the modeled system, be it a computer system or otherwise. + + + + + The ordered set of output pins connected to the Action. The action places its results onto pins in this set. + + + + + + + The ordered set of input pins connected to the Action. These are among the total set of inputs. + + + + + + + The classifier that owns the behavior of which this action is a part. + + + + + + + + + The operation compatibleWith takes another multiplicity as input. It checks if one multiplicity is compatible with another. + + + + OCL + result = Integer.allInstances()->forAll(i : Integer | self.includesCardinality(i) implies other.includesCardinality(i)) + + + + + + + + + + The operation is determines if the upper and lower bound of the ranges are the ones given. + + + + OCL + result = (lowerbound = self.lowerbound and upperbound = self.upperbound) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VariableAction is an abstract class for actions that operate on a statically specified variable. + + + + The action must be in the scope of the variable. + + + OCL + self.variable.isAccessibleBy(self) + + + + + + Variable to be read. + + + + + + + + A read variable action is a variable action that retrieves the values of a variable. + + + + The type and ordering of the result output pin of a read-variable action are the same as the type and ordering of the variable. + + + OCL + self.result.type =self.variable.type and self.result.ordering = self.variable.ordering + + + + + The multiplicity of the variable must be compatible with the multiplicity of the output pin. + + + OCL + self.variable.multiplicity.compatibleWith(self.result.multiplicity) + + + + + + Gives the output pin on which the result is put. + + + + + + + + WriteVariableAction is an abstract class for variable actions that change variable values. + + + + The type input pin is the same as the type of the variable. + + + OCL + self.value.type = self.variable.type + + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.value.multiplicity.is(1,1) + + + + + + Value to be added or removed from the variable. + + + + + + + + A clear variable action is a variable action that removes all values of a variable. + + + + + + An add variable value action is a write variable action for adding values to a variable. + + + + Actions adding values to ordered variables must have a single input pin for the insertion point with type UnlimtedNatural and multiplicity of 1..1, otherwise the action has no input pin for the insertion point. + + + OCL + let insertAtPins : Collection = self.insertAt in if self.variable.ordering = #unordered then insertAtPins->size() = 0 else let insertAtPin : InputPin = insertAt->asSequence()->first() in insertAtPins->size() = 1 and insertAtPin.type = UnlimitedNatural and insertAtPin.multiplicity.is(1,1)) endif + + + + + + Specifies whether existing values of the variable should be removed before adding the new value. + + + + + + + Gives the position at which to insert a new value or move an existing value in ordered variables. The types is UnlimitedINatural, but the value cannot be zero. This pin is omitted for unordered variables. + + + + + + + + A remove variable value action is a write variable action that removes values from variables. + + + + Actions removing a value from ordered nonunique variables must have a single removeAt input pin if isRemoveDuplicates is false. It must be of type UnlimitedNatural with multiplicity of 1..1, otherwise the action has no removeAt input pin. + + + OCL + true + + + + + + Specifies whether to remove duplicates of the value in nonunique variables. + + + + + + + Specifies the position of an existing value to remove in ordered nonunique variables. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. + + + + + + + + A raise exception action is an action that causes an exception to occur. The input value becomes the exception object. + + + + + An input pin whose value becomes an exception object. + + + + + + + + An action input pin is a kind of pin that executes an action to determine the values to input to another. + + + + The fromAction of an action input pin must have exactly one output pin. + + + OCL + true + + + + + The fromAction of an action input pin must only have action input pins as input pins. + + + OCL + true + + + + + The fromAction of an action input pin cannot have control or data flows coming into or out of it or its pins. + + + OCL + true + + + + + + The action used to provide values. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An object node is an abstract activity node that is part of defining object flow in an activity. + + + + All edges coming into or going out of object nodes must be object flow edges. + + + OCL + true + + + + + Object nodes are not unique typed elements + + + OCL + isUnique = false + + + + + + + + A control node is an abstract activity node that coordinates flows in an activity. + + + + + + An activity edge is an abstract class for directed connections between two activity nodes. + + + + The source and target of an edge must be in the same activity as the edge. + + + OCL + true + + + + + Activity edges may be owned only by activities or groups. + + + OCL + true + + + + + + Activity containing the edge. + + + + + + + Node from which tokens are taken when they traverse the edge. + + + + + + + Node to which tokens are put when they traverse the edge. + + + + + + + Groups containing the edge. + + + + + + + Inherited edges replaced by this edge in a specialization of the activity. + + + + + + + + A control flow is an edge that starts an activity node after the previous one is finished. + + + + Control flows may not have object nodes at either end, except for object nodes with control type. + + + OCL + true + + + + + + + An object flow is an activity edge that can have objects or data passing along it. + + + + Object flows may not have actions at either end. + + + OCL + true + + + + + Object nodes connected by an object flow, with optionally intervening control nodes, must have compatible types. In particular, the downstream object node type must be the same or a supertype of the upstream object node type. + + + + OCL + true + + + + + Object nodes connected by an object flow, with optionally intervening control nodes, must have the same upper bounds. + + + OCL + true + + + + + + + An initial node is a control node at which flow starts when the activity is invoked. + + + + An initial node has no incoming edges. + + + OCL + true + + + + + Only control edges can have initial nodes as source. + + + OCL + true + + + + + + + An activity final node is a final node that stops all flows in an activity. + + + + + + + All nodes and edges of the group must be in the same activity as the group. + + + OCL + true + + + + + No node or edge in a group may be contained by its subgroups or its containing groups, transitively. + + + OCL + true + + + + + Groups may only be owned by activities or groups. + + + OCL + true + + + + + Edges immediately contained in the group. + + + + + + + + An activity parameter node is an object node for inputs and outputs to activities. + + + + Activity parameter nodes must have parameters from the containing activity. + + + OCL + true + + + + + The type of an activity parameter node is the same as the type of its parameter. + + + OCL + true + + + + + An activity parameter node may have all incoming edges or all outgoing edges, but it must not have both incoming and outgoing edges. + + + OCL + true + + + + + Activity parameter object nodes with no incoming edges and one or more outgoing edges must have a parameter with in or inout direction. + + + + OCL + true + + + + + Activity parameter object nodes with no outgoing edges and one or more incoming edges must have a parameter with out, inout, or return direction. + + + + OCL + true + + + + + + The parameter the object node will be accepting or providing values for. + + + + + + + + + Activity nodes can only be owned by activities or groups. + + + OCL + true + + + + + + Edges that have the node as source. + + + + + + + Edges that have the node as target. + + + + + + + Inherited nodes replaced by this node in a specialization of the activity. + + + + + + + + A pin is an object node for inputs and outputs to actions. + + + + + + + The nodes of the activity must include one ActivityParameterNode for each parameter. + + + OCL + true + + + + + An activity cannot be autonomous and have a classifier or behavioral feature context at the same time. + + + OCL + true + + + + + + If true, this activity must not make any changes to variables outside the activity or to objects. (This is an assertion, not an executable property. It may be used by an execution engine to optimize model execution. If the assertion is violated by the action, then the model is ill-formed.) The default is false (an activity may make nonlocal changes). + + + + + + + Edges expressing flow between nodes of the activity. + + + + + + + + + Value pins have no incoming edges. + + + OCL + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A fork node is a control node that splits a flow into multiple concurrent flows. + + + + A fork node has one incoming edge. + + + OCL + true + + + + + The edges coming into and out of a fork node must be either all object flows or all control flows. + + + OCL + true + + + + + + + A flow final node is a final node that terminates a flow. + + + + + + A central buffer node is an object node for managing flows from multiple sources and destinations. + + + + + + An activity partition is a kind of activity group for identifying actions that have some characteristic in common. + + + + A partition with isDimension = true may not be contained by another partition. + + + OCL + true + + + + + If a partition represents a part, then all the non-external partitions in the same dimension and at the same level of nesting in that dimension must represent parts directly contained in the internal structure of the same classifier. + + + OCL + true + + + + + If a non-external partition represents a classifier and is contained in another partition, then the containing partition must represent a classifier, and the classifier of the subpartition must be nested in the classifier represented by the containing partition, or be at the contained end of a strong composition association with the classifier represented by the containing partition. + + + OCL + true + + + + + If a partition represents a part and is contained by another partition, then the part must be of a classifier represented by the containing partition, or of a classifier that is the type of a part representing the containing partition. + + + OCL + true + + + + + + + Tells whether the partition groups other partitions along a dimension. + + + + + + + Tells whether the partition represents an entity to which the partitioning structure does not apply. + + + + + + + Edges immediately contained in the group. + + + + + + + Nodes immediately contained in the group. + + + + + + + Partitions immediately contained in the partition. + + + + + + + Partition immediately containing the partition. + + + + + + + An element constraining behaviors invoked by nodes in the partition. + + + + + + + + + + Partitions containing the edge. + + + + + + + Specification evaluated at runtime to determine if the edge can be traversed. + + + + + + + Groups containing the edge. + + + + + + + + + + Partitions containing the node. + + + + + + + Groups containing the node. + + + + + + + + A merge node is a control node that brings together multiple alternate flows. It is not used to synchronize concurrent flows but to accept one among several alternate flows. + + + + A merge node has one outgoing edge. + + + OCL + true + + + + + The edges coming into and out of a merge node must be either all object flows or all control flows. + + + OCL + true + + + + + + + A decision node is a control node that chooses between outgoing flows. + + + + A decision node has one incoming edge. + + + OCL + true + + + + + A decision input behavior has zero or one input parameter and one output parameter. Any input parameter must be the same as or a supertype of the type of object tokens coming along the incoming edge. The behavior cannot have side effects. + + + OCL + true + + + + + The edges coming into and out of a decision node must be either all object flows or all control flows. + + + OCL + true + + + + + + Provides input to guard specifications on edges outgoing from the decision node. + + + + + + + + A final node is an abstract control node at which a flow in an activity stops. + + + + A final node has no outgoing edges. + + + OCL + true + + + + + + + + + + A join node is a control node that synchronizes multiple flows. + + + + + + + Nodes immediately contained in the group. + + + + + + + Edges immediately contained in the group. + + + + + + + Activity containing the group. + + + + + + + + + Top-level partitions in the activity. + + + + + + + Top-level groups in the activity. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Join nodes have a Boolean value specification using the names of the incoming edges to specify the conditions under which the join will emit a token. + + + + A join node has one outgoing edge. + + + OCL + self.outgoing->size() = 1 + + + + + If a join node has an incoming object flow, it must have an outgoing object flow, otherwise, it must have an outgoing control flow. + + + OCL + (self.incoming.select(e | e.isTypeOf(ObjectFlow)->notEmpty() implies self.outgoing.isTypeOf(ObjectFlow)) and (self.incoming.select(e | e.isTypeOf(ObjectFlow)->empty() implies self.outgoing.isTypeOf(ControlFlow)) + + + + + + Tells whether tokens having objects with the same identity are combined into one by the join. + + + + + + + A specification giving the conditions under which the join with emit a token. Default is "and". + + + + + + + + A data store node is a central buffer node for non-transient information. + + + + + + Object flows have support for multicast/receive, token selection from object nodes, and transformation of tokens. + + + + An edge with constant weight may not target an object node, or lead to an object node downstream with no intervening actions, that has an upper bound less than the weight. + + + OCL + true + + + + + A transformation behavior has one input parameter and one output parameter. The input parameter must be the same as or a supertype of the type of object token coming from the source end. The output parameter must be the same or a subtype of the type of object token expected downstream. The behavior cannot have side effects. + + + OCL + true + + + + + An object flow may have a selection behavior only if has an object node as a source. + + + OCL + true + + + + + A selection behavior has one input parameter and one output parameter. The input parameter must be a bag of elements of the same as or a supertype of the type of source object node. The output parameter must be the same or a subtype of the type of source object node. The behavior cannot have side effects. + + + OCL + true + + + + + isMulticast and isMultireceive cannot both be true. + + + OCL + true + + + + + Tells whether the objects in the flow are passed by multicasting. + + + + + + + Tells whether the objects in the flow are gathered from respondents to multicasting. + + + + + + + Changes or replaces data tokens flowing along edge. + + + + + + + Selects tokens from a source object node. + + + + + + + + Activity edges can be contained in interruptible regions. + + + + + Number of tokens consumed from the source node on each traversal. + + + + + + + Region that the edge can interrupt. + + + + + + + + Object nodes have support for token selection, limitation on the number of tokens, specifying the state required for tokens, and carrying control values. + + + + If an object node has a selection behavior, then the ordering of the object node is ordered, and vice versa. + + + OCL + true + + + + + A selection behavior has one input parameter and one output parameter. The input parameter must be a bag of elements of the same type as the object node or a supertype of the type of object node. The output parameter must be the same or a subtype of the type of object node. The behavior cannot have side effects. + + + OCL + true + + + + + + Tells whether and how the tokens in the object node are ordered for selection to traverse edges outgoing from the object node. + + + + + + Tells whether the type of the object node is to be treated as control. + + + + + + + The maximum number of tokens allowed in the node. Objects cannot flow into the node if the upper bound is reached. + + + + + + + The required states of the object available at this point in the activity. + + + + + + + Selects tokens for outgoing edges. + + + + + + + + A parameter set is an element that provides alternative sets of inputs or outputs that a behavior may use. + + + + The parameters in a parameter set must all be inputs or all be outputs of the same parameterized entity, and the parameter set is owned by that entity. + + + OCL + true + + + + + If a behavior has input parameters that are in a parameter set, then any inputs that are not in a parameter set must be streaming. Same for output parameters. + + + OCL + true + + + + + Two parameter sets cannot have exactly the same set of parameters. + + + OCL + true + + + + + + Parameters in the parameter set. + + + + + + + Constraint that should be satisfied for the owner of the parameters in an input parameter set to start execution using the values provided for those parameters, or the owner of the parameters in an output parameter set to end execution providing the values for those parameters, if all preconditions and conditions on input parameter sets were satisfied. + + + + + + + + + If true, all invocations of the activity are handled by the same execution. + + + + + + + + Parameters have support for streaming, exceptions, and parameter sets. + + + + A parameter cannot be a stream and exception at the same time. + + + OCL + true + + + + + An input parameter cannot be an exception. + + + OCL + true + + + + + Reentrant behaviors cannot have stream parameters. + + + OCL + true + + + + + Only in and inout parameters may have a delete effect. Only out, inout, and return parameters may have a create effect. + + + OCL + true + + + + + Tells whether an output parameter may emit a value to the exclusion of the other outputs. + + + + + + + Tells whether an input parameter may accept values while its behavior is executing, or whether an output parameter post values while the behavior is executing. + + + + + + + Specifies the effect that the owner of the parameter has on values passed in or out of the parameter. + + + + + + + The parameter sets containing the parameter. See ParameterSet. + + + + + + + + An action has pre- and post-conditions. + + + + + Constraint that must be satisfied when execution is started. + + + + + + + Constraint that must be satisfied when executed is completed. + + + + + + + + An interruptible activity region is an activity group that supports termination of tokens flowing in the portions of an activity. + + + + Interrupting edges of a region must have their source node in the region and their target node outside the region in the same activity containing the region. + + + + OCL + true + + + + + + The edges leaving the region that will abort other tokens flowing in the region. + + + + + + + Nodes immediately contained in the group. + + + + + + + + + Interruptible regions containing the node. + + + + + + + Groups containing the node. + + + + + + + + A behavioral feature owns zero or more parameter sets. + + + + + + The ParameterSets owned by this BehavioralFeature. + + + + + + + + A behavior owns zero or more parameter sets. + + + + + The ParameterSets owned by this Behavior. + + + + + + + + + Control pins have a control type + + + OCL + isControl implies isControlType + + + + + Tells whether the pins provide data to the actions, or just controls when it executes it. + + + + + + + + + Nodes immediately contained in the group. + + + + + + + + ObjectNodeOrderingKind is an enumeration indicating queuing order within a node. + + + + Indicates that object node tokens are unordered. + + + + + Indicates that object node tokens are ordered. + + + + + Indicates that object node tokens are queued in a last in, first out manner. + + + + + Indicates that object node tokens are queued in a first in, first out manner. + + + + + + The datatype ParameterEffectKind is an enumeration that indicates the effect of a behavior on values passed in or out of its parameters. + + + + Indicates that the behavior creates values. + + + + + Indicates that the behavior reads values. + + + + + Indicates that the behavior updates values. + + + + + Indicates that the behavior deletes values. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Variables are elements for passing data between actions indirectly. A local variable stores values shared by the actions within a structured activity group but not accessible outside it. The output of an action may be written to a variable and read for the input to a subsequent action, which is effectively an indirect data flow path. Because there is no predefined relationship between actions that read and write variables, these actions must be sequenced by control flows to prevent race conditions that may occur between actions that read or write the same variable. + + + + A variable is owned by a StructuredNode or Activity, but not both. + + + OCL + true + + + + + + + A structured activity node that owns the variable. + + + + + + + An activity that owns the variable. + + + + + + + The isAccessibleBy() operation is not defined in standard UML. Implementations should define it to specify which actions can access a variable. + + + + + OCL + result = true + + + + + + + + + + + A structured activity node is an executable activity node that may have an expansion into subordinate nodes as an activity group. The subordinate nodes must belong to only one structured activity node, although they may be nested. + + + + + + + A variable defined in the scope of the structured activity node. It has no value and may not be accessed + + + + + + + Nodes immediately contained in the group. + + + + + + + Activity immediately containing the node. + + + + + + + + A conditional node is a structured activity node that represents an exclusive choice among some number of alternatives. + + + + + If true, the modeler asserts that at most one test will succeed. + + + + + + + + + If true, the modeler asserts that at least one test will succeed. + + + + + + + + + Set of clauses composing the conditional. + + + + + + + + A loop node is a structured activity node that represents a loop with setup, test, and body sections. + + + + + If true, the test is performed before the first execution of the body. +If false, the body is executed once before the test is performed. + + + + + + + + + + The set of nodes and edges that perform the repetitive computations of the loop. The body section is executed as long as the test section produces a true value. + + + + + + + The set of nodes and edges that initialize values or perform other setup computations for the loop. + + + + + + + An output pin within the test fragment the value of which is examined after execution of the test to determine whether to execute the loop body. + + + + + + + The set of nodes, edges, and designated value that compute a Boolean value to determine if another execution of the body will be performed. + + + + + + + + A clause is an element that represents a single branch of a conditional construct, including a test and a body section. The body section is executed only if (but not necessarily if) the test section evaluates true. + + + + The decider output pin must be for the test body or a node contained by the test body as a structured node. + + + OCL + true + + + + + + A nested activity fragment with a designated output pin that specifies the result of the test. + + + + + + + A nested activity fragment that is executed if the test evaluates to true and the clause is chosen over any concurrent clauses that also evaluate to true. + + + + + + + A set of clauses whose tests must all evaluate false before the current clause can be tested. + + + + + + + A set of clauses which may not be tested unless the current clause tests false. + + + + + + + An output pin within the test fragment the value of which is examined after execution of the test to determine whether the body should be executed. + + + + + + + + + + Top-level structured nodes in the activity. + + + + + + + Top-level variables in the activity. + + + + + + + Top-level groups in the activity. + + + + + + + Nodes coordinated by the activity. + + + + + + + + + Activity nodes may be owned by at most one structured node. + + + OCL + true + + + + + + Structured activity node containing the node. + + + + + + + Groups containing the node. + + + + + + + Activity containing the node. + + + + + + + + An executable node is an abstract class for activity nodes that may be executed. It is used as an attachment point for exception handlers. + + + + + + A sequence node is a structured activity node that executes its actions in order. + + + + + An ordered set of executable nodes. + + + + + + + + + + + + + Nodes immediately contained in the group. + + + + + + + Activity containing the group. + + + + + + + + + Input pins may have outgoing edges only when they are on actions that are structured nodes, and these edges must target a node contained by the structured node. + + + OCL + true + + + + + + + Output pins may have incoming edges only when they are on actions that are structured nodes, and these edges may not target a node contained by the structured node. + + + OCL + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An expansion node is an object node used to indicate a flow across the boundary of an expansion region. A flow into a region contains a collection that is broken into its individual elements inside the region, which is executed once per element. A flow out of a region combines individual elements into a collection for use outside the region. + + + + + The expansion region for which the node is an output. + + + + + + + The expansion region for which the node is an input. + + + + + + + + An expansion region is a structured activity region that executes multiple times corresponding to elements of an input collection. + + + + An ExpansionRegion must have one or more argument ExpansionNodes and zero or more result ExpansionNodes. + + + OCL + true + + + + + + The way in which the executions interact: +parallel: all interactions are independent +iterative: the interactions occur in order of the elements +stream: a stream of values flows into a single execution + + + + + + + An object node that accepts a separate element of the output collection during each of the multiple executions of the region. The values are formed into a collection that is available when the execution of the region is complete. + + + + + + + An object node that holds a separate element of the input collection during each of the multiple executions of the region. + + + + + + + + An executable node is an abstract class for activity nodes that may be executed. It is used as an attachment point for exception handlers. + + + + + A set of exception handlers that are examined if an uncaught exception propagates to the outer level of the executable node. + + + + + + + + An exception handler is an element that specifies a body to execute in case the specified exception occurs during the execution of the protected node. + + + + The exception handler and its input object node are not the source or target of any edge. + + + OCL + true + + + + + The result pins of the exception handler body must correspond in number and types to the result pins of the protected node. + + + OCL + true + + + + + The handler body has one input, and that input is the same as the exception input. + + + OCL + true + + + + + An edge that has a source in an exception handler structured node must have its target in the handler also, and vice versa. + + + OCL + true + + + + + + The node protected by the handler. The handler is examined if an exception propagates to the outside of the node. + + + + + + + A node that is executed if the handler satisfies an uncaught exception. + + + + + + + An object node within the handler body. When the handler catches an exception, the exception token is placed in this node, causing the body to execute. + + + + + + + The kind of instances that the handler catches. If an exception occurs whose type is any of the classifiers in the set, the handler catches the exception and executes its body. + + + + + + + + ExpansionKind is an enumeration type used to specify how multiple executions of an expansion region interact. + + + + The executions are independent. They may be executed concurrently. + + + + + The executions are dependent and must be executed one at a time, in order of the collection elements. + + + + + A stream of collection elements flows into a single execution, in order of the collection elements. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The result output pins have no incoming edges. + + + OCL + true + + + + + + A list of output pins that constitute the data flow outputs of the conditional. + + + + + + + + Because of the concurrent nature of the execution of actions within and across activities, it can be difficult to guarantee the consistent access and modification of object memory. In order to avoid race conditions or other concurrency-related problems, it is sometimes necessary to isolate the effects of a group of actions from the effects of actions outside the group. This may be indicated by setting the mustIsolate attribute to true on a structured activity node. If a structured activity node is "isolated," then any object used by an action within the node cannot be accessed by any action outside the node until the structured activity node as a whole completes. Any concurrent actions that would result in accessing such objects are required to have their execution deferred until the completion of the node. + + + + The edges owned by a structured node must have source and target nodes in the structured node, and vice versa. + + + OCL + true + + + + + + + If true, then the actions in the node execute in isolation from actions outside the node. + + + + + + + + + Edges immediately contained in the structured node. + + + + + + + + + Loop variable inputs must not have outgoing edges. + + + OCL + true + + + + + The bodyOutput pins are output pins on actions in the body of the loop node. + + + OCL + true + + + + + The result output pins have no incoming edges. + + + OCL + true + + + + + + A list of output pins that constitute the data flow output of the entire loop. + + + + + + + A list of output pins that hold the values of the loop variables during an execution of the loop. When the test fails, the values are movied to the result pins of the loop. + + + + + + + A list of output pins within the body fragment the values of which are moved to the loop variable pins after completion of execution of the body, before the next iteration of the loop begins or before the loop exits. + + + + + + + A list of values that are moved into the loop variable pins before the first iteration of the loop. + + + + + + + + + The bodyOutput pins are output pins on actions in the body of the clause. + + + OCL + true + + + + + A list of output pins within the body fragment whose values are moved to the result pins of the containing conditional node after execution of the clause body. + + + + + + + + + Activity edges may be owned by at most one structured node. + + + OCL + true + + + + + Structured activity node containing the edge. + + + + + + + Groups containing the edge. + + + + + + + + + Edges immediately contained in the group. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An activity is the specification of parameterized behavior as the coordinated sequencing of subordinate units whose individual elements are actions. + + + + The groups of an activity have no supergroups. + + + OCL + true + + + + + + Nodes coordinated by the activity. + + + + + + + Top-level groups in the activity. + + + + + + + + ActivityGroup is an abstract class for defining sets of nodes and edges in an activity. + + + + + Nodes immediately contained in the group. + + + + + + + Activity containing the group. + + + + + + + Groups immediately contained in the group. + + + + + + + Group immediately containing the group. + + + + + + + + An action represents a single step within an activity, that is, one that is not further decomposed within the activity. + + + + + + ActivityNode is an abstract class for points in the flow of an activity connected by edges. + + + + + Activity containing the node. + + + + + + + Groups containing the node. + + + + + + + + + + + + + + + + + + + + + + + The default multiplicity of an extension end is 0..1. + + + + + + + + + + + + + + + + + An information item is an abstraction of all kinds of information that can be exchanged between objects. It is a kind of classifier intended for representing information in a very abstract way, one which cannot be instantiated. + + + + The sources and targets of an information item (its related information flows) must designate subsets of the sources and targets of the representation information item, if any.The Classifiers that can realize an information item can only be of the following kind: Class, Interface, InformationItem, Signal, Component. + + + OCL + (self.represented->select(p | p->oclIsKindOf(InformationItem))->forAll(p | p.informationFlow.source->forAll(q | self.informationFlow.source->include(q)) and p.informationFlow.target->forAll(q | self.informationFlow.target->include(q)))) and (self.represented->forAll(p | p->oclIsKindOf(Class) or oclIsKindOf(Interface) or oclIsKindOf(InformationItem) or oclIsKindOf(Signal) or oclIsKindOf(Component))) + + + + + An informationItem has no feature, no generalization, and no associations. + + + OCL + self.generalization->isEmpty() and self.feature->isEmpty() + + + + + It is not instantiable. + + + OCL + isAbstract + + + + + + Determines the classifiers that will specify the structure and nature of the information. An information item represents all its represented classifiers. + + + + + + + + An information flow specifies that one or more information items circulates from its sources to its targets. Information flows require some kind of information channel for transmitting information items from the source to the destination. An information channel is represented in various ways depending on the nature of its sources and targets. It may be represented by connectors, links, associations, or even dependencies. For example, if the source and destination are parts in some composite structure such as a collaboration, then the information channel is likely to be represented by a connector between them. Or, if the source and target are objects (which are a kind of instance specification), they may be represented by a link that joins the two, and so on. + + + + The sources and targets of the information flow can only be one of the following kind: Actor, Node, UseCase, Artifact, Class, Component, Port, Property, Interface, Package, ActivityNode, ActivityPartition and InstanceSpecification except when its classifier is a relationship (i.e. it represents a link). + + + OCL + (self.source->forAll(p | p->oclIsKindOf(Actor) or oclIsKindOf(Node) or oclIsKindOf(UseCase) or oclIsKindOf(Artifact) or oclIsKindOf(Class) or oclIsKindOf(Component) or oclIsKindOf(Port) or oclIsKindOf(Property) or oclIsKindOf(Interface) or oclIsKindOf(Package) or oclIsKindOf(ActivityNode) or oclIsKindOf(ActivityPartition) or oclIsKindOf(InstanceSpecification))) and (self.target->forAll(p | p->oclIsKindOf(Actor) or oclIsKindOf(Node) or oclIsKindOf(UseCase) or oclIsKindOf(Artifact) or oclIsKindOf(Class) or oclIsKindOf(Component) or oclIsKindOf(Port) or oclIsKindOf(Property) or oclIsKindOf(Interface) or oclIsKindOf(Package) or oclIsKindOf(ActivityNode) or oclIsKindOf(ActivityPartition) or oclIsKindOf(InstanceSpecification))) + + + + + The sources and targets of the information flow must conform with the sources and targets or conversely the targets and sources of the realization relationships. + + + OCL + true + + + + + An information flow can only convey classifiers that are allowed to represent an information item. + + + + OCL + self.conveyed.represented->forAll(p | p->oclIsKindOf(Class) or oclIsKindOf(Interface) or oclIsKindOf(InformationItem) or oclIsKindOf(Signal) or oclIsKindOf(Component)) + + + + + + + Determines which Relationship will realize the specified flow + + + + + + + Specifies the information items that may circulate on this information flow. + + + + + + + Defines from which source the conveyed InformationItems are initiated. + + + + + + + Defines to which target the conveyed InformationItems are directed. + + + + + + + Determines which ActivityEdges will realize the specified flow. + + + + + + + Determines which Connectors will realize the specified flow. + + + + + + + Determines which Messages will realize the specified flow. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A model captures a view of a physical system. It is an abstraction of the physical system, with a certain purpose. This purpose determines what is to be included in the model and what is irrelevant. Thus the model completely describes those aspects of the physical system that are relevant to the purpose of the model, at the appropriate level of detail. + + + + + The name of the viewpoint that is expressed by a model (This name may refer to a profile definition). + + + + + + + + + + + + A template signature bundles the set of formal template parameters for a templated element. + + + + Parameters must own the elements they parameter or those elements must be owned by the element being templated. + + + OCL + templatedElement.ownedElement->includesAll(parameter.parameteredElement - parameter.ownedParameteredElement) + + + + + + The ordered set of all formal template parameters for this template signature. + + + + + + + The formal template parameters that are owned by this template signature. + + + + + + + The element that owns this template signature. + + + + + + + + A named element supports using a string expression to specify its name. This allows names of model elements to involve template parameters. The actual name is evaluated from the string expression only when it is sensible to do so (e.g., when a template is bound). + + + + + The string expression used to define the name of this named element. + + + + + + + + A template parameter exposes a parameterable element as a formal template parameter of a template. + + + + The default must be compatible with the formal template parameter. + + + OCL + default->notEmpty() implies default->isCompatibleWith(parameteredElement) + + + + + + The template signature that owns this template parameter. + + + + + + + The element exposed by this template parameter. + + + + + + + The element that is owned by this template parameter. + + + + + + + The element that is the default for this formal template parameter. + + + + + + + The element that is owned by this template parameter for the purpose of providing a default. + + + + + + + + An expression that specifies a string value that is derived by concatenating a set of sub string expressions, some of which might be template parameters. + + + + All the operands of a StringExpression must be LiteralStrings + + + OCL + operand->forAll (op | op.oclIsKindOf (LiteralString)) + + + + + If a StringExpression has sub-expressions, it cannot have operands and vice versa (this avoids the problem of having to +define a collating sequence between operands and subexpressions). + + + + OCL + if subExpression->notEmpty() then operand->isEmpty() else operand->notEmpty() + + + + + + + The StringExpressions that constitute this StringExpression. + + + + + + + The string expression of which this expression is a substring. + + + + + + + The query stringValue() returns the string that concatenates, in order, all the component string literals of all the subexpressions that are part of the StringExpression. + + + + + OCL + result = if subExpression->notEmpty() then subExpression->iterate(se; stringValue = ‘| stringValue.concat(se.stringValue())) else operand->iterate()(op; stringValue = ‘ | stringValue.concat(op.value)) + + + + + + + + + + A template binding represents a relationship between a templateable element and a template. A template binding specifies the substitutions of actual parameters for the formal parameters of the template. + + + + Each parameter substitution must refer to a formal template parameter of the target template signature. + + + OCL + parameterSubstitution->forAll(b | template.parameter->includes(b.formal)) + + + + + A binding contains at most one parameter substitution for each formal template parameter of the target template signature. + + + OCL + template.parameter->forAll(p | parameterSubstitution->select(b | b.formal = p)->size() <= 1) + + + + + + The element that is bound by this binding. + + + + + + + The template signature for the template that is the target of the binding. + + + + + + + The parameter substitutions owned by this template binding. + + + + + + + + A template parameter substitution relates the actual parameter(s) to a formal template parameter as part of a template binding. + + + + The actual parameter must be compatible with the formal template parameter, e.g. the actual parameter for a class template parameter must be a class. + + + OCL + actual->forAll(a | a.isCompatibleWith(formal.parameteredElement)) + + + + + + The formal template parameter that is associated with this substitution. + + + + + + + The optional bindings from this element to templates. + + + + + + + The elements that are the actual parameters for this substitution. + + + + + + + The actual parameters that are owned by this substitution. + + + + + + + + A templateable element is an element that can optionally be defined as a template and bound to other templates. + + + + + The optional bindings from this element to templates. + + + + + + + The optional template signature specifying the formal template parameters. + + + + + + + The query parameterableElements() returns the set of elements that may be used as the parametered elements for a template parameter of this templateable element. By default, this set includes all the owned elements. Subclasses may override this operation if they choose to restrict the set of parameterable elements. + + + + OCL + result = allOwnedElements->select(oclIsKindOf(ParameterableElement)) + + + + + + + + + + The query isTemplate() returns whether this templateable element is actually a template. + + + + OCL + result = ownedTemplateSignature->notEmpty() + + + + + + + + + + A parameterable element is an element that can be exposed as a formal template parameter for a template, or specified as an actual parameter in a binding of a template. + + + + + The template parameter that exposes this element as a formal parameter. + + + + + + + The formal template parameter that owns this element. + + + + + + + The query isCompatibleWith() determines if this parameterable element is compatible with the specified parameterable element. By default parameterable element P is compatible with parameterable element Q if the kind of P is the same or a subtype as the kind of Q. Subclasses should override this operation to specify different compatibility constraints. + + + + OCL + result = p->oclIsKindOf(self.oclType) + + + + + + + + + + The query isTemplateParameter() determines if this parameterable element is exposed as a formal template parameter. + + + + OCL + result = templateParameter->notEmpty() + + + + + + + + + + Property specializes ParameterableElement to specify that a property can be exposed as a formal template parameter, and provided as an actual parameter in a binding of a template. + + + + A binding of a property template parameter representing an attribute must be to an attribute. + + + OCL + (isAttribute(self) and (templateParameterSubstitution->notEmpty()) implies (templateParameterSubstitution->forAll(ts | isAttribute(ts.formal))) + + + + + + + The query isCompatibleWith() determines if this parameterable element is compatible with the specified parameterable element. By default parameterable element P is compatible with parameterable element Q if the kind of P is the same or a subtype as the kind of Q. In addition, for properties, the type must be conformant with the type of the specified parameterable element. + + + + + OCL + result = p->oclIsKindOf(self.oclType) and self.type.conformsTo(p.oclAsType(TypedElement).type) + + + + + + + + + + + ValueSpecification specializes ParameterableElement to specify that a value specification can be exposed as a formal template parameter, and provided as an actual parameter in a binding of a template. + + + + + The query isCompatibleWith() determines if this parameterable element is compatible with the specified parameterable element. By default parameterable element P is compatible with parameterable element Q if the kind of P is the same or a subtype as the kind of Q. In addition, for ValueSpecification, the type must be conformant with the type of the specified parameterable element. + + + + + OCL + result = p->oclIsKindOf(self.oclType) and self.type.conformsTo(p.oclAsType(TypedElement).type) + + + + + + + + + + + Operation specializes TemplateableElement in order to support specification of template operations and bound operations. Operation specializes ParameterableElement to specify that an operation can be exposed as a formal template parameter, and provided as an actual parameter in a binding of a template. + + + + + + The template parameter that exposes this element as a formal parameter. + + + + + + + + An operation template parameter exposes an operation as a formal parameter for a template. + + + + + The operation for this template parameter. + + + + + + + + Packageable elements are able to serve as a template parameter. + + + + + + Classifier is defined to be a kind of templateable element so that a classifier can be parameterized. It is also defined to be a kind of parameterable element so that a classifier can be a formal template parameter. + + + + + + + The optional template signature specifying the formal template parameters. + + + + + + + The template parameter that exposes this element as a formal parameter. + + + + + + + The query isTemplate() returns whether this templateable element is actually a template. + + + + OCL + result = oclAsType(TemplatableElement).isTemplate() or general->exists(g | g.isTemplate()) + + + + + + + + + + A classifier template parameter exposes a classifier as a formal template parameter. + + + + If "allowSubstitutable" is true, then there must be a constrainingClassifier. + + + OCL + allowSubstitutable implies constrainingClassifier->notEmpty() + + + + + + Constrains the required relationship between an actual parameter and the parameteredElement for this formal parameter. + + + + + + + The parameterable classifier for this template parameter. + + + + + + + The classifier that is used by default if no argument is provided during template binding. If this property is empty, then there is no default. + + + + + + + The classifier that constrains the argument that can be used for the parameter. If the allowSubstitutable attribute is true, then any classifier that is compatible with this constraining classifier can be substituted, otherwise it must be either this classifier or one of its subclasses. If this property is empty, there are no constraints on the classifier that can be used as an argument. + + + + + + + + A redefinable template signature supports the addition of formal template parameters in a specialization of a template classifier. + + + + The inherited parameters are the parameters of the extended template signature. + + + OCL + if extendedSignature->isEmpty() then Set{} else extendedSignature.parameter endif + + + + + + + The classifier that owns this template signature. + + + + + + + The template signature that is extended by this template signature. + + + + + + + The formal template parameters of the extendedSignature. + + + + + + + The query isConsistentWith() specifies, for any two RedefinableTemplateSignatures in a context in which redefinition is possible, whether redefinition would be logically consistent. A redefining template signature is always consistent with a redefined template signature, since redefinition only adds new formal parameters. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = redefinee.oclIsKindOf(RedefineableTemplateSignature) + + + + + + + + + + + A connectable element may be exposed as a connectable element template parameter. + + + + + The ConnectableElementTemplateParameter for this ConnectableElement parameter. + + + + + + + + A connectable element template parameter exposes a connectable element as a formal parameter for a template. + + + + + The ConnectableElement for this template parameter. + + + + + + + + Package specializes TemplateableElement and PackageableElement specializes ParameterableElement to specify that a package can be used as a template and a PackageableElement as a template parameter. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An element is a constituent of a model. As such, it has the capability of owning other elements. + + + + An element may not directly or indirectly own itself. + + + OCL + not self.allOwnedElements()->includes(self) + + + + + Elements that must be owned must have an owner. + + + OCL + self.mustBeOwned() implies owner->notEmpty() + + + + + The Elements owned by this element. + + + + + + + The Element that owns this element. + + + + + + + The Comments owned by this element. + + + + + + + The query allOwnedElements() gives all of the direct and indirect owned elements of an element. + + + + OCL + result = ownedElement->union(ownedElement->collect(e | e.allOwnedElements())) + + + + + + + + + + The query mustBeOwned() indicates whether elements of this type must have an owner. Subclasses of Element that do not require an owner must override this operation. + + + + OCL + result = true + + + + + + + + + + A comment is a textual annotation that can be attached to a set of elements. + + + + + Specifies a string that is the comment. + + + + + + + + References the Element(s) being commented. + + + + + + + + A directed relationship represents a relationship between a collection of source model elements and a collection of target model elements. + + + + + Specifies the sources of the DirectedRelationship. + + + + + + + Specifies the targets of the DirectedRelationship. + + + + + + + + A named element is an element in a model that may have a name. + + + + If there is no name, or one of the containing namespaces has no name, there is no qualified name. + + + OCL + (self.name->isEmpty() or self.allNamespaces()->select(ns | ns.name->isEmpty())->notEmpty()) implies self.qualifiedName->isEmpty() + + + + + When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces. + + + OCL + (self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty()) implies self.qualifiedName = self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result)) + + + + + If a NamedElement is not owned by a Namespace, it does not have a visibility. + + + OCL + namespace->isEmpty() implies visibility->isEmpty() + + + + + + The name of the NamedElement. + + + + + + + + Determines where the NamedElement appears within different Namespaces within the overall model, and its accessibility. + + + + + + + A name which allows the NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from the names of the containing namespaces starting at the root of the hierarchy and ending with the name of the NamedElement itself. + + + + + + + + Specifies the namespace that owns the NamedElement. + + + + + + + The query allNamespaces() gives the sequence of namespaces in which the NamedElement is nested, working outwards. + + + + OCL + result = if self.namespace->isEmpty() then Sequence{} else self.namespace.allNamespaces()->prepend(self.namespace) endif + + + + + + + + + + The query isDistinguishableFrom() determines whether two NamedElements may logically co-exist within a Namespace. By default, two named elements are distinguishable if (a) they have unrelated types or (b) they have related types but different names. + + + + OCL + result = if self.oclIsKindOf(n.oclType) or n.oclIsKindOf(self.oclType) then ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->isEmpty() else true endif + + + + + + + + + + + The query separator() gives the string that is used to separate names when constructing a qualified name. + + + + OCL + result = '::' + + + + + + + + + + A packageable element indicates a named element that may be owned directly by a package. + + + + + Indicates that packageable elements must always have a visibility, i.e., visibility is not optional. + + + + + + + An opaque expression is an uninterpreted textual statement that denotes a (possibly empty) set of values when evaluated in a context. + + + + If the language attribute is not empty, then the size of the body and language arrays must be the same. + + + OCL + language->notEmpty() implies (body->size() = language->size()) + + + + + + The text of the expression, possibly in multiple languages. + + + + + + + + Specifies the languages in which the expression is stated. The interpretation of the expression body depends on the languages. If the languages are unspecified, they might be implicit from the expression body or the context. Languages are matched to body strings by order. + + + + + + + + The query value() gives an integer value for an expression intended to produce one. + + + + OCL + self.isIntegral() + + + + + OCL + true + + + + + + + + + The query isIntegral() tells whether an expression is intended to produce an integer. + + + + OCL + result = false + + + + + + + + + The query isPositive() tells whether an integer expression has a positive value. + + + + OCL + self.isIntegral() + + + + + OCL + result = false + + + + + + + + + The query isNonNegative() tells whether an integer expression has a non-negative value. + + + + OCL + self.isIntegral() + + + + + OCL + result = false + + + + + + + + + + A literal specification identifies a literal constant being modeled. + + + + + + A literal integer is a specification of an integer value. + + + + + The specified Integer value. + + + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + + + The query integerValue() gives the value. + + + + OCL + result = value + + + + + + + + + + A literal string is a specification of a string value. + + + + + The specified String value. + + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + + + The query stringValue() gives the value. + + + + OCL + result = value + + + + + + + + + + A literal Boolean is a specification of a Boolean value. + + + + + The specified Boolean value. + + + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + + + The query booleanValue() gives the value. + + + + OCL + result = value + + + + + + + + + + A literal null specifies the lack of a value. + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + + + The query isNull() returns true. + + + + OCL + result = true + + + + + + + + + + A constraint is a condition or restriction expressed in natural language text or in a machine readable language for the purpose of declaring some of the semantics of an element. + + + + The value specification for a constraint must evaluate to a Boolean value. + + + OCL + true + + + + + Evaluating the value specification for a constraint must not have side effects. + + + OCL + true + + + + + A constraint cannot be applied to itself. + + + OCL + not constrainedElement->includes(self) + + + + + + The ordered set of Elements referenced by this Constraint. + + + + + + + A condition that must be true when evaluated in order for the constraint to be satisfied. + + + + + + + Specifies the namespace that owns the NamedElement. + + + + + + + + An element import identifies an element in another package, and allows the element to be referenced using its name without a qualifier. + + + + The visibility of an ElementImport is either public or private. + + + OCL + self.visibility = #public or self.visibility = #private + + + + + An importedElement has either public visibility or no visibility at all. + + + OCL + self.importedElement.visibility.notEmpty() implies self.importedElement.visibility = #public + + + + + + Specifies the visibility of the imported PackageableElement within the importing Package. The default visibility is the same as that of the imported element. If the imported element does not have a visibility, it is possible to add visibility to the element import. + + + + + + Specifies the name that should be added to the namespace of the importing package in lieu of the name of the imported packagable element. The aliased name must not clash with any other member name in the importing package. By default, no alias is used. + + + + + + + + Specifies the PackageableElement whose name is to be added to a Namespace. + + + + + + + Specifies the Namespace that imports a PackageableElement from another Package. + + + + + + + The query getName() returns the name under which the imported PackageableElement will be known in the importing namespace. + + + + OCL + result = if self.alias->notEmpty() then self.alias else self.importedElement.name endif + + + + + + + + + + A multiplicity is a definition of an inclusive interval of non-negative integers beginning with a lower bound and ending with a (possibly infinite) upper bound. A multiplicity element embeds this information to specify the allowable cardinalities for an instantiation of this element. + + + + A multiplicity must define at least one valid cardinality that is greater than zero. + + + OCL + upperBound()->notEmpty() implies upperBound() > 0 + + + + + The lower bound must be a non-negative integer literal. + + + OCL + lowerBound()->notEmpty() implies lowerBound() >= 0 + + + + + The upper bound must be greater than or equal to the lower bound. + + + OCL + (upperBound()->notEmpty() and lowerBound()->notEmpty()) implies upperBound() >= lowerBound() + + + + + If a non-literal ValueSpecification is used for the lower or upper bound, then evaluating that specification must not have side effects. + + + OCL + true + + + + + If a non-literal ValueSpecification is used for the lower or upper bound, then that specification must be a constant expression. + + + OCL + true + + + + + + For a multivalued multiplicity, this attribute specifies whether the values in an instantiation of this element are sequentially ordered. + + + + + + + For a multivalued multiplicity, this attributes specifies whether the values in an instantiation of this element are unique. + + + + + + + Specifies the upper bound of the multiplicity interval. + + + + + + + + + Specifies the lower bound of the multiplicity interval. + + + + + + + + + The specification of the upper bound for this multiplicity. + + + + + + + The specification of the lower bound for this multiplicity. + + + + + + + The derived lower attribute must equal the lowerBound. + + + + OCL + result = lowerBound() + + + + + + + + + The derived upper attribute must equal the upperBound. + + + + OCL + result = upperBound() + + + + + + + + + The query isMultivalued() checks whether this multiplicity has an upper bound greater than one. + + + + OCL + upperBound()->notEmpty() + + + + + OCL + result = upperBound() > 1 + + + + + + + + + The query includesCardinality() checks whether the specified cardinality is valid for this multiplicity. + + + + OCL + upperBound()->notEmpty() and lowerBound()->notEmpty() + + + + + OCL + result = (lowerBound() <= C) and (upperBound() >= C) + + + + + + + + + + + + The query includesMultiplicity() checks whether this multiplicity includes all the cardinalities allowed by the specified multiplicity. + + + + OCL + self.upperBound()->notEmpty() and self.lowerBound()->notEmpty() and M.upperBound()->notEmpty() and M.lowerBound()->notEmpty() + + + + + OCL + result = (self.lowerBound() <= M.lowerBound()) and (self.upperBound() >= M.upperBound()) + + + + + + + + + + The query lowerBound() returns the lower bound of the multiplicity as an integer. + + + + OCL + result = if lowerValue->isEmpty() then 1 else lowerValue.integerValue() endif + + + + + + + + + The query upperBound() returns the upper bound of the multiplicity for a bounded multiplicity as an unlimited natural. + + + + OCL + result = if upperValue->isEmpty() then 1 else upperValue.unlimitedValue() endif + + + + + + + + + + A typed element has a type. + + + + + The type of the TypedElement. + + + + + + + + A classifier is a classification of instances - it describes a set of instances that have features in common. A classifier can specify a generalization hierarchy by referencing its general classifiers. + + + + Generalization hierarchies must be directed and acyclical. A classifier can not be both a transitively general and transitively specific classifier of the same classifier. + + + OCL + not self.allParents()->includes(self) + + + + + A classifier may only specialize classifiers of a valid type. + + + OCL + self.parents()->forAll(c | self.maySpecializeType(c)) + + + + + + + + If true, the Classifier does not provide a complete declaration and can typically not be instantiated. An abstract classifier is intended to be used by other classifiers e.g. as the target of general metarelationships or generalization relationships. + + + + + + + + Specifies the Generalization relationships for this Classifier. These Generalizations navigaten to more general classifiers in the generalization hierarchy. + + + + + + + Specifies each feature defined in the classifier. + + + + + + + Specifies all elements inherited by this classifier from the general classifiers. + + + + + + + Refers to all of the Properties that are direct (i.e. not inherited or imported) attributes of the classifier. + + + + + + + References the Classifiers that are redefined by this Classifier. + + + + + + + Specifies the general Classifiers for this Classifier. + + + + + + + The general classifiers are the classifiers referenced by the generalization relationships. + + + + OCL + result = self.parents() + + + + + + + + + + The inheritedMember association is derived by inheriting the inheritable members of the parents. + + + + OCL + result = self.inherit(self.parents()->collect(p | p.inheritableMembers(self)) + + + + + + + + + + The query allFeatures() gives all of the features in the namespace of the classifier. In general, through mechanisms such as inheritance, this will be a larger set than feature. + + + + OCL + result = member->select(oclIsKindOf(Feature)) + + + + + + + + + + The query parents() gives all of the immediate ancestors of a generalized Classifier. + + + + OCL + result = generalization.general + + + + + + + + + + The query inheritableMembers() gives all of the members of a classifier that may be inherited in one of its descendants, subject to whatever visibility restrictions apply. + + + + OCL + c.allParents()->includes(self) + + + + + OCL + c.allParents()->includes(self) + + + + + OCL + result = member->select(m | c.hasVisibilityOf(m)) + + + + + + + + + + + The query hasVisibilityOf() determines whether a named element is visible in the classifier. By default all are visible. It is only called when the argument is something owned by a parent. + + + + OCL + self.allParents()->collect(c | c.member)->includes(n) + + + + + OCL + result = if (self.inheritedMember->includes(n)) then (n.visibility <> #private) else true + + + + + + + + + + The query conformsTo() gives true for a classifier that defines a type that conforms to another. This is used, for example, in the specification of signature conformance for operations. + + + + OCL + result = (self=other) or (self.allParents()->includes(other)) + + + + + + + + + + The query inherit() defines how to inherit a set of elements. Here the operation is defined to inherit them all. It is intended to be redefined in circumstances where inheritance is affected by redefinition. + + + + OCL + result = inhs + + + + + + + + + + + + + + The query maySpecializeType() determines whether this classifier may have a generalization relationship to classifiers of the specified type. By default a classifier may specialize classifiers of the same or a more general type. It is intended to be redefined by classifiers that have different specialization constraints. + + + + OCL + result = self.oclIsKindOf(c.oclType) + + + + + + + + + + The query allParents() gives all of the direct and indirect ancestors of a generalized Classifier. + + + + OCL + result = self.parents()->union(self.parents()->collect(p | p.allParents()) + + + + + + + + + + + A feature declares a behavioral or structural characteristic of instances of classifiers. + + + + + Specifies whether this feature characterizes individual instances classified by the classifier (false) or the classifier itself (true). + + + + + + + The Classifiers that have this Feature as a feature. + + + + + + + + A redefinable element is an element that, when defined in the context of a classifier, can be redefined more specifically or differently in the context of another classifier that specializes (directly or indirectly) the context classifier. + + + + At least one of the redefinition contexts of the redefining element must be a specialization of at least one of the redefinition contexts for each redefined element. + + + OCL + self.redefinedElement->forAll(e | self.isRedefinitionContextValid(e)) + + + + + A redefining element must be consistent with each redefined element. + + + OCL + self.redefinedElement->forAll(re | re.isConsistentWith(self)) + + + + + + Indicates whether it is possible to further specialize a RedefinableElement. If the value is true, then it is not possible to further specialize the RedefinableElement. + + + + + + + The redefinable element that is being redefined by this element. + + + + + + + References the contexts that this element may be redefined from. + + + + + + + The query isConsistentWith() specifies, for any two RedefinableElements in a context in which redefinition is possible, whether redefinition would be logically consistent. By default, this is false; this operation must be overridden for subclasses of RedefinableElement to define the consistency conditions. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = false + + + + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of this RedefinableElement are properly related to the redefinition contexts of the specified RedefinableElement to allow this element to redefine the other. By default at least one of the redefinition contexts of this element must be a specialization of at least one of the redefinition contexts of the specified element. + + + + OCL + result = redefinitionContext->exists(c | c.allParents()->includes(redefined.redefinitionContext))) + + + + + + + + + + + A generalization is a taxonomic relationship between a more general classifier and a more specific classifier. Each instance of the specific classifier is also an indirect instance of the general classifier. Thus, the specific classifier inherits the features of the more general classifier. + + + + + Indicates whether the specific classifier can be used wherever the general classifier can be used. If true, the execution traces of the specific classifier will be a superset of the execution traces of the general classifier. + + + + + + + + References the specializing classifier in the Generalization relationship. + + + + + + + References the general classifier in the Generalization relationship. + + + + + + + + A behavioral feature is a feature of a classifier that specifies an aspect of the behavior of its instances. + + + + + + Specifies the ordered set of formal parameters of this BehavioralFeature. + + + + + + + References the Types representing exceptions that may be raised during an invocation of this feature. + + + + + + + The query isDistinguishableFrom() determines whether two BehavioralFeatures may coexist in the same Namespace. It specifies that they have to have different signatures. + + + + OCL + result = if n.oclIsKindOf(BehavioralFeature) then if ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->notEmpty() then Set{}->including(self)->including(n)->isUnique(bf | bf.ownedParameter->collect(type)) else true endif else true endif + + + + + + + + + + + + A parameter is a specification of an argument used to pass information into or out of an invocation of a behavioral feature. + + + + + + Indicates whether a parameter is being sent into or out of a behavioral element. + + + + + + Specifies a String that represents a value to be used when no argument is supplied for the Parameter. + + + + + + + + Specifies a ValueSpecification that represents a value to be used when no argument is supplied for the Parameter. + + + + + + + References the Operation owning this parameter. + + + + + + + + By specializing multiplicity element, it supports a multiplicity that specifies valid cardinalities for the collection of values associated with an instantiation of the structural feature. + + + + + + + States whether the feature's value may be modified by a client. + + + + + + + + An instance specification is a model element that represents an instance in a modeled system. + + + + The defining feature of each slot is a structural feature (directly or inherited) of a classifier of the instance specification. + + + OCL + slot->forAll(s | classifier->exists (c | c.allFeatures()->includes (s.definingFeature))) + + + + + One structural feature (including the same feature inherited from multiple classifiers) is the defining feature of at most one slot in an instance specification. + + + OCL + classifier->forAll(c | (c.allFeatures()->forAll(f | slot->select(s | s.definingFeature = f)->size() <= 1))) + + + + + + The classifier or classifiers of the represented instance. If multiple classifiers are specified, the instance is classified by all of them. + + + + + + + A slot giving the value or values of a structural feature of the instance. An instance specification can have one slot per structural feature of its classifiers, including inherited features. It is not necessary to model a slot for each structural feature, in which case the instance specification is a partial description. + + + + + + + A specification of how to compute, derive, or construct the instance. + + + + + + + + A slot specifies that an entity modeled by an instance specification has a value or values for a specific structural feature. + + + + + The instance specification that owns this slot. + + + + + + + The structural feature that specifies the values that may be held by the slot. + + + + + + + The value or values corresponding to the defining feature for the owning instance specification. + + + + + + + + A package is used to group elements, and provides a namespace for the grouped elements. + + + + If an element that is owned by a package has visibility, it is public or private. + + + OCL + self.ownedElements->forAll(e | e.visibility->notEmpty() implies e.visbility = #public or e.visibility = #private) + + + + + + + References the PackageMerges that are owned by this Package. + + + + + + + Specifies the packageable elements that are owned by this Package. + + + + + + + References the packaged elements that are Types. + + + + + + + References the packaged elements that are Packages. + + + + + + + References the Package that owns this Package. + + + + + + + The query mustBeOwned() indicates whether elements of this type must have an owner. + + + + OCL + result = false + + + + + + + + + The query visibleMembers() defines which members of a Package can be accessed outside it. + + + + OCL + result = member->select( m | self.makesVisible(m)) + + + + + + + + + + The query makesVisible() defines whether a Package makes an element visible outside itself. Elements with no visibility and elements with public visibility are made visible. + + + + OCL + self.member->includes(el) + + + + + OCL + result = (ownedMember->includes(el)) or (elementImport->select(ei|ei.importedElement = #public)->collect(ei|ei.importedElement)->includes(el)) or (packageImport->select(pi|pi.visibility = #public)->collect(pi|pi.importedPackage.member->includes(el))->notEmpty()) + + + + + + + + + + + A package import is a relationship that allows the use of unqualified names to refer to package members from other namespaces. + + + + The visibility of a PackageImport is either public or private. + + + OCL + self.visibility = #public or self.visibility = #private + + + + + + Specifies the visibility of the imported PackageableElements within the importing Namespace, i.e., whether imported elements will in turn be visible to other packages that use that importingPackage as an importedPackage. If the PackageImport is public, the imported elements will be visible outside the package, while if it is private they will not. + + + + + + Specifies the Namespace that imports the members from a Package. + + + + + + + Specifies the Package whose members are imported into a Namespace. + + + + + + + + A class describes a set of objects that share the same specifications of features, constraints, and semantics. + + + + + If true, the Classifier does not provide a complete declaration and can typically not be instantiated. An abstract classifier is intended to be used by other classifiers e.g. as the target of general metarelationships or generalization relationships. + + + + + + + References all the Classifiers that are defined (nested) within the Class. + + + + + + + The attributes (i.e. the properties) owned by the class. + + + + + + + The operations owned by the class. + + + + + + + This gives the superclasses of a class. + + + + + + + The inherit operation is overridden to exclude redefined properties. + + + + OCL + result = inhs->excluding(inh | ownedMember->select(oclIsKindOf(RedefinableElement))->select(redefinedElement->includes(inh))) + + + + + + + + + + + + + + + A property is a structural feature of a classifier that characterizes instances of the classifier. A property related by ownedAttribute to a classifier (other than an association) represents an attribute and might also represent an association end. It relates an instance of the class to a value or set of values of the type of the attribute. A property related by memberEnd or its specializations to an association represents an end of the association. The type of the property is the type of the end of the association. + + + + A multiplicity on an aggregate end of a composite aggregation must not have an upper bound greater than 1. + + + OCL + isComposite implies (upperBound()->isEmpty() or upperBound() <= 1) + + + + + Subsetting may only occur when the context of the subsetting property conforms to the context of the subsetted property. + + + OCL + self.subsettedProperty->notEmpty() implies (self.subsettingContext()->notEmpty() and self.subsettingContext()->forAll (sc | self.subsettedProperty->forAll(sp | sp.subsettingContext()->exists(c | sc.conformsTo(c))))) + + + + + A redefined property must be inherited from a more general classifier containing the redefining property. + + + OCL + if (redefinedProperty->notEmpty()) then (redefinitionContext->notEmpty() and redefinedProperty->forAll(rp| ((redefinitionContext->collect(fc| fc.allParents()))->asSet())->collect(c| c.allFeatures())->asSet()->includes(rp)) + + + + + A subsetting property may strengthen the type of the subsetted property, and its upper bound may be less. + + + OCL + self.subsettedProperty->forAll(sp | self.type.conformsTo(sp.type) and ((self.upperBound()->notEmpty() and sp.upperBound()->notEmpty()) implies self.upperBound()<=sp.upperBound() )) + + + + + Only a navigable property can be marked as readOnly. + + + OCL + isReadOnly implies isNavigable() + + + + + A derived union is derived. + + + OCL + isDerivedUnion implies isDerived + + + + + A derived union is read only. + + + OCL + isDerivedUnion implies isReadOnly + + + + + A property may not subset a property with the same name. + + + OCL + true + + + + + + Specifies whether the Property is derived, i.e., whether its value or values can be computed from other information. + + + + + + + If true, the attribute may only be read, and not written. + + + + + + + Specifies whether the property is derived as the union of all of the properties that are constrained to subset it. + + + + + + + A String that is evaluated to give a default value for the Property when an object of the owning Classifier is instantiated. + + + + + + + + Specifies the kind of aggregation that applies to the Property. + + + + + + This is a derived value, indicating whether the aggregation of the Property is composite or not. + + + + + + References the Class that owns the Property. + + + + + + + References the properties that are redefined by this property. + + + + + + + References the owning association of this property, if any. + + + + + + + The DataType that owns this Property. + + + + + + + A ValueSpecification that is evaluated to give a default value for the Property when an object of the owning Classifier is instantiated. + + + + + + + In the case where the property is one navigable end of a binary association with both ends navigable, this gives the other end. + + + + + + + References the properties of which this property is constrained to be a subset. + + + + + + + References the association of which this property is a member, if any. + + + + + + + The query isAttribute() is true if the Property is defined as an attribute of some classifier. + + + + OCL + result = Classifier.allInstances->exists(c | c.attribute->includes(p)) + + + + + + + + + + If this property is owned by a class, associated with a binary association, and the other end of the association is also owned by a class, then opposite gives the other end. + + + + OCL + result = if owningAssociation->isEmpty() and association.memberEnd->size() = 2 then let otherEnd = (association.memberEnd - self)->any() in if otherEnd.owningAssociation->isEmpty() then otherEnd else Set{} endif else Set {} endif + + + + + + + The value of isComposite is true only if aggregation is composite. + + + + OCL + result = (self.aggregation = #composite) + + + + + + + + + The query isConsistentWith() specifies, for any two Properties in a context in which redefinition is possible, whether redefinition would be logically consistent. A redefining property is consistent with a redefined property if the type of the redefining property conforms to the type of the redefined property, the multiplicity of the redefining property (if specified) is contained in the multiplicity of the redefined property, and the redefining property is derived if the redefined property is derived. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = redefinee.oclIsKindOf(Property) and let prop : Property = redefinee.oclAsType(Property) in (prop.type.conformsTo(self.type) and ((prop.lowerBound()->notEmpty() and self.lowerBound()->notEmpty()) implies prop.lowerBound() >= self.lowerBound()) and ((prop.upperBound()->notEmpty() and self.upperBound()->notEmpty()) implies prop.lowerBound() <= self.lowerBound()) and (self.isDerived implies prop.isDerived) and (self.isComposite implies prop.isComposite)) + + + + + + + + + + The query subsettingContext() gives the context for subsetting a property. It consists, in the case of an attribute, of the corresponding classifier, and in the case of an association end, all of the classifiers at the other ends. + + + + OCL + result = if association->notEmpty() then association.endType-type else if classifier->notEmpty() then Set{classifier} else Set{} endif endif + + + + + + + + + + The query isNavigable() indicates whether it is possible to navigate across the property. + + + + OCL + result = not classifier->isEmpty() or association.owningAssociation.navigableOwnedEnd->includes(self) + + + + + + + + + + An operation is a behavioral feature of a classifier that specifies the name, type, parameters, and constraints for invoking an associated behavior. + + + + An operation can have at most one return parameter; i.e., an owned parameter with the direction set to 'return' + + + OCL + self.ownedParameter->select(par | par.direction = #return)->size() <= 1 + + + + + A bodyCondition can only be specified for a query operation. + + + OCL + bodyCondition->notEmpty() implies isQuery + + + + + + Specifies whether an execution of the BehavioralFeature leaves the state of the system unchanged (isQuery=true) or whether side effects may occur (isQuery=false). + + + + + + + Specifies whether the return parameter is ordered or not, if present. + + + + + + + Specifies whether the return parameter is unique or not, if present. + + + + + + + Specifies the lower multiplicity of the return parameter, if present. + + + + + + + + + Specifies the upper multiplicity of the return parameter, if present. + + + + + + + + + The class that owns the operation. + + + + + + + An optional set of Constraints on the state of the system when the Operation is invoked. + + + + + + + An optional set of Constraints specifying the state of the system when the Operation is completed. + + + + + + + References the Operations that are redefined by this Operation. + + + + + + + The DataType that owns this Operation. + + + + + + + An optional Constraint on the result values of an invocation of this Operation. + + + + + + + Specifies the return result of the operation, if present. + + + + + + + Specifies the parameters owned by this Operation. + + + + + + + References the Types representing exceptions that may be raised during an invocation of this operation. + + + + + + + If this operation has a return parameter, isOrdered equals the value of isOrdered for that parameter. Otherwise isOrdered is false. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().isOrdered else false endif + + + + + + + + + If this operation has a return parameter, isUnique equals the value of isUnique for that parameter. Otherwise isUnique is true. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().isUnique else true endif + + + + + + + + + If this operation has a return parameter, lower equals the value of lower for that parameter. Otherwise lower is not defined. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().lower else Set{} endif + + + + + + + + + If this operation has a return parameter, upper equals the value of upper for that parameter. Otherwise upper is not defined. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().upper else Set{} endif + + + + + + + + + If this operation has a return parameter, type equals the value of type for that parameter. Otherwise type is not defined. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().type else Set{} endif + + + + + + + A redefining operation is consistent with a redefined operation if it has the same number of owned parameters, and the type of each owned parameter conforms to the type of the corresponding redefined parameter. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = (redefinee.oclIsKindOf(Operation) and let op: Operation = redefinee.oclAsType(Operation) in self.ownedParameter.size() = op.ownedParameter.size() and forAll(i | op.ownedParameter[i].type.conformsTo(self.ownedParameter[i].type)) ) + + + + + + + + + + The query returnResult() returns the set containing the return parameter of the Operation if one exists, otherwise, it returns an empty set + + + + OCL + result = ownedParameter->select (par | par.direction = #return) + + + + + + + + + + + A data type is a type whose instances are identified only by their value. A data type may contain attributes to support the modeling of structured data types. + + + + + The Attributes owned by the DataType. + + + + + + + The Operations owned by the DataType. + + + + + + + + An enumeration is a data type whose values are enumerated in the model as enumeration literals. + + + + + The ordered set of literals for this Enumeration. + + + + + + + + An enumeration literal is a user-defined data value for an enumeration. + + + + + The Enumeration that this EnumerationLiteral is a member of. + + + + + + + + A primitive type defines a predefined data type, without any relevant substructure (i.e., it has no parts in the context of UML). A primitive datatype may have an algebra and operations defined outside of UML, for example, mathematically. + + + + + + An association describes a set of tuples whose values refer to typed instances. An instance of an association is called a link. + + + + An association specializing another association has the same number of ends as the other association. + + + OCL + self.parents()->forAll(p | p.memberEnd.size() = self.memberEnd.size()) + + + + + When an association specializes another association, every end of the specific association corresponds to an end of the general association, and the specific end reaches the same type or a subtype of the more general end. + + + OCL + true + + + + + Only binary associations can be aggregations. + + + OCL + self.memberEnd->exists(aggregation <> Aggregation::none) implies self.memberEnd->size() = 2 + + + + + Association ends of associations with more than two ends must be owned by the association. + + + OCL + if memberEnd->size() > 2 then ownedEnd->includesAll(memberEnd) + + + + + + + Specifies whether the association is derived from other model elements such as other associations or constraints. + + + + + + + The ends that are owned by the association itself. + + + + + + + References the classifiers that are used as types of the ends of the association. + + + + + + + Each end represents participation of instances of the classifier connected to the end in links of the association. + + + + + + + The navigable ends that are owned by the association itself. + + + + + + + endType is derived from the types of the member ends. + + + + OCL + result = self.memberEnd->collect(e | e.type) + + + + + + + + + + + A namespace is an element in a model that contains a set of named elements that can be identified by name. + + + + All the members of a Namespace are distinguishable within it. + + + OCL + membersAreDistinguishable() + + + + + + References the ElementImports owned by the Namespace. + + + + + + + References the PackageImports owned by the Namespace. + + + + + + + Specifies a set of Constraints owned by this Namespace. + + + + + + + A collection of NamedElements owned by the Namespace. + + + + + + + A collection of NamedElements identifiable within the Namespace, either by being owned or by being introduced by importing or inheritance. + + + + + + + References the PackageableElements that are members of this Namespace as a result of either PackageImports or ElementImports. + + + + + + + The importedMember property is derived from the ElementImports and the PackageImports. References the PackageableElements that are members of this Namespace as a result of either PackageImports or ElementImports. + + + + OCL + result = self.importMembers(self.elementImport.importedElement.asSet()- >union(self.packageImport.importedPackage->collect(p | p.visibleMembers()))) + + + + + + + + + + The query getNamesOfMember() gives a set of all of the names that a member would have in a Namespace. In general a member can have multiple names in a Namespace if it is imported more than once with different aliases. The query takes account of importing. It gives back the set of names that an element would have in an importing namespace, either because it is owned, or if not owned then imported individually, or if not individually then from a package. + + + + OCL + result = if self.ownedMember ->includes(element) then Set{}->include(element.name) else let elementImports: ElementImport = self.elementImport->select(ei | ei.importedElement = element) in if elementImports->notEmpty() then elementImports->collect(el | el.getName()) else self.packageImport->select(pi | pi.importedPackage.visibleMembers()->includes(element))-> collect(pi | pi.importedPackage.getNamesOfMember(element)) endif endif + + + + + + + + + + + + The Boolean query membersAreDistinguishable() determines whether all of the namespace's members are distinguishable within it. + + + + OCL + result = self.member->forAll( memb | self.member->excluding(memb)->forAll(other | memb.isDistinguishableFrom(other, self))) + + + + + + + + + The query importMembers() defines which of a set of PackageableElements are actually imported into the namespace. This excludes hidden ones, i.e., those which have names that conflict with names of owned members, and also excludes elements which would have the same name when imported. + + + + OCL + result = self.excludeCollisions(imps)->select(imp | self.ownedMember->forAll(mem | mem.imp.isDistinguishableFrom(mem, self))) + + + + + + + + + + + The query excludeCollisions() excludes from a set of PackageableElements any that would not be distinguishable from each other in this namespace. + + + + OCL + result = imps->reject(imp1 | imps.exists(imp2 | not imp1.isDistinguishableFrom(imp2, self))) + + + + + + + + + + + + A value specification is the specification of a (possibly empty) set of instances, including both objects and data values. + + + + + + The query isComputable() determines whether a value specification can be computed in a model. This operation cannot be fully defined in OCL. A conforming implementation is expected to deliver true for this operation for all value specifications that it can compute, and to compute all of those for which the operation is true. A conforming implementation is expected to be able to compute the value of all literals. + + + + OCL + result = false + + + + + + + + + The query integerValue() gives a single Integer value when one can be computed. + + + + OCL + result = Set{} + + + + + + + + + The query booleanValue() gives a single Boolean value when one can be computed. + + + + OCL + result = Set{} + + + + + + + + + The query stringValue() gives a single String value when one can be computed. + + + + OCL + result = Set{} + + + + + + + + + The query unlimitedValue() gives a single UnlimitedNatural value when one can be computed. + + + + OCL + result = Set{} + + + + + + + + + The query isNull() returns true when it can be computed that the value is null. + + + + OCL + result = false + + + + + + + + + + Relationship is an abstract concept that specifies some kind of relationship between elements. + + + + + Specifies the elements related by the Relationship. + + + + + + + + A package merge defines how the contents of one package are extended by the contents of another package. + + + + + References the Package that is being extended with the contents of the merged package of the PackageMerge. + + + + + + + References the Package that is to be merged with the receiving package of the PackageMerge. + + + + + + + + An instance value is a value specification that identifies an instance. + + + + + The instance that is the specified value. + + + + + + + + A literal unlimited natural is a specification of an unlimited natural number. + + + + + The specified UnlimitedNatural value. + + + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + + + The query unlimitedValue() gives the value. + + + + OCL + result = value + + + + + + + + + + A type constrains the values represented by a typed element. + + + + + Specifies the owning package of this classifier, if any. + + + + + + + The query conformsTo() gives true for a type that conforms to another. By default, two types do not conform to each other. This query is intended to be redefined for specific conformance situations. + + + + OCL + result = false + + + + + + + + + + + An expression represents a node in an expression tree, which may be non-terminal or terminal. It defines a symbol, and has a possibly empty sequence of operands which are value specifications. + + + + + The symbol associated with the node in the expression tree. + + + + + + + + Specifies a sequence of operands. + + + + + + + + AggregationKind is an enumeration type that specifies the literals for defining the kind of aggregation of a property. + + + + Indicates that the property has no aggregation. + + + + + Indicates that the property has a shared aggregation. + + + + + Indicates that the property is aggregated compositely, i.e., the composite object has responsibility for the existence and storage of the composed objects (parts). + + + + + + Parameter direction kind is an enumeration type that defines literals used to specify direction of parameters. + + + + Indicates that parameter values are passed into the behavioral element by the caller. + + + + + Indicates that parameter values are passed into a behavioral element by the caller and then back out to the caller from the behavioral element. + + + + + + Indicates that parameter values are passed as return values from a behavioral element back to the caller. + + + + + + VisibilityKind is an enumeration type that defines literals to determine the visibility of elements in a model. + + + + The query bestVisibility() examines a set of VisibilityKinds, and returns public as the preferred visibility. + + + + OCL + pre: not vis->includes(#protected) and not vis->includes(#package) + + + + + OCL + result = if vis->includes(#public) then #public else #private endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An interface is a kind of classifier that represents a declaration of a set of coherent public features and obligations. An interface specifies a contract; any instance of a classifier that realizes the interface must fulfill that contract. The obligations that may be associated with an interface are in the form of various kinds of constraints (such as pre- and post-conditions) or protocol specifications, which may impose ordering restrictions on interactions through the interface. + + + + The visibility of all features owned by an interface must be public. + + + OCL + self.feature->forAll(f | f.visibility = #public) + + + + + + The attributes (i.e. the properties) owned by the class. + + + + + + + The operations owned by the class. + + + + + + + References all the Classifiers that are defined (nested) within the Class. + + + + + + + References all the Interfaces redefined by this Interface. + + + + + + + + An interface realization is a specialized realization relationship between a classifier and an interface. This relationship signifies that the realizing classifier conforms to the contract specified by the interface. + + + + + References the Interface specifying the conformance contract. + + + + + + + References the BehavioredClassifier that owns this Interfacerealization (i.e., the classifier that realizes the Interface to which it points). + + + + + + + + A behaviored classifier may have an interface realization. + + + + + + The set of InterfaceRealizations owned by the BehavioredClassifier. Interface realizations reference the Interfaces of which the BehavioredClassifier is an implementation. + + + + + + + + + + The Interface that owns this Operation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A usage is a relationship in which one element requires another element (or set of elements) for its full implementation or operation. A usage is a dependency in which the client requires the presence of the supplier. + + + + + + An abstraction is a relationship that relates two elements or sets of elements that represent the same concept at different levels of abstraction or from different viewpoints. + + + + + An composition of an Expression that states the abstraction relationship between the supplier and the client. In some cases, such as Derivation, it is usually formal and unidirectional; in other cases, such as Trace, it is usually informal and bidirectional. The mapping expression is optional and may be omitted if the precise relationship between the elements is not specified. + + + + + + + + A dependency is a relationship that signifies that a single or a set of model elements requires other model elements for their specification or implementation. This means that the complete semantics of the depending elements is either semantically or structurally dependent on the definition of the supplier element(s). + + + + + + The element(s) independent of the client element(s), in the same respect and the same dependency relationship. In some directed dependency relationships (such as Refinement Abstractions), a common convention in the domain of class-based OO software is to put the more abstract element in this role. Despite this convention, users of UML may stipulate a sense of dependency suitable for their domain, which makes a more abstract element dependent on that which is more specific. + + + + + + + The element(s) dependent on the supplier element(s). In some cases (such as a Trace Abstraction) the assignment of direction (that is, the designation of the client element) is at the discretion of the modeler, and is a stipulation. + + + + + + + + Realization is a specialized abstraction relationship between two sets of model elements, one representing a specification (the supplier) and the other represents an implementation of the latter (the client). Realization can be used to model stepwise refinement, optimizations, transformations, templates, model synthesis, framework composition, etc. + + + + + + A substitution is a relationship between two classifiers signifies that the substituting classifier complies with the contract specified by the contract classifier. This implies that instances of the substituting classifier are runtime substitutable where instances of the contract classifier are expected. + + + + + The contract with which the substituting classifier complies. + + + + + + + Instances of the substituting classifier are runtime substitutable where instances of the contract classifier are expected. + + + + + + + + + + + References the substitutions that are owned by this Classifier. + + + + + + + + + + Indicates the dependencies that reference the client. + + + + + + + Specifies the namespace that owns the NamedElement. + + + + + + + + + + + + + A collection of NamedElements owned by the Namespace. + + + + + + + + + + + + + + + + + + + + + + Indicates the dependencies that reference the supplier. + + + + + + + + + + + + + A generalization set is a packageable element whose instances define collections of subsets of generalization relationships. + + + + Every Generalization associated with a particular GeneralizationSet must have the same general Classifier. + + + OCL + generalization->collect(g | g.general)->asSet()->size() <= 1 + + + + + The Classifier that maps to a GeneralizationSet may neither be a specific nor a general Classifier in any of the Generalization relationships defined for that GeneralizationSet. In other words, a power type may not be an instance of itself nor may its instances be its subclasses. + + + OCL + true + + + + + + Indicates (via the associated Generalizations) whether or not the set of specific Classifiers are covering for a particular general classifier. When isCovering is true, every instance of a particular general Classifier is also an instance of at least one of its specific Classifiers for the GeneralizationSet. When isCovering is false, there are one or more instances of the particular general Classifier that are not instances of at least one of its specific Classifiers defined for the GeneralizationSet. + + + + + + + + + Indicates whether or not the set of specific Classifiers in a Generalization relationship have instance in common. If isDisjoint is true, the specific Classifiers for a particular GeneralizationSet have no members in common; that is, their intersection is empty. If isDisjoint is false, the specific Classifiers in a particular GeneralizationSet have one or more members in common; that is, their intersection is not empty. For example, Person could have two Generalization relationships, each with the different specific Classifier: Manager or Staff. This would be disjoint because every instance of Person must either be a Manager or Staff. In contrast, Person could have two Generalization relationships involving two specific (and non-covering) Classifiers: Sales Person and Manager. This GeneralizationSet would not be disjoint because there are instances of Person which can be a Sales Person and a Manager. + + + + + + + + + Designates the Classifier that is defined as the power type for the associated GeneralizationSet. + + + + + + + Designates the instances of Generalization which are members of a given GeneralizationSet. + + + + + + + + + The Classifier that maps to a GeneralizationSet may neither be a specific nor a general Classifier in any of the Generalization relationships defined for that GeneralizationSet. In other words, a power type may not be an instance of itself nor may its instances also be its subclasses. + + + OCL + true + + + + + Designates the GeneralizationSet of which the associated Classifier is a power type. + + + + + + + + A generalization relates a specific classifier to a more general classifier, and is owned by the specific classifier. + + + + Every Generalization associated with a given GeneralizationSet must have the same general Classifier. That is, all Generalizations for a particular GeneralizationSet must have the same superclass. + + + OCL + true + + + + + Designates a set in which instances of Generalization is considered members. + + + + + + + + + + + + + A model element that has both association and class properties. An AssociationClass can be seen as an association that also has class properties, or as a class that also has association properties. It not only connects a set of classifiers but also defines a set of features that belong to the relationship itself and not to any of the classifiers. + + + + An AssociationClass cannot be defined between itself and something else. + + + OCL + self.endType->excludes(self) and self.endType>collect(et|et.allparents()->excludes(self)) + + + + + + + The operation allConnections results in the set of all AssociationEnds of the Association. + + + + OCL + result = memberEnd->union ( self.parents ()->collect (p | p.allConnections () ) + + + + + + + + + + + Property represents a declared state of one or more instances in terms of a named relationship to a value or values. When a property is an attribute of a classifier, the value or values are related to the instance of the classifier by being held in slots of the instance. When a property is an association end, the value or values are related to the instance or instances at the other end(s) of the association. The range of valid values represented by the property can be controlled by setting the property's type. + + + + + An optional list of ordered qualifier attributes for the end. If the list is empty, then the Association is not qualified. + + + + + + + Designates the optional association end that owns a qualifier attribute. + + + + + + + + + + + + + + + + A behavioral feature is implemented (realized) by a behavior. A behavioral feature specifies that a classifier will respond to a designated request by invoking its implementing method. + + + + Specifies the semantics of concurrent calls to the same passive instance (i.e., an instance originating from a class with isActive being false). Active instances control access to their own behavioral features. + + + + + + The signals that the behavioral feature raises as exceptions. + + + + + + + + A call event models the receipt by an object of a message invoking a call of an operation. + + + + + Designates the operation whose invocation raised the call event. + + + + + + + + A change event models a change in the system configuration that makes a condition true. + + + + + A Boolean-valued expression that will result in a change event whenever its value changes from false to true. + + + + + + + + A class may be designated as active (i.e., each of its instances having its own thread of control) or passive (i.e., each of its instances executing within the context of some other object). A class may also specify which signals the instances of this class handle. + + + + A passive class may not own receptions. + + + OCL + not self.isActive implies self.ownedReception.isEmpty() + + + + + + Determines whether an object specified by this class is active or not. If true, then the owning class is referred to as an active class. If false, then such a class is referred to as a passive class. + + + + + + + + + Receptions that objects of this class are willing to accept. + + + + + + + + A trigger relates an event to a behavior that may affect an instance of the classifier. + + + + + The event that causes the trigger. + + + + + + + + Interfaces may include receptions (in addition to operations). + + + + + Receptions that objects providing this interface are willing to accept. + + + + + + + + A reception is a declaration stating that a classifier is prepared to react to the receipt of a signal. A reception designates a signal and specifies the expected behavioral response. The details of handling a signal are specified by the behavior associated with the reception or the classifier itself. + + + + A Reception can not be a query. + + + OCL + not self.isQuery + + + + + + The signal that this reception handles. + + + + + + + + A signal is a specification of send request instances communicated between objects. The receiving object handles the received request instances as specified by its receptions. The data carried by a send request (which was passed to it by the send invocation occurrence that caused that request) are represented as attributes of the signal. A signal is defined independently of the classifiers handling the signal occurrence. + + + + + The attributes owned by the signal. + + + + + + + + A signal event represents the receipt of an asynchronous signal instance. A signal event may, for example, cause a state machine to trigger a transition. + + + + + The specific signal that is associated with this event. + + + + + + A time event specifies a point in time. At the specified time, the event occurs. + + + + + Specifies whether it is relative or absolute time. + + + + + + + + + Specifies the corresponding time deadline. + + + + + + + + A message event specifies the receipt by an object of either a call or a signal. + + + + + + A transition trigger associated with an any receive event specifies that the transition is to be triggered by the receipt of any message that is not explicitly referenced in another transition from the same vertex. + + + + + + A classifier can have behavior specifications defined in its namespace. One of these may specify the behavior of the classifier itself. + + + + + References Trigger descriptions owned by a Classifier. + + + + + + + + An event is the specification of some occurrence that may potentially trigger effects by an object. + + + + + + An operation may invoke both the execution of method behaviors as well as other behavioral responses. + + + + + CallConcurrencyKind is an enumeration type. + + + + No concurrency management mechanism is associated with the operation and, therefore, concurrency conflicts may occur. Instances that invoke a behavioral feature need to coordinate so that only one invocation to a target on any behavioral feature occurs at once. + + + + + Multiple invocations of a behavioral feature may occur simultaneously to one instance, but only one is allowed to commence. The others are blocked until the performance of the first behavioral feature is complete. It is the responsibility of the system designer to ensure that deadlocks do not occur due to simultaneous blocks. + + + + + Multiple invocations of a behavioral feature may occur simultaneously to one instance and all of them may proceed concurrently. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Behavior is a specification of how its context classifier changes state over time. This specification may be either a definition of possible behavior execution or emergent behavior, or a selective illustration of an interesting subset of possible executions. The latter form is typically used for capturing examples, such as a trace of a particular execution. + + + + The parameters of the behavior must match the parameters of the implemented behavioral feature. + + + OCL + true + + + + + The implemented behavioral feature must be a feature (possibly inherited) of the context classifier of the behavior. + + + OCL + true + + + + + If the implemented behavioral feature has been redefined in the ancestors of the owner of the behavior, then the behavior must realize the latest redefining behavioral feature. + + + OCL + true + + + + + There may be at most one behavior for a given pairing of classifier (as owner of the behavior) and behavioral feature (as specification of the behavior). + + + OCL + true + + + + + + Tells whether the behavior can be invoked while it is still executing from a previous invocation. + + + + + + + + + References a behavior that this behavior redefines. A subtype of Behavior may redefine any other subtype of Behavior. If the behavior implements a behavioral feature, it replaces the redefined behavior. If the behavior is a classifier behavior, it extends the redefined behavior. + + + + + + + Designates a behavioral feature that the behavior implements. The behavioral feature must be owned by the classifier that owns the behavior or be inherited by it. The parameters of the behavioral feature and the implementing behavior must match. If a behavior does not have a specification, it is directly associated with a classifier (i.e., it is the behavior of the classifier as a whole). + + + + + + + References a list of parameters to the behavior which describes the order and type of arguments that can be given when the behavior is invoked and of the values which will be returned when the behavior completes its execution. + + + + + + + + The classifier that is the context for the execution of the behavior. If the behavior is owned by a BehavioredClassifier, that classifier is the context. Otherwise, the context is the first BehavioredClassifier reached by following the chain of owner relationships. For example, following this algorithm, the context of an entry action in a state machine is the classifier that owns the state machine. The features of the context classifier as well as the elements visible to the context classifier are visible to the behavior. + + + + + + + An optional set of Constraints specifying what must be fulfilled when the behavior is invoked. + + + + + + + An optional set of Constraints specifying what is fulfilled after the execution of the behavior is completed, if its precondition was fulfilled before its invocation. + + + + + + + + A classifier can have behavior specifications defined in its namespace. One of these may specify the behavior of the classifier itself. + + + + If a behavior is classifier behavior, it does not have a specification. + + + OCL + self.classifierBehavior.notEmpty() implies self.specification.isEmpty() + + + + + + References behavior specifications owned by a classifier. + + + + + + + A behavior specification that specifies the behavior of the classifier itself. + + + + + + + + Provides a mechanism for precisely defining the behavior of an opaque expression. An opaque expression is defined by a behavior restricted to return one result. + + + + The behavior may only have return result parameters. + + + OCL + self.behavior.notEmpty() implies self.behavior.ownedParameters->select(p | p.direction<>#return)->isEmpty() + + + + + The behavior must have exactly one return result parameter. + + + OCL + self.behavior.notEmpty() implies self.behavior.ownedParameter->select(p | p.direction=#return)->size() = 1 + + + + + Restricts an opaque expression to return exactly one return result. When the invocation of the opaque expression completes, a single set of values is returned to its owner. This association is derived from the single return result parameter of the associated behavior. + + + + + + + Specifies the behavior of the opaque expression. + + + + + + + + A behavioral feature is implemented (realized) by a behavior. A behavioral feature specifies that a classifier will respond to a designated request by invoking its implementing method. + + + + If true, then the behavioral feature does not have an implementation, and one must be supplied by a more specific element. If false, the behavioral feature must have an implementation in the classifier or one must be inherited from a more general element. + + + + + + + + + A behavioral description that implements the behavioral feature. There may be at most one behavior for a particular pairing of a classifier (as owner of the behavior) and a behavioral feature (as specification of the behavior). + + + + + + + + An behavior with implementation-specific semantics. + + + + + Specifies the behavior in one or more languages. + + + + + + + + Languages the body strings use in the same order as the body strings. + + + + + + + + + A function behavior is an opaque behavior that does not access or modify any objects or other external data. + + + + A function behavior has at least one output parameter. + + + OCL + self.ownedParameters-> select(p | p.direction=#out or p.direction=#inout or p.direction=#return)->size() >= 1 + + + + + The types of parameters are all data types, which may not nest anything but other datatypes. + + + OCL + def: hasAllDataTypeAttributes(d : DataType) : Boolean = d.ownedAttribute->forAll(a | a.type.oclIsTypeOf(DataType) and hasAllDataTypeAttributes(a.type)) self.ownedParameters->forAll(p | p.type.notEmpty() and p.oclIsTypeOf(DataType) and hasAllDataTypeAttributes(p)) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A time expression defines a value specification that represents a time value. + + + + + The value of the time expression. + + + + + + + Refers to the time and duration observations that are involved in expr. + + + + + + + + Duration defines a value specification that specifies the temporal distance between two time instants. + + + + + The value of the Duration. + + + + + + + Refers to the time and duration observations that are involved in expr. + + + + + + + + A duration interval defines the range between two durations. + + + + + Refers to the Duration denoting the minimum value of the range. + + + + + Refers to the Duration denoting the maximum value of the range. + + + + + + A time constraint is a constraint that refers to a time interval. + + + + + A condition that must be true when evaluated in order for the constraint to be satisfied. + + + + + + + The value of firstEvent is related to constrainedElement. If firstEvent is true, then the corresponding observation event is the first time instant the execution enters constrainedElement. If firstEvent is false, then the corresponding observation event is the last time instant the execution is within constrainedElement. + + + + + + + + + + + + A time interval defines the range between two time expressions. + + + + + Refers to the TimeExpression denoting the maximum value of the range. + + + + + Refers to the TimeExpression denoting the minimum value of the range. + + + + + + A duration constraint is a constraint that refers to a duration interval. + + + + The multiplicity of firstEvent must be 2 if the multiplicity of constrainedElement is 2. Otherwise the multiplicity of firstEvent is 0. + + + OCL + if (constrainedElement->size() =2) then (firstEvent->size() = 2) else (firstEvent->size() = 0) + + + + + + The interval constraining the duration. + + + + + + + The value of firstEvent[i] is related to constrainedElement[i] (where i is 1 or 2). If firstEvent[i] is true, then the corresponding observation event is the first time instant the execution enters constrainedElement[i]. If firstEvent[i] is false, then the corresponding observation event is the last time instant the execution is within constrainedElement[i]. Default value is true applied when constrainedElement[i] refers an element that represents only one time instant. + + + + + + + + + + + + An interval constraint is a constraint that refers to an interval. + + + + + A condition that must be true when evaluated in order for the constraint to be satisfied. + + + + + + + + An interval defines the range between two value specifications. + + + + + Refers to the ValueSpecification denoting the minimum value of the range. + + + + + + + Refers to the ValueSpecification denoting the maximum value of the range. + + + + + + + + A time event specifies a point in time. At the specified time, the event occurs. + + + + The ValueSpecification when must return a non-negative Integer. + + + OCL + true + + + + + + Specifies the corresponding time deadline. + + + + + + + + Observation is a superclass of TimeObservation and DurationObservation in order for TimeExpression and Duration to refer to either in a simple way. + + + + + + A time observation is a reference to a time instant during an execution. It points out the element in the model to observe and whether the observation is when this model element is entered or when it is exited. + + + + + The observation is determined by the entering or exiting of the event element during execution. + + + + + + + The value of firstEvent is related to event. If firstEvent is true, then the corresponding observation event is the first time instant the execution enters event. If firstEvent is false, then the corresponding observation event is the time instant the execution exits event. + + + + + + + + + + A duration observation is a reference to a duration during an execution. It points out the element(s) in the model to observe and whether the observations are when this model element is entered or when it is exited. + + + + The multiplicity of firstEvent must be 2 if the multiplicity of event is 2. Otherwise the multiplicity of firstEvent is 0. + + + OCL + if (event->size() = 2) then (firstEvent->size() = 2) else (firstEvent->size() = 0) + + + + + + The observation is determined by the entering or exiting of the event element during execution. + + + + + + + The value of firstEvent[i] is related to event[i] (where i is 1 or 2). If firstEvent[i] is true, then the corresponding observation event is the first time instant the execution enters event[i]. If firstEvent[i] is false, then the corresponding observation event is the time instant the execution exits event[i]. Default value is true applied when event[i] refers an element that represents only one time instant. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In the namespace of a component, all model elements that are involved in or related to its definition are either owned or imported explicitly. This may include, for example, use cases and dependencies (e.g. mappings), packages, components, and artifacts. + + + + + The set of PackageableElements that a Component owns. In the namespace of a component, all model elements that are involved in or related to its definition may be owned or imported explicitly. These may include e.g. Classes, Interfaces, Components, Packages, Use cases, Dependencies (e.g. mappings), and Artifacts. + + + + + + + + + + + + + + + + + + A component represents a modular part of a system that encapsulates its contents and whose manifestation is replaceable within its environment. + + + + + + The kind of instantiation that applies to a Component. If false, the component is instantiated as an addressable object. If true, the Component is defined at design-time, but at runtime (or execution-time) an object specified by the Component does not exist, that is, the component is instantiated indirectly, through the instantiation of its realizing classifiers or parts. Several standard stereotypes use this meta attribute, e.g. <<specification>>, <<focus>>, <<subsystem>>. + + + + + + + The interfaces that the component requires from other components in its environment in order to be able to offer its full set of provided functionality. These interfaces may be Used by the Component or any of its realizingClassifiers, or they may be the Interfaces that are required by its public Ports. + + + + + + + The interfaces that the component exposes to its environment. These interfaces may be Realized by the Component or any of its realizingClassifiers, or they may be the Interfaces that are provided by its public Ports. + + + + + + + The set of Realizations owned by the Component. Realizations reference the Classifiers of which the Component is an abstraction; i.e., that realize its behavior. + + + + + + + Utility returning the set of realized interfaces of a component: + + + + OCL + result = (classifier.clientDependency-> select(dependency|dependency.oclIsKindOf(Realization) and dependency.supplier.oclIsKindOf(Interface)))-> collect(dependency|dependency.client) + + + + + + + + + + + Utility returning the set of used interfaces of a component: + + + + OCL + result = (classifier.supplierDependency-> select(dependency|dependency.oclIsKindOf(Usage) and dependency.supplier.oclIsKindOf(interface)))-> collect(dependency|dependency.supplier) + + + + + + + + + + + + OCL + result = let usedInterfaces = UsedInterfaces(self) and let realizingClassifierUsedInterfaces = UsedInterfaces(self.realizingClassifier) and let typesOfUsedPorts = self.ownedPort.required in ((usedInterfaces->union(realizingClassifierUsedInterfaces))-> union(typesOfUsedPorts))->asSet() + + + + + + + + + + + OCL + result = let implementedInterfaces = self.implementation->collect(impl|impl.contract) and let realizedInterfaces = RealizedInterfaces(self) and let realizingClassifierInterfaces = RealizedInterfaces(self.realizingClassifier) and let typesOfRequiredPorts = self.ownedPort.provided in (((implementedInterfaces->union(realizedInterfaces)->union(realizingClassifierInterfaces))-> union(typesOfRequiredPorts))->asSet() + + + + + + + + + + + The realization concept is specialized to (optionally) define the classifiers that realize the contract offered by a component in terms of its provided and required interfaces. The component forms an abstraction from these various classifiers. + + + + + The Component that owns this ComponentRealization and which is implemented by its realizing classifiers. + + + + + + + A classifier that is involved in the implementation of the Component that owns this ComponentRealization. + + + + + + + + A delegation connector is a connector that links the external contract of a component (as specified by its ports) to the internal realization of that behavior by the component's parts. It represents the forwarding of signals (operation requests and events): a signal that arrives at a port that has a delegation connector to a part or to another port will be passed on to that target for handling. +An assembly connector is a connector between two components that defines that one component provides the services that another component requires. An assembly connector is a connector that is defined from a required interface or port to a provided interface or port. + + + + A delegation connector must only be defined between used Interfaces or Ports of the same kind, e.g. between two provided Ports or between two required Ports. + + + OCL + true + + + + + If a delegation connector is defined between a used Interface or Port and an internal Part Classifier, then that Classifier must have an 'implements' relationship to the Interface type of that Port. + + + OCL + true + + + + + If a delegation connector is defined between a source Interface or Port and a target Interface or Port, then the target Interface must support a signature compatible subset of Operations of the source Interface or Port. + + + OCL + true + + + + + In a complete model, if a source Port has delegation connectors to a set of delegated target Ports, then the union of the Interfaces of these target Ports must be signature compatible with the Interface that types the source Port. + + + OCL + true + + + + + An assembly connector must only be defined from a required Interface or Ports to a provided Interface or Port. + + + OCL + true + + + + + Indicates the kind of connector. + + + + + + + The set of Behaviors that specify the valid interaction patterns across the connector. + + + + + + + + ConnectorKind is an enumeration type. + + + + Indicates that the connector is an assembly connector. + + + + + Indicates that the connector is a delegation connector. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A class has the capability to have an internal structure and ports. + + + + + + + + + A collaboration use represents one particular use of a collaboration to explain the relationships between the properties of a classifier. A collaboration use shows how the pattern described by a collaboration is applied in a given context, by binding specific entities from that context to the roles of the collaboration. Depending on the context, these entities could be structural features of a classifier, instance specifications, or even roles in some containing collaboration. There may be multiple occurrences of a given collaboration within a classifier, each involving a different set of roles and connectors. A given role or connector may be involved in multiple occurrences of the same or different collaborations. +Associated dependencies map features of the collaboration type to features in the classifier. These dependencies indicate which role in the classifier plays which role in the collaboration. + + + + All the client elements of a roleBinding are in one classifier and all supplier elements of a roleBinding are in one collaboration and they are compatible. + + + OCL + true + + + + + Every role in the collaboration is bound within the collaboration use to a connectable element within the classifier or operation. + + + OCL + true + + + + + The connectors in the classifier connect according to the connectors in the collaboration + + + OCL + true + + + + + + The collaboration which is used in this occurrence. The collaboration defines the cooperation between its roles which are mapped to properties of the classifier owning the collaboration use. + + + + + + + A mapping between features of the collaboration type and features of the classifier or operation. This mapping indicates which connectable element of the classifier or operation plays which role(s) in the collaboration. A connectable element may be bound to multiple roles in the same collaboration use (that is, it may play multiple roles). + + + + + + + + + A collaboration use represents the application of the pattern described by a collaboration to a specific situation involving specific classes or instances playing the roles of the collaboration. + + + + + + + References connectable elements (possibly owned by other classifiers) which represent roles that instances may play in this collaboration. + + + + + + + + A classifier has the capability to own collaboration uses. These collaboration uses link a collaboration with the classifier to give a description of the workings of the classifier. + + + + + + + References a collaboration use which indicates the collaboration that represents this classifier. + + + + + + + References the collaboration uses owned by the classifier. + + + + + + + + Parameters are allowed to be treated as connectable elements. + + + + A parameter may only be associated with a connector end within the context of a collaboration. + + + OCL + self.end.notEmpty() implies self.collaboration.notEmpty() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A port is a property of a classifier that specifies a distinct interaction point between that classifier and its environment or between the (behavior of the) classifier and its internal parts. Ports are connected to properties of the classifier by connectors through which requests can be made to invoke the behavioral features of a classifier. A Port may specify the services a classifier provides (offers) to its environment as well as the services that a classifier expects (requires) of its environment. + + + + The required interfaces of a port must be provided by elements to which the port is connected. + + + OCL + true + + + + + Port.aggregation must be composite. + + + OCL + true + + + + + When a port is destroyed, all connectors attached to this port will be destroyed also. + + + OCL + true + + + + + A defaultValue for port cannot be specified when the type of the Port is an Interface + + + OCL + true + + + + + + Specifies whether requests arriving at this port are sent to the classifier behavior of this classifier. Such ports are referred to as behavior port. Any invocation of a behavioral feature targeted at a behavior port will be handled by the instance of the owning classifier itself, rather than by any instances that this classifier may contain. + + + + + + + If true indicates that this port is used to provide the published functionality of a classifier; if false, this port is used to implement the classifier but is not part of the essential externally-visible functionality of the classifier and can, therefore, be altered or deleted along with the internal implementation of the classifier and other properties that are considered part of its implementation. + + + + + + + References the interfaces specifying the set of operations and receptions which the classifier expects its environment to handle. This association is derived as the set of interfaces required by the type of the port or its supertypes. + + + + + + + A port may be redefined when its containing classifier is specialized. The redefining port may have additional interfaces to those that are associated with the redefined port or it may replace an interface by one of its subtypes. + + + + + + + References the interfaces specifying the set of operations and receptions which the classifier offers to its environment, and which it will handle either directly or by forwarding it to a part of its internal structure. This association is derived from the interfaces realized by the type of the port or by the type of the port, if the port was typed by an interface. + + + + + + + + + A classifier has the ability to own ports as specific and type checked interaction points. + + + + + References a set of ports that an encapsulated classifier owns. + + + + + + + + A connector end is an endpoint of a connector, which attaches the connector to a connectable element. Each connector end is part of one connector. + + + + If a connector end is attached to a port of the containing classifier, partWithPort will be empty. + + + OCL + true + + + + + If a connector end references both a role and a partWithPort, then the role must be a port that is defined by the type of the partWithPort. + + + OCL + true + + + + + The property held in self.partWithPort must not be a Port. + + + OCL + true + + + + + Indicates the role of the internal structure of a classifier with the port to which the connector end is attached. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to targeting an object, invocation actions can also invoke behavioral features on ports from where the invocation requests are routed onwards on links deriving from attached connectors. Invocation actions may also be sent to a target via a given port, either on the sending object or on another object. + + + + The onPort must be a port on the receiver object. + + + OCL + true + + + + + A optional port of the receiver object on which the behavioral feature is invoked. + + + + + + + + A trigger specification may be qualified by the port on which the event occurred. + + + + A optional port of the receiver object on which the behavioral feature is invoked. + + + + + + + + + + + + + + + + + + + + + + + A connector end is an endpoint of a connector, which attaches the connector to a connectable element. Each connector end is part of one connector. + + + + The multiplicity of the connector end may not be more general than the multiplicity of the association typing the owning connector. + + + OCL + true + + + + + + A derived association referencing the corresponding association end on the association which types the connector owing this connector end. This association is derived by selecting the association end at the same place in the ordering of association ends as this connector end. + + + + + + + + The connectable element attached at this connector end. When an instance of the containing classifier is created, a link may (depending on the multiplicities) be created to an instance of the classifier that types this connectable element. + + + + + + + + + Specifies a link that enables communication between two or more instances. This link may be an instance of an association, or it may represent the possibility of the instances being able to communicate because their identities are known by virtue of being passed in as parameters, held in variables or slots, or because the communicating instances are the same instance. The link may be realized by something as simple as a pointer or by something as complex as a network connection. In contrast to associations, which specify links between any instance of the associated classifiers, connectors specify links between instances playing the connected parts only. + + + + The types of the connectable elements that the ends of a connector are attached to must conform to the types of the association ends of the association that types the connector, if any. + + + OCL + true + + + + + The connectable elements attached to the ends of a connector must be compatible. + + + OCL + true + + + + + The ConnectableElements attached as roles to each ConnectorEnd owned by a Connector must be roles of the Classifier that owned the Connector, or they must be ports of such roles. + + + OCL + true + + + + + + An optional association that specifies the link corresponding to this connector. + + + + + + + A connector may be redefined when its containing classifier is specialized. The redefining connector may have a type that specializes the type of the redefined connector. The types of the connector ends of the redefining connector may specialize the types of the connector ends of the redefined connector. The properties of the connector ends of the redefining connector may be replaced. + + + + + + + A connector consists of at least two connector ends, each representing the participation of instances of the classifiers typing the connectable elements attached to this end. The set of connector ends is ordered. + + + + + + + + A property represents a set of instances that are owned by a containing classifier instance. + + + + + + + A structured classifier is an abstract metaclass that represents any classifier whose behavior can be fully or partly described by the collaboration of owned or referenced instances. + + + + The multiplicities on connected elements must be consistent. + + + OCL + true + + + + + + References the properties owned by the classifier. + + + + + + + References the properties specifying instances that the classifier owns by composition. This association is derived, selecting those owned properties where isComposite is true. + + + + + + + References the roles that instances may play in this classifier. + + + + + + + References the connectors owned by the classifier. + + + + + + + + ConnectableElement is an abstract metaclass representing a set of instances that play roles of a classifier. Connectable elements may be joined by attached connectors and specify configurations of linked instances to be created within an instance of the containing classifier. + + + + + Denotes a connector that attaches to this connectable element. + + + + + + + + A classifier has the capability to own collaboration uses. These collaboration uses link a collaboration with the classifier to give a description of the workings of the classifier. + + + + Refers to all of the Properties that are direct (i.e. not inherited or imported) attributes of the classifier. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A variable is considered a connectable element. + + + + + + + + + + + + + A component deployment is the deployment of one or more artifacts or artifact instances to a deployment target, optionally parameterized by a deployment specification. Examples are executables and configuration files. + + + + + The specification of properties that parameterize the deployment and execution of one or more Artifacts. + + + + + + + + A deployment specification specifies a set of properties that determine execution parameters of a component artifact that is deployed on a node. A deployment specification can be aimed at a specific type of container. An artifact that reifies or implements deployment specification properties is a deployment descriptor. + + + + The deployedElements of a DeploymentTarget that are involved in a Deployment that has an associated Deployment-Specification is a kind of Component (i.e. the configured components). + + + OCL + self.deployment->forAll (d | d.location.deployedElements->forAll (de | de.oclIsKindOf(Component))) + + + + + The DeploymentTarget of a DeploymentSpecification is a kind of ExecutionEnvironment. + + + OCL + result = self.deployment->forAll (d | d.location..oclIsKindOf(ExecutionEnvironment)) + + + + + + The location where an Artifact is deployed onto a Node. This is typically a 'directory' or 'memory address'. + + + + + + + + The location where a component Artifact executes. This may be a local or remote location. + + + + + + + + The deployment with which the DeploymentSpecification is associated. + + + + + + + + + + + + + A deployment is the allocation of an artifact or artifact instance to a deployment target. + + + + + The Artifacts that are deployed onto a Node. This association specializes the supplier association. + + + + + + + The DeployedTarget which is the target of a Deployment. + + + + + + + + A node is computational resource upon which artifacts may be deployed for execution. +Nodes can be interconnected through communication paths to define network structures. + + + + The internal structure of a Node (if defined) consists solely of parts of type Node. + + + OCL + true + + + + + + + The Nodes that are defined (nested) within the Node. + + + + + + + + A device is a physical computational resource with processing capability upon which artifacts may be deployed for execution. Devices may be complex (i.e., they may consist of other devices). + + + + + + An execution environment is a node that offers an execution environment for specific types of components that are deployed on it in the form of executable artifacts. + + + + + + A deployment target is the location for a deployed artifact. + + + + + The set of Deployments for a DeploymentTarget. + + + + + + + The set of elements that are manifested in an Artifact that is involved in Deployment to a DeploymentTarget. + + + + + + + + OCL + result = ((self.deployment->collect(deployedArtifact))->collect(manifestation))->collect(utilizedElement) + + + + + + + + + + + A deployed artifact is an artifact or artifact instance that has been deployed to a deployment target. + + + + + + A communication path is an association between two deployment targets, through which they are able to exchange signals and messages. + + + + The association ends of a CommunicationPath are typed by DeploymentTargets. + + + OCL + result = self.endType->forAll (t | t.oclIsKindOf(DeploymentTarget)) + + + + + + + A property has the capability of being a deployment target in a deployment relationship. This enables modeling the deployment to hierarchical nodes that have properties functioning as internal parts. + + + + A Property can be a DeploymentTarget if it is a kind of Node and functions as a part in the internal structure of an encompassing Node. + + + OCL + true + + + + + + + An instance specification has the capability of being a deployment target in a deployment relationship, in the case that it is an instance of a node. It is also has the capability of being a deployed artifact, if it is an instance of an artifact. + + + + An InstanceSpecification can be a DeploymentTarget if it is the instance specification of a Node and functions as a part in the internal structure of an encompassing Node. + + + OCL + true + + + + + An InstanceSpecification can be a DeployedArtifact if it is the instance specification of an Artifact. + + + OCL + true + + + + + + + + An artifact is the source of a deployment to a node. + + + + + + + + + + + + + + + + + + + + + + + + + + + + An artifact is the specification of a physical piece of information that is used or produced by a software development process, or by deployment and operation of a system. Examples of artifacts include model files, source files, scripts, and binary executable files, a table in a database system, a development deliverable, or a word-processing document, a mail message. + + + + + + A concrete name that is used to refer to the Artifact in a physical context. Example: file system name, universal resource locator. + + + + + + + + The Artifacts that are defined (nested) within the Artifact. +The association is a specialization of the ownedMember association from Namespace to NamedElement. + + + + + + + + The set of model elements that are manifested in the Artifact. That is, these model elements are utilized in the construction (or generation) of the artifact. + + + + + + + The Operations defined for the Artifact. The association is a specialization of the ownedMember association. + + + + + + + The attributes or association ends defined for the Artifact. +The association is a specialization of the ownedMember association. + + + + + + + + + A manifestation is the concrete physical rendering of one or more model elements by an artifact. + + + + + The model element that is utilized in the manifestation in an Artifact. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An interaction is a unit of behavior that focuses on the observable exchange of information between connectable elements. + + + + + + Specifies the participants in this Interaction. + + + + + + + The Messages contained in this Interaction. + + + + + + + The ordered set of fragments in the Interaction. + + + + + + + Actions owned by the Interaction. + + + + + + + + A lifeline represents an individual participant in the interaction. While parts and structural features may have multiplicity greater than 1, lifelines represent only one interacting entity. + + + + If two (or more) InteractionUses within one Interaction, refer to Interactions with 'common Lifelines,' those Lifelines must also appear in the Interaction with the InteractionUses. By common Lifelines we mean Lifelines with the same selector and represents associations. + + + OCL + true + + + + + The selector for a Lifeline must only be specified if the referenced Part is multivalued. + + + OCL + (self.selector->isEmpty() implies not self.represents.isMultivalued()) or (not self.selector->isEmpty() implies self.represents.isMultivalued()) + + + + + The classifier containing the referenced ConnectableElement must be the same classifier, or an ancestor, of the classifier that contains the interaction enclosing this lifeline. + + + OCL + if (represents->notEmpty()) then (if selector->notEmpty() then represents.isMultivalued() else not represents.isMultivalued()) + + + + + + References the InteractionFragments in which this Lifeline takes part. + + + + + + + References the ConnectableElement within the classifier that contains the enclosing interaction. + + + + + + + References the Interaction enclosing this Lifeline. + + + + + + + If the referenced ConnectableElement is multivalued, then this specifies the specific individual part within that set. + + + + + + + + InteractionFragment is an abstract notion of the most general interaction unit. An interaction fragment is a piece of an interaction. Each interaction fragment is conceptually like an interaction by itself. + + + + + References the Lifelines that the InteractionFragment involves. + + + + + + + The general ordering relationships contained in this fragment. + + + + + + + The Interaction enclosing this InteractionFragment. + + + + + + + + A message defines a particular communication between lifelines of an interaction. + + + + If the sending MessageEvent and the receiving MessageEvent of the same Message are on the same Lifeline, the sending MessageEvent must be ordered before the receiving MessageEvent. + + + OCL + true + + + + + The signature must either refer an Operation (in which case messageSort is either synchCall or asynchCall) or a Signal (in which case messageSort is asynchSignal). The name of the NamedElement referenced by signature must be the same as that of the Message. + + + OCL + true + + + + + In the case when the Message signature is an Operation, the arguments of the Message must correspond to the parameters of the Operation. A Parameter corresponds to an Argument if the Argument is of the same Class or a specialization of that of the Parameter. + + + OCL + true + + + + + In the case when the Message signature is a Signal, the arguments of the Message must correspond to the attributes of the Signal. A Message Argument corresponds to a Signal Attribute if the Arguement is of the same Class or a specialization of that of the Attribute. + + + OCL + true + + + + + Arguments of a Message must only be: +i) attributes of the sending lifeline +ii) constants +iii) symbolic values (which are wildcard values representing any legal value) +iv) explicit parameters of the enclosing Interaction +v) attributes of the class owning the Interaction + + + + OCL + true + + + + + Messages cannot cross bounderies of CombinedFragments or their operands. + + + OCL + true + + + + + If the MessageEnds are both OccurrenceSpecifications then the connector must go between the Parts represented by the Lifelines of the two MessageEnds. + + + OCL + true + + + + + + The derived kind of the Message (complete, lost, found or unknown) + + + + + + The sort of communication reflected by the Message + + + + + + References the Receiving of the Message + + + + + + + References the Sending of the Message. + + + + + + + The Connector on which this Message is sent. + + + + + + + The enclosing Interaction owning the Message + + + + + + + The arguments of the Message + + + + + + + The definition of the type or signature of the Message (depending on its kind). The associated named element is derived from the message end that constitutes the sending or receiving message event. If both a sending event and a receiving message event are present, the signature is obtained from the sending event. + + + + + + + + A general ordering represents a binary relation between two occurrence specifications, to describe that one occurrence specification must occur before the other in a valid trace. This mechanism provides the ability to define partial orders of occurrence cpecifications that may otherwise not have a specified order. + + + + + The OccurrenceSpecification referenced comes before the OccurrenceSpecification referenced by after. + + + + + + + The OccurrenceSpecification referenced comes after the OccurrenceSpecification referenced by before. + + + + + + + + An execution specification is a specification of the execution of a unit of behavior or action within the lifeline. The duration of an execution specification is represented by two cccurrence specifications, the start occurrence specification and the finish occurrence specification. + + + + The startEvent and the finishEvent must be on the same Lifeline + + + OCL + start.lifeline = finish.lifeline + + + + + + References the OccurrenceSpecification that designates the start of the Action or Behavior + + + + + + + References the OccurrenceSpecification that designates the finish of the Action or Behavior. + + + + + + + + An occurrence specification is the basic semantic unit of interactions. The sequences of occurrences specified by them are the meanings of interactions. + + + + + References the Lifeline on which the OccurrenceSpecification appears. + + + + + + + References the GeneralOrderings that specify EventOcurrences that must occur after this OccurrenceSpecification + + + + + + + + References the GeneralOrderings that specify EventOcurrences that must occur before this OccurrenceSpecification + + + + + + + + References a specification of the occurring event. + + + + + + + + MessageEnd is an abstract specialization of NamedElement that represents what can occur at the end of a message. + + + + + References a Message. + + + + + + + + A state invariant is a runtime constraint on the participants of the interaction. It may be used to specify a variety of different kinds of constraints, such as values of attributes or variables, internal or external states, and so on. A state invariant is an interaction fragment and it is placed on a lifeline. + + + + + A Constraint that should hold at runtime for this StateInvariant + + + + + + + References the Lifeline on which the StateInvariant appears. + + + + + + + + An action execution specification is a kind of execution specification representing the execution of an action. + + + + The Action referenced by the ActionExecutionSpecification, if any, must be owned by the Interaction owning the ActionExecutionOccurrence. + + + OCL + true + + + + + + Action whose execution is occurring. + + + + + + + + A behavior execution specification is a kind of execution specification representing the execution of a behavior. + + + + + Behavior whose execution is occurring. + + + + + + + + An execution event models the start or finish of an execution occurrence. + + + + + + A creation event models the creation of an object. + + + + No othet OccurrenceSpecification may appear above an OccurrenceSpecification which references a CreationEvent on a given Lifeline in an InteractionOperand. + + + OCL + true + + + + + + + A destruction event models the destruction of an object. + + + + No other OccurrenceSpecifications may appear below an OccurrenceSpecification which references a DestructionEvent on a given Lifeline in an InteractionOperand. + + + OCL + true + + + + + + + A send operation event models the invocation of an operation call. + + + + + The operation associated with this event. + + + + + + + + A send signal event models the sending of a signal. + + + + + The signal associated with this event. + + + + + + + + A message occurrence specification pecifies the occurrence of message events, such as sending and receiving of signals or invoking or receiving of operation calls. A message occurrence specification is a kind of message end. Messages are generated either by synchronous operation calls or asynchronous signal sends. They are received by the execution of corresponding accept event actions. + + + + + + + An execution occurrence specification represents moments in time at which actions or behaviors start or finish. + + + + + References the execution specification describing the execution that is started or finished at this execution event. + + + + + + + The event referenced is restricted to an execution event. + + + + + + + + A receive operation event specifies the event of receiving an operation invocation for a particular operation by the target entity. + + + + + The operation associated with this event. + + + + + + + + A receive signal event specifies the event of receiving a signal by the target entity. + + + + + The signal associated with this event. + + + + + + + + This is an enumerated type that identifies the type of message. + + + + sendEvent and receiveEvent are present + + + + + sendEvent present and receiveEvent absent + + + + + sendEvent absent and receiveEvent present + + + + + sendEvent and receiveEvent absent (should not appear) + + + + + + This is an enumerated type that identifies the type of communication action that was used to generate the message. + + + + The message was generated by a synchronous call to an operation. + + + + + The message was generated by an asynchronous call to an operation; i.e., a CallAction with isSynchronous += false. + + + + + + The message was generated by an asynchronous send action. + + + + + The message designating the creation of another lifeline object. + + + + + The message designating the termination of another lifeline. + + + + + The message is a reply message to an operation call. + + + + + + This association shows the lifelines that make up an interaction. A lifeline may be part of more than one interaction use. + + + + + The event shows the time point at which the action begins execution. + + + + + + + + + The event shows the time point at which the action completes execution. + + + + + + + + + If a Part has multiplicity, multiple lifelines might be used to show it. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An interaction use refers to an interaction. The interaction use is a shorthand for copying the contents of the referenced interaction where the interaction use is. To be accurate the copying must take into account substituting parameters with arguments and connect the formal gates with the actual ones. + + + + Actual Gates of the InteractionUse must match Formal Gates of the referred Interaction. Gates match when their names are equal. + + + OCL + true + + + + + The InteractionUse must cover all Lifelines of the enclosing Interaction which appear within the referred Interaction. + + + OCL + true + + + + + The arguments of the InteractionUse must correspond to parameters of the referred Interaction + + + OCL + true + + + + + The arguments must only be constants, parameters of the enclosing Interaction or attributes of the classifier owning the enclosing Interaction. + + + OCL + true + + + + + + Refers to the Interaction that defines its meaning + + + + + + + The actual gates of the InteractionUse + + + + + + + The actual arguments of the Interaction + + + + + + + + A part decomposition is a description of the internal interactions of one lifeline relative to an interaction. + + + + PartDecompositions apply only to Parts that are Parts of Internal Structures not to Parts of Collaborations. + + + OCL + true + + + + + Assume that within Interaction X, Lifeline L is of class C and decomposed to D. Within X there is a sequence of constructs along L (such constructs are CombinedFragments, InteractionUse and (plain) OccurrenceSpecifications). Then a corresponding sequence of constructs must appear within D, matched one-to-one in the same order. + +i) CombinedFragment covering L are matched with an extra-global CombinedFragment in D +ii) An InteractionUse covering L are matched with a global (i.e. covering all Lifelines) InteractionUse in D. +iii) A plain OccurrenceSpecification on L is considered an actualGate that must be matched by a formalGate of D + + + + OCL + true + + + + + Assume that within Interaction X, Lifeline L is of class C and decomposed to D. Assume also that there is within X an +InteractionUse (say) U that covers L. According to the constraint above U will have a counterpart CU within D. Within the Interaction referenced by U, L should also be decomposed, and the decomposition should reference CU. (This rule is called commutativity of decomposition) + + + + OCL + true + + + + + + + An interaction operand is contained in a combined fragment. An interaction operand represents one operand of the expression given by the enclosing combined fragment. + + + + The guard must be placed directly prior to (above) the OccurrenceSpecification that will become the first OccurrenceSpecification within this InteractionOperand. + + + OCL + true + + + + + The guard must contain only references to values local to the Lifeline on which it resides, or values global to the whole Interaction. + + + OCL + true + + + + + + + Constraint of the operand. + + + + + + + The fragments of the operand. + + + + + + + + An interaction constraint is a Boolean expression that guards an operand in a combined fragment. + + + + The dynamic variables that take part in the constraint must be owned by the ConnectableElement corresponding to the covered Lifeline. + + + OCL + true + + + + + The constraint may contain references to global data or write-once data. + + + OCL + true + + + + + Minint/maxint can only be present if the InteractionConstraint is associated with the operand of a loop CombinedFragment. + + + OCL + true + + + + + If minint is specified, then the expression must evaluate to a non-negative integer. + + + OCL + true + + + + + If maxint is specified, then the expression must evaluate to a positive integer. + + + OCL + true + + + + + If maxint is specified, then minint must be specified and the evaluation of maxint must be >= the evaluation of minint + + + OCL + true + + + + + + The minimum number of iterations of a loop + + + + + + + The maximum number of iterations of a loop + + + + + + + + A gate is a connection point for relating a message outside an interaction fragment with a message inside the interaction fragment. + + + + The message leading to/from an actualGate of an InteractionUse must correspond to the message leading from/to the formalGate with the same name of the Interaction referenced by the InteractionUse. + + + OCL + true + + + + + The message leading to/from an (expression) Gate within a CombinedFragment must correspond to the message leading from/to the CombinedFragment on its outside. + + + OCL + true + + + + + + + A combined fragment defines an expression of interaction fragments. A combined fragment is defined by an interaction operator and corresponding interaction operands. Through the use of combined fragments the user will be able to describe a number of traces in a compact and concise manner. + + + + If the interactionOperator is opt, loop, break, or neg there must be exactly one operand + + + OCL + true + + + + + The InteractionConstraint with minint and maxint only apply when attached to an InteractionOperand where the interactionOperator is loop. + + + OCL + true + + + + + If the interactionOperator is break, the corresponding InteractionOperand must cover all Lifelines within the enclosing InteractionFragment. + + + OCL + true + + + + + The interaction operators 'consider' and 'ignore' can only be used for the CombineIgnoreFragment subtype of CombinedFragment + + + OCL + ((interactionOperator = #consider) or (interactionOperator = #ignore)) implies oclsisTypeOf(CombineIgnoreFragment) + + + + + + Specifies the operation which defines the semantics of this combination of InteractionFragments. + + + + + + The set of operands of the combined fragment. + + + + + + + Specifies the gates that form the interface between this CombinedFragment and its surroundings + + + + + + + + + + Specifies the gates that form the message interface between this Interaction and any InteractionUses which reference it. + + + + + + + + + + References the Interaction that represents the decomposition. + + + + + + + + A continuation is a syntactic way to define continuations of different branches of an alternative combined fragment. Continuations is intuitively similar to labels representing intermediate points in a flow of control. + + + + Continuations with the same name may only cover the same set of Lifelines (within one Classifier). + + + OCL + true + + + + + Continuations are always global in the enclosing InteractionFragment e.g. it always covers all Lifelines covered by the enclosing InteractionFragment. + + + OCL + true + + + + + Continuations always occur as the very first InteractionFragment or the very last InteractionFragment of the enclosing InteractionFragment. + + + OCL + true + + + + + + True: when the Continuation is at the end of the enclosing InteractionFragment and False when it is in the beginning. + + + + + + + + + + The operand enclosing this InteractionFragment (they may nest recursively) + + + + + + + + A consider ignore fragment is a kind of combined fragment that is used for the consider and ignore cases, which require lists of pertinent messages to be specified. + + + + The interaction operator of a ConsiderIgnoreFragment must be either 'consider' or 'ignore'. + + + OCL + (interactionOperator = #consider) or (interactionOperator = #ignore) + + + + + The NamedElements must be of a type of element that identifies a message (e.g., an Operation, Reception, or a Signal). + + + OCL + message->forAll(m | m.oclIsKindOf(Operation) or m.oclIsKindOf(Reception) or m.oclIsKindOf(Signal)) + + + + + + The set of messages that apply to this fragment + + + + + + + + InteractionOperatorKind is an enumeration designating the different kinds of operators of combined fragments. The interaction operand defines the type of operator of a combined fragment. + + + + The interactionOperator seq designates that the CombinedFragment represents a weak sequencing between the behaviors of the operands. + + + + + The interactionOperator alt designates that the CombinedFragment represents a choice of behavior. At most one of the operands will be chosen. The chosen operand must have an explicit or implicit guard expression that evaluates to true at this point in the interaction. An implicit true guard is implied if the operand has no guard. + + + + + The interactionOperator opt designates that the CombinedFragment represents a choice of behavior where either the (sole) operand happens or nothing happens. An option is semantically equivalent to an alternative CombinedFragment where there is one operand with non-empty content and the second operand is empty. + + + + + The interactionOperator break designates that the CombinedFragment represents a breaking scenario in the sense that the operand is a scenario that is performed instead of the remainder of the enclosing InteractionFragment. A break operator with a guard is chosen when the guard is true and the rest of the enclosing Interaction Fragment is ignored. When the guard of the break operand is false, the break operand is ignored and the rest of the enclosing InteractionFragment is chosen. The choice between a break operand without a guard and the rest of the enclosing InteractionFragment is done non-deterministically. + + + + + The interactionOperator par designates that the CombinedFragment represents a parallel merge between the behaviors of the operands. The OccurrenceSpecifications of the different operands can be interleaved in any way as long as the ordering imposed by each operand as such is preserved. + + + + + The interactionOperator strict designates that the CombinedFragment represents a strict sequencing between the behaviors of the operands. The semantics of strict sequencing defines a strict ordering of the operands on the first level within the CombinedFragment with interactionOperator strict. Therefore OccurrenceSpecifications within contained CombinedFragment will not directly be compared with other OccurrenceSpecifications of the enclosing CombinedFragment. + + + + + The interactionOperator loop designates that the CombinedFragment represents a loop. The loop operand will be repeated a number of times. + + + + + The interactionOperator critical designates that the CombinedFragment represents a critical region. A critical region means that the traces of the region cannot be interleaved by other OccurrenceSpecifications (on those Lifelines covered by the region). This means that the region is treated atomically by the enclosing fragment when determining the set of valid traces. Even though enclosing CombinedFragments may imply that some OccurrenceSpecifications may interleave into the region, such as e.g. with par-operator, this is prevented by defining a region. + + + + + The interactionOperator neg designates that the CombinedFragment represents traces that are defined to be invalid. + + + + + The interactionOperator assert designates that the CombinedFragment represents an assertion. The sequences of the operand of the assertion are the only valid continuations. All other continuations result in an invalid trace. + + + + + The interacionOperator ignore designates that there are some message types that are not shown within this combined fragment. These message types can be considered insignificant and are implicitly ignored if they appear in a corresponding execution. Alternatively, one can understand ignore to mean that the message types that are ignored can appear anywhere in the traces. + + + + + The interactionOperator consider designates which messages should be considered within this combined fragment. This is equivalent to defining every other message to be ignored. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + State machines can be used to express the behavior of part of a system. Behavior is modeled as a traversal of a graph of state nodes interconnected by one or more joined transition arcs that are triggered by the dispatching of series of (event) occurrences. During this traversal, the state machine executes a series of activities associated with various elements of the state machine. + + + + The classifier context of a state machine cannot be an interface. + + + OCL + context->notEmpty() implies not context.oclIsKindOf(Interface) + + + + + The context classifier of the method state machine of a behavioral feature must be the classifier that owns the behavioral feature. + + + OCL + specification->notEmpty() implies (context->notEmpty() and specification->featuringClassifier->exists (c | c = context)) + + + + + The connection points of a state machine are pseudostates of kind entry point or exit point. + + + OCL + conectionPoint->forAll (c | c.kind = #entryPoint or c.kind = #exitPoint) + + + + + A state machine as the method for a behavioral feature cannot have entry/exit connection points. + + + OCL + specification->notEmpty() implies connectionPoint->isEmpty() + + + + + + The regions owned directly by the state machine. + + + + + + + The connection points defined for this state machine. They represent the interface of the state machine when used as part of submachine state. + + + + + + + The state machines of which this is an extension. + + + + + + + References the submachine(s) in case of a submachine state. Multiple machines are referenced in case of a concurrent state. + + + + + + + The operation LCA(s1,s2) returns an orthogonal state or region which is the least common ancestor of states s1 and s2, based on the statemachine containment hierarchy. + + + + OCL + true + + + + + + + + + The query ancestor(s1, s2) checks whether s2 is an ancestor state of state s1. context StateMachine::ancestor (s1 : State, s2 : State) : Boolean + + + + + OCL + result = if (s2 = s1) then true else if (s1.container->isEmpty) then true else if (s2.container->isEmpty) then false else (ancestor (s1, s2.container)) + + + + + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of a statemachine are properly related to the redefinition contexts of the specified statemachine to allow this element to redefine the other. The containing classifier of a redefining statemachine must redefine the containing classifier of the redefined statemachine. + + + + OCL + result = true + + + + + + + + + + The query isConsistentWith() specifies that a redefining state machine is consistent with a redefined state machine provided that the redefining state machine is an extension of the redefined state machine: Regions are inherited and regions can be added, inherited regions can be redefined. In case of multiple redefining state machines, extension implies that the redefining state machine gets orthogonal regions for each of the redefined state machines. + + + + OCL + result = true + + + + + + + + + + + A state models a situation during which some (usually implicit) invariant condition holds. + + + + Only submachine states can have connection point references. + + + OCL + isSubmachineState implies connection->notEmpty ( ) + + + + + The connection point references used as destinations/sources of transitions associated with a submachine state must be defined as entry/exit points in the submachine state machine. + + + OCL + self.isSubmachineState implies (self.connection->forAll (cp | cp.entry->forAll (p | p.statemachine = self.submachine) and cp.exit->forAll (p | p.statemachine = self.submachine))) + + + + + A state is not allowed to have both a submachine and regions. + + + OCL + isComposite implies not isSubmachineState + + + + + Only composite states can have entry or exit pseudostates defined. + + + OCL + connectionPoint->notEmpty() implies isComoposite + + + + + Only entry or exit pseudostates can serve as connection points. + + + OCL + connectionPoint->forAll(cp|cp.kind = #entry or cp.kind = #exit) + + + + + + + + A state with isComposite=true is said to be a composite state. A composite state is a state that contains at least one region. + + + + + + + + + A state with isOrthogonal=true is said to be an orthogonal composite state. An orthogonal composite state contains two or more regions. + + + + + + + + + A state with isSimple=true is said to be a simple state. A simple state does not have any regions and it does not refer to any submachine state machine. + + + + + + + + + A state with isSubmachineState=true is said to be a submachine state. Such a state refers to a state machine (submachine). + + + + + + + + + The state machine that is to be inserted in place of the (submachine) state. + + + + + + + The entry and exit connection points used in conjunction with this (submachine) state, i.e. as targets and sources, respectively, in the region with the submachine state. A connection point reference references the corresponding definition of a connection point pseudostate in the statemachine referenced by the submachinestate. + + + + + + + The state of which this state is a redefinition. + + + + + + + The regions owned directly by the state. + + + + + + + References the classifier in which context this element may be redefined. + + + + + + + Specifies conditions that are always true when this state is the current state. In protocol state machines, state invariants are additional conditions to the preconditions of the outgoing transitions, and to the postcondition of the incoming transitions. + + + + + + + + An optional behavior that is executed whenever this state is entered regardless of the transition taken to reach the state. If defined, entry actions are always executed to completion prior to any internal behavior or transitions performed within the state. + + + + + + + + An optional behavior that is executed whenever this state is exited regardless of which transition was taken out of the state. If defined, exit actions are always executed to completion only after all internal activities and transition actions have completed execution. + + + + + + + An optional behavior that is executed while being in the state. The execution starts when this state is entered, and stops either by itself, or when the state is exited, whichever comes first. + + + + + + + The entry and exit pseudostates of a composite state. These can only be entry or exit Pseudostates, and they must have different names. They can only be defined for composite states. + + + + + + + A list of triggers that are candidates to be retained by the state machine if they trigger no transitions out of the state (not consumed). A deferred trigger is retained until the state machine reaches a state configuration where it is no longer deferred. + + + + + + + + A simple state is a state without any regions. + + + + OCL + result = region.isEmpty() + + + + + + + + + A composite state is a state with at least one region. + + + + OCL + result = region.notEmpty() + + + + + + + + + An orthogonal state is a composite state with at least 2 regions + + + + OCL + result = (region->size () > 1) + + + + + + + + + Only submachine states can have a reference statemachine. + + + + OCL + result = submachine.notEmpty() + + + + + + + + + The redefinition context of a state is the nearest containing statemachine. + + + + OCL + result = let sm = containingStateMachine() in if sm.context->isEmpty() or sm.general->notEmpty() then sm else sm.context endif + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of a state are properly related to the redefinition contexts of the specified state to allow this element to redefine the other. The containing region of a redefining state must redefine the containing region of the redefined state. + + + + OCL + result = true + + + + + + + + + + The query isConsistentWith() specifies that a redefining state is consistent with a redefined state provided that the redefining state is an extension of the redefined state: A simple state can be redefined (extended) to become a composite state (by adding a region) and a composite state can be redefined (extended) by adding regions and by adding vertices, states, and transitions to inherited regions. All states may add or replace entry, exit, and 'doActivity' actions. + + + + OCL + result = true + + + + + + + + + + The query containingStateMachine() returns the state machine that contains the state either directly or transitively. + + + + OCL + result = container.containingStateMachine() + + + + + + + + A transition is a directed relationship between a source vertex and a target vertex. It may be part of a compound transition, which takes the state machine from one state configuration to another, representing the complete response of the state machine to an occurrence of an event of a particular type. + + + + A fork segment must not have guards or triggers. + + + OCL + (source.oclIsKindOf(Pseudostate) and source.kind = #fork) implies (guard->isEmpty() and trigger->isEmpty()) + + + + + A join segment must not have guards or triggers. + + + OCL + (target.oclIsKindOf(Pseudostate) and target.kind = #join) implies (guard->isEmpty() and trigger->isEmpty()) + + + + + A fork segment must always target a state. + + + OCL + (source.oclIsKindOf(Pseudostate) and source.kind = #fork) implies (target.oclIsKindOf(State)) + + + + + A join segment must always originate from a state. + + + OCL + (target.oclIsKindOf(Pseudostate) and target.kind = #join) implies (source.oclIsKindOf(State)) + + + + + Transitions outgoing pseudostates may not have a trigger. + + + OCL + source.oclIsKindOf(Pseudostate) and ((source.kind <> #junction) and (source.kind <> #join) and (source.kind <> #initial)) implies trigger->isEmpty() + + + + + An initial transition at the topmost level (region of a statemachine) either has no trigger or it has a trigger with the stereotype <<create>>. + + + OCL + self.source.oclIsKindOf(Pseudostate) implies (self.source.oclAsType(Pseudostate).kind = #initial) implies (self.source.container = self.stateMachine.top) implies ((self.trigger->isEmpty) or (self.trigger.stereotype.name = 'create')) + + + + + In case of more than one trigger, the signatures of these must be compatible in case the parameters of the signal are assigned to local variables/attributes. + + + + OCL + true + + + + + + + Indicates the precise type of the transition. + + + + + + Designates the region that owns this transition. + + + + + + + Designates the originating vertex (state or pseudostate) of the transition. + + + + + + + Designates the target vertex that is reached when the transition is taken. + + + + + + + The transition that is redefined by this transition. + + + + + + + A guard is a constraint that provides a fine-grained control over the firing of the transition. The guard is evaluated when an event occurrence is dispatched by the state machine. If the guard is true at that time, the transition may be enabled, otherwise, it is disabled. Guards should be pure expressions without side effects. Guard expressions with side effects are ill formed. + + + + + + + References the classifier in which context this element may be redefined. + + + + + + + Specifies an optional behavior to be performed when the transition fires. + + + + + + + Specifies the triggers that may fire the transition. + + + + + + + The redefinition context of a transition is the nearest containing statemachine. + + + + OCL + result = let sm = containingStateMachine() in if sm.context->isEmpty() or sm.general->notEmpty() then sm else sm.context endif + + + + + + + The query isConsistentWith() specifies that a redefining transition is consistent with a redefined transition provided that the redefining transition has the following relation to the redefined transition: A redefining transition redefines all properties of the corresponding redefined transition, except the source state and the trigger. + + + + OCL + result = (redefinee.oclIsKindOf(Transition) and let trans: Transition = redefinee.oclAsType(Transition) in (source() = trans.source() and trigger() = tran.trigger()) + + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + + + + + + The query containingStateMachine() returns the state machine that contains the transition either directly or transitively. + + + + OCL + result = container.containingStateMachine() + + + + + + + + A vertex is an abstraction of a node in a state machine graph. In general, it can be the source or destination of any number of transitions. + + + + + The region that contains this vertex. + + + + + + + Specifies the transitions departing from this vertex. + + + + + + + Specifies the transitions entering this vertex. + + + + + + + The operation containingStateMachine() returns the state machine in which this Vertex is defined + + + + OCL + result = if not container->isEmpty() then -- the container is a region container.containingStateMachine() else if (oclIsKindOf(Pseudostate)) then -- entry or exit point? if (kind = #entryPoint) or (kind = #exitPoint) then stateMachine else if (oclIsKindOf(ConnectionPointReference)) then state.containingStateMachine() -- no other valid cases possible endif + + + + + + + + A pseudostate is an abstraction that encompasses different types of transient vertices in the state machine graph. + + + + An initial vertex can have at most one outgoing transition. + + + OCL + (self.kind = #initial) implies (self.outgoing->size <= 1) + + + + + History vertices can have at most one outgoing transition. + + + OCL + ((self.kind = #deepHistory) or (self.kind = #shallowHistory)) implies (self.outgoing->size <= 1) + + + + + In a complete statemachine, a join vertex must have at least two incoming transitions and exactly one outgoing transition. + + + OCL + (self.kind = #join) implies ((self.outgoing->size = 1) and (self.incoming->size >= 2)) + + + + + All transitions incoming a join vertex must originate in different regions of an orthogonal state. + + + OCL + (self.kind = #join) implies self.incoming->forAll (t1, t2 | t1<>t2 implies (self.stateMachine.LCA(t1.source, t2.source).container.isOrthogonal)) + + + + + In a complete statemachine, a fork vertex must have at least two outgoing transitions and exactly one incoming transition. + + + OCL + (self.kind = #fork) implies ((self.incoming->size = 1) and (self.outgoing->size >= 2)) + + + + + All transitions outgoing a fork vertex must target states in different regions of an orthogonal state. + + + OCL + (self.kind = #fork) implies self.outgoing->forAll (t1, t2 | t1<>t2 implies (self.stateMachine.LCA(t1.target, t2.target).container.isOrthogonal)) + + + + + In a complete statemachine, a junction vertex must have at least one incoming and one outgoing transition. + + + OCL + (self.kind = #junction) implies ((self.incoming->size >= 1) and (self.outgoing->size >= 1)) + + + + + In a complete statemachine, a choice vertex must have at least one incoming and one outgoing transition. + + + OCL + (self.kind = #choice) implies ((self.incoming->size >= 1) and (self.outgoing->size >= 1)) + + + + + The outgoing transition from and initial vertex may have a behavior, but not a trigger or a guard. + + + OCL + (self.kind = #initial) implies (self.outgoing.guard->isEmpty() and self.outgoing.trigger->isEmpty()) + + + + + + Determines the precise type of the Pseudostate and can be one of: entryPoint, exitPoint, initial, deepHistory, shallowHistory, join, fork, junction, terminate or choice. + + + + + + The StateMachine in which this Pseudostate is defined. This only applies to Pseudostates of the kind entryPoint or exitPoint. + + + + + + + The State that owns this pseudostate and in which it appears. + + + + + + + + A special kind of state signifying that the enclosing region is completed. If the enclosing region is directly contained in a state machine and all other regions in the state machine also are completed, then it means that the entire state machine is completed. + + + + A final state cannot have any outgoing transitions. + + + OCL + self.outgoing->size() = 0 + + + + + A final state cannot have regions. + + + OCL + self.region->size() = 0 + + + + + A final state cannot reference a submachine. + + + OCL + self.submachine->isEmpty() + + + + + A final state has no entry behavior. + + + OCL + self.entry->isEmpty() + + + + + A final state has no exit behavior. + + + OCL + self.exit->isEmpty() + + + + + A final state has no state (doActivity) behavior. + + + OCL + self.doActivity->isEmpty() + + + + + + + A connection point reference represents a usage (as part of a submachine state) of an entry/exit point defined in the statemachine reference by the submachine state. + + + + The entry Pseudostates must be Pseudostates with kind entryPoint. + + + OCL + entry->notEmpty() implies entry->forAll(e | e.kind = #entryPoint) + + + + + The exit Pseudostates must be Pseudostates with kind exitPoint. + + + OCL + exit->notEmpty() implies exit->forAll(e | e.kind = #exitPoint) + + + + + + The entryPoint kind pseudo states corresponding to this connection point. + + + + + + + The State in which the connection point refreshens are defined. + + + + + + + The exitPoints kind pseudo states corresponding to this connection point. + + + + + + + + A region is an orthogonal part of either a composite state or a state machine. It contains states and transitions. + + + + A region can have at most one initial vertex + + + OCL + self.subvertex->select (v | v.oclIsKindOf(Pseudostate))-> select(p : Pseudostate | p.kind = #initial)->size() <= 1 + + + + + A region can have at most one deep history vertex + + + OCL + self.subvertex->select (v | v.oclIsKindOf(Pseudostate))-> select(p : Pseudostate | p.kind = #deepHistory)->size() <= 1 + + + + + A region can have at most one shallow history vertex + + + OCL + self.subvertex->select(v | v.oclIsKindOf(Pseudostate))-> select(p : Pseudostate | p.kind = #shallowHistory)->size() <= 1 + + + + + If a Region is owned by a StateMachine, then it cannot also be owned by a State and vice versa. + + + OCL + (stateMachine->notEmpty() implies state->isEmpty()) and (state->notEmpty() implies stateMachine->isEmpty()) + + + + + + + The set of vertices that are owned by this region. + + + + + + + The set of transitions owned by the region. Note that internal transitions are owned by a region, but applies to the source state. + + + + + + + The StateMachine that owns the Region. If a Region is owned by a StateMachine, then it cannot also be owned by a State. + + + + + + + The State that owns the Region. If a Region is owned by a State, then it cannot also be owned by a StateMachine. + + + + + + + The region of which this region is an extension. + + + + + + + References the classifier in which context this element may be redefined. + + + + + + + The redefinition context of a region is the nearest containing statemachine + + + + OCL + result = let sm = containingStateMachine() in if sm.context->isEmpty() or sm.general->notEmpty() then sm else sm.context endif + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of a region are properly related to the redefinition contexts of the specified region to allow this element to redefine the other. The containing statemachine/state of a redefining region must redefine the containing statemachine/state of the redefined region. + + + + OCL + result = true + + + + + + + + + + The query isConsistentWith() specifies that a redefining region is consistent with a redefined region provided that the redefining region is an extension of the redefined region, i.e. it adds vertices and transitions and it redefines states and transitions of the redefined region. + + + + OCL + result = true + + + + + + + + + + The operation containingStateMachine() returns the sate machine in which this Region is defined + + + + OCL + result = if stateMachine->isEmpty() then state.containingStateMachine() else stateMachine endif + + + + + + + + A time event can be defined relative to entering the current state of the executing state machine. + + + + The starting time for a relative time event may only be omitted for a time event that is the trigger of a state machine. + + + OCL + true + + + + + + PseudostateKind is an enumeration type. + + + + An initial pseudostate represents a default vertex that is the source for a single transition to the default state of a composite state. There can be at most one initial vertex in a region. The outgoing transition from the initial vertex may have a behavior, but not a trigger or guard. + + + + + DeepHistory represents the most recent active configuration of the composite state that directly contains this pseudostate; e.g. the state configuration that was active when the composite state was last exited. A composite state can have at most one deep history vertex. At most one transition may originate from the history connector to the default deep history state. This transition is taken in case the composite state had never been active before. Entry actions of states entered on the path to the state represented by a deep history are performed. + + + + + ShallowHistory represents the most recent active substate of its containing state (but not the substates of that substate). A composite state can have at most one shallow history vertex. A transition coming into the shallow history vertex is equivalent to a transition coming into the most recent active substate of a state. At most one transition may originate from the history connector to the default shallow history state. This transition is taken in case the composite state had never been active before. Entry actions of states entered on the path to the state represented by a shallow history are performed. + + + + + Join vertices serve to merge several transitions emanating from source vertices in different orthogonal regions. The transitions entering a join vertex cannot have guards or triggers. + + + + + Fork vertices serve to split an incoming transition into two or more transitions terminating on orthogonal target vertices +(i.e. vertices in different regions of a composite state). The segments outgoing from a fork vertex must not have guards or triggers. + + + + + Junction vertices are semantic-free vertices that are used to chain together multiple transitions. They are used to construct compound transition paths between states. For example, a junction can be used to converge multiple incoming transitions into a single outgoing transition representing a shared transition path (this is known as an merge). Conversely, they can be used to split an incoming transition into multiple outgoing transition segments with different guard conditions. This realizes a static conditional branch. (In the latter case, outgoing transitions whose guard conditions evaluate to false are disabled. A predefined guard denoted 'else' may be defined for at most one outgoing transition. This transition is enabled if all the guards labeling the other transitions are false.) Static conditional branches are distinct from dynamic conditional branches that are realized by choice vertices (described below). + + + + + Choice vertices which, when reached, result in the dynamic evaluation of the guards of the triggers of its outgoing transitions. This realizes a dynamic conditional branch. It allows splitting of transitions into multiple outgoing paths such that the decision on which path to take may be a function of the results of prior actions performed in the same run-tocompletion step. If more than one of the guards evaluates to true, an arbitrary one is selected. If none of the guards evaluates to true, then the model is considered ill-formed. (To avoid this, it is recommended to define one outgoing transition with the predefined else guard for every choice vertex.) Choice vertices should be distinguished from static branch points that are based on junction points (described above). + + + + + An entry point pseudostate is an entry point of a state machine or composite state. In each region of the state machine or composite state it has a single transition to a vertex within the same region. + + + + + An exit point pseudostate is an exit point of a state machine or composite state. Entering an exit point within any region of the composite state or state machine referenced by a submachine state implies the exit of this composite state or submachine state and the triggering of the transition that has this exit point as source in the state machine enclosing the submachine or composite state. + + + + + Entering a terminate pseudostate implies that the execution of this state machine by means of its context object is terminated. The state machine does not exit any states nor does it perform any exit actions other than those associated with the transition leading to the terminate pseudostate. Entering a terminate pseudostate is equivalent to invoking a DestroyObjectAction. + + + + + + TransitionKind is an enumeration type. + + + + The source state of a transition with transition kind local must be a composite state. + + + OCL + kind=#local implies owner.source.isComposite + + + + + The source state of a transition with transition kind external must be a composite state. + + + OCL + kind=#external implies owner.source.isComposite + + + + + Implies that the transition, if triggered, occurs without exiting or entering the source state. Thus, it does not cause a state change. This means that the entry or exit condition of the source state will not be invoked. An internal transition can be taken even if the state machine is in one or more regions nested within this state. + + + + + Implies that the transition, if triggered, will not exit the composite (source) state, but it will apply to any state within the composite state, and these will be exited and entered. + + + + + Implies that the transition, if triggered, will exit the composite (source) state. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Protocol state machines can be redefined into more specific protocol state machines, or into behavioral state machines. Protocol conformance declares that the specific protocol state machine specifies a protocol that conforms to the general state machine one, or that the specific behavioral state machine abide by the protocol of the general protocol state machine. + + + + + Specifies the state machine which conforms to the general state machine. + + + + + + + Specifies the protocol state machine to which the specific state machine conforms. + + + + + + + + Since an interface specifies conformance characteristics, it does not own detailed behavior specifications. Instead, interfaces may own a protocol state machine that specifies event sequences and pre/post conditions for the operations and receptions described by the interface. + + + + + References a protocol state machine specifying the legal sequences of the invocation of the behavioral features described in the interface. + + + + + + + + A port has an associated protocol state machine. + + + + References an optional protocol state machine which describes valid interactions at this interaction point. + + + + + + + + A protocol transition specifies a legal transition for an operation. Transitions of protocol state machines have the following information: a pre condition (guard), on trigger, and a post condition. Every protocol transition is associated to zero or one operation (referred BehavioralFeature) that belongs to the context classifier of the protocol state machine. + + + + A protocol transition always belongs to a protocol state machine. + + + OCL + container.belongsToPSM() + + + + + A protocol transition never has associated actions. + + + OCL + effect->isEmpty() + + + + + If a protocol transition refers to an operation (i. e. has a call trigger corresponding to an operation), then that operation should apply to the context classifier of the state machine of the protocol transition. + + + OCL + true + + + + + + Specifies the post condition of the transition which is the condition that should be obtained once the transition is triggered. This post condition is part of the post condition of the operation connected to the transition. + + + + + + + + This association refers to the associated operation. It is derived from the operation of the call trigger when applicable. + + + + + + + Specifies the precondition of the transition. It specifies the condition that should be verified before triggering the transition. This guard condition added to the source state will be evaluated as part of the precondition of the operation referred by the transition if any. + + + + + + + + A protocol state machine is always defined in the context of a classifier. It specifies which operations of the classifier can be called in which state and under which condition, thus specifying the allowed call sequences on the classifier's operations. A protocol state machine presents the possible and permitted transitions on the instances of its context classifier, together with the operations which carry the transitions. In this manner, an instance lifecycle can be created for a classifier, by specifying the order in which the operations can be activated and the states through which an instance progresses during its existence. + + + + A protocol state machine must only have a classifier context, not a behavioral feature context. + + + OCL + (not context->isEmpty( )) and specification->isEmpty() + + + + + All transitions of a protocol state machine must be protocol transitions. (transitions as extended by the ProtocolStateMachines package) + + + OCL + region->forAll(r | r.transition->forAll(t | t.oclIsTypeOf(ProtocolTransition))) + + + + + The states of a protocol state machine cannot have entry, exit, or do activity actions. + + + OCL + region->forAll(r | r.subvertex->forAll(v | v.oclIsKindOf(State) implies (v.entry->isEmpty() and v.exit->isEmpty() and v.doActivity->isEmpty()))) + + + + + Protocol state machines cannot have deep or shallow history pseudostates. + + + OCL + region->forAll (r | r.subvertex->forAll (v | v.oclIsKindOf(Psuedostate) implies ((v.kind <> #deepHistory) and (v.kind <> #shallowHistory))))) + + + + + If two ports are connected, then the protocol state machine of the required interface (if defined) must be conformant to the protocol state machine of the provided interface (if defined). + + + OCL + true + + + + + + Conformance between protocol state machines. + + + + + + + + The states of protocol state machines are exposed to the users of their context classifiers. A protocol state represents an exposed stable situation of its context classifier: when an instance of the classifier is not processing any operation, users of this instance can always know its state configuration. + + + + + + + The operation belongsToPSM () checks if the region belongs to a protocol state machine + + + + OCL + result = if not stateMachine->isEmpty() then oclIsTypeOf(ProtocolStateMachine) else if not state->isEmpty() then state.container.belongsToPSM () else false + + + + + + + + + + + + + + + + + + + + + + + + Specifies the namespace in which the protocol state machine is defined. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An actor specifies a role played by a user or any other system that interacts with the subject. + + + + An actor can only have associations to use cases, components and classes. Furthermore these associations must be binary. + + + OCL + self.ownedAttribute->forAll ( a | (a.association->notEmpty()) implies ((a.association.memberEnd.size() = 2) and (a.opposite.class.oclIsKindOf(UseCase) or (a.opposite.class.oclIsKindOf(Class) and not a.opposite.class.oclIsKindOf(Behavior)))) + + + + + An actor must have a name. + + + OCL + name->notEmpty() + + + + + + + A relationship from an extending use case to an extended use case that specifies how and when the behavior defined in the extending use case can be inserted into the behavior defined in the extended use case. + + + + The extension points referenced by the extend relationship must belong to the use case that is being extended. + + + + + OCL + extensionLocation->forAll (xp | extendedCase.extensionPoint->includes(xp)) + + + + + + + References the use case that is being extended. + + + + + + + References the use case that represents the extension and owns the extend relationship. + + + + + + + References the condition that must hold when the first extension point is reached for the extension to take place. If no constraint is associated with the extend relationship, the extension is unconditional. + + + + + + + + An ordered list of extension points belonging to the extended use case, specifying where the respective behavioral fragments of the extending use case are to be inserted. The first fragment in the extending use case is associated with the first extension point in the list, the second fragment with the second point, and so on. (Note that, in most practical cases, the extending use case has just a single behavior fragment, so that the list of extension points is trivial.) + + + + + + + + + An include relationship defines that a use case contains the behavior defined in another use case. + + + + + + References the use case which will include the addition and owns the include relationship. + + + + + + + References the use case that is to be included. + + + + + + + + + A use case is the specification of a set of actions performed by a system, which yields an observable result that is, typically, of value for one or more actors or other stakeholders of the system. + + + + A UseCase must have a name. + + + OCL + self.name -> notEmpty () + + + + + UseCases can only be involved in binary Associations. + + + OCL + true + + + + + UseCases can not have Associations to UseCases specifying the same subject. + + + OCL + true + + + + + A use case cannot include use cases that directly or indirectly include it. + + + OCL + not self.allIncludedUseCases()->includes(self) + + + + + + References the Include relationships owned by this use case. + + + + + + + References the Extend relationships owned by this use case. + + + + + + + References the ExtensionPoints owned by the use case. + + + + + + + References the subjects to which this use case applies. The subject or its parts realize all the use cases that apply to this subject. Use cases need not be attached to any specific subject, however. The subject may, but need not, own the use cases that apply to it. + + + + + + + The query allIncludedUseCases() returns the transitive closure of all use cases (directly or indirectly) included by this use case. + + + + OCL + result = self.include->union(self.include->collect(in | in.allIncludedUseCases())) + + + + + + + + + + + An extension point identifies a point in the behavior of a use case where that behavior can be extended by the behavior of some other (extending) use case, as specified by an extend relationship. + + + + An ExtensionPoint must have a name. + + + OCL + self.name->notEmpty () + + + + + + References the use case that owns this extension point. + + + + + + + + A classifier has the capability to own use cases. Although the owning classifier typically represents the subject to which the owned use cases apply, this is not necessarily the case. In principle, the same use case can be applied to multiple subjects, as identified by the subject association role of a use case. + + + + + References the use cases owned by this classifier. + + + + + + + The set of use cases for which this Classifier is the subject. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/UML.ecore b/plugins/org.eclipse.emf.cdo.tests/uml2/UML.ecore new file mode 100644 index 0000000000..a31a993392 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/UML.ecore @@ -0,0 +1,15558 @@ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + +
+ + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + +
+ + + + + + +
+ + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + + +
+ + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + + + +
+ + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + +
+ + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + +
+ + + + + + + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+ + + + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+ + + +
+ + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + + +
+ + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + + + + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + + + +
+ + + + +
+ + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + + + +
+ + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + + +
+ + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + +
+ + + + + + + + + +
+ + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/UML.merged.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/UML.merged.uml new file mode 100644 index 0000000000..c76f229627 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/UML.merged.uml @@ -0,0 +1,15806 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An integer is a primitive type representing integer values. + + + + + A Boolean type is used for logical expression, consisting of the predefined values true and false. + + + + + A string is a sequence of characters in some suitable character set used to display information about the model. Character sets may include non-Roman alphabets and characters. + + + + + An unlimited natural is a primitive type representing unlimited natural values. + + + + + A comment is a textual annotation that can be attached to a set of elements. + + + + + Specifies a string that is the comment. + + + + + + + References the Element(s) being commented. + + + + + + + + A directed relationship represents a relationship between a collection of source model elements and a collection of target model elements. + + + + + Specifies the sources of the DirectedRelationship. + + + + + + + Specifies the targets of the DirectedRelationship. + + + + + + + + A literal specification identifies a literal constant being modeled. + + + + + + A literal integer is a specification of an integer value. + + + + + The specified Integer value. + + + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query integerValue() gives the value. + + + + OCL + result = value + + + + + + + + A literal string is a specification of a string value. + + + + + The specified String value. + + + + + + + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query stringValue() gives the value. + + + + OCL + result = value + + + + + + + + A literal Boolean is a specification of a Boolean value. + + + + + The specified Boolean value. + + + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query booleanValue() gives the value. + + + + OCL + result = value + + + + + + + + A literal null specifies the lack of a value. + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query isNull() returns true. + + + + OCL + result = true + + + + + + + + A constraint is a condition or restriction expressed in natural language text or in a machine readable language for the purpose of declaring some of the semantics of an element. + + + + A constraint cannot be applied to itself. + + + OCL + not constrainedElement->includes(self) + + + + + The value specification for a constraint must evaluate to a Boolean value. + + + OCL + self.specification().booleanValue().isOclKindOf(Boolean) + + + + + The value specification for a constraint must evaluate to a Boolean value. + + + OCL + true + + + + + Evaluating the value specification for a constraint must not have side effects. + + + OCL + true + + + + + A constraint cannot be applied to itself. + + + OCL + not constrainedElement->includes(self) + + + + + + The ordered set of Elements referenced by this Constraint. + + + + + + + A condition that must be true when evaluated in order for the constraint to be satisfied. + + + + + + + Specifies the namespace that owns the NamedElement. + + + + + + + + An element import identifies an element in another package, and allows the element to be referenced using its name without a qualifier. + + + + The visibility of an ElementImport is either public or private. + + + OCL + self.visibility = #public or self.visibility = #private + + + + + An importedElement has either public visibility or no visibility at all. + + + OCL + self.importedElement.visibility.notEmpty() implies self.importedElement.visibility = #public + + + + + + Specifies the visibility of the imported PackageableElement within the importing Package. The default visibility is the same as that of the imported element. If the imported element does not have a visibility, it is possible to add visibility to the element import. + + + + + + Specifies the name that should be added to the namespace of the importing package in lieu of the name of the imported packagable element. The aliased name must not clash with any other member name in the importing package. By default, no alias is used. + + + + + + + Specifies the PackageableElement whose name is to be added to a Namespace. + + + + + + + Specifies the Namespace that imports a PackageableElement from another Package. + + + + + + + The query getName() returns the name under which the imported PackageableElement will be known in the importing namespace. + + + + OCL + result = if self.alias->notEmpty() then self.alias else self.importedElement.name endif + + + + + + + + A typed element is a kind of named element that represents an element with a type. + + + A typed element has a type. + + + + + This information is derived from the return result for this Operation. + + + The type of the TypedElement. + + + + + + + + A feature declares a behavioral or structural characteristic of instances of classifiers. + + + + + Specifies whether this feature characterizes individual instances classified by the classifier (false) or the classifier itself (true). + + + + + + The Classifiers that have this Feature as a feature. + + + + + + + + A redefinable element is an element that, when defined in the context of a classifier, can be redefined more specifically or differently in the context of another classifier that specializes (directly or indirectly) the context classifier. + + + + At least one of the redefinition contexts of the redefining element must be a specialization of at least one of the redefinition contexts for each redefined element. + + + OCL + self.redefinedElement->forAll(e | self.isRedefinitionContextValid(e)) + + + + + A redefining element must be consistent with each redefined element. + + + OCL + self.redefinedElement->forAll(re | re.isConsistentWith(self)) + + + + + + Indicates whether it is possible to further specialize a RedefinableElement. If the value is true, then it is not possible to further specialize the RedefinableElement. + + + + + + The redefinable element that is being redefined by this element. + + + + + + + References the contexts that this element may be redefined from. + + + + + + + The query isConsistentWith() specifies, for any two RedefinableElements in a context in which redefinition is possible, whether redefinition would be logically consistent. By default, this is false; this operation must be overridden for subclasses of RedefinableElement to define the consistency conditions. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = false + + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of this RedefinableElement are properly related to the redefinition contexts of the specified RedefinableElement to allow this element to redefine the other. By default at least one of the redefinition contexts of this element must be a specialization of at least one of the redefinition contexts of the specified element. + + + + OCL + result = redefinitionContext->exists(c | c.allParents()->includes(redefined.redefinitionContext))) + + + + + + + + + A structural feature is a typed feature of a classifier that specifies the structure of instances of the classifier. + + + By specializing multiplicity element, it supports a multiplicity that specifies valid cardinalities for the collection of values associated with an instantiation of the structural feature. + + + + + + + States whether the feature's value may be modified by a client. + + + + + + + A slot specifies that an entity modeled by an instance specification has a value or values for a specific structural feature. + + + + + The instance specification that owns this slot. + + + + + + + The structural feature that specifies the values that may be held by the slot. + + + + + + + The value or values corresponding to the defining feature for the owning instance specification. + + + + + + + + A package import is a relationship that allows the use of unqualified names to refer to package members from other namespaces. + + + + The visibility of a PackageImport is either public or private. + + + OCL + self.visibility = #public or self.visibility = #private + + + + + + Specifies the visibility of the imported PackageableElements within the importing Namespace, i.e., whether imported elements will in turn be visible to other packages that use that importingPackage as an importedPackage. If the PackageImport is public, the imported elements will be visible outside the package, while if it is private they will not. + + + + + + Specifies the Namespace that imports the members from a Package. + + + + + + + Specifies the Package whose members are imported into a Namespace. + + + + + + + + A data type is a type whose instances are identified only by their value. A data type may contain attributes to support the modeling of structured data types. + + + + + The Attributes owned by the DataType. + + + + + + + The Operations owned by the DataType. + + + + + + + Creates an operation with the specified name, parameter names, parameter types, and return type (or null) as an owned operation of this data type. + + + + + The name for the new operation, or null. + + + + + + + The parameter names for the new operation, or null. + + + + + + + The parameter types for the new operation, or null. + + + + + + + The return type for the new operation, or null. + + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this data type. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + The inherit operation is overridden to exclude redefined properties. + + + + OCL + result = inhs->excluding(inh | ownedMember->select(oclIsKindOf(RedefinableElement))->select(redefinedElement->includes(inh))) + + + + + + + + + + + + + + + An enumeration is a data type whose values are enumerated in the model as enumeration literals. + + + + + The ordered set of literals for this Enumeration. + + + + + + + + An enumeration literal is a user-defined data value for an enumeration. + + + + + The Enumeration that this EnumerationLiteral is a member of. + + + + + + + + A primitive type defines a predefined data type, without any relevant substructure (i.e., it has no parts in the context of UML). A primitive datatype may have an algebra and operations defined outside of UML, for example, mathematically. + + + + + + An association describes a set of tuples whose values refer to typed instances. An instance of an association is called a link. + + + + An association specializing another association has the same number of ends as the other association. + + + OCL + self.parents()->forAll(p | p.memberEnd.size() = self.memberEnd.size()) + + + + + When an association specializes another association, every end of the specific association corresponds to an end of the general association, and the specific end reaches the same type or a subtype of the more general end. + + + OCL + true + + + + + Only binary associations can be aggregations. + + + OCL + self.memberEnd->exists(aggregation <> Aggregation::none) implies self.memberEnd->size() = 2 + + + + + Association ends of associations with more than two ends must be owned by the association. + + + OCL + if memberEnd->size() > 2 then ownedEnd->includesAll(memberEnd) + + + + + + + Specifies whether the association is derived from other model elements such as other associations or constraints. + + + + + + The ends that are owned by the association itself. + + + + + + + References the classifiers that are used as types of the ends of the association. + + + + + + + Each end represents participation of instances of the classifier connected to the end in links of the association. + + + + + + + The navigable ends that are owned by the association itself. + + + + + + + Determines whether this association is a binary association, i.e. whether it has exactly two member ends. + + + + + + endType is derived from the types of the member ends. + + + + OCL + result = self.memberEnd->collect(e | e.type) + + + + + + + + + + + Relationship is an abstract concept that specifies some kind of relationship between elements. + + + + + Specifies the elements related by the Relationship. + + + + + + + + A package merge defines how the contents of one package are extended by the contents of another package. + + + + + References the Package that is being extended with the contents of the merged package of the PackageMerge. + + + + + + + References the Package that is to be merged with the receiving package of the PackageMerge. + + + + + + + + An instance value is a value specification that identifies an instance. + + + + + The instance that is the specified value. + + + + + + + + + + + A literal unlimited natural is a specification of an unlimited natural number. + + + + + The specified UnlimitedNatural value. + + + + + + + + + The query isComputable() is redefined to be true. + + + + OCL + result = true + + + + + + + The query unlimitedValue() gives the value. + + + + OCL + result = value + + + + + + + + A type is a named element that is used as the type for a typed element. A type can be contained in a package. + + + A type constrains the values represented by a typed element. + + + + + Specifies the owning package of this classifier, if any. + + + + + + + Creates a(n) (binary) association between this type and the specified other type, with the specified navigabilities, aggregations, names, lower bounds, and upper bounds, and owned by this type's nearest package. + + + + + The navigability for the first end of the new association. + + + + + The aggregation for the first end of the new association. + + + + + The name for the first end of the new association. + + + + + The lower bound for the first end of the new association. + + + + + The upper bound for the first end of the new association. + + + + + The type for the first end of the new association. + + + + + The navigability for the second end of the new association. + + + + + The aggregation for the second end of the new association. + + + + + The name for the second end of the new association. + + + + + The lower bound for the second end of the new association. + + + + + The upper bound for the second end of the new association. + + + + + + Retrieves the associations in which this type is involved. + + + + + + + + + The query conformsTo() gives true for a type that conforms to another. By default, two types do not conform to each other. This query is intended to be redefined for specific conformance situations. + + + + OCL + result = false + + + + + + + + + An expression is a structured tree of symbols that denotes a (possibly empty) set of values when evaluated in a context. + + + An expression represents a node in an expression tree, which may be non-terminal or terminal. It defines a symbol, and has a possibly empty sequence of operands which are value specifications. + + + + + The symbol associated with the node in the expression tree. + + + + + + + Specifies a sequence of operands. + + + + + + + + AggregationKind is an enumeration type that specifies the literals for defining the kind of aggregation of a property. + + + + Indicates that the property has no aggregation. + + + + + Indicates that the property has a shared aggregation. + + + + + Indicates that the property is aggregated compositely, i.e., the composite object has responsibility for the existence and storage of the composed objects (parts). + + + + + + Parameter direction kind is an enumeration type that defines literals used to specify direction of parameters. + + + + Indicates that parameter values are passed into the behavioral element by the caller. + + + + + Indicates that parameter values are passed into a behavioral element by the caller and then back out to the caller from the behavioral element. + + + + + Indicates that parameter values are passed from a behavioral element out to the caller. + + + + + Indicates that parameter values are passed as return values from a behavioral element back to the caller. + + + + + + VisibilityKind is an enumeration type that defines literals to determine the visibility of elements in a model. + + + + The query bestVisibility() examines a set of VisibilityKinds, and returns public as the preferred visibility. + + + + OCL + pre: not vis->includes(#protected) and not vis->includes(#package) + + + + + OCL + result = if vis->includes(#public) then #public else #private endif + + + + + + + + + + + A public element is visible to all elements that can access the contents of the namespace that owns it. + + + + + A private element is only visible inside the namespace that owns it. + + + + + A protected element is visible to elements that have a generalization relationship to the namespace that owns it. + + + + + A package element is owned by a namespace that is not a package, and is visible to elements that are in the same package as its owning namespace. Only named elements that are not owned by packages can be marked as having package visibility. Any element marked as having package visibility is visible to all elements within the nearest enclosing package (given that other owning elements have proper visibility). Outside the nearest enclosing package, an element marked as having package visibility is not visible. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An opaque expression is an uninterpreted textual statement that denotes a (possibly empty) set of values when evaluated in a context. + + + Provides a mechanism for precisely defining the behavior of an opaque expression. An opaque expression is defined by a behavior restricted to return one result. + + + + If the language attribute is not empty, then the size of the body and language arrays must be the same. + + + OCL + language->notEmpty() implies (body->size() = language->size()) + + + + + The behavior may only have return result parameters. + + + OCL + self.behavior.notEmpty() implies self.behavior.ownedParameters->select(p | p.direction<>#return)->isEmpty() + + + + + The behavior must have exactly one return result parameter. + + + OCL + self.behavior.notEmpty() implies self.behavior.ownedParameter->select(p | p.direction=#return)->size() = 1 + + + + + + The text of the expression, possibly in multiple languages. + + + + + + + Specifies the languages in which the expression is stated. The interpretation of the expression body depends on the languages. If the languages are unspecified, they might be implicit from the expression body or the context. Languages are matched to body strings by order. + + + + + + + Restricts an opaque expression to return exactly one return result. When the invocation of the opaque expression completes, a single set of values is returned to its owner. This association is derived from the single return result parameter of the associated behavior. + + + + + + + Specifies the behavior of the opaque expression. + + + + + + + + + + + + + + + + The query value() gives an integer value for an expression intended to produce one. + + + + OCL + self.isIntegral() + + + + + OCL + true + + + + + + + The query isIntegral() tells whether an expression is intended to produce an integer. + + + + OCL + result = false + + + + + + + The query isPositive() tells whether an integer expression has a positive value. + + + + OCL + self.isIntegral() + + + + + OCL + result = false + + + + + + + The query isNonNegative() tells whether an integer expression has a non-negative value. + + + + OCL + self.isIntegral() + + + + + OCL + result = false + + + + + + + + An behavior with implementation-specific semantics. + + + + + Specifies the behavior in one or more languages. + + + + + + + Languages the body strings use in the same order as the body strings. + + + + + + + + A function behavior is an opaque behavior that does not access or modify any objects or other external data. + + + + A function behavior has at least one output parameter. + + + OCL + self.ownedParameters-> select(p | p.direction=#out or p.direction=#inout or p.direction=#return)->size() >= 1 + + + + + The types of parameters are all data types, which may not nest anything but other datatypes. + + + OCL + def: hasAllDataTypeAttributes(d : DataType) : Boolean = d.ownedAttribute->forAll(a | a.type.oclIsTypeOf(DataType) and hasAllDataTypeAttributes(a.type)) self.ownedParameters->forAll(p | p.type.notEmpty() and p.oclIsTypeOf(DataType) and hasAllDataTypeAttributes(p)) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An action with implementation-specific semantics. + + + + + Specifies the action in one or more languages. + + + + + + + Languages the body strings use, in the same order as the body strings + + + + + + + Provides input to the action. + + + + + + + Takes output from the action. + + + + + + + + CallAction is an abstract class for actions that invoke behavior and receive return values. + + + + Only synchronous call actions can have result pins. + + + OCL + true + + + + + The number and order of argument pins must be the same as the number and order of parameters of the invoked behavior or behavioral feature. Pins are matched to parameters by order. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument pin must be the same as the corresponding parameter of the behavior or behavioral feature. + + + OCL + true + + + + + + If true, the call is synchronous and the caller waits for completion of the invoked behavior. +If false, the call is asynchronous and the caller proceeds immediately and does not expect a return values. + + + + + + + A list of output pins where the results of performing the invocation are placed. + + + + + + + + A send signal action is an action that creates a signal instance from its inputs, and transmits it to the target object, where it may cause the firing of a state machine transition or the execution of an activity. The argument values are available to the execution of associated behaviors. The requestor continues execution immediately. Any reply message is ignored and is not transmitted to the requestor. If the input is already a signal instance, use a send object action. + + + + The number and order of argument pins must be the same as the number and order of attributes in the signal. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument pin must be the same as the corresponding attribute of the signal. + + + OCL + true + + + + + + The target object to which the signal is sent. + + + + + + + The type of signal transmitted to the target object. + + + + + + + + A call operation action is an action that transmits an operation call request to the target object, where it may cause the invocation of associated behavior. The argument values of the action are available to the execution of the invoked behavior. If the action is marked synchronous, the execution of the call operation action waits until the execution of the invoked behavior completes and a reply transmission is returned to the caller; otherwise execution of the action is complete when the invocation of the operation is established and the execution of the invoked operation proceeds concurrently with the execution of the calling behavior. Any values returned as part of the reply transmission are put on the result output pins of the call operation action. Upon receipt of the reply transmission, execution of the call operation action is complete. + + + + The number of argument pins and the number of owned parameters of the operation of type in and in-out must be equal. + + + OCL + true + + + + + The number of result pins and the number of owned parameters of the operation of type return, out, and in-out must be equal. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument or result pin is derived from the corresponding owned parameter of the operation. + + + + OCL + true + + + + + The type of the target pin must be the same as the type that owns the operation. + + + OCL + true + + + + + + The operation to be invoked by the action execution. + + + + + + + The target object to which the request is sent. The classifier of the target object is used to dynamically determine a behavior to invoke. This object constitutes the context of the execution of the operation. + + + + + + + + A call behavior action is a call action that invokes a behavior directly rather than invoking a behavioral feature that, in turn, results in the invocation of that behavior. The argument values of the action are available to the execution of the invoked behavior. For synchronous calls the execution of the call behavior action waits until the execution of the invoked behavior completes and a result is returned on its output pin. The action completes immediately without a result, if the call is asynchronous. In particular, the invoked behavior may be an activity. + + + + The number of argument pins and the number of parameters of the behavior of type in and in-out must be equal. + + + OCL + true + + + + + The number of result pins and the number of parameters of the behavior of type return, out, and in-out must be equal. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument or result pin is derived from the corresponding parameter of the behavior. + + + + OCL + true + + + + + + The invoked behavior. It must be capable of accepting and returning control. + + + + + + + + A multiplicity is a definition of an inclusive interval of non-negative integers beginning with a lower bound and ending with a (possibly infinite) upper bound. A multiplicity element embeds this information to specify the allowable cardinalities for an instantiation of this element. + + + + A multiplicity must define at least one valid cardinality that is greater than zero. + + + OCL + upperBound()->notEmpty() implies upperBound() > 0 + + + + + The lower bound must be a non-negative integer literal. + + + OCL + lowerBound()->notEmpty() implies lowerBound() >= 0 + + + + + The upper bound must be greater than or equal to the lower bound. + + + OCL + (upperBound()->notEmpty() and lowerBound()->notEmpty()) implies upperBound() >= lowerBound() + + + + + If a non-literal ValueSpecification is used for the lower or upper bound, then evaluating that specification must not have side effects. + + + OCL + true + + + + + If a non-literal ValueSpecification is used for the lower or upper bound, then that specification must be a constant expression. + + + OCL + true + + + + + + For a multivalued multiplicity, this attribute specifies whether the values in an instantiation of this element are sequentially ordered. + + + + + + For a multivalued multiplicity, this attributes specifies whether the values in an instantiation of this element are unique. + + + + + + Specifies the upper bound of the multiplicity interval. + + + + + + + + Specifies the lower bound of the multiplicity interval. + + + + + + + + The specification of the upper bound for this multiplicity. + + + + + + + The specification of the lower bound for this multiplicity. + + + + + + + + + + + + + The derived lower attribute must equal the lowerBound. + + + + OCL + result = lowerBound() + + + + + + + The derived upper attribute must equal the upperBound. + + + + OCL + result = upperBound() + + + + + + + The query isMultivalued() checks whether this multiplicity has an upper bound greater than one. + + + + OCL + upperBound()->notEmpty() + + + + + OCL + result = upperBound() > 1 + + + + + + + The query includesCardinality() checks whether the specified cardinality is valid for this multiplicity. + + + + OCL + upperBound()->notEmpty() and lowerBound()->notEmpty() + + + + + OCL + result = (lowerBound() <= C) and (upperBound() >= C) + + + + + + + + The query includesMultiplicity() checks whether this multiplicity includes all the cardinalities allowed by the specified multiplicity. + + + + OCL + self.upperBound()->notEmpty() and self.lowerBound()->notEmpty() and M.upperBound()->notEmpty() and M.lowerBound()->notEmpty() + + + + + OCL + result = (self.lowerBound() <= M.lowerBound()) and (self.upperBound() >= M.upperBound()) + + + + + + + + The query lowerBound() returns the lower bound of the multiplicity as an integer. + + + + OCL + result = if lowerValue->isEmpty() then 1 else lowerValue.integerValue() endif + + + + + + + The query upperBound() returns the upper bound of the multiplicity for a bounded multiplicity as an unlimited natural. + + + + OCL + result = if upperValue->isEmpty() then 1 else upperValue.unlimitedValue() endif + + + + + + + The operation compatibleWith takes another multiplicity as input. It checks if one multiplicity is compatible with another. + + + + OCL + result = Integer.allInstances()->forAll(i : Integer | self.includesCardinality(i) implies other.includesCardinality(i)) + + + + + + + + The operation is determines if the upper and lower bound of the ranges are the ones given. + + + + OCL + result = (lowerbound = self.lowerbound and upperbound = self.upperbound) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A sequence node is a structured activity node that executes its actions in order. + + + + + An ordered set of executable nodes. + + + + + + + + An input pin is a pin that holds input values to be consumed by an action. + + + + Input pins may have outgoing edges only when they are on actions that are structured nodes, and these edges must target a node contained by the structured node. + + + OCL + true + + + + + + + An output pin is a pin that holds output values produced by an action. + + + + Output pins may have incoming edges only when they are on actions that are structured nodes, and these edges may not target a node contained by the structured node. + + + OCL + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A usage is a relationship in which one element requires another element (or set of elements) for its full implementation or operation. A usage is a dependency in which the client requires the presence of the supplier. + + + + + + An abstraction is a relationship that relates two elements or sets of elements that represent the same concept at different levels of abstraction or from different viewpoints. + + + + + An composition of an Expression that states the abstraction relationship between the supplier and the client. In some cases, such as Derivation, it is usually formal and unidirectional; in other cases, such as Trace, it is usually informal and bidirectional. The mapping expression is optional and may be omitted if the precise relationship between the elements is not specified. + + + + + + + + A dependency is a relationship that signifies that a single or a set of model elements requires other model elements for their specification or implementation. This means that the complete semantics of the depending elements is either semantically or structurally dependent on the definition of the supplier element(s). + + + + + + The element(s) independent of the client element(s), in the same respect and the same dependency relationship. In some directed dependency relationships (such as Refinement Abstractions), a common convention in the domain of class-based OO software is to put the more abstract element in this role. Despite this convention, users of UML may stipulate a sense of dependency suitable for their domain, which makes a more abstract element dependent on that which is more specific. + + + + + + + The element(s) dependent on the supplier element(s). In some cases (such as a Trace Abstraction) the assignment of direction (that is, the designation of the client element) is at the discretion of the modeler, and is a stipulation. + + + + + + + + Realization is a specialized abstraction relationship between two sets of model elements, one representing a specification (the supplier) and the other represents an implementation of the latter (the client). Realization can be used to model stepwise refinement, optimizations, transformations, templates, model synthesis, framework composition, etc. + + + + + + A substitution is a relationship between two classifiers signifies that the substituting classifier complies with the contract specified by the contract classifier. This implies that instances of the substituting classifier are runtime substitutable where instances of the contract classifier are expected. + + + + + The contract with which the substituting classifier complies. + + + + + + + Instances of the substituting classifier are runtime substitutable where instances of the contract classifier are expected. + + + + + + + + A namespace is an element in a model that contains a set of named elements that can be identified by name. + + + + All the members of a Namespace are distinguishable within it. + + + OCL + membersAreDistinguishable() + + + + + + References the ElementImports owned by the Namespace. + + + + + + + References the PackageImports owned by the Namespace. + + + + + + + Specifies a set of Constraints owned by this Namespace. + + + + + + + A collection of NamedElements identifiable within the Namespace, either by being owned or by being introduced by importing or inheritance. + + + + + + + References the PackageableElements that are members of this Namespace as a result of either PackageImports or ElementImports. + + + + + + + A collection of NamedElements owned by the Namespace. + + + + + + + Creates an import of the specified element into this namespace with the specified visibility. + + + + + The element to import. + + + + + The visibility for the new element import. + + + + + + Creates an import of the specified package into this namespace with the specified visibility. + + + + + The package to import. + + + + + The visibility for the new package import. + + + + + + Retrieves the elements imported by this namespace. + + + + + + + + + Retrieves the packages imported by this namespace. + + + + + + + + + The importedMember property is derived from the ElementImports and the PackageImports. References the PackageableElements that are members of this Namespace as a result of either PackageImports or ElementImports. + + + + OCL + result = self.importMembers(self.elementImport.importedElement.asSet()- >union(self.packageImport.importedPackage->collect(p | p.visibleMembers()))) + + + + + + + + + + The query getNamesOfMember() takes importing into account. It gives back the set of names that an element would have in an importing namespace, either because it is owned, or if not owned then imported individually, or if not individually then from a package. + + + The query getNamesOfMember() gives a set of all of the names that a member would have in a Namespace. In general a member can have multiple names in a Namespace if it is imported more than once with different aliases. The query takes account of importing. It gives back the set of names that an element would have in an importing namespace, either because it is owned, or if not owned then imported individually, or if not individually then from a package. + + + + OCL + result = if self.ownedMember ->includes(element) then Set{}->include(element.name) else let elementImports: ElementImport = self.elementImport->select(ei | ei.importedElement = element) in if elementImports->notEmpty() then elementImports->collect(el | el.getName()) else self.packageImport->select(pi | pi.importedPackage.visibleMembers()->includes(element))-> collect(pi | pi.importedPackage.getNamesOfMember(element)) endif endif + + + + + + + + + + + The Boolean query membersAreDistinguishable() determines whether all of the namespace's members are distinguishable within it. + + + + OCL + result = self.member->forAll( memb | self.member->excluding(memb)->forAll(other | memb.isDistinguishableFrom(other, self))) + + + + + + + The query importMembers() defines which of a set of PackageableElements are actually imported into the namespace. This excludes hidden ones, i.e., those which have names that conflict with names of owned members, and also excludes elements which would have the same name when imported. + + + + OCL + result = self.excludeCollisions(imps)->select(imp | self.ownedMember->forAll(mem | mem.imp.isDistinguishableFrom(mem, self))) + + + + + + + + + + + + + + The query excludeCollisions() excludes from a set of PackageableElements any that would not be distinguishable from each other in this namespace. + + + + OCL + result = imps->reject(imp1 | imps.exists(imp2 | not imp1.isDistinguishableFrom(imp2, self))) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates the dependencies that reference the supplier. + + + + + + + + + + An interface realization is a specialized realization relationship between a classifier and an interface. This relationship signifies that the realizing classifier conforms to the contract specified by the interface. + + + + + References the Interface specifying the conformance contract. + + + + + + + References the BehavioredClassifier that owns this Interfacerealization (i.e., the classifier that realizes the Interface to which it points). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A structured classifier is an abstract metaclass that represents any classifier whose behavior can be fully or partly described by the collaboration of owned or referenced instances. + + + + The multiplicities on connected elements must be consistent. + + + OCL + true + + + + + + References the properties owned by the classifier. + + + + + + + References the properties specifying instances that the classifier owns by composition. This association is derived, selecting those owned properties where isComposite is true. + + + + + + + References the roles that instances may play in this classifier. + + + + + + + References the connectors owned by the classifier. + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this structured classifier. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Variables are elements for passing data between actions indirectly. A local variable stores values shared by the actions within a structured activity group but not accessible outside it. The output of an action may be written to a variable and read for the input to a subsequent action, which is effectively an indirect data flow path. Because there is no predefined relationship between actions that read and write variables, these actions must be sequenced by control flows to prevent race conditions that may occur between actions that read or write the same variable. + + + A variable is considered a connectable element. + + + + A variable is owned by a StructuredNode or Activity, but not both. + + + OCL + true + + + + + + + A structured activity node that owns the variable. + + + + + + + An activity that owns the variable. + + + + + + + The isAccessibleBy() operation is not defined in standard UML. Implementations should define it to specify which actions can access a variable. + + + + + OCL + result = true + + + + + + + + + A collaboration use represents one particular use of a collaboration to explain the relationships between the properties of a classifier. A collaboration use shows how the pattern described by a collaboration is applied in a given context, by binding specific entities from that context to the roles of the collaboration. Depending on the context, these entities could be structural features of a classifier, instance specifications, or even roles in some containing collaboration. There may be multiple occurrences of a given collaboration within a classifier, each involving a different set of roles and connectors. A given role or connector may be involved in multiple occurrences of the same or different collaborations. +Associated dependencies map features of the collaboration type to features in the classifier. These dependencies indicate which role in the classifier plays which role in the collaboration. + + + + All the client elements of a roleBinding are in one classifier and all supplier elements of a roleBinding are in one collaboration and they are compatible. + + + OCL + true + + + + + Every role in the collaboration is bound within the collaboration use to a connectable element within the classifier or operation. + + + OCL + true + + + + + The connectors in the classifier connect according to the connectors in the collaboration + + + OCL + true + + + + + + The collaboration which is used in this occurrence. The collaboration defines the cooperation between its roles which are mapped to properties of the classifier owning the collaboration use. + + + + + + + A mapping between features of the collaboration type and features of the classifier or operation. This mapping indicates which connectable element of the classifier or operation plays which role(s) in the collaboration. A connectable element may be bound to multiple roles in the same collaboration use (that is, it may play multiple roles). + + + + + + + + + A collaboration use represents the application of the pattern described by a collaboration to a specific situation involving specific classes or instances playing the roles of the collaboration. + + + + + + References connectable elements (possibly owned by other classifiers) which represent roles that instances may play in this collaboration. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A control node is an abstract activity node that coordinates flows in an activity. + + + + + + A control flow is an edge that starts an activity node after the previous one is finished. + + + + Control flows may not have object nodes at either end, except for object nodes with control type. + + + OCL + true + + + + + + + An initial node is a control node at which flow starts when the activity is invoked. + + + + An initial node has no incoming edges. + + + OCL + true + + + + + Only control edges can have initial nodes as source. + + + OCL + true + + + + + + + An activity parameter node is an object node for inputs and outputs to activities. + + + + Activity parameter nodes must have parameters from the containing activity. + + + OCL + true + + + + + The type of an activity parameter node is the same as the type of its parameter. + + + OCL + true + + + + + An activity parameter node may have all incoming edges or all outgoing edges, but it must not have both incoming and outgoing edges. + + + OCL + true + + + + + Activity parameter object nodes with no incoming edges and one or more outgoing edges must have a parameter with in or inout direction. + + + + OCL + true + + + + + Activity parameter object nodes with no outgoing edges and one or more incoming edges must have a parameter with out, inout, or return direction. + + + + OCL + true + + + + + + The parameter the object node will be accepting or providing values for. + + + + + + + + A value pin is an input pin that provides a value by evaluating a value specification. + + + + The type of value specification must be compatible with the type of the value pin. + + + OCL + true + + + + + Value pins have no incoming edges. + + + OCL + true + + + + + + Value that the pin will provide. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A message defines a particular communication between lifelines of an interaction. + + + + If the sending MessageEvent and the receiving MessageEvent of the same Message are on the same Lifeline, the sending MessageEvent must be ordered before the receiving MessageEvent. + + + OCL + true + + + + + The signature must either refer an Operation (in which case messageSort is either synchCall or asynchCall) or a Signal (in which case messageSort is asynchSignal). The name of the NamedElement referenced by signature must be the same as that of the Message. + + + OCL + true + + + + + In the case when the Message signature is an Operation, the arguments of the Message must correspond to the parameters of the Operation. A Parameter corresponds to an Argument if the Argument is of the same Class or a specialization of that of the Parameter. + + + OCL + true + + + + + In the case when the Message signature is a Signal, the arguments of the Message must correspond to the attributes of the Signal. A Message Argument corresponds to a Signal Attribute if the Arguement is of the same Class or a specialization of that of the Attribute. + + + OCL + true + + + + + Arguments of a Message must only be: +i) attributes of the sending lifeline +ii) constants +iii) symbolic values (which are wildcard values representing any legal value) +iv) explicit parameters of the enclosing Interaction +v) attributes of the class owning the Interaction + + + + OCL + true + + + + + Messages cannot cross bounderies of CombinedFragments or their operands. + + + OCL + true + + + + + If the MessageEnds are both OccurrenceSpecifications then the connector must go between the Parts represented by the Lifelines of the two MessageEnds. + + + OCL + true + + + + + + The derived kind of the Message (complete, lost, found or unknown) + + + + + + The sort of communication reflected by the Message + + + + + + References the Receiving of the Message + + + + + + + References the Sending of the Message. + + + + + + + The Connector on which this Message is sent. + + + + + + + The enclosing Interaction owning the Message + + + + + + + The arguments of the Message + + + + + + + The definition of the type or signature of the Message (depending on its kind). The associated named element is derived from the message end that constitutes the sending or receiving message event. If both a sending event and a receiving message event are present, the signature is obtained from the sending event. + + + + + + + + + + + + + + + + + A general ordering represents a binary relation between two occurrence specifications, to describe that one occurrence specification must occur before the other in a valid trace. This mechanism provides the ability to define partial orders of occurrence cpecifications that may otherwise not have a specified order. + + + + + The OccurrenceSpecification referenced comes before the OccurrenceSpecification referenced by after. + + + + + + + The OccurrenceSpecification referenced comes after the OccurrenceSpecification referenced by before. + + + + + + + + An execution specification is a specification of the execution of a unit of behavior or action within the lifeline. The duration of an execution specification is represented by two cccurrence specifications, the start occurrence specification and the finish occurrence specification. + + + + The startEvent and the finishEvent must be on the same Lifeline + + + OCL + start.lifeline = finish.lifeline + + + + + + References the OccurrenceSpecification that designates the start of the Action or Behavior + + + + + + + References the OccurrenceSpecification that designates the finish of the Action or Behavior. + + + + + + + + An occurrence specification is the basic semantic unit of interactions. The sequences of occurrences specified by them are the meanings of interactions. + + + + + References the Lifeline on which the OccurrenceSpecification appears. + + + + + + + References the GeneralOrderings that specify EventOcurrences that must occur after this OccurrenceSpecification + + + + + + + + References the GeneralOrderings that specify EventOcurrences that must occur before this OccurrenceSpecification + + + + + + + + References a specification of the occurring event. + + + + + + + + MessageEnd is an abstract specialization of NamedElement that represents what can occur at the end of a message. + + + + + References a Message. + + + + + + + + A state invariant is a runtime constraint on the participants of the interaction. It may be used to specify a variety of different kinds of constraints, such as values of attributes or variables, internal or external states, and so on. A state invariant is an interaction fragment and it is placed on a lifeline. + + + + + A Constraint that should hold at runtime for this StateInvariant + + + + + + + References the Lifeline on which the StateInvariant appears. + + + + + + + + An action execution specification is a kind of execution specification representing the execution of an action. + + + + The Action referenced by the ActionExecutionSpecification, if any, must be owned by the Interaction owning the ActionExecutionOccurrence. + + + OCL + true + + + + + + Action whose execution is occurring. + + + + + + + + A behavior execution specification is a kind of execution specification representing the execution of a behavior. + + + + + Behavior whose execution is occurring. + + + + + + + + An execution event models the start or finish of an execution occurrence. + + + + + + A creation event models the creation of an object. + + + + No othet OccurrenceSpecification may appear above an OccurrenceSpecification which references a CreationEvent on a given Lifeline in an InteractionOperand. + + + OCL + true + + + + + + + A destruction event models the destruction of an object. + + + + No other OccurrenceSpecifications may appear below an OccurrenceSpecification which references a DestructionEvent on a given Lifeline in an InteractionOperand. + + + OCL + true + + + + + + + A send operation event models the invocation of an operation call. + + + + + The operation associated with this event. + + + + + + + + A send signal event models the sending of a signal. + + + + + The signal associated with this event. + + + + + + + + A message occurrence specification pecifies the occurrence of message events, such as sending and receiving of signals or invoking or receiving of operation calls. A message occurrence specification is a kind of message end. Messages are generated either by synchronous operation calls or asynchronous signal sends. They are received by the execution of corresponding accept event actions. + + + + + + + An execution occurrence specification represents moments in time at which actions or behaviors start or finish. + + + + + References the execution specification describing the execution that is started or finished at this execution event. + + + + + + + The event referenced is restricted to an execution event. + + + + + + + + A receive operation event specifies the event of receiving an operation invocation for a particular operation by the target entity. + + + + + The operation associated with this event. + + + + + + + + A receive signal event specifies the event of receiving a signal by the target entity. + + + + + The signal associated with this event. + + + + + + + + This is an enumerated type that identifies the type of message. + + + + sendEvent and receiveEvent are present + + + + + sendEvent present and receiveEvent absent + + + + + sendEvent absent and receiveEvent present + + + + + sendEvent and receiveEvent absent (should not appear) + + + + + + This is an enumerated type that identifies the type of communication action that was used to generate the message. + + + + The message was generated by a synchronous call to an operation. + + + + + The message was generated by an asynchronous call to an operation; i.e., a CallAction with isSynchronous += false. + + + + + + The message was generated by an asynchronous send action. + + + + + The message designating the creation of another lifeline object. + + + + + The message designating the termination of another lifeline. + + + + + The message is a reply message to an operation call. + + + + + + This association shows the lifelines that make up an interaction. A lifeline may be part of more than one interaction use. + + + + + The event shows the time point at which the action begins execution. + + + + + + + + + The event shows the time point at which the action completes execution. + + + + + + + + + If a Part has multiplicity, multiple lifelines might be used to show it. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An actor specifies a role played by a user or any other system that interacts with the subject. + + + + An actor can only have associations to use cases, components and classes. Furthermore these associations must be binary. + + + OCL + self.ownedAttribute->forAll ( a | (a.association->notEmpty()) implies ((a.association.memberEnd.size() = 2) and (a.opposite.class.oclIsKindOf(UseCase) or (a.opposite.class.oclIsKindOf(Class) and not a.opposite.class.oclIsKindOf(Behavior)))) + + + + + An actor must have a name. + + + OCL + name->notEmpty() + + + + + + + A relationship from an extending use case to an extended use case that specifies how and when the behavior defined in the extending use case can be inserted into the behavior defined in the extended use case. + + + + The extension points referenced by the extend relationship must belong to the use case that is being extended. + + + + + OCL + extensionLocation->forAll (xp | extendedCase.extensionPoint->includes(xp)) + + + + + + + References the use case that is being extended. + + + + + + + References the use case that represents the extension and owns the extend relationship. + + + + + + + References the condition that must hold when the first extension point is reached for the extension to take place. If no constraint is associated with the extend relationship, the extension is unconditional. + + + + + + + + An ordered list of extension points belonging to the extended use case, specifying where the respective behavioral fragments of the extending use case are to be inserted. The first fragment in the extending use case is associated with the first extension point in the list, the second fragment with the second point, and so on. (Note that, in most practical cases, the extending use case has just a single behavior fragment, so that the list of extension points is trivial.) + + + + + + + + + An include relationship defines that a use case contains the behavior defined in another use case. + + + + + + References the use case which will include the addition and owns the include relationship. + + + + + + + References the use case that is to be included. + + + + + + + + + A use case is the specification of a set of actions performed by a system, which yields an observable result that is, typically, of value for one or more actors or other stakeholders of the system. + + + + A UseCase must have a name. + + + OCL + self.name -> notEmpty () + + + + + UseCases can only be involved in binary Associations. + + + OCL + true + + + + + UseCases can not have Associations to UseCases specifying the same subject. + + + OCL + true + + + + + A use case cannot include use cases that directly or indirectly include it. + + + OCL + not self.allIncludedUseCases()->includes(self) + + + + + + References the Include relationships owned by this use case. + + + + + + + References the Extend relationships owned by this use case. + + + + + + + References the ExtensionPoints owned by the use case. + + + + + + + References the subjects to which this use case applies. The subject or its parts realize all the use cases that apply to this subject. Use cases need not be attached to any specific subject, however. The subject may, but need not, own the use cases that apply to it. + + + + + + + The query allIncludedUseCases() returns the transitive closure of all use cases (directly or indirectly) included by this use case. + + + + OCL + result = self.include->union(self.include->collect(in | in.allIncludedUseCases())) + + + + + + + + + + + An extension point identifies a point in the behavior of a use case where that behavior can be extended by the behavior of some other (extending) use case, as specified by an extend relationship. + + + + An ExtensionPoint must have a name. + + + OCL + self.name->notEmpty () + + + + + + References the use case that owns this extension point. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A call event models the receipt by an object of a message invoking a call of an operation. + + + + + Designates the operation whose invocation raised the call event. + + + + + + + + A change event models a change in the system configuration that makes a condition true. + + + + + A Boolean-valued expression that will result in a change event whenever its value changes from false to true. + + + + + + + + A reception is a declaration stating that a classifier is prepared to react to the receipt of a signal. A reception designates a signal and specifies the expected behavioral response. The details of handling a signal are specified by the behavior associated with the reception or the classifier itself. + + + + A Reception can not be a query. + + + OCL + not self.isQuery + + + + + + The signal that this reception handles. + + + + + + + + A signal is a specification of send request instances communicated between objects. The receiving object handles the received request instances as specified by its receptions. The data carried by a send request (which was passed to it by the send invocation occurrence that caused that request) are represented as attributes of the signal. A signal is defined independently of the classifiers handling the signal occurrence. + + + + + The attributes owned by the signal. + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this signal. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + A signal event represents the receipt of an asynchronous signal instance. A signal event may, for example, cause a state machine to trigger a transition. + + + + + The specific signal that is associated with this event. + + + + + + A message event specifies the receipt by an object of either a call or a signal. + + + + + + A transition trigger associated with an any receive event specifies that the transition is to be triggered by the receipt of any message that is not explicitly referenced in another transition from the same vertex. + + + + + + A behaviored classifier may have an interface realization. + + + A classifier can have behavior specifications defined in its namespace. One of these may specify the behavior of the classifier itself. + + + + If a behavior is classifier behavior, it does not have a specification. + + + OCL + self.classifierBehavior.notEmpty() implies self.specification.isEmpty() + + + + + + References behavior specifications owned by a classifier. + + + + + + + A behavior specification that specifies the behavior of the classifier itself. + + + + + + + The set of InterfaceRealizations owned by the BehavioredClassifier. Interface realizations reference the Interfaces of which the BehavioredClassifier is an implementation. + + + + + + + References Trigger descriptions owned by a Classifier. + + + + + + + Retrieves the interfaces on which this behaviored classifier has an interface realization dependency. + + + + + + + + + Retrieves all the interfaces on which this behaviored classifier or any of its parents has an interface realization dependency. + + + + + + + + + + An event is the specification of some occurrence that may potentially trigger effects by an object. + + + + + + CallConcurrencyKind is an enumeration type. + + + + No concurrency management mechanism is associated with the operation and, therefore, concurrency conflicts may occur. Instances that invoke a behavioral feature need to coordinate so that only one invocation to a target on any behavioral feature occurs at once. + + + + + Multiple invocations of a behavioral feature may occur simultaneously to one instance, but only one is allowed to commence. The others are blocked until the performance of the first behavioral feature is complete. It is the responsibility of the system designer to ensure that deadlocks do not occur due to simultaneous blocks. + + + + + Multiple invocations of a behavioral feature may occur simultaneously to one instance and all of them may proceed concurrently. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A fork node is a control node that splits a flow into multiple concurrent flows. + + + + A fork node has one incoming edge. + + + OCL + true + + + + + The edges coming into and out of a fork node must be either all object flows or all control flows. + + + OCL + true + + + + + + + A flow final node is a final node that terminates a flow. + + + + + + A central buffer node is an object node for managing flows from multiple sources and destinations. + + + + + + An activity partition is a kind of activity group for identifying actions that have some characteristic in common. + + + + A partition with isDimension = true may not be contained by another partition. + + + OCL + true + + + + + If a partition represents a part, then all the non-external partitions in the same dimension and at the same level of nesting in that dimension must represent parts directly contained in the internal structure of the same classifier. + + + OCL + true + + + + + If a non-external partition represents a classifier and is contained in another partition, then the containing partition must represent a classifier, and the classifier of the subpartition must be nested in the classifier represented by the containing partition, or be at the contained end of a strong composition association with the classifier represented by the containing partition. + + + OCL + true + + + + + If a partition represents a part and is contained by another partition, then the part must be of a classifier represented by the containing partition, or of a classifier that is the type of a part representing the containing partition. + + + OCL + true + + + + + + + Tells whether the partition groups other partitions along a dimension. + + + + + + Tells whether the partition represents an entity to which the partitioning structure does not apply. + + + + + + Edges immediately contained in the group. + + + + + + + Nodes immediately contained in the group. + + + + + + + Partitions immediately contained in the partition. + + + + + + + Partition immediately containing the partition. + + + + + + + An element constraining behaviors invoked by nodes in the partition. + + + + + + + + A merge node is a control node that brings together multiple alternate flows. It is not used to synchronize concurrent flows but to accept one among several alternate flows. + + + + A merge node has one outgoing edge. + + + OCL + true + + + + + The edges coming into and out of a merge node must be either all object flows or all control flows. + + + OCL + true + + + + + + + A decision node is a control node that chooses between outgoing flows. + + + + A decision node has one incoming edge. + + + OCL + true + + + + + A decision input behavior has zero or one input parameter and one output parameter. Any input parameter must be the same as or a supertype of the type of object tokens coming along the incoming edge. The behavior cannot have side effects. + + + OCL + true + + + + + The edges coming into and out of a decision node must be either all object flows or all control flows. + + + OCL + true + + + + + + Provides input to guard specifications on edges outgoing from the decision node. + + + + + + + + A final node is an abstract control node at which a flow in an activity stops. + + + + A final node has no outgoing edges. + + + OCL + true + + + + + + + An activity final node is a final node that stops all flows in an activity. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A classifier has the ability to own ports as specific and type checked interaction points. + + + + + References a set of ports that an encapsulated classifier owns. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The realization concept is specialized to (optionally) define the classifiers that realize the contract offered by a component in terms of its provided and required interfaces. The component forms an abstraction from these various classifiers. + + + + + The Component that owns this ComponentRealization and which is implemented by its realizing classifiers. + + + + + + + A classifier that is involved in the implementation of the Component that owns this ComponentRealization. + + + + + + + + Specifies a link that enables communication between two or more instances. This link may be an instance of an association, or it may represent the possibility of the instances being able to communicate because their identities are known by virtue of being passed in as parameters, held in variables or slots, or because the communicating instances are the same instance. The link may be realized by something as simple as a pointer or by something as complex as a network connection. In contrast to associations, which specify links between any instance of the associated classifiers, connectors specify links between instances playing the connected parts only. + + + A delegation connector is a connector that links the external contract of a component (as specified by its ports) to the internal realization of that behavior by the component's parts. It represents the forwarding of signals (operation requests and events): a signal that arrives at a port that has a delegation connector to a part or to another port will be passed on to that target for handling. +An assembly connector is a connector between two components that defines that one component provides the services that another component requires. An assembly connector is a connector that is defined from a required interface or port to a provided interface or port. + + + + The types of the connectable elements that the ends of a connector are attached to must conform to the types of the association ends of the association that types the connector, if any. + + + OCL + true + + + + + The connectable elements attached to the ends of a connector must be compatible. + + + OCL + true + + + + + The ConnectableElements attached as roles to each ConnectorEnd owned by a Connector must be roles of the Classifier that owned the Connector, or they must be ports of such roles. + + + OCL + true + + + + + A delegation connector must only be defined between used Interfaces or Ports of the same kind, e.g. between two provided Ports or between two required Ports. + + + OCL + true + + + + + If a delegation connector is defined between a used Interface or Port and an internal Part Classifier, then that Classifier must have an 'implements' relationship to the Interface type of that Port. + + + OCL + true + + + + + If a delegation connector is defined between a source Interface or Port and a target Interface or Port, then the target Interface must support a signature compatible subset of Operations of the source Interface or Port. + + + OCL + true + + + + + In a complete model, if a source Port has delegation connectors to a set of delegated target Ports, then the union of the Interfaces of these target Ports must be signature compatible with the Interface that types the source Port. + + + OCL + true + + + + + An assembly connector must only be defined from a required Interface or Ports to a provided Interface or Port. + + + OCL + true + + + + + + An optional association that specifies the link corresponding to this connector. + + + + + + + A connector may be redefined when its containing classifier is specialized. The redefining connector may have a type that specializes the type of the redefined connector. The types of the connector ends of the redefining connector may specialize the types of the connector ends of the redefined connector. The properties of the connector ends of the redefining connector may be replaced. + + + + + + + A connector consists of at least two connector ends, each representing the participation of instances of the classifiers typing the connectable elements attached to this end. The set of connector ends is ordered. + + + + + + + Indicates the kind of connector. + + + + + + + The set of Behaviors that specify the valid interaction patterns across the connector. + + + + + + + + ConnectorKind is an enumeration type. + + + + Indicates that the connector is an assembly connector. + + + + + Indicates that the connector is a delegation connector. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A manifestation is the concrete physical rendering of one or more model elements by an artifact. + + + + + The model element that is utilized in the manifestation in an Artifact. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A node is computational resource upon which artifacts may be deployed for execution. +Nodes can be interconnected through communication paths to define network structures. + + + + The internal structure of a Node (if defined) consists solely of parts of type Node. + + + OCL + true + + + + + + + The Nodes that are defined (nested) within the Node. + + + + + + + + A device is a physical computational resource with processing capability upon which artifacts may be deployed for execution. Devices may be complex (i.e., they may consist of other devices). + + + + + + An execution environment is a node that offers an execution environment for specific types of components that are deployed on it in the form of executable artifacts. + + + + + + A deployment target is the location for a deployed artifact. + + + + + The set of Deployments for a DeploymentTarget. + + + + + + + The set of elements that are manifested in an Artifact that is involved in Deployment to a DeploymentTarget. + + + + + + + + OCL + result = ((self.deployment->collect(deployedArtifact))->collect(manifestation))->collect(utilizedElement) + + + + + + + + + + + A deployed artifact is an artifact or artifact instance that has been deployed to a deployment target. + + + + + + A communication path is an association between two deployment targets, through which they are able to exchange signals and messages. + + + + The association ends of a CommunicationPath are typed by DeploymentTargets. + + + OCL + result = self.endType->forAll (t | t.oclIsKindOf(DeploymentTarget)) + + + + + + + An instance specification is a model element that represents an instance in a modeled system. + + + An instance specification has the capability of being a deployment target in a deployment relationship, in the case that it is an instance of a node. It is also has the capability of being a deployed artifact, if it is an instance of an artifact. + + + + The defining feature of each slot is a structural feature (directly or inherited) of a classifier of the instance specification. + + + OCL + slot->forAll(s | classifier->exists (c | c.allFeatures()->includes (s.definingFeature))) + + + + + One structural feature (including the same feature inherited from multiple classifiers) is the defining feature of at most one slot in an instance specification. + + + OCL + classifier->forAll(c | (c.allFeatures()->forAll(f | slot->select(s | s.definingFeature = f)->size() <= 1))) + + + + + An InstanceSpecification can be a DeploymentTarget if it is the instance specification of a Node and functions as a part in the internal structure of an encompassing Node. + + + OCL + true + + + + + An InstanceSpecification can be a DeployedArtifact if it is the instance specification of an Artifact. + + + OCL + true + + + + + + + + The classifier or classifiers of the represented instance. If multiple classifiers are specified, the instance is classified by all of them. + + + + + + + A slot giving the value or values of a structural feature of the instance. An instance specification can have one slot per structural feature of its classifiers, including inherited features. It is not necessary to model a slot for each structural feature, in which case the instance specification is a partial description. + + + + + + + A specification of how to compute, derive, or construct the instance. + + + + + + + + An artifact is the specification of a physical piece of information that is used or produced by a software development process, or by deployment and operation of a system. Examples of artifacts include model files, source files, scripts, and binary executable files, a table in a database system, a development deliverable, or a word-processing document, a mail message. + + + An artifact is the source of a deployment to a node. + + + + + + A concrete name that is used to refer to the Artifact in a physical context. Example: file system name, universal resource locator. + + + + + + + The Artifacts that are defined (nested) within the Artifact. +The association is a specialization of the ownedMember association from Namespace to NamedElement. + + + + + + + + The set of model elements that are manifested in the Artifact. That is, these model elements are utilized in the construction (or generation) of the artifact. + + + + + + + The Operations defined for the Artifact. The association is a specialization of the ownedMember association. + + + + + + + The attributes or association ends defined for the Artifact. +The association is a specialization of the ownedMember association. + + + + + + + + Creates an operation with the specified name, parameter names, parameter types, and return type (or null) as an owned operation of this artifact. + + + + + The name for the new operation, or null. + + + + + + + The parameter names for the new operation, or null. + + + + + + + The parameter types for the new operation, or null. + + + + + + + The return type for the new operation, or null. + + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this artifact. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + An interaction use refers to an interaction. The interaction use is a shorthand for copying the contents of the referenced interaction where the interaction use is. To be accurate the copying must take into account substituting parameters with arguments and connect the formal gates with the actual ones. + + + + Actual Gates of the InteractionUse must match Formal Gates of the referred Interaction. Gates match when their names are equal. + + + OCL + true + + + + + The InteractionUse must cover all Lifelines of the enclosing Interaction which appear within the referred Interaction. + + + OCL + true + + + + + The arguments of the InteractionUse must correspond to parameters of the referred Interaction + + + OCL + true + + + + + The arguments must only be constants, parameters of the enclosing Interaction or attributes of the classifier owning the enclosing Interaction. + + + OCL + true + + + + + + Refers to the Interaction that defines its meaning + + + + + + + The actual gates of the InteractionUse + + + + + + + The actual arguments of the Interaction + + + + + + + + A part decomposition is a description of the internal interactions of one lifeline relative to an interaction. + + + + PartDecompositions apply only to Parts that are Parts of Internal Structures not to Parts of Collaborations. + + + OCL + true + + + + + Assume that within Interaction X, Lifeline L is of class C and decomposed to D. Within X there is a sequence of constructs along L (such constructs are CombinedFragments, InteractionUse and (plain) OccurrenceSpecifications). Then a corresponding sequence of constructs must appear within D, matched one-to-one in the same order. + +i) CombinedFragment covering L are matched with an extra-global CombinedFragment in D +ii) An InteractionUse covering L are matched with a global (i.e. covering all Lifelines) InteractionUse in D. +iii) A plain OccurrenceSpecification on L is considered an actualGate that must be matched by a formalGate of D + + + + OCL + true + + + + + Assume that within Interaction X, Lifeline L is of class C and decomposed to D. Assume also that there is within X an +InteractionUse (say) U that covers L. According to the constraint above U will have a counterpart CU within D. Within the Interaction referenced by U, L should also be decomposed, and the decomposition should reference CU. (This rule is called commutativity of decomposition) + + + + OCL + true + + + + + + + An interaction operand is contained in a combined fragment. An interaction operand represents one operand of the expression given by the enclosing combined fragment. + + + + The guard must be placed directly prior to (above) the OccurrenceSpecification that will become the first OccurrenceSpecification within this InteractionOperand. + + + OCL + true + + + + + The guard must contain only references to values local to the Lifeline on which it resides, or values global to the whole Interaction. + + + OCL + true + + + + + + + Constraint of the operand. + + + + + + + The fragments of the operand. + + + + + + + + An interaction constraint is a Boolean expression that guards an operand in a combined fragment. + + + + The dynamic variables that take part in the constraint must be owned by the ConnectableElement corresponding to the covered Lifeline. + + + OCL + true + + + + + The constraint may contain references to global data or write-once data. + + + OCL + true + + + + + Minint/maxint can only be present if the InteractionConstraint is associated with the operand of a loop CombinedFragment. + + + OCL + true + + + + + If minint is specified, then the expression must evaluate to a non-negative integer. + + + OCL + true + + + + + If maxint is specified, then the expression must evaluate to a positive integer. + + + OCL + true + + + + + If maxint is specified, then minint must be specified and the evaluation of maxint must be >= the evaluation of minint + + + OCL + true + + + + + + The minimum number of iterations of a loop + + + + + + + The maximum number of iterations of a loop + + + + + + + + A gate is a connection point for relating a message outside an interaction fragment with a message inside the interaction fragment. + + + + The message leading to/from an actualGate of an InteractionUse must correspond to the message leading from/to the formalGate with the same name of the Interaction referenced by the InteractionUse. + + + OCL + true + + + + + The message leading to/from an (expression) Gate within a CombinedFragment must correspond to the message leading from/to the CombinedFragment on its outside. + + + OCL + true + + + + + + + A combined fragment defines an expression of interaction fragments. A combined fragment is defined by an interaction operator and corresponding interaction operands. Through the use of combined fragments the user will be able to describe a number of traces in a compact and concise manner. + + + + If the interactionOperator is opt, loop, break, or neg there must be exactly one operand + + + OCL + true + + + + + The InteractionConstraint with minint and maxint only apply when attached to an InteractionOperand where the interactionOperator is loop. + + + OCL + true + + + + + If the interactionOperator is break, the corresponding InteractionOperand must cover all Lifelines within the enclosing InteractionFragment. + + + OCL + true + + + + + The interaction operators 'consider' and 'ignore' can only be used for the CombineIgnoreFragment subtype of CombinedFragment + + + OCL + ((interactionOperator = #consider) or (interactionOperator = #ignore)) implies oclsisTypeOf(CombineIgnoreFragment) + + + + + + Specifies the operation which defines the semantics of this combination of InteractionFragments. + + + + + + The set of operands of the combined fragment. + + + + + + + Specifies the gates that form the interface between this CombinedFragment and its surroundings + + + + + + + + An interaction is a unit of behavior that focuses on the observable exchange of information between connectable elements. + + + + + + Specifies the participants in this Interaction. + + + + + + + The Messages contained in this Interaction. + + + + + + + The ordered set of fragments in the Interaction. + + + + + + + Actions owned by the Interaction. + + + + + + + Specifies the gates that form the message interface between this Interaction and any InteractionUses which reference it. + + + + + + + + + A lifeline represents an individual participant in the interaction. While parts and structural features may have multiplicity greater than 1, lifelines represent only one interacting entity. + + + + If two (or more) InteractionUses within one Interaction, refer to Interactions with 'common Lifelines,' those Lifelines must also appear in the Interaction with the InteractionUses. By common Lifelines we mean Lifelines with the same selector and represents associations. + + + OCL + true + + + + + The selector for a Lifeline must only be specified if the referenced Part is multivalued. + + + OCL + (self.selector->isEmpty() implies not self.represents.isMultivalued()) or (not self.selector->isEmpty() implies self.represents.isMultivalued()) + + + + + The classifier containing the referenced ConnectableElement must be the same classifier, or an ancestor, of the classifier that contains the interaction enclosing this lifeline. + + + OCL + if (represents->notEmpty()) then (if selector->notEmpty() then represents.isMultivalued() else not represents.isMultivalued()) + + + + + + References the InteractionFragments in which this Lifeline takes part. + + + + + + + References the ConnectableElement within the classifier that contains the enclosing interaction. + + + + + + + References the Interaction enclosing this Lifeline. + + + + + + + If the referenced ConnectableElement is multivalued, then this specifies the specific individual part within that set. + + + + + + + References the Interaction that represents the decomposition. + + + + + + + + A continuation is a syntactic way to define continuations of different branches of an alternative combined fragment. Continuations is intuitively similar to labels representing intermediate points in a flow of control. + + + + Continuations with the same name may only cover the same set of Lifelines (within one Classifier). + + + OCL + true + + + + + Continuations are always global in the enclosing InteractionFragment e.g. it always covers all Lifelines covered by the enclosing InteractionFragment. + + + OCL + true + + + + + Continuations always occur as the very first InteractionFragment or the very last InteractionFragment of the enclosing InteractionFragment. + + + OCL + true + + + + + + True: when the Continuation is at the end of the enclosing InteractionFragment and False when it is in the beginning. + + + + + + + InteractionFragment is an abstract notion of the most general interaction unit. An interaction fragment is a piece of an interaction. Each interaction fragment is conceptually like an interaction by itself. + + + + + References the Lifelines that the InteractionFragment involves. + + + + + + + The general ordering relationships contained in this fragment. + + + + + + + The Interaction enclosing this InteractionFragment. + + + + + + + The operand enclosing this InteractionFragment (they may nest recursively) + + + + + + + + A consider ignore fragment is a kind of combined fragment that is used for the consider and ignore cases, which require lists of pertinent messages to be specified. + + + + The interaction operator of a ConsiderIgnoreFragment must be either 'consider' or 'ignore'. + + + OCL + (interactionOperator = #consider) or (interactionOperator = #ignore) + + + + + The NamedElements must be of a type of element that identifies a message (e.g., an Operation, Reception, or a Signal). + + + OCL + message->forAll(m | m.oclIsKindOf(Operation) or m.oclIsKindOf(Reception) or m.oclIsKindOf(Signal)) + + + + + + The set of messages that apply to this fragment + + + + + + + + InteractionOperatorKind is an enumeration designating the different kinds of operators of combined fragments. The interaction operand defines the type of operator of a combined fragment. + + + + The interactionOperator seq designates that the CombinedFragment represents a weak sequencing between the behaviors of the operands. + + + + + The interactionOperator alt designates that the CombinedFragment represents a choice of behavior. At most one of the operands will be chosen. The chosen operand must have an explicit or implicit guard expression that evaluates to true at this point in the interaction. An implicit true guard is implied if the operand has no guard. + + + + + The interactionOperator opt designates that the CombinedFragment represents a choice of behavior where either the (sole) operand happens or nothing happens. An option is semantically equivalent to an alternative CombinedFragment where there is one operand with non-empty content and the second operand is empty. + + + + + The interactionOperator break designates that the CombinedFragment represents a breaking scenario in the sense that the operand is a scenario that is performed instead of the remainder of the enclosing InteractionFragment. A break operator with a guard is chosen when the guard is true and the rest of the enclosing Interaction Fragment is ignored. When the guard of the break operand is false, the break operand is ignored and the rest of the enclosing InteractionFragment is chosen. The choice between a break operand without a guard and the rest of the enclosing InteractionFragment is done non-deterministically. + + + + + The interactionOperator par designates that the CombinedFragment represents a parallel merge between the behaviors of the operands. The OccurrenceSpecifications of the different operands can be interleaved in any way as long as the ordering imposed by each operand as such is preserved. + + + + + The interactionOperator strict designates that the CombinedFragment represents a strict sequencing between the behaviors of the operands. The semantics of strict sequencing defines a strict ordering of the operands on the first level within the CombinedFragment with interactionOperator strict. Therefore OccurrenceSpecifications within contained CombinedFragment will not directly be compared with other OccurrenceSpecifications of the enclosing CombinedFragment. + + + + + The interactionOperator loop designates that the CombinedFragment represents a loop. The loop operand will be repeated a number of times. + + + + + The interactionOperator critical designates that the CombinedFragment represents a critical region. A critical region means that the traces of the region cannot be interleaved by other OccurrenceSpecifications (on those Lifelines covered by the region). This means that the region is treated atomically by the enclosing fragment when determining the set of valid traces. Even though enclosing CombinedFragments may imply that some OccurrenceSpecifications may interleave into the region, such as e.g. with par-operator, this is prevented by defining a region. + + + + + The interactionOperator neg designates that the CombinedFragment represents traces that are defined to be invalid. + + + + + The interactionOperator assert designates that the CombinedFragment represents an assertion. The sequences of the operand of the assertion are the only valid continuations. All other continuations result in an invalid trace. + + + + + The interacionOperator ignore designates that there are some message types that are not shown within this combined fragment. These message types can be considered insignificant and are implicitly ignored if they appear in a corresponding execution. Alternatively, one can understand ignore to mean that the message types that are ignored can appear anywhere in the traces. + + + + + The interactionOperator consider designates which messages should be considered within this combined fragment. This is equivalent to defining every other message to be ignored. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A create object action is an action that creates an object that conforms to a statically specified classifier and puts it on an output pin at runtime. + + + + The classifier cannot be abstract. + + + OCL + not (self.classifier.isAbstract = #true) + + + + + The classifier cannot be an association class + + + OCL + not self.classifier.oclIsKindOf(AssociationClass) + + + + + The type of the result pin must be the same as the classifier of the action. + + + OCL + self.result.type = self.classifier + + + + + The multiplicity of the output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Classifier to be instantiated. + + + + + + + Gives the output pin on which the result is put. + + + + + + + + A destroy object action is an action that destroys objects. + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.target.multiplicity.is(1,1) + + + + + The input pin has no type. + + + OCL + self.target.type->size() = 0 + + + + + + Specifies whether links in which the object participates are destroyed along with the object. + + + + + + Specifies whether objects owned by the object are destroyed along with the object. + + + + + + The input pin providing the object to be destroyed. + + + + + + + + A test identity action is an action that tests if two values are identical objects. + + + + The input pins have no type. + + + OCL + self.first.type->size() = 0 and self.second.type->size() = 0 + + + + + The multiplicity of the input pins is 1..1. + + + OCL + self.first.multiplicity.is(1,1) and self.second.multiplicity.is(1,1) + + + + + The type of the result is Boolean. + + + OCL + self.result.type.oclIsTypeOf(Boolean) + + + + + + Gives the pin on which an object is placed. + + + + + + + Gives the pin on which an object is placed. + + + + + + + Tells whether the two input objects are identical. + + + + + + + + A read self action is an action that retrieves the host object of an action. + + + + The action must be contained in an behavior that has a host classifier. + + + OCL + self.context->size() = 1 + + + + + If the action is contained in an behavior that is acting as the body of a method, then the operation of the method must not be static. + + + OCL + true + + + + + The type of the result output pin is the host classifier. + + + OCL + self.result.type = self.context + + + + + The multiplicity of the result output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Gives the output pin on which the hosting object is placed. + + + + + + + + StructuralFeatureAction is an abstract class for all structural feature actions. + + + + The structural feature must not be static. + + + OCL + self.structuralFeature.isStatic = #false + + + + + The type of the object input pin is the same as the classifier of the object passed on this pin. + + + OCL + true + + + + + The multiplicity of the input pin must be 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + Visibility of structural feature must allow access to the object performing the action. + + + OCL + let host : Classifier = self.context in self.structuralFeature.visibility = #public or host = self.structuralFeature.featuringClassifier.type or (self.structuralFeature.visibility = #protected and host.allSupertypes ->includes(self.structuralFeature.featuringClassifier.type))) + + + + + A structural feature has exactly one featuringClassifier. + + + OCL + self.structuralFeature.featuringClassifier->size() = 1 + + + + + + Structural feature to be read. + + + + + + + Gives the input pin from which the object whose structural feature is to be read or written is obtained. + + + + + + + + + A read structural feature action is a structural feature action that retrieves the values of a structural feature. + + + + The type and ordering of the result output pin are the same as the type and ordering of the structural feature. + + + OCL + self.result.type = self.structuralFeature.type and self.result.ordering = self.structuralFeature.ordering + + + + + The multiplicity of the structural feature must be compatible with the multiplicity of the output pin. + + + OCL + self.structuralFeature.multiplicity.compatibleWith(self.result.multiplicity) + + + + + + Gives the output pin on which the result is put. + + + + + + + + WriteStructuralFeatureAction is an abstract class for structural feature actions that change structural feature values. + + + + The type input pin is the same as the classifier of the structural feature. + + + OCL + self.value.type = self.structuralFeature.featuringClassifier + + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.value.multiplicity.is(1,1) + + + + + + Value to be added or removed from the structural feature. + + + + + + + + A clear structural feature action is a structural feature action that removes all values of a structural feature. + + + + + + A remove structural feature value action is a write structural feature action that removes values from structural features. + + + + Actions removing a value from ordered nonunique structural features must have a single removeAt input pin if isRemoveDuplicates is false. It must be of type Unlimited Natural with multiplicity 1..1. Otherwise, the action has no removeAt input pin. + + + + OCL + true + + + + + + Specifies whether to remove duplicates of the value in nonunique structural features. + + + + + + Specifies the position of an existing value to remove in ordered nonunique structural features. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. + + + + + + + + An add structural feature value action is a write structural feature action for adding values to a structural feature. + + + + Actions adding a value to ordered structural features must have a single input pin for the insertion point with type UnlimitedNatural and multiplicity of 1..1, otherwise the action has no input pin for the insertion point. + + + OCL + let insertAtPins : Collection = self.insertAt in if self.structuralFeature.isOrdered = #false then insertAtPins->size() = 0 else let insertAtPin : InputPin= insertAt->asSequence()->first() in insertAtPins->size() = 1 and insertAtPin.type = UnlimitedNatural and insertAtPin.multiplicity.is(1,1)) endif + + + + + + Specifies whether existing values of the structural feature of the object should be removed before adding the new value. + + + + + + Gives the position at which to insert a new value or move an existing value in ordered structural features. The type of the pin is UnlimitedNatural, but the value cannot be zero. This pin is omitted for unordered structural features. + + + + + + + + LinkAction is an abstract class for all link actions that identify their links by the objects at the ends of the links and by the qualifiers at ends of the links. + + + + The association ends of the link end data must all be from the same association and include all and only the association ends of that association. + + + OCL + self.endData->collect(end) = self.association()->collect(connection)) + + + + + The association ends of the link end data must not be static. + + + OCL + self.endData->forall(end.oclisKindOf(NavigableEnd) implies end.isStatic = #false + + + + + The input pins of the action are the same as the pins of the link end data and insertion pins. + + + OCL + self.input->asSet() = let ledpins : Set = self.endData->collect(value) in if self.oclIsKindOf(LinkEndCreationData) then ledpins->union(self.endData.oclAsType(LinkEndCreationData).insertAt) else ledpins + + + + + + Data identifying one end of a link by the objects on its ends and qualifiers. + + + + + + + Pins taking end objects and qualifier values as input. + + + + + + + The association operates on LinkAction. It returns the association of the action. + + + + OCL + result = self.endData->asSequence().first().end.association + + + + + + + + A read link action is a link action that navigates across associations to retrieve objects on one end. + + + + Exactly one link-end data specification (the 'open' end) must not have an end object input pin. + + + OCL + self.endData->select(ed | ed.value->size() = 0)->size() = 1 + + + + + The type and ordering of the result output pin are same as the type and ordering of the open association end. + + + OCL + let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in self.result.type = openend.type and self.result.ordering = openend.ordering + + + + + The multiplicity of the open association end must be compatible with the multiplicity of the result output pin. + + + OCL + let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in openend.multiplicity.compatibleWith(self.result.multiplicity) + + + + + The open end must be navigable. + + + OCL + let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in openend.isNavigable() + + + + + Visibility of the open end must allow access to the object performing the action. + + + OCL + let host : Classifier = self.context in let openend : AssociationEnd = self.endData->select(ed | ed.value->size() = 0)->asSequence()->first().end in openend.visibility = #public or self.endData->exists(oed | not oed.end = openend and (host = oed.end.participant or (openend.visibility = #protected and host.allSupertypes->includes(oed.end.participant)))) + + + + + + The pin on which are put the objects participating in the association at the end not specified by the inputs. + + + + + + + + + A link end creation data is not an action. It is an element that identifies links. It identifies one end of a link to be created by a create link action. + + + + LinkEndCreationData can only be end data for CreateLinkAction or one of its specializations. + + + OCL + self.LinkAction.oclIsKindOf(CreateLinkAction) + + + + + Link end creation data for ordered association ends must have a single input pin for the insertion point with type UnlimitedNatural and multiplicity of 1..1, otherwise the action has no input pin for the insertion point. + + + OCL + let insertAtPins : Collection = self.insertAt in if self.end.ordering = #unordered then insertAtPins->size() = 0 else let insertAtPin : InputPin = insertAts->asSequence()->first() in insertAtPins->size() = 1 and insertAtPin.type = UnlimitedNatural and insertAtPin.multiplicity.is(1,1)) endif + + + + + + Specifies whether the existing links emanating from the object on this end should be destroyed before creating a new link. + + + + + + Specifies where the new link should be inserted for ordered association ends, or where an existing link should be moved to. The type of the input is UnlimitedNatural, but the input cannot be zero. This pin is omitted for association ends that are not ordered. + + + + + + + + A create link action is a write link action for creating links. + + + + The association cannot be an abstract classifier. + + + OCL + self.association().isAbstract = #false + + + + + + Specifies ends of association and inputs. + + + + + + + + A destroy link action is a write link action that destroys links and link objects. + + + + + Specifies ends of association and inputs. + + + + + + + + WriteLinkAction is an abstract class for link actions that create and destroy links. + + + + The visibility of at least one end must allow access to the class using the action. + + + OCL + true + + + + + + + A clear association action is an action that destroys all links of an association in which a particular object participates. + + + + The type of the input pin must be the same as the type of at least one of the association ends of the association. + + + OCL + self.association->exists(end.type = self.object.type) + + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + + Gives the input pin from which is obtained the object whose participation in the association is to be cleared. + + + + + + + Association to be cleared. + + + + + + + + A broadcast signal action is an action that transmits a signal instance to all the potential target objects in the system, which may cause the firing of a state machine transitions or the execution of associated activities of a target object. The argument values are available to the execution of associated behaviors. The requestor continues execution immediately after the signals are sent out. It does not wait for receipt. Any reply messages are ignored and are not transmitted to the requestor. + + + + The number and order of argument pins must be the same as the number and order of attributes in the signal. + + + OCL + true + + + + + The type, ordering, and multiplicity of an argument pin must be the same as the corresponding attribute of the signal. + + + OCL + true + + + + + + The specification of signal object transmitted to the target objects. + + + + + + + + A send object action is an action that transmits an object to the target object, where it may invoke behavior such as the firing of state machine transitions or the execution of an activity. The value of the object is available to the execution of invoked behaviors. The requestor continues execution immediately. Any reply message is ignored and is not transmitted to the requestor. + + + + + The target object to which the object is sent. + + + + + + + The request object, which is transmitted to the target object. The object may be copied in transmission, so identity might not be preserved. + + + + + + + + A link end destruction data is not an action. It is an element that identifies links. It identifies one end of a link to be destroyed by destroy link action. + + + + LinkEndDestructionData can only be end data for DestroyLinkAction or one of its specializations. + + + OCL + true + + + + + LinkEndDestructionData for ordered nonunique association ends must have a single destroyAt input pin if isDestroyDuplicates is false. It must be of type UnlimitedNatural and have a multiplicity of 1..1. Otherwise, the action has no input pin for the removal position. + + + OCL + true + + + + + + Specifies whether to destroy duplicates of the value in nonunique association ends. + + + + + + Specifies the position of an existing link to be destroyed in ordered nonunique association ends. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. + + + + + + + + A value specification action is an action that evaluates a value specification. + + + + The type of value specification must be compatible with the type of the result pin. + + + OCL + true + + + + + The multiplicity of the result pin is 1..1 + + + OCL + true + + + + + + Value specification to be evaluated. + + + + + + + Gives the output pin on which the result is put. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A time expression defines a value specification that represents a time value. + + + + + The value of the time expression. + + + + + + + Refers to the time and duration observations that are involved in expr. + + + + + + + + + + + Duration defines a value specification that specifies the temporal distance between two time instants. + + + + + The value of the Duration. + + + + + + + Refers to the time and duration observations that are involved in expr. + + + + + + + + + + + A duration interval defines the range between two durations. + + + + + Refers to the Duration denoting the minimum value of the range. + + + + + Refers to the Duration denoting the maximum value of the range. + + + + + + A time constraint is a constraint that refers to a time interval. + + + + + A condition that must be true when evaluated in order for the constraint to be satisfied. + + + + + + + The value of firstEvent is related to constrainedElement. If firstEvent is true, then the corresponding observation event is the first time instant the execution enters constrainedElement. If firstEvent is false, then the corresponding observation event is the last time instant the execution is within constrainedElement. + + + + + + + + + A time interval defines the range between two time expressions. + + + + + Refers to the TimeExpression denoting the maximum value of the range. + + + + + Refers to the TimeExpression denoting the minimum value of the range. + + + + + + A duration constraint is a constraint that refers to a duration interval. + + + + The multiplicity of firstEvent must be 2 if the multiplicity of constrainedElement is 2. Otherwise the multiplicity of firstEvent is 0. + + + OCL + if (constrainedElement->size() =2) then (firstEvent->size() = 2) else (firstEvent->size() = 0) + + + + + + The interval constraining the duration. + + + + + + + The value of firstEvent[i] is related to constrainedElement[i] (where i is 1 or 2). If firstEvent[i] is true, then the corresponding observation event is the first time instant the execution enters constrainedElement[i]. If firstEvent[i] is false, then the corresponding observation event is the last time instant the execution is within constrainedElement[i]. Default value is true applied when constrainedElement[i] refers an element that represents only one time instant. + + + + + + + + + An interval constraint is a constraint that refers to an interval. + + + + + A condition that must be true when evaluated in order for the constraint to be satisfied. + + + + + + + + An interval defines the range between two value specifications. + + + + + Refers to the ValueSpecification denoting the minimum value of the range. + + + + + + + Refers to the ValueSpecification denoting the maximum value of the range. + + + + + + + + Observation is a superclass of TimeObservation and DurationObservation in order for TimeExpression and Duration to refer to either in a simple way. + + + + + + A time observation is a reference to a time instant during an execution. It points out the element in the model to observe and whether the observation is when this model element is entered or when it is exited. + + + + + The observation is determined by the entering or exiting of the event element during execution. + + + + + + + The value of firstEvent is related to event. If firstEvent is true, then the corresponding observation event is the first time instant the execution enters event. If firstEvent is false, then the corresponding observation event is the time instant the execution exits event. + + + + + + + A duration observation is a reference to a duration during an execution. It points out the element(s) in the model to observe and whether the observations are when this model element is entered or when it is exited. + + + + The multiplicity of firstEvent must be 2 if the multiplicity of event is 2. Otherwise the multiplicity of firstEvent is 0. + + + OCL + if (event->size() = 2) then (firstEvent->size() = 2) else (firstEvent->size() = 0) + + + + + + The observation is determined by the entering or exiting of the event element during execution. + + + + + + + The value of firstEvent[i] is related to event[i] (where i is 1 or 2). If firstEvent[i] is true, then the corresponding observation event is the first time instant the execution enters event[i]. If firstEvent[i] is false, then the corresponding observation event is the time instant the execution exits event[i]. Default value is true applied when event[i] refers an element that represents only one time instant. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + InvocationAction is an abstract class for the various actions that invoke behavior. + + + In addition to targeting an object, invocation actions can also invoke behavioral features on ports from where the invocation requests are routed onwards on links deriving from attached connectors. Invocation actions may also be sent to a target via a given port, either on the sending object or on another object. + + + + The onPort must be a port on the receiver object. + + + OCL + true + + + + + + Specification of the ordered set of argument values that appears during execution. + + + + + + + A optional port of the receiver object on which the behavioral feature is invoked. + + + + + + + + A trigger relates an event to a behavior that may affect an instance of the classifier. + + + A trigger specification may be qualified by the port on which the event occurred. + + + + + The event that causes the trigger. + + + + + + + A optional port of the receiver object on which the behavioral feature is invoked. + + + + + + + + + + + + + + + + + + + + State machines can be used to express the behavior of part of a system. Behavior is modeled as a traversal of a graph of state nodes interconnected by one or more joined transition arcs that are triggered by the dispatching of series of (event) occurrences. During this traversal, the state machine executes a series of activities associated with various elements of the state machine. + + + + The classifier context of a state machine cannot be an interface. + + + OCL + context->notEmpty() implies not context.oclIsKindOf(Interface) + + + + + The context classifier of the method state machine of a behavioral feature must be the classifier that owns the behavioral feature. + + + OCL + specification->notEmpty() implies (context->notEmpty() and specification->featuringClassifier->exists (c | c = context)) + + + + + The connection points of a state machine are pseudostates of kind entry point or exit point. + + + OCL + conectionPoint->forAll (c | c.kind = #entryPoint or c.kind = #exitPoint) + + + + + A state machine as the method for a behavioral feature cannot have entry/exit connection points. + + + OCL + specification->notEmpty() implies connectionPoint->isEmpty() + + + + + + The regions owned directly by the state machine. + + + + + + + The connection points defined for this state machine. They represent the interface of the state machine when used as part of submachine state. + + + + + + + The state machines of which this is an extension. + + + + + + + References the submachine(s) in case of a submachine state. Multiple machines are referenced in case of a concurrent state. + + + + + + + The operation LCA(s1,s2) returns an orthogonal state or region which is the least common ancestor of states s1 and s2, based on the statemachine containment hierarchy. + + + + OCL + true + + + + + + + + + The query ancestor(s1, s2) checks whether s2 is an ancestor state of state s1. context StateMachine::ancestor (s1 : State, s2 : State) : Boolean + + + + + OCL + result = if (s2 = s1) then true else if (s1.container->isEmpty) then true else if (s2.container->isEmpty) then false else (ancestor (s1, s2.container)) + + + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of a statemachine are properly related to the redefinition contexts of the specified statemachine to allow this element to redefine the other. The containing classifier of a redefining statemachine must redefine the containing classifier of the redefined statemachine. + + + + OCL + result = true + + + + + + + + The query isConsistentWith() specifies that a redefining state machine is consistent with a redefined state machine provided that the redefining state machine is an extension of the redefined state machine: Regions are inherited and regions can be added, inherited regions can be redefined. In case of multiple redefining state machines, extension implies that the redefining state machine gets orthogonal regions for each of the redefined state machines. + + + + OCL + result = true + + + + + + + + + A pseudostate is an abstraction that encompasses different types of transient vertices in the state machine graph. + + + + An initial vertex can have at most one outgoing transition. + + + OCL + (self.kind = #initial) implies (self.outgoing->size <= 1) + + + + + History vertices can have at most one outgoing transition. + + + OCL + ((self.kind = #deepHistory) or (self.kind = #shallowHistory)) implies (self.outgoing->size <= 1) + + + + + In a complete statemachine, a join vertex must have at least two incoming transitions and exactly one outgoing transition. + + + OCL + (self.kind = #join) implies ((self.outgoing->size = 1) and (self.incoming->size >= 2)) + + + + + All transitions incoming a join vertex must originate in different regions of an orthogonal state. + + + OCL + (self.kind = #join) implies self.incoming->forAll (t1, t2 | t1<>t2 implies (self.stateMachine.LCA(t1.source, t2.source).container.isOrthogonal)) + + + + + In a complete statemachine, a fork vertex must have at least two outgoing transitions and exactly one incoming transition. + + + OCL + (self.kind = #fork) implies ((self.incoming->size = 1) and (self.outgoing->size >= 2)) + + + + + All transitions outgoing a fork vertex must target states in different regions of an orthogonal state. + + + OCL + (self.kind = #fork) implies self.outgoing->forAll (t1, t2 | t1<>t2 implies (self.stateMachine.LCA(t1.target, t2.target).container.isOrthogonal)) + + + + + In a complete statemachine, a junction vertex must have at least one incoming and one outgoing transition. + + + OCL + (self.kind = #junction) implies ((self.incoming->size >= 1) and (self.outgoing->size >= 1)) + + + + + In a complete statemachine, a choice vertex must have at least one incoming and one outgoing transition. + + + OCL + (self.kind = #choice) implies ((self.incoming->size >= 1) and (self.outgoing->size >= 1)) + + + + + The outgoing transition from and initial vertex may have a behavior, but not a trigger or a guard. + + + OCL + (self.kind = #initial) implies (self.outgoing.guard->isEmpty() and self.outgoing.trigger->isEmpty()) + + + + + + Determines the precise type of the Pseudostate and can be one of: entryPoint, exitPoint, initial, deepHistory, shallowHistory, join, fork, junction, terminate or choice. + + + + + + The StateMachine in which this Pseudostate is defined. This only applies to Pseudostates of the kind entryPoint or exitPoint. + + + + + + + The State that owns this pseudostate and in which it appears. + + + + + + + + A special kind of state signifying that the enclosing region is completed. If the enclosing region is directly contained in a state machine and all other regions in the state machine also are completed, then it means that the entire state machine is completed. + + + + A final state cannot have any outgoing transitions. + + + OCL + self.outgoing->size() = 0 + + + + + A final state cannot have regions. + + + OCL + self.region->size() = 0 + + + + + A final state cannot reference a submachine. + + + OCL + self.submachine->isEmpty() + + + + + A final state has no entry behavior. + + + OCL + self.entry->isEmpty() + + + + + A final state has no exit behavior. + + + OCL + self.exit->isEmpty() + + + + + A final state has no state (doActivity) behavior. + + + OCL + self.doActivity->isEmpty() + + + + + + + A connection point reference represents a usage (as part of a submachine state) of an entry/exit point defined in the statemachine reference by the submachine state. + + + + The entry Pseudostates must be Pseudostates with kind entryPoint. + + + OCL + entry->notEmpty() implies entry->forAll(e | e.kind = #entryPoint) + + + + + The exit Pseudostates must be Pseudostates with kind exitPoint. + + + OCL + exit->notEmpty() implies exit->forAll(e | e.kind = #exitPoint) + + + + + + The entryPoint kind pseudo states corresponding to this connection point. + + + + + + + The State in which the connection point refreshens are defined. + + + + + + + The exitPoints kind pseudo states corresponding to this connection point. + + + + + + + + A time event specifies a point in time. At the specified time, the event occurs. + + + A time event can be defined relative to entering the current state of the executing state machine. + + + + The ValueSpecification when must return a non-negative Integer. + + + OCL + true + + + + + The starting time for a relative time event may only be omitted for a time event that is the trigger of a state machine. + + + OCL + true + + + + + + Specifies whether it is relative or absolute time. + + + + + + Specifies the corresponding time deadline. + + + + + + + + PseudostateKind is an enumeration type. + + + + An initial pseudostate represents a default vertex that is the source for a single transition to the default state of a composite state. There can be at most one initial vertex in a region. The outgoing transition from the initial vertex may have a behavior, but not a trigger or guard. + + + + + DeepHistory represents the most recent active configuration of the composite state that directly contains this pseudostate; e.g. the state configuration that was active when the composite state was last exited. A composite state can have at most one deep history vertex. At most one transition may originate from the history connector to the default deep history state. This transition is taken in case the composite state had never been active before. Entry actions of states entered on the path to the state represented by a deep history are performed. + + + + + ShallowHistory represents the most recent active substate of its containing state (but not the substates of that substate). A composite state can have at most one shallow history vertex. A transition coming into the shallow history vertex is equivalent to a transition coming into the most recent active substate of a state. At most one transition may originate from the history connector to the default shallow history state. This transition is taken in case the composite state had never been active before. Entry actions of states entered on the path to the state represented by a shallow history are performed. + + + + + Join vertices serve to merge several transitions emanating from source vertices in different orthogonal regions. The transitions entering a join vertex cannot have guards or triggers. + + + + + Fork vertices serve to split an incoming transition into two or more transitions terminating on orthogonal target vertices +(i.e. vertices in different regions of a composite state). The segments outgoing from a fork vertex must not have guards or triggers. + + + + + Junction vertices are semantic-free vertices that are used to chain together multiple transitions. They are used to construct compound transition paths between states. For example, a junction can be used to converge multiple incoming transitions into a single outgoing transition representing a shared transition path (this is known as an merge). Conversely, they can be used to split an incoming transition into multiple outgoing transition segments with different guard conditions. This realizes a static conditional branch. (In the latter case, outgoing transitions whose guard conditions evaluate to false are disabled. A predefined guard denoted 'else' may be defined for at most one outgoing transition. This transition is enabled if all the guards labeling the other transitions are false.) Static conditional branches are distinct from dynamic conditional branches that are realized by choice vertices (described below). + + + + + Choice vertices which, when reached, result in the dynamic evaluation of the guards of the triggers of its outgoing transitions. This realizes a dynamic conditional branch. It allows splitting of transitions into multiple outgoing paths such that the decision on which path to take may be a function of the results of prior actions performed in the same run-tocompletion step. If more than one of the guards evaluates to true, an arbitrary one is selected. If none of the guards evaluates to true, then the model is considered ill-formed. (To avoid this, it is recommended to define one outgoing transition with the predefined else guard for every choice vertex.) Choice vertices should be distinguished from static branch points that are based on junction points (described above). + + + + + An entry point pseudostate is an entry point of a state machine or composite state. In each region of the state machine or composite state it has a single transition to a vertex within the same region. + + + + + An exit point pseudostate is an exit point of a state machine or composite state. Entering an exit point within any region of the composite state or state machine referenced by a submachine state implies the exit of this composite state or submachine state and the triggering of the transition that has this exit point as source in the state machine enclosing the submachine or composite state. + + + + + Entering a terminate pseudostate implies that the execution of this state machine by means of its context object is terminated. The state machine does not exit any states nor does it perform any exit actions other than those associated with the transition leading to the terminate pseudostate. Entering a terminate pseudostate is equivalent to invoking a DestroyObjectAction. + + + + + + TransitionKind is an enumeration type. + + + + The source state of a transition with transition kind local must be a composite state. + + + OCL + kind=#local implies owner.source.isComposite + + + + + The source state of a transition with transition kind external must be a composite state. + + + OCL + kind=#external implies owner.source.isComposite + + + + + Implies that the transition, if triggered, occurs without exiting or entering the source state. Thus, it does not cause a state change. This means that the entry or exit condition of the source state will not be invoked. An internal transition can be taken even if the state machine is in one or more regions nested within this state. + + + + + Implies that the transition, if triggered, will not exit the composite (source) state, but it will apply to any state within the composite state, and these will be exited and entered. + + + + + Implies that the transition, if triggered, will exit the composite (source) state. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A stereotype defines how an existing metaclass may be extended, and enables the use of platform or domain specific terminology or notation in place of, or in addition to, the ones used for the extended metaclass. + + + + Stereotype names should not clash with keyword names for the extended model element. + + + OCL + true + + + + + A Stereotype may only generalize or specialize another Stereotype. + + + OCL + generalization.general->forAll(e |e.oclIsKindOf(Stereotype)) and generalization.specific->forAll(e | e.oclIsKindOf(Stereotype)) + + + + + + Stereotype can change the graphical appearance of the extended model element by using attached icons. When this association is not null, it references the location of the icon content to be displayed within diagrams presenting the extended model elements. + + + + + + + Creates a(n) (required) extension of the specified metaclass with this stereotype. + + + + + The metaclass for the new extension. + + + + + Whether the new extension should be required. + + + + + + Retrieves the profile that owns this stereotype. + + + + + + + + + Retrieves the localized keyword for this stereotype. + + + + + + Retrieves the keyword for this stereotype, localized if indicated. + + + + + Whether to localize the keyword. + + + + + + Retrieves the metaclasses extended by this stereotype. + + + + + + + + + Retrieves all the metaclasses extended by this stereotype, including the metaclasses extended by its superstereotypes. + + + + + + + + + Retrieves the current definition (Ecore representation) of this stereotype. + + + + + + + + + + Creates an icon with the specified location for this stereotype. + + + + + The location for the new icon. + + + + + + Creates an icon with the specified format and content for this stereotype. + + + + + The format for the new icon. + + + + + The content for the new icon. + + + + + + + A profile defines limited extensions to a reference metamodel with the purpose of adapting the metamodel to a specific platform or domain. + + + + An element imported as a metaclassReference is not specialized or generalized in a Profile. + + + OCL + self.metaclassReference.importedElement-> select(c | c.oclIsKindOf(Classifier) and (c.generalization.namespace = self or (c.specialization.namespace = self) )->isEmpty() + + + + + All elements imported either as metaclassReferences or through metamodelReferences are members of the same base reference metamodel. + + + OCL + self.metamodelReference.importedPackage.elementImport.importedElement.allOwningPackages())-> union(self.metaclassReference.importedElement.allOwningPackages() )->notEmpty() + + + + + + References the Stereotypes that are owned by the Profile. + + + + + + + References a metaclass that may be extended. + + + + + + + References a package containing (directly or indirectly) metaclasses that may be extended. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Creates and returns an instance of (the Ecore representation of) the specified classifier defined in this profile. + + + + + + + The classifier of which to create an instance. + + + + + + Creates a(n) (abstract) stereotype with the specified name as an owned stereotype of this profile. + + + + + The name for the new stereotype, or null. + + + + + Whether the new stereotype should be abstract. + + + + + + Determines whether this profile is defined. + + + + + + Defines this profile by (re)creating Ecore representations of its current contents. + + + + + + + + + + Defines this profile by (re)creating Ecore representations of its current contents, using the specified options, diagnostics, and context. + + + + + + + The options to use. + + + + + The chain of diagnostics to which problems are to be appended. + + + + + + The cache of context-specific information. + + + + + + Retrieves the current definition (Ecore representation) of this profile. + + + + + + + + + + Retrieves the current definition (Ecore representation) of the specified named element in this profile. + + + + + + + + + The named element whose definition to retrieve. + + + + + + Retrieves the metaclasses referenced by this profile. + + + + + + + + + Retrieves the metamodels referenced by this profile. + + + + + + + + + Retrieves the extensions owned by this profile, excluding non-required extensions if indicated. + + + + + + + + Whether to retrieve only required extensions. + + + + + + + A class describes a set of objects that share the same specifications of features, constraints, and semantics. + + + A class may be designated as active (i.e., each of its instances having its own thread of control) or passive (i.e., each of its instances executing within the context of some other object). A class may also specify which signals the instances of this class handle. + + + A class has the capability to have an internal structure and ports. + + + Class has derived association that indicates how it may be extended through one or more stereotypes. Stereotype is the only kind of metaclass that cannot be extended by stereotypes. + + + + A passive class may not own receptions. + + + OCL + not self.isActive implies self.ownedReception.isEmpty() + + + + + + + True when a class is abstract. + + + If true, the Classifier does not provide a complete declaration and can typically not be instantiated. An abstract classifier is intended to be used by other classifiers e.g. as the target of general metarelationships or generalization relationships. + + + + + + References all the Classifiers that are defined (nested) within the Class. + + + + + + + The attributes (i.e. the properties) owned by the class. + + + + + + + The operations owned by the class. + + + + + + + This gives the superclasses of a class. + + + + + + + Determines whether an object specified by this class is active or not. If true, then the owning class is referred to as an active class. If false, then such a class is referred to as a passive class. + + + + + + Receptions that objects of this class are willing to accept. + + + + + + + References the Extensions that specify additional properties of the metaclass. The property is derived from the extensions whose memberEnds are typed by the Class. + + + + + + + + + + + + + Creates an operation with the specified name, parameter names, parameter types, and return type (or null) as an owned operation of this class. + + + + + The name for the new operation, or null. + + + + + + + The parameter names for the new operation, or null. + + + + + + + The parameter types for the new operation, or null. + + + + + + + The return type for the new operation, or null. + + + + + + + + Determines whether this class is a metaclass. + + + + + + The inherit operation is overridden to exclude redefined properties. + + + + OCL + result = inhs->excluding(inh | ownedMember->select(oclIsKindOf(RedefinableElement))->select(redefinedElement->includes(inh))) + + + + + + + + + + + + + + + A profile application is used to show which profiles have been applied to a package. + + + + + References the Profiles that are applied to a Package through this ProfileApplication. + + + + + + + Specifies that the Profile filtering rules for the metaclasses of the referenced metamodel shall be strictly applied. + + + + + + The package that owns the profile application. + + + + + + + Retrieves the definition (Ecore representation) of the profile associated with this profile application. + + + + + + + + + + Retrieves the definition (Ecore representation) of the specified named element in the profile associated with this profile application. + + + + + + + + + The named element for which to retrieve the applied definition. + + + + + + + An extension is used to indicate that the properties of a metaclass are extended through a stereotype, and gives the ability to flexibly add (and later remove) stereotypes to classes. + + + + The non-owned end of an Extension is typed by a Class. + + + OCL + metaclassEnd()->notEmpty() and metaclass()->oclIsKindOf(Class) + + + + + An Extension is binary, i.e., it has only two memberEnds. + + + OCL + memberEnd->size() = 2 + + + + + + Indicates whether an instance of the extending stereotype must be created when an instance of the extended class is created. The attribute value is derived from the multiplicity of the Property referenced by Extension::ownedEnd; a multiplicity of 1 means that isRequired is true, but otherwise it is false. Since the default multiplicity of an ExtensionEnd is 0..1, the default value of isRequired is false. + + + + + + References the Class that is extended through an Extension. The property is derived from the type of the memberEnd that is not the ownedEnd. + + + + + + + References the end of the extension that is typed by a Stereotype. + + + + + + + Retrieves the extension end that is typed by a stereotype (as opposed to a metaclass). + + + + + + + + + Retrieves the stereotype that extends a metaclass through this extension. + + + + + + + + + The query metaclassEnd() returns the Property that is typed by a metaclass (as opposed to a stereotype). + + + + OCL + result = memberEnd->reject(ownedEnd) + + + + + + + The query metaclass() returns the metaclass that is being extended (as opposed to the extending stereotype). + + + + OCL + result = metaclassEnd().type + + + + + + + The query isRequired() is true if the owned end has a multiplicity with the lower bound of 1. + + + + OCL + result = (ownedEnd->lowerBound() = 1) + + + + + + + + Physical definition of a graphical image. + + + + + This contains the serialization of the image according to the format. The value could represent a bitmap, image such as a GIF file, or drawing 'instructions' using a standard such as Scalable Vector Graphic (SVG) (which is XML based). + + + + + + + This contains a location that can be used by a tool to locate the image as an alternative to embedding it in the stereotype. + + + + + + + This indicates the format of the content - which is how the string content should be interpreted. The following values are reserved: SVG, GIF, PNG, JPG, WMF, EMF, BMP. + +In addition the prefix 'MIME: ' is also reserved. This option can be used as an alternative to express the reserved values above, for example "SVG" could instead be expressed as "MIME: image/svg+xml". + + + + + + + + An element is a constituent of a model. As such, it has the capability of owning other elements. + + + + An element may not directly or indirectly own itself. + + + OCL + not self.allOwnedElements()->includes(self) + + + + + Elements that must be owned must have an owner. + + + OCL + self.mustBeOwned() implies owner->notEmpty() + + + + + + + + The Elements owned by this element. + + + + + + + The Element that owns this element. + + + + + + + The Comments owned by this element. + + + + + + + Destroys this element by removing all cross references to/from it and removing it from its containing resource or object. + + + + + Determines whether this element has the specified keyword. + + + + + The keyword in question. + + + + + + Retrieves the keywords for this element. + + + + + + + + + Adds the specified keyword to this element. + + + + + The keyword to add. + + + + + + Removes the specified keyword from this element. + + + + + The keyword to remove. + + + + + + Retrieves the nearest package that owns (either directly or indirectly) this element, or the element itself (if it is a package). + + + + + + + + + Retrieves the model that owns (either directly or indirectly) this element. + + + + + + + + + Determines whether the specified stereotype is applicable to this element. + + + + + The stereotype in question. + + + + + + Determines whether the specified stereotype is required for this element. + + + + + The stereotype in question. + + + + + + Determines whether the specified stereotype is applied to this element. + + + + + The stereotype in question. + + + + + + Applies the specified stereotype to this element. + + + + + + + The stereotype to apply. + + + + + + Unapplies the specified stereotype from this element. + + + + + + + The stereotype to unapply. + + + + + + Retrieves the stereotypes that are applicable to this element, including those that are required and/or may already be applied. + + + + + + + + + Retrieves the stereotype with the specified qualified name that is applicable to this element, or null if no such stereotype is applicable. + + + + + + + + The qualified name of the applicable stereotype to retrieve. + + + + + + Retrieves the stereotype applications for this element. + + + + + + + + + + Retrieves the application of the specified stereotype for this element, or null if no such stereotype application exists. + + + + + + + + + The stereotype for which to retrieve an application. + + + + + + Retrieves the stereotypes that are required for this element. + + + + + + + + + Retrieves the stereotype with the specified qualified name that is required for this element, or null if no such stereotype is required. + + + + + + + + The qualified name of the required stereotype to retrieve. + + + + + + Retrieves the stereotypes that are applied to this element. + + + + + + + + + Retrieves the stereotype with the specified qualified name that is applied to this element, or null if no such stereotype is applied. + + + + + + + + The qualified name of the applied stereotype to retrieve. + + + + + + Retrieves the substereotypes of the specified stereotype that are applied to this element. + + + + + + + + The superstereotype of the applied substereotypes to retrieve. + + + + + + Retrieves the substereotype of the specified stereotype with the specified qualified name that is applied to this element, or null if no such stereotype is applied. + + + + + + + + The superstereotype of the applied substereotype to retrieve. + + + + + The qualified name of the applied substereotype to retrieve. + + + + + + Determines whether this element has a (non-default) value for the property with the specified name in the specified stereotype. + + + + + The stereotype for which to test the property. + + + + + The name of the property in question. + + + + + + Retrieves the value of the property with the specified name in the specified stereotype for this element. + + + + + + + + + The stereotype for which to retrieve the value. + + + + + The name of the property whose value to retrieve. + + + + + + Sets the value of the property with the specified name in the specified stereotype for this element. + + + + The stereotype for which to set the value. + + + + + The name of the property whose value to set. + + + + + The new value for the property. + + + + + + + Creates an annotation with the specified source and this element as its model element. + + + + + + + The source for the new annotation. + + + + + + Retrieves the relationships in which this element is involved. + + + + + + + + + Retrieves the relationships of the specified type in which this element is involved. + + + + + + + + The (meta)type of the relationships to retrieve. + + + + + + + Retrieves the directed relationships for which this element is a source. + + + + + + + + + Retrieves the directed relationships of the specified type for which this element is a source. + + + + + + + + The (meta)type of the directed relationships to retrieve. + + + + + + + Retrieves the directed relationships for which this element is a target. + + + + + + + + + Retrieves the directed relationships of the specified type for which this element is a target. + + + + + + + + The (meta)type of the directed relationships to retrieve. + + + + + + + The query allOwnedElements() gives all of the direct and indirect owned elements of an element. + + + + OCL + result = ownedElement->union(ownedElement->collect(e | e.allOwnedElements())) + + + + + + + + + + The query mustBeOwned() indicates whether elements of this type must have an owner. Subclasses of Element that do not require an owner must override this operation. + + + + OCL + result = true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An extension end is used to tie an extension to a stereotype when extending a metaclass. + + + The default multiplicity of an extension end is 0..1. + + + + The multiplicity of ExtensionEnd is 0..1 or 1. + + + OCL + (self->lowerBound() = 0 or self->lowerBound() = 1) and self->upperBound() = 1 + + + + + The aggregation of an ExtensionEnd is composite. + + + OCL + self.aggregation = #composite + + + + + + References the type of the ExtensionEnd. Note that this association restricts the possible types of an ExtensionEnd to only be Stereotypes. + + + + + + + This redefinition changes the default multiplicity of association ends, since model elements are usually extended by 0 or 1 instance of the extension stereotype. + + + + + + + + + + + + + + The query lowerBound() returns the lower bound of the multiplicity as an Integer. This is a redefinition of the default +lower bound, which normally, for MultiplicityElements, evaluates to 1 if empty. + + + + OCL + result = lowerBound = if lowerValue->isEmpty() then 0 else lowerValue->IntegerValue() endif + + + + + + + + VariableAction is an abstract class for actions that operate on a statically specified variable. + + + + The action must be in the scope of the variable. + + + OCL + self.variable.isAccessibleBy(self) + + + + + + Variable to be read. + + + + + + + + A read variable action is a variable action that retrieves the values of a variable. + + + + The type and ordering of the result output pin of a read-variable action are the same as the type and ordering of the variable. + + + OCL + self.result.type =self.variable.type and self.result.ordering = self.variable.ordering + + + + + The multiplicity of the variable must be compatible with the multiplicity of the output pin. + + + OCL + self.variable.multiplicity.compatibleWith(self.result.multiplicity) + + + + + + Gives the output pin on which the result is put. + + + + + + + + WriteVariableAction is an abstract class for variable actions that change variable values. + + + + The type input pin is the same as the type of the variable. + + + OCL + self.value.type = self.variable.type + + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.value.multiplicity.is(1,1) + + + + + + Value to be added or removed from the variable. + + + + + + + + A clear variable action is a variable action that removes all values of a variable. + + + + + + An add variable value action is a write variable action for adding values to a variable. + + + + Actions adding values to ordered variables must have a single input pin for the insertion point with type UnlimtedNatural and multiplicity of 1..1, otherwise the action has no input pin for the insertion point. + + + OCL + let insertAtPins : Collection = self.insertAt in if self.variable.ordering = #unordered then insertAtPins->size() = 0 else let insertAtPin : InputPin = insertAt->asSequence()->first() in insertAtPins->size() = 1 and insertAtPin.type = UnlimitedNatural and insertAtPin.multiplicity.is(1,1)) endif + + + + + + Specifies whether existing values of the variable should be removed before adding the new value. + + + + + + Gives the position at which to insert a new value or move an existing value in ordered variables. The types is UnlimitedINatural, but the value cannot be zero. This pin is omitted for unordered variables. + + + + + + + + A remove variable value action is a write variable action that removes values from variables. + + + + Actions removing a value from ordered nonunique variables must have a single removeAt input pin if isRemoveDuplicates is false. It must be of type UnlimitedNatural with multiplicity of 1..1, otherwise the action has no removeAt input pin. + + + OCL + true + + + + + + Specifies whether to remove duplicates of the value in nonunique variables. + + + + + + Specifies the position of an existing value to remove in ordered nonunique variables. The type of the pin is UnlimitedNatural, but the value cannot be zero or unlimited. + + + + + + + + A raise exception action is an action that causes an exception to occur. The input value becomes the exception object. + + + + + An input pin whose value becomes an exception object. + + + + + + + + An action input pin is a kind of pin that executes an action to determine the values to input to another. + + + + The fromAction of an action input pin must have exactly one output pin. + + + OCL + true + + + + + The fromAction of an action input pin must only have action input pins as input pins. + + + OCL + true + + + + + The fromAction of an action input pin cannot have control or data flows coming into or out of it or its pins. + + + OCL + true + + + + + + The action used to provide values. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generalization set is a packageable element whose instances define collections of subsets of generalization relationships. + + + + Every Generalization associated with a particular GeneralizationSet must have the same general Classifier. + + + OCL + generalization->collect(g | g.general)->asSet()->size() <= 1 + + + + + The Classifier that maps to a GeneralizationSet may neither be a specific nor a general Classifier in any of the Generalization relationships defined for that GeneralizationSet. In other words, a power type may not be an instance of itself nor may its instances be its subclasses. + + + OCL + true + + + + + + Indicates (via the associated Generalizations) whether or not the set of specific Classifiers are covering for a particular general classifier. When isCovering is true, every instance of a particular general Classifier is also an instance of at least one of its specific Classifiers for the GeneralizationSet. When isCovering is false, there are one or more instances of the particular general Classifier that are not instances of at least one of its specific Classifiers defined for the GeneralizationSet. + + + + + + Indicates whether or not the set of specific Classifiers in a Generalization relationship have instance in common. If isDisjoint is true, the specific Classifiers for a particular GeneralizationSet have no members in common; that is, their intersection is empty. If isDisjoint is false, the specific Classifiers in a particular GeneralizationSet have one or more members in common; that is, their intersection is not empty. For example, Person could have two Generalization relationships, each with the different specific Classifier: Manager or Staff. This would be disjoint because every instance of Person must either be a Manager or Staff. In contrast, Person could have two Generalization relationships involving two specific (and non-covering) Classifiers: Sales Person and Manager. This GeneralizationSet would not be disjoint because there are instances of Person which can be a Sales Person and a Manager. + + + + + + Designates the Classifier that is defined as the power type for the associated GeneralizationSet. + + + + + + + Designates the instances of Generalization which are members of a given GeneralizationSet. + + + + + + + + A generalization is a taxonomic relationship between a more general classifier and a more specific classifier. Each instance of the specific classifier is also an indirect instance of the general classifier. Thus, the specific classifier inherits the features of the more general classifier. + + + A generalization relates a specific classifier to a more general classifier, and is owned by the specific classifier. + + + + Every Generalization associated with a given GeneralizationSet must have the same general Classifier. That is, all Generalizations for a particular GeneralizationSet must have the same superclass. + + + OCL + true + + + + + + Indicates whether the specific classifier can be used wherever the general classifier can be used. If true, the execution traces of the specific classifier will be a superset of the execution traces of the general classifier. + + + + + + + References the specializing classifier in the Generalization relationship. + + + + + + + References the general classifier in the Generalization relationship. + + + + + + + Designates a set in which instances of Generalization is considered members. + + + + + + + + + + An information item is an abstraction of all kinds of information that can be exchanged between objects. It is a kind of classifier intended for representing information in a very abstract way, one which cannot be instantiated. + + + + The sources and targets of an information item (its related information flows) must designate subsets of the sources and targets of the representation information item, if any.The Classifiers that can realize an information item can only be of the following kind: Class, Interface, InformationItem, Signal, Component. + + + OCL + (self.represented->select(p | p->oclIsKindOf(InformationItem))->forAll(p | p.informationFlow.source->forAll(q | self.informationFlow.source->include(q)) and p.informationFlow.target->forAll(q | self.informationFlow.target->include(q)))) and (self.represented->forAll(p | p->oclIsKindOf(Class) or oclIsKindOf(Interface) or oclIsKindOf(InformationItem) or oclIsKindOf(Signal) or oclIsKindOf(Component))) + + + + + An informationItem has no feature, no generalization, and no associations. + + + OCL + self.generalization->isEmpty() and self.feature->isEmpty() + + + + + It is not instantiable. + + + OCL + isAbstract + + + + + + Determines the classifiers that will specify the structure and nature of the information. An information item represents all its represented classifiers. + + + + + + + + An information flow specifies that one or more information items circulates from its sources to its targets. Information flows require some kind of information channel for transmitting information items from the source to the destination. An information channel is represented in various ways depending on the nature of its sources and targets. It may be represented by connectors, links, associations, or even dependencies. For example, if the source and destination are parts in some composite structure such as a collaboration, then the information channel is likely to be represented by a connector between them. Or, if the source and target are objects (which are a kind of instance specification), they may be represented by a link that joins the two, and so on. + + + + The sources and targets of the information flow can only be one of the following kind: Actor, Node, UseCase, Artifact, Class, Component, Port, Property, Interface, Package, ActivityNode, ActivityPartition and InstanceSpecification except when its classifier is a relationship (i.e. it represents a link). + + + OCL + (self.source->forAll(p | p->oclIsKindOf(Actor) or oclIsKindOf(Node) or oclIsKindOf(UseCase) or oclIsKindOf(Artifact) or oclIsKindOf(Class) or oclIsKindOf(Component) or oclIsKindOf(Port) or oclIsKindOf(Property) or oclIsKindOf(Interface) or oclIsKindOf(Package) or oclIsKindOf(ActivityNode) or oclIsKindOf(ActivityPartition) or oclIsKindOf(InstanceSpecification))) and (self.target->forAll(p | p->oclIsKindOf(Actor) or oclIsKindOf(Node) or oclIsKindOf(UseCase) or oclIsKindOf(Artifact) or oclIsKindOf(Class) or oclIsKindOf(Component) or oclIsKindOf(Port) or oclIsKindOf(Property) or oclIsKindOf(Interface) or oclIsKindOf(Package) or oclIsKindOf(ActivityNode) or oclIsKindOf(ActivityPartition) or oclIsKindOf(InstanceSpecification))) + + + + + The sources and targets of the information flow must conform with the sources and targets or conversely the targets and sources of the realization relationships. + + + OCL + true + + + + + An information flow can only convey classifiers that are allowed to represent an information item. + + + + OCL + self.conveyed.represented->forAll(p | p->oclIsKindOf(Class) or oclIsKindOf(Interface) or oclIsKindOf(InformationItem) or oclIsKindOf(Signal) or oclIsKindOf(Component)) + + + + + + + Determines which Relationship will realize the specified flow + + + + + + + Specifies the information items that may circulate on this information flow. + + + + + + + Defines from which source the conveyed InformationItems are initiated. + + + + + + + Defines to which target the conveyed InformationItems are directed. + + + + + + + Determines which ActivityEdges will realize the specified flow. + + + + + + + Determines which Connectors will realize the specified flow. + + + + + + + Determines which Messages will realize the specified flow. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A model captures a view of a physical system. It is an abstraction of the physical system, with a certain purpose. This purpose determines what is to be included in the model and what is irrelevant. Thus the model completely describes those aspects of the physical system that are relevant to the purpose of the model, at the appropriate level of detail. + + + + + The name of the viewpoint that is expressed by a model (This name may refer to a profile definition). + + + + + + + Determines whether this model is a metamodel. + + + + + + + A read extent action is an action that retrieves the current instances of a classifier. + + + + The type of the result output pin is the classifier. + + + OCL + true + + + + + The multiplicity of the result output pin is 0..*. + + + OCL + self.result.multiplicity.is(0,#null) + + + + + + The runtime instances of the classifier. + + + + + + + The classifier whose instances are to be retrieved. + + + + + + + + A reclassify object action is an action that changes which classifiers classify an object. + + + + None of the new classifiers may be abstract. + + + OCL + not self.newClassifier->exists(isAbstract = true) + + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.argument.multiplicity.is(1,1) + + + + + The input pin has no type. + + + OCL + self.argument.type->size() = 0 + + + + + + Specifies whether existing classifiers should be removed before adding the new classifiers. + + + + + + A set of classifiers to be removed from the classifiers of the object. + + + + + + + A set of classifiers to be added to the classifiers of the object. + + + + + + + Holds the object to be reclassified. + + + + + + + + A read is classified object action is an action that determines whether a runtime object is classified by a given classifier. + + + + The multiplicity of the input pin is 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + The input pin has no type. + + + OCL + self.object.type->isEmpty() + + + + + The multiplicity of the output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + The type of the output pin is Boolean + + + OCL + self.result.type = Boolean + + + + + + Indicates whether the classifier must directly classify the input object. + + + + + + The classifier against which the classification of the input object is tested. + + + + + + + After termination of the action, will hold the result of the test. + + + + + + + Holds the object whose classification is to be tested. + + + + + + + + A start classifier behavior action is an action that starts the classifier behavior of the input. + + + + The multiplicity of the input pin is 1..1 + + + OCL + true + + + + + If the input pin has a type, then the type must have a classifier behavior. + + + OCL + true + + + + + + Holds the object on which to start the owned behavior. + + + + + + + + A qualifier value is not an action. It is an element that identifies links. It gives a single qualifier within a link end data specification. + + + + The qualifier attribute must be a qualifier of the association end of the link-end data. + + + OCL + self.LinkEndData.end->collect(qualifier)->includes(self.qualifier) + + + + + The type of the qualifier value input pin is the same as the type of the qualifier attribute. + + + OCL + self.value.type = self.qualifier.type + + + + + The multiplicity of the qualifier value input pin is "1..1". + + + OCL + self.value.multiplicity.is(1,1) + + + + + + Attribute representing the qualifier for which the value is to be specified. + + + + + + + Input pin from which the specified value for the qualifier is taken. + + + + + + + + A link end data is not an action. It is an element that identifies links. It identifies one end of a link to be read or written by the children of a link action. A link cannot be passed as a runtime value to or from an action. Instead, a link is identified by its end objects and qualifier values, if any. This requires more than one piece of data, namely, the statically-specified end in the user model, the object on the end, and the qualifier values for that end, if any. These pieces are brought together around a link end data. Each association end is identified separately with an instance of the LinkEndData class. + + + + The property must be an association end. + + + OCL + self.end.association->size() = 1 + + + + + The type of the end object input pin is the same as the type of the association end. + + + OCL + self.value.type = self.end.type + + + + + The multiplicity of the end object input pin must be 1..1. + + + OCL + self.value.multiplicity.is(1,1) + + + + + The qualifiers include all and only the qualifiers of the association end. + + + OCL + self.qualifier->collect(qualifier) = self.end.qualifier + + + + + The end object input pin is not also a qualifier value input pin. + + + OCL + self.value->excludesAll(self.qualifier.value) + + + + + + Input pin that provides the specified object for the given end. This pin is omitted if the link-end data specifies an 'open' end for reading. + + + + + + + Association end for which this link-end data specifies values. + + + + + + + List of qualifier values + + + + + + + + A read link object end action is an action that retrieves an end object from a link object. + + + + The property must be an association end. + + + OCL + self.end.association.notEmpty() + + + + + The association of the association end must be an association class. + + + OCL + self.end.Association.oclIsKindOf(AssociationClass) + + + + + The ends of the association must not be static. + + + OCL + self.end.association.memberEnd->forall(e | not e.isStatic) + + + + + The type of the object input pin is the association class that owns the association end. + + + OCL + self.object.type = self.end.association + + + + + The multiplicity of the object input pin is 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + The type of the result output pin is the same as the type of the association end. + + + OCL + self.result.type = self.end.type + + + + + The multiplicity of the result output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Gives the input pin from which the link object is obtained. + + + + + + + Link end to be read. + + + + + + + Pin where the result value is placed. + + + + + + + + A read link object end qualifier action is an action that retrieves a qualifier end value from a link object. + + + + The qualifier attribute must be a qualifier attribute of an association end. + + + OCL + self.qualifier.associationEnd->size() = 1 + + + + + The association of the association end of the qualifier attribute must be an association class. + + + OCL + self.qualifier.associationEnd.association.oclIsKindOf(AssociationClass) + + + + + The ends of the association must not be static. + + + OCL + self.qualifier.associationEnd.association.memberEnd->forall(e | not e.isStatic) + + + + + The type of the object input pin is the association class that owns the association end that has the given qualifier attribute. + + + OCL + self.object.type = self.qualifier.associationEnd.association + + + + + The multiplicity of the qualifier attribute is 1..1. + + + OCL + self.qualifier.multiplicity.is(1,1) + + + + + The multiplicity of the object input pin is 1..1. + + + OCL + self.object.multiplicity.is(1,1) + + + + + The type of the result output pin is the same as the type of the qualifier attribute. + + + OCL + self.result.type = self.qualifier.type + + + + + The multiplicity of the result output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Gives the input pin from which the link object is obtained. + + + + + + + Pin where the result value is placed. + + + + + + + The attribute representing the qualifier to be read. + + + + + + + + A create link object action creates a link object. + + + + The association must be an association class. + + + OCL + self.association().oclIsKindOf(Class) + + + + + The type of the result pin must be the same as the association of the action. + + + OCL + self.result.type = self.association() + + + + + The multiplicity of the output pin is 1..1. + + + OCL + self.result.multiplicity.is(1,1) + + + + + + Gives the output pin on which the result is put. + + + + + + + + A accept event action is an action that waits for the occurrence of an event meeting specified conditions. + + + + AcceptEventActions may have no input pins. + + + OCL + true + + + + + There are no output pins if the trigger events are only ChangeEvents, or if they are only CallEvents when this action is an instance of AcceptEventAction and not an instance of a descendant of AcceptEventAction (such as AcceptCallAction). + + + OCL + true + + + + + If the trigger events are all TimeEvents, there is exactly one output pin. + + + OCL + true + + + + + If isUnmarshall is true, there must be exactly one trigger for events of type SignalEvent. The number of result output pins must be the same as the number of attributes of the signal. The type and ordering of each result output pin must be the same as the corresponding attribute of the signal. The multiplicity of each result output pin must be compatible with the multiplicity of the corresponding attribute. + + + OCL + true + + + + + + Indicates whether there is a single output pin for the event, or multiple output pins for attributes of the event. + + + + + + Pins holding the received event objects or their attributes. Event objects may be copied in transmission, so identity might not be preserved. + + + + + + + The type of events accepted by the action, as specified by triggers. For triggers with signal events, a signal of the specified type or any subtype of the specified signal type is accepted. + + + + + + + + An accept call action is an accept event action representing the receipt of a synchronous call request. In addition to the normal operation parameters, the action produces an output that is needed later to supply the information to the reply action necessary to return control to the caller. This action is for synchronous calls. If it is used to handle an asynchronous call, execution of the subsequent reply action will complete immediately with no effects. + + + + The result pins must match the in and inout parameters of the operation specified by the trigger event in number, type, and order. + + + OCL + true + + + + + The trigger event must be a CallEvent. + + + OCL + trigger.event.oclIsKindOf(CallEvent) + + + + + isUnmrashall must be true for an AcceptCallAction. + + + OCL + isUnmarshall = true + + + + + + Pin where a value is placed containing sufficient information to perform a subsequent reply and return control to the caller. The contents of this value are opaque. It can be passed and copied but it cannot be manipulated by the model. + + + + + + + + A reply action is an action that accepts a set of return values and a value containing return information produced by a previous accept call action. The reply action returns the values to the caller of the previous call, completing execution of the call. + + + + The reply value pins must match the return, out, and inout parameters of the operation on the event on the trigger in number, type, and order. + + + OCL + true + + + + + The event on replyToCall trigger must be a CallEvent replyToCallEvent.oclIsKindOf(CallEvent) + + + OCL + replyToCallEvent.oclIsKindOf(CallEvent) + + + + + + The trigger specifying the operation whose call is being replied to. + + + + + + + A pin containing the return information value produced by an earlier AcceptCallAction. + + + + + + + A list of pins containing the reply values of the operation. These values are returned to the caller. + + + + + + + + An unmarshall action is an action that breaks an object of a known type into outputs each of which is equal to a value from a structural feature of the object. + + + + The type of the object input pin must be the same as the unmarshall classifier. + + + OCL + true + + + + + The multiplicity of the object input pin is 1..1 + + + OCL + true + + + + + The number of result output pins must be the same as the number of structural features of the unmarshall classifier. + + + OCL + true + + + + + The type and ordering of each result output pin must be the same as the corresponding structural feature of the unmarshall classifier. + + + OCL + true + + + + + The multiplicity of each result output pin must be compatible with the multiplicity of the corresponding structural features of the unmarshall classifier. + + + + OCL + true + + + + + The unmarshall classifier must have at least one structural feature. + + + OCL + true + + + + + unmarshallType must be a Classifier with ordered attributes + + + OCL + true + + + + + + The values of the structural features of the input object. + + + + + + + The type of the object to be unmarshalled. + + + + + + + The object to be unmarshalled. + + + + + + + + A reduce action is an action that reduces a collection to a single value by combining the elements of the collection. + + + + The type of the input must be a collection. + + + OCL + true + + + + + The type of the output must be compatible with the type of the output of the reducer behavior. + + + OCL + true + + + + + The reducer behavior must have two input parameters and one output parameter, of types compatible with the types of elements of the input collection. + + + OCL + true + + + + + + Behavior that is applied to two elements of the input collection to produce a value that is the same type as elements of the collection. + + + + + + + Gives the output pin on which the result is put. + + + + + + + The collection to be reduced. + + + + + + + Tells whether the order of the input collection should determine the order in which the behavior is applied to its elements. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A join node is a control node that synchronizes multiple flows. + + + Join nodes have a Boolean value specification using the names of the incoming edges to specify the conditions under which the join will emit a token. + + + + A join node has one outgoing edge. + + + OCL + self.outgoing->size() = 1 + + + + + If a join node has an incoming object flow, it must have an outgoing object flow, otherwise, it must have an outgoing control flow. + + + OCL + (self.incoming.select(e | e.isTypeOf(ObjectFlow)->notEmpty() implies self.outgoing.isTypeOf(ObjectFlow)) and (self.incoming.select(e | e.isTypeOf(ObjectFlow)->empty() implies self.outgoing.isTypeOf(ControlFlow)) + + + + + + Tells whether tokens having objects with the same identity are combined into one by the join. + + + + + + A specification giving the conditions under which the join with emit a token. Default is "and". + + + + + + + + A data store node is a central buffer node for non-transient information. + + + + + + An object flow is an activity edge that can have objects or data passing along it. + + + Object flows have support for multicast/receive, token selection from object nodes, and transformation of tokens. + + + + Object flows may not have actions at either end. + + + OCL + true + + + + + Object nodes connected by an object flow, with optionally intervening control nodes, must have compatible types. In particular, the downstream object node type must be the same or a supertype of the upstream object node type. + + + + OCL + true + + + + + Object nodes connected by an object flow, with optionally intervening control nodes, must have the same upper bounds. + + + OCL + true + + + + + An edge with constant weight may not target an object node, or lead to an object node downstream with no intervening actions, that has an upper bound less than the weight. + + + OCL + true + + + + + A transformation behavior has one input parameter and one output parameter. The input parameter must be the same as or a supertype of the type of object token coming from the source end. The output parameter must be the same or a subtype of the type of object token expected downstream. The behavior cannot have side effects. + + + OCL + true + + + + + An object flow may have a selection behavior only if has an object node as a source. + + + OCL + true + + + + + A selection behavior has one input parameter and one output parameter. The input parameter must be a bag of elements of the same as or a supertype of the type of source object node. The output parameter must be the same or a subtype of the type of source object node. The behavior cannot have side effects. + + + OCL + true + + + + + isMulticast and isMultireceive cannot both be true. + + + OCL + true + + + + + + Tells whether the objects in the flow are passed by multicasting. + + + + + + Tells whether the objects in the flow are gathered from respondents to multicasting. + + + + + + Changes or replaces data tokens flowing along edge. + + + + + + + Selects tokens from a source object node. + + + + + + + + An object node is an abstract activity node that is part of defining object flow in an activity. + + + Object nodes have support for token selection, limitation on the number of tokens, specifying the state required for tokens, and carrying control values. + + + + All edges coming into or going out of object nodes must be object flow edges. + + + OCL + true + + + + + Object nodes are not unique typed elements + + + OCL + isUnique = false + + + + + If an object node has a selection behavior, then the ordering of the object node is ordered, and vice versa. + + + OCL + true + + + + + A selection behavior has one input parameter and one output parameter. The input parameter must be a bag of elements of the same type as the object node or a supertype of the type of object node. The output parameter must be the same or a subtype of the type of object node. The behavior cannot have side effects. + + + OCL + true + + + + + + + Tells whether and how the tokens in the object node are ordered for selection to traverse edges outgoing from the object node. + + + + + + Tells whether the type of the object node is to be treated as control. + + + + + + The maximum number of tokens allowed in the node. Objects cannot flow into the node if the upper bound is reached. + + + + + + + The required states of the object available at this point in the activity. + + + + + + + Selects tokens for outgoing edges. + + + + + + + + A parameter set is an element that provides alternative sets of inputs or outputs that a behavior may use. + + + + The parameters in a parameter set must all be inputs or all be outputs of the same parameterized entity, and the parameter set is owned by that entity. + + + OCL + true + + + + + If a behavior has input parameters that are in a parameter set, then any inputs that are not in a parameter set must be streaming. Same for output parameters. + + + OCL + true + + + + + Two parameter sets cannot have exactly the same set of parameters. + + + OCL + true + + + + + + Parameters in the parameter set. + + + + + + + Constraint that should be satisfied for the owner of the parameters in an input parameter set to start execution using the values provided for those parameters, or the owner of the parameters in an output parameter set to end execution providing the values for those parameters, if all preconditions and conditions on input parameter sets were satisfied. + + + + + + + + An activity is the specification of parameterized behavior as the coordinated sequencing of subordinate units whose individual elements are actions. + + + + The groups of an activity have no supergroups. + + + OCL + true + + + + + The nodes of the activity must include one ActivityParameterNode for each parameter. + + + OCL + true + + + + + An activity cannot be autonomous and have a classifier or behavioral feature context at the same time. + + + OCL + true + + + + + + Top-level structured nodes in the activity. + + + + + + + Top-level variables in the activity. + + + + + + + Nodes coordinated by the activity. + + + + + + + If true, this activity must not make any changes to variables outside the activity or to objects. (This is an assertion, not an executable property. It may be used by an execution engine to optimize model execution. If the assertion is violated by the action, then the model is ill-formed.) The default is false (an activity may make nonlocal changes). + + + + + + Edges expressing flow between nodes of the activity. + + + + + + + Top-level partitions in the activity. + + + + + + + Top-level groups in the activity. + + + + + + + If true, all invocations of the activity are handled by the same execution. + + + + + + + A parameter is a specification of an argument used to pass information into or out of an invocation of a behavioral feature. + + + Parameters are allowed to be treated as connectable elements. + + + Parameters have support for streaming, exceptions, and parameter sets. + + + + A parameter may only be associated with a connector end within the context of a collaboration. + + + OCL + self.end.notEmpty() implies self.collaboration.notEmpty() + + + + + A parameter cannot be a stream and exception at the same time. + + + OCL + true + + + + + An input parameter cannot be an exception. + + + OCL + true + + + + + Reentrant behaviors cannot have stream parameters. + + + OCL + true + + + + + Only in and inout parameters may have a delete effect. Only out, inout, and return parameters may have a create effect. + + + OCL + true + + + + + + + Indicates whether a parameter is being sent into or out of a behavioral element. + + + + + + Specifies a String that represents a value to be used when no argument is supplied for the Parameter. + + + + + + + Specifies a ValueSpecification that represents a value to be used when no argument is supplied for the Parameter. + + + + + + + References the Operation owning this parameter. + + + + + + + Tells whether an output parameter may emit a value to the exclusion of the other outputs. + + + + + + Tells whether an input parameter may accept values while its behavior is executing, or whether an output parameter post values while the behavior is executing. + + + + + + Specifies the effect that the owner of the parameter has on values passed in or out of the parameter. + + + + + + + The parameter sets containing the parameter. See ParameterSet. + + + + + + + + + + + + + + + + + + + + Sets the default value for this parameter to the specified Boolean value. + + + + The new default value. + + + + + + Sets the default value for this parameter to the specified integer value. + + + + The new default value. + + + + + + Sets the default value for this parameter to the specified string value. + + + + The new default value. + + + + + + Sets the default value for this parameter to the specified unlimited natural value. + + + + The new default value. + + + + + + Sets the default value for this parameter to the null value. + + + + + + An action is a named element that is the fundamental unit of executable functionality. The execution of an action represents some transformation or processing in the modeled system, be it a computer system or otherwise. + + + An action represents a single step within an activity, that is, one that is not further decomposed within the activity. + + + An action has pre- and post-conditions. + + + + + The ordered set of output pins connected to the Action. The action places its results onto pins in this set. + + + + + + + The ordered set of input pins connected to the Action. These are among the total set of inputs. + + + + + + + The classifier that owns the behavior of which this action is a part. + + + + + + + Constraint that must be satisfied when execution is started. + + + + + + + Constraint that must be satisfied when executed is completed. + + + + + + + + An interruptible activity region is an activity group that supports termination of tokens flowing in the portions of an activity. + + + + Interrupting edges of a region must have their source node in the region and their target node outside the region in the same activity containing the region. + + + + OCL + true + + + + + + The edges leaving the region that will abort other tokens flowing in the region. + + + + + + + Nodes immediately contained in the group. + + + + + + + + ActivityNode is an abstract class for points in the flow of an activity connected by edges. + + + + Activity nodes may be owned by at most one structured node. + + + OCL + true + + + + + Activity nodes can only be owned by activities or groups. + + + OCL + true + + + + + + Structured activity node containing the node. + + + + + + + Activity containing the node. + + + + + + + Edges that have the node as source. + + + + + + + Edges that have the node as target. + + + + + + + Inherited nodes replaced by this node in a specialization of the activity. + + + + + + + Partitions containing the node. + + + + + + + Interruptible regions containing the node. + + + + + + + Groups containing the node. + + + + + + + + A behavioral feature is a feature of a classifier that specifies an aspect of the behavior of its instances. + + + A behavioral feature is implemented (realized) by a behavior. A behavioral feature specifies that a classifier will respond to a designated request by invoking its implementing method. + + + A behavioral feature owns zero or more parameter sets. + + + + + + Specifies the ordered set of formal parameters of this BehavioralFeature. + + + + + + + If true, then the behavioral feature does not have an implementation, and one must be supplied by a more specific element. If false, the behavioral feature must have an implementation in the classifier or one must be inherited from a more general element. + + + + + + A behavioral description that implements the behavioral feature. There may be at most one behavior for a particular pairing of a classifier (as owner of the behavior) and a behavioral feature (as specification of the behavior). + + + + + + + Specifies the semantics of concurrent calls to the same passive instance (i.e., an instance originating from a class with isActive being false). Active instances control access to their own behavioral features. + + + + + + References the Types representing exceptions that may be raised during an invocation of this feature. + + + The signals that the behavioral feature raises as exceptions. + + + + + + + The ParameterSets owned by this BehavioralFeature. + + + + + + + Creates a return result parameter with the specified name and type. + + + + + The name for the new return result, or null. + + + + + + + The type for the new return result, or null. + + + + + + + + The query isDistinguishableFrom() determines whether two BehavioralFeatures may coexist in the same Namespace. It specifies that they have to have different signatures. + + + + OCL + result = if n.oclIsKindOf(BehavioralFeature) then if ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->notEmpty() then Set{}->including(self)->including(n)->isUnique(bf | bf.ownedParameter->collect(type)) else true endif else true endif + + + + + + + + + + Behavior is a specification of how its context classifier changes state over time. This specification may be either a definition of possible behavior execution or emergent behavior, or a selective illustration of an interesting subset of possible executions. The latter form is typically used for capturing examples, such as a trace of a particular execution. + + + A behavior owns zero or more parameter sets. + + + + The parameters of the behavior must match the parameters of the implemented behavioral feature. + + + OCL + true + + + + + The implemented behavioral feature must be a feature (possibly inherited) of the context classifier of the behavior. + + + OCL + true + + + + + If the implemented behavioral feature has been redefined in the ancestors of the owner of the behavior, then the behavior must realize the latest redefining behavioral feature. + + + OCL + true + + + + + There may be at most one behavior for a given pairing of classifier (as owner of the behavior) and behavioral feature (as specification of the behavior). + + + OCL + true + + + + + + Tells whether the behavior can be invoked while it is still executing from a previous invocation. + + + + + + References a behavior that this behavior redefines. A subtype of Behavior may redefine any other subtype of Behavior. If the behavior implements a behavioral feature, it replaces the redefined behavior. If the behavior is a classifier behavior, it extends the redefined behavior. + + + + + + + Designates a behavioral feature that the behavior implements. The behavioral feature must be owned by the classifier that owns the behavior or be inherited by it. The parameters of the behavioral feature and the implementing behavior must match. If a behavior does not have a specification, it is directly associated with a classifier (i.e., it is the behavior of the classifier as a whole). + + + + + + + References a list of parameters to the behavior which describes the order and type of arguments that can be given when the behavior is invoked and of the values which will be returned when the behavior completes its execution. + + + + + + + + The classifier that is the context for the execution of the behavior. If the behavior is owned by a BehavioredClassifier, that classifier is the context. Otherwise, the context is the first BehavioredClassifier reached by following the chain of owner relationships. For example, following this algorithm, the context of an entry action in a state machine is the classifier that owns the state machine. The features of the context classifier as well as the elements visible to the context classifier are visible to the behavior. + + + + + + + An optional set of Constraints specifying what must be fulfilled when the behavior is invoked. + + + + + + + An optional set of Constraints specifying what is fulfilled after the execution of the behavior is completed, if its precondition was fulfilled before its invocation. + + + + + + + The ParameterSets owned by this Behavior. + + + + + + + + + + + + + + A pin is a typed element and multiplicity element that provides values to actions and accept result values from them. + + + A pin is an object node for inputs and outputs to actions. + + + + Control pins have a control type + + + OCL + isControl implies isControlType + + + + + + + Tells whether the pins provide data to the actions, or just controls when it executes it. + + + + + + + ObjectNodeOrderingKind is an enumeration indicating queuing order within a node. + + + + Indicates that object node tokens are unordered. + + + + + Indicates that object node tokens are ordered. + + + + + Indicates that object node tokens are queued in a last in, first out manner. + + + + + Indicates that object node tokens are queued in a first in, first out manner. + + + + + + The datatype ParameterEffectKind is an enumeration that indicates the effect of a behavior on values passed in or out of its parameters. + + + + Indicates that the behavior creates values. + + + + + Indicates that the behavior reads values. + + + + + Indicates that the behavior updates values. + + + + + Indicates that the behavior deletes values. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A conditional node is a structured activity node that represents an exclusive choice among some number of alternatives. + + + + The result output pins have no incoming edges. + + + OCL + true + + + + + + If true, the modeler asserts that at most one test will succeed. + + + + + + If true, the modeler asserts that at least one test will succeed. + + + + + + Set of clauses composing the conditional. + + + + + + + A list of output pins that constitute the data flow outputs of the conditional. + + + + + + + + A structured activity node is an executable activity node that may have an expansion into subordinate nodes as an activity group. The subordinate nodes must belong to only one structured activity node, although they may be nested. + + + Because of the concurrent nature of the execution of actions within and across activities, it can be difficult to guarantee the consistent access and modification of object memory. In order to avoid race conditions or other concurrency-related problems, it is sometimes necessary to isolate the effects of a group of actions from the effects of actions outside the group. This may be indicated by setting the mustIsolate attribute to true on a structured activity node. If a structured activity node is "isolated," then any object used by an action within the node cannot be accessed by any action outside the node until the structured activity node as a whole completes. Any concurrent actions that would result in accessing such objects are required to have their execution deferred until the completion of the node. + + + + The edges owned by a structured node must have source and target nodes in the structured node, and vice versa. + + + OCL + true + + + + + + + + A variable defined in the scope of the structured activity node. It has no value and may not be accessed + + + + + + + Nodes immediately contained in the group. + + + + + + + Activity immediately containing the node. + + + + + + + If true, then the actions in the node execute in isolation from actions outside the node. + + + + + + Edges immediately contained in the structured node. + + + + + + + + A loop node is a structured activity node that represents a loop with setup, test, and body sections. + + + + Loop variable inputs must not have outgoing edges. + + + OCL + true + + + + + The bodyOutput pins are output pins on actions in the body of the loop node. + + + OCL + true + + + + + The result output pins have no incoming edges. + + + OCL + true + + + + + + If true, the test is performed before the first execution of the body. +If false, the body is executed once before the test is performed. + + + + + + + The set of nodes and edges that perform the repetitive computations of the loop. The body section is executed as long as the test section produces a true value. + + + + + + + The set of nodes and edges that initialize values or perform other setup computations for the loop. + + + + + + + An output pin within the test fragment the value of which is examined after execution of the test to determine whether to execute the loop body. + + + + + + + The set of nodes, edges, and designated value that compute a Boolean value to determine if another execution of the body will be performed. + + + + + + + A list of output pins that constitute the data flow output of the entire loop. + + + + + + + A list of output pins that hold the values of the loop variables during an execution of the loop. When the test fails, the values are movied to the result pins of the loop. + + + + + + + A list of output pins within the body fragment the values of which are moved to the loop variable pins after completion of execution of the body, before the next iteration of the loop begins or before the loop exits. + + + + + + + A list of values that are moved into the loop variable pins before the first iteration of the loop. + + + + + + + + A clause is an element that represents a single branch of a conditional construct, including a test and a body section. The body section is executed only if (but not necessarily if) the test section evaluates true. + + + + The decider output pin must be for the test body or a node contained by the test body as a structured node. + + + OCL + true + + + + + The bodyOutput pins are output pins on actions in the body of the clause. + + + OCL + true + + + + + + A nested activity fragment with a designated output pin that specifies the result of the test. + + + + + + + A nested activity fragment that is executed if the test evaluates to true and the clause is chosen over any concurrent clauses that also evaluate to true. + + + + + + + A set of clauses whose tests must all evaluate false before the current clause can be tested. + + + + + + + A set of clauses which may not be tested unless the current clause tests false. + + + + + + + An output pin within the test fragment the value of which is examined after execution of the test to determine whether the body should be executed. + + + + + + + A list of output pins within the body fragment whose values are moved to the result pins of the containing conditional node after execution of the clause body. + + + + + + + + An activity edge is an abstract class for directed connections between two activity nodes. + + + Activity edges can be contained in interruptible regions. + + + + The source and target of an edge must be in the same activity as the edge. + + + OCL + true + + + + + Activity edges may be owned only by activities or groups. + + + OCL + true + + + + + Activity edges may be owned by at most one structured node. + + + OCL + true + + + + + + Activity containing the edge. + + + + + + + Node from which tokens are taken when they traverse the edge. + + + + + + + Node to which tokens are put when they traverse the edge. + + + + + + + Inherited edges replaced by this edge in a specialization of the activity. + + + + + + + Partitions containing the edge. + + + + + + + Specification evaluated at runtime to determine if the edge can be traversed. + + + + + + + Number of tokens consumed from the source node on each traversal. + + + + + + + Region that the edge can interrupt. + + + + + + + Structured activity node containing the edge. + + + + + + + Groups containing the edge. + + + + + + + + ActivityGroup is an abstract class for defining sets of nodes and edges in an activity. + + + + All nodes and edges of the group must be in the same activity as the group. + + + OCL + true + + + + + No node or edge in a group may be contained by its subgroups or its containing groups, transitively. + + + OCL + true + + + + + Groups may only be owned by activities or groups. + + + OCL + true + + + + + + Groups immediately contained in the group. + + + + + + + Group immediately containing the group. + + + + + + + Activity containing the group. + + + + + + + Nodes immediately contained in the group. + + + + + + + Edges immediately contained in the group. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An expansion node is an object node used to indicate a flow across the boundary of an expansion region. A flow into a region contains a collection that is broken into its individual elements inside the region, which is executed once per element. A flow out of a region combines individual elements into a collection for use outside the region. + + + + + The expansion region for which the node is an output. + + + + + + + The expansion region for which the node is an input. + + + + + + + + An expansion region is a structured activity region that executes multiple times corresponding to elements of an input collection. + + + + An ExpansionRegion must have one or more argument ExpansionNodes and zero or more result ExpansionNodes. + + + OCL + true + + + + + + The way in which the executions interact: +parallel: all interactions are independent +iterative: the interactions occur in order of the elements +stream: a stream of values flows into a single execution + + + + + + + An object node that accepts a separate element of the output collection during each of the multiple executions of the region. The values are formed into a collection that is available when the execution of the region is complete. + + + + + + + An object node that holds a separate element of the input collection during each of the multiple executions of the region. + + + + + + + + An executable node is an abstract class for activity nodes that may be executed. It is used as an attachment point for exception handlers. + + + + + A set of exception handlers that are examined if an uncaught exception propagates to the outer level of the executable node. + + + + + + + + An exception handler is an element that specifies a body to execute in case the specified exception occurs during the execution of the protected node. + + + + The exception handler and its input object node are not the source or target of any edge. + + + OCL + true + + + + + The result pins of the exception handler body must correspond in number and types to the result pins of the protected node. + + + OCL + true + + + + + The handler body has one input, and that input is the same as the exception input. + + + OCL + true + + + + + An edge that has a source in an exception handler structured node must have its target in the handler also, and vice versa. + + + OCL + true + + + + + + The node protected by the handler. The handler is examined if an exception propagates to the outside of the node. + + + + + + + A node that is executed if the handler satisfies an uncaught exception. + + + + + + + An object node within the handler body. When the handler catches an exception, the exception token is placed in this node, causing the body to execute. + + + + + + + The kind of instances that the handler catches. If an exception occurs whose type is any of the classifiers in the set, the handler catches the exception and executes its body. + + + + + + + + ExpansionKind is an enumeration type used to specify how multiple executions of an expansion region interact. + + + + The executions are independent. They may be executed concurrently. + + + + + The executions are dependent and must be executed one at a time, in order of the collection elements. + + + + + A stream of collection elements flows into a single execution, in order of the collection elements. + + + + + + + + + + + + + + + + + + + + + + + + + + + A component represents a modular part of a system that encapsulates its contents and whose manifestation is replaceable within its environment. + + + In the namespace of a component, all model elements that are involved in or related to its definition are either owned or imported explicitly. This may include, for example, use cases and dependencies (e.g. mappings), packages, components, and artifacts. + + + + + + The kind of instantiation that applies to a Component. If false, the component is instantiated as an addressable object. If true, the Component is defined at design-time, but at runtime (or execution-time) an object specified by the Component does not exist, that is, the component is instantiated indirectly, through the instantiation of its realizing classifiers or parts. Several standard stereotypes use this meta attribute, e.g. <<specification>>, <<focus>>, <<subsystem>>. + + + + + + The interfaces that the component requires from other components in its environment in order to be able to offer its full set of provided functionality. These interfaces may be Used by the Component or any of its realizingClassifiers, or they may be the Interfaces that are required by its public Ports. + + + + + + + The interfaces that the component exposes to its environment. These interfaces may be Realized by the Component or any of its realizingClassifiers, or they may be the Interfaces that are provided by its public Ports. + + + + + + + The set of Realizations owned by the Component. Realizations reference the Classifiers of which the Component is an abstraction; i.e., that realize its behavior. + + + + + + + The set of PackageableElements that a Component owns. In the namespace of a component, all model elements that are involved in or related to its definition may be owned or imported explicitly. These may include e.g. Classes, Interfaces, Components, Packages, Use cases, Dependencies (e.g. mappings), and Artifacts. + + + + + + + Creates a(n) (abstract) class with the specified name as a packaged element of this component. + + + + + The name for the new class, or null. + + + + + Whether the new class should be abstract. + + + + + + Creates a enumeration with the specified name as a packaged element of this component. + + + + + The name for the new enumeration, or null. + + + + + + Creates a primitive type with the specified name as a packaged element of this component. + + + + + The name for the new primitive type, or null. + + + + + + Creates an interface with the specified name as a packaged element of this component. + + + + + The name for the new interface, or null. + + + + + + Utility returning the set of realized interfaces of a component: + + + + OCL + result = (classifier.clientDependency-> select(dependency|dependency.oclIsKindOf(Realization) and dependency.supplier.oclIsKindOf(Interface)))-> collect(dependency|dependency.client) + + + + + + + + + + + Utility returning the set of used interfaces of a component: + + + + OCL + result = (classifier.supplierDependency-> select(dependency|dependency.oclIsKindOf(Usage) and dependency.supplier.oclIsKindOf(interface)))-> collect(dependency|dependency.supplier) + + + + + + + + + + + + OCL + result = let usedInterfaces = UsedInterfaces(self) and let realizingClassifierUsedInterfaces = UsedInterfaces(self.realizingClassifier) and let typesOfUsedPorts = self.ownedPort.required in ((usedInterfaces->union(realizingClassifierUsedInterfaces))-> union(typesOfUsedPorts))->asSet() + + + + + + + + + + + OCL + result = let implementedInterfaces = self.implementation->collect(impl|impl.contract) and let realizedInterfaces = RealizedInterfaces(self) and let realizingClassifierInterfaces = RealizedInterfaces(self.realizingClassifier) and let typesOfRequiredPorts = self.ownedPort.provided in (((implementedInterfaces->union(realizedInterfaces)->union(realizingClassifierInterfaces))-> union(typesOfRequiredPorts))->asSet() + + + + + + + + + + + + + + + + + A deployment is the allocation of an artifact or artifact instance to a deployment target. + + + A component deployment is the deployment of one or more artifacts or artifact instances to a deployment target, optionally parameterized by a deployment specification. Examples are executables and configuration files. + + + + + The Artifacts that are deployed onto a Node. This association specializes the supplier association. + + + + + + + The DeployedTarget which is the target of a Deployment. + + + + + + + The specification of properties that parameterize the deployment and execution of one or more Artifacts. + + + + + + + + A deployment specification specifies a set of properties that determine execution parameters of a component artifact that is deployed on a node. A deployment specification can be aimed at a specific type of container. An artifact that reifies or implements deployment specification properties is a deployment descriptor. + + + + The deployedElements of a DeploymentTarget that are involved in a Deployment that has an associated Deployment-Specification is a kind of Component (i.e. the configured components). + + + OCL + self.deployment->forAll (d | d.location.deployedElements->forAll (de | de.oclIsKindOf(Component))) + + + + + The DeploymentTarget of a DeploymentSpecification is a kind of ExecutionEnvironment. + + + OCL + result = self.deployment->forAll (d | d.location..oclIsKindOf(ExecutionEnvironment)) + + + + + + The location where an Artifact is deployed onto a Node. This is typically a 'directory' or 'memory address'. + + + + + + + The location where a component Artifact executes. This may be a local or remote location. + + + + + + + The deployment with which the DeploymentSpecification is associated. + + + + + + + + + Protocol state machines can be redefined into more specific protocol state machines, or into behavioral state machines. Protocol conformance declares that the specific protocol state machine specifies a protocol that conforms to the general state machine one, or that the specific behavioral state machine abide by the protocol of the general protocol state machine. + + + + + Specifies the state machine which conforms to the general state machine. + + + + + + + Specifies the protocol state machine to which the specific state machine conforms. + + + + + + + + An interface is a kind of classifier that represents a declaration of a set of coherent public features and obligations. An interface specifies a contract; any instance of a classifier that realizes the interface must fulfill that contract. The obligations that may be associated with an interface are in the form of various kinds of constraints (such as pre- and post-conditions) or protocol specifications, which may impose ordering restrictions on interactions through the interface. + + + Interfaces may include receptions (in addition to operations). + + + Since an interface specifies conformance characteristics, it does not own detailed behavior specifications. Instead, interfaces may own a protocol state machine that specifies event sequences and pre/post conditions for the operations and receptions described by the interface. + + + + The visibility of all features owned by an interface must be public. + + + OCL + self.feature->forAll(f | f.visibility = #public) + + + + + + The attributes (i.e. the properties) owned by the class. + + + + + + + The operations owned by the class. + + + + + + + References all the Classifiers that are defined (nested) within the Class. + + + + + + + References all the Interfaces redefined by this Interface. + + + + + + + Receptions that objects providing this interface are willing to accept. + + + + + + + References a protocol state machine specifying the legal sequences of the invocation of the behavioral features described in the interface. + + + + + + + Creates an operation with the specified name, parameter names, parameter types, and return type (or null) as an owned operation of this interface. + + + + + The name for the new operation, or null. + + + + + + + The parameter names for the new operation, or null. + + + + + + + The parameter types for the new operation, or null. + + + + + + + The return type for the new operation, or null. + + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this interface. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + A port is a property of a classifier that specifies a distinct interaction point between that classifier and its environment or between the (behavior of the) classifier and its internal parts. Ports are connected to properties of the classifier by connectors through which requests can be made to invoke the behavioral features of a classifier. A Port may specify the services a classifier provides (offers) to its environment as well as the services that a classifier expects (requires) of its environment. + + + A port has an associated protocol state machine. + + + + The required interfaces of a port must be provided by elements to which the port is connected. + + + OCL + true + + + + + Port.aggregation must be composite. + + + OCL + true + + + + + When a port is destroyed, all connectors attached to this port will be destroyed also. + + + OCL + true + + + + + A defaultValue for port cannot be specified when the type of the Port is an Interface + + + OCL + true + + + + + + Specifies whether requests arriving at this port are sent to the classifier behavior of this classifier. Such ports are referred to as behavior port. Any invocation of a behavioral feature targeted at a behavior port will be handled by the instance of the owning classifier itself, rather than by any instances that this classifier may contain. + + + + + + If true indicates that this port is used to provide the published functionality of a classifier; if false, this port is used to implement the classifier but is not part of the essential externally-visible functionality of the classifier and can, therefore, be altered or deleted along with the internal implementation of the classifier and other properties that are considered part of its implementation. + + + + + + References the interfaces specifying the set of operations and receptions which the classifier expects its environment to handle. This association is derived as the set of interfaces required by the type of the port or its supertypes. + + + + + + + A port may be redefined when its containing classifier is specialized. The redefining port may have additional interfaces to those that are associated with the redefined port or it may replace an interface by one of its subtypes. + + + + + + + References the interfaces specifying the set of operations and receptions which the classifier offers to its environment, and which it will handle either directly or by forwarding it to a part of its internal structure. This association is derived from the interfaces realized by the type of the port or by the type of the port, if the port was typed by an interface. + + + + + + + + References an optional protocol state machine which describes valid interactions at this interaction point. + + + + + + + + + + + + + + + + + + + + A protocol transition specifies a legal transition for an operation. Transitions of protocol state machines have the following information: a pre condition (guard), on trigger, and a post condition. Every protocol transition is associated to zero or one operation (referred BehavioralFeature) that belongs to the context classifier of the protocol state machine. + + + + A protocol transition always belongs to a protocol state machine. + + + OCL + container.belongsToPSM() + + + + + A protocol transition never has associated actions. + + + OCL + effect->isEmpty() + + + + + If a protocol transition refers to an operation (i. e. has a call trigger corresponding to an operation), then that operation should apply to the context classifier of the state machine of the protocol transition. + + + OCL + true + + + + + + Specifies the post condition of the transition which is the condition that should be obtained once the transition is triggered. This post condition is part of the post condition of the operation connected to the transition. + + + + + + + + This association refers to the associated operation. It is derived from the operation of the call trigger when applicable. + + + + + + + Specifies the precondition of the transition. It specifies the condition that should be verified before triggering the transition. This guard condition added to the source state will be evaluated as part of the precondition of the operation referred by the transition if any. + + + + + + + + A protocol state machine is always defined in the context of a classifier. It specifies which operations of the classifier can be called in which state and under which condition, thus specifying the allowed call sequences on the classifier's operations. A protocol state machine presents the possible and permitted transitions on the instances of its context classifier, together with the operations which carry the transitions. In this manner, an instance lifecycle can be created for a classifier, by specifying the order in which the operations can be activated and the states through which an instance progresses during its existence. + + + + A protocol state machine must only have a classifier context, not a behavioral feature context. + + + OCL + (not context->isEmpty( )) and specification->isEmpty() + + + + + All transitions of a protocol state machine must be protocol transitions. (transitions as extended by the ProtocolStateMachines package) + + + OCL + region->forAll(r | r.transition->forAll(t | t.oclIsTypeOf(ProtocolTransition))) + + + + + The states of a protocol state machine cannot have entry, exit, or do activity actions. + + + OCL + region->forAll(r | r.subvertex->forAll(v | v.oclIsKindOf(State) implies (v.entry->isEmpty() and v.exit->isEmpty() and v.doActivity->isEmpty()))) + + + + + Protocol state machines cannot have deep or shallow history pseudostates. + + + OCL + region->forAll (r | r.subvertex->forAll (v | v.oclIsKindOf(Psuedostate) implies ((v.kind <> #deepHistory) and (v.kind <> #shallowHistory))))) + + + + + If two ports are connected, then the protocol state machine of the required interface (if defined) must be conformant to the protocol state machine of the provided interface (if defined). + + + OCL + true + + + + + + Conformance between protocol state machines. + + + + + + + + A state models a situation during which some (usually implicit) invariant condition holds. + + + The states of protocol state machines are exposed to the users of their context classifiers. A protocol state represents an exposed stable situation of its context classifier: when an instance of the classifier is not processing any operation, users of this instance can always know its state configuration. + + + + Only submachine states can have connection point references. + + + OCL + isSubmachineState implies connection->notEmpty ( ) + + + + + The connection point references used as destinations/sources of transitions associated with a submachine state must be defined as entry/exit points in the submachine state machine. + + + OCL + self.isSubmachineState implies (self.connection->forAll (cp | cp.entry->forAll (p | p.statemachine = self.submachine) and cp.exit->forAll (p | p.statemachine = self.submachine))) + + + + + A state is not allowed to have both a submachine and regions. + + + OCL + isComposite implies not isSubmachineState + + + + + Only composite states can have entry or exit pseudostates defined. + + + OCL + connectionPoint->notEmpty() implies isComoposite + + + + + Only entry or exit pseudostates can serve as connection points. + + + OCL + connectionPoint->forAll(cp|cp.kind = #entry or cp.kind = #exit) + + + + + + + + A state with isComposite=true is said to be a composite state. A composite state is a state that contains at least one region. + + + + + + A state with isOrthogonal=true is said to be an orthogonal composite state. An orthogonal composite state contains two or more regions. + + + + + + A state with isSimple=true is said to be a simple state. A simple state does not have any regions and it does not refer to any submachine state machine. + + + + + + A state with isSubmachineState=true is said to be a submachine state. Such a state refers to a state machine (submachine). + + + + + + The state machine that is to be inserted in place of the (submachine) state. + + + + + + + The entry and exit connection points used in conjunction with this (submachine) state, i.e. as targets and sources, respectively, in the region with the submachine state. A connection point reference references the corresponding definition of a connection point pseudostate in the statemachine referenced by the submachinestate. + + + + + + + The state of which this state is a redefinition. + + + + + + + The regions owned directly by the state. + + + + + + + References the classifier in which context this element may be redefined. + + + + + + + Specifies conditions that are always true when this state is the current state. In protocol state machines, state invariants are additional conditions to the preconditions of the outgoing transitions, and to the postcondition of the incoming transitions. + + + + + + + + An optional behavior that is executed whenever this state is entered regardless of the transition taken to reach the state. If defined, entry actions are always executed to completion prior to any internal behavior or transitions performed within the state. + + + + + + + + An optional behavior that is executed whenever this state is exited regardless of which transition was taken out of the state. If defined, exit actions are always executed to completion only after all internal activities and transition actions have completed execution. + + + + + + + An optional behavior that is executed while being in the state. The execution starts when this state is entered, and stops either by itself, or when the state is exited, whichever comes first. + + + + + + + The entry and exit pseudostates of a composite state. These can only be entry or exit Pseudostates, and they must have different names. They can only be defined for composite states. + + + + + + + A list of triggers that are candidates to be retained by the state machine if they trigger no transitions out of the state (not consumed). A deferred trigger is retained until the state machine reaches a state configuration where it is no longer deferred. + + + + + + + + A simple state is a state without any regions. + + + + OCL + result = region.isEmpty() + + + + + + + A composite state is a state with at least one region. + + + + OCL + result = region.notEmpty() + + + + + + + An orthogonal state is a composite state with at least 2 regions + + + + OCL + result = (region->size () > 1) + + + + + + + Only submachine states can have a reference statemachine. + + + + OCL + result = submachine.notEmpty() + + + + + + + The redefinition context of a state is the nearest containing statemachine. + + + + OCL + result = let sm = containingStateMachine() in if sm.context->isEmpty() or sm.general->notEmpty() then sm else sm.context endif + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of a state are properly related to the redefinition contexts of the specified state to allow this element to redefine the other. The containing region of a redefining state must redefine the containing region of the redefined state. + + + + OCL + result = true + + + + + + + + The query isConsistentWith() specifies that a redefining state is consistent with a redefined state provided that the redefining state is an extension of the redefined state: A simple state can be redefined (extended) to become a composite state (by adding a region) and a composite state can be redefined (extended) by adding regions and by adding vertices, states, and transitions to inherited regions. All states may add or replace entry, exit, and 'doActivity' actions. + + + + OCL + result = true + + + + + + + + The query containingStateMachine() returns the state machine that contains the state either directly or transitively. + + + + OCL + result = container.containingStateMachine() + + + + + + + + A region is an orthogonal part of either a composite state or a state machine. It contains states and transitions. + + + + A region can have at most one initial vertex + + + OCL + self.subvertex->select (v | v.oclIsKindOf(Pseudostate))-> select(p : Pseudostate | p.kind = #initial)->size() <= 1 + + + + + A region can have at most one deep history vertex + + + OCL + self.subvertex->select (v | v.oclIsKindOf(Pseudostate))-> select(p : Pseudostate | p.kind = #deepHistory)->size() <= 1 + + + + + A region can have at most one shallow history vertex + + + OCL + self.subvertex->select(v | v.oclIsKindOf(Pseudostate))-> select(p : Pseudostate | p.kind = #shallowHistory)->size() <= 1 + + + + + If a Region is owned by a StateMachine, then it cannot also be owned by a State and vice versa. + + + OCL + (stateMachine->notEmpty() implies state->isEmpty()) and (state->notEmpty() implies stateMachine->isEmpty()) + + + + + + + The set of vertices that are owned by this region. + + + + + + + The set of transitions owned by the region. Note that internal transitions are owned by a region, but applies to the source state. + + + + + + + The StateMachine that owns the Region. If a Region is owned by a StateMachine, then it cannot also be owned by a State. + + + + + + + The State that owns the Region. If a Region is owned by a State, then it cannot also be owned by a StateMachine. + + + + + + + The region of which this region is an extension. + + + + + + + References the classifier in which context this element may be redefined. + + + + + + + The redefinition context of a region is the nearest containing statemachine + + + + OCL + result = let sm = containingStateMachine() in if sm.context->isEmpty() or sm.general->notEmpty() then sm else sm.context endif + + + + + + + The query isRedefinitionContextValid() specifies whether the redefinition contexts of a region are properly related to the redefinition contexts of the specified region to allow this element to redefine the other. The containing statemachine/state of a redefining region must redefine the containing statemachine/state of the redefined region. + + + + OCL + result = true + + + + + + + + The query isConsistentWith() specifies that a redefining region is consistent with a redefined region provided that the redefining region is an extension of the redefined region, i.e. it adds vertices and transitions and it redefines states and transitions of the redefined region. + + + + OCL + result = true + + + + + + + + The operation containingStateMachine() returns the sate machine in which this Region is defined + + + + OCL + result = if stateMachine->isEmpty() then state.containingStateMachine() else stateMachine endif + + + + + + + The operation belongsToPSM () checks if the region belongs to a protocol state machine + + + + OCL + result = if not stateMachine->isEmpty() then oclIsTypeOf(ProtocolStateMachine) else if not state->isEmpty() then state.container.belongsToPSM () else false + + + + + + + + + + + + + + + + + + + + + + Specifies the namespace in which the protocol state machine is defined. + + + + + + + + + + + + + + + + + + + + + + + + + + A model element that has both association and class properties. An AssociationClass can be seen as an association that also has class properties, or as a class that also has association properties. It not only connects a set of classifiers but also defines a set of features that belong to the relationship itself and not to any of the classifiers. + + + + An AssociationClass cannot be defined between itself and something else. + + + OCL + self.endType->excludes(self) and self.endType>collect(et|et.allparents()->excludes(self)) + + + + + + + The operation allConnections results in the set of all AssociationEnds of the Association. + + + + OCL + result = memberEnd->union ( self.parents ()->collect (p | p.allConnections () ) + + + + + + + + + + + + A template signature bundles the set of formal template parameters for a templated element. + + + + Parameters must own the elements they parameter or those elements must be owned by the element being templated. + + + OCL + templatedElement.ownedElement->includesAll(parameter.parameteredElement - parameter.ownedParameteredElement) + + + + + + The ordered set of all formal template parameters for this template signature. + + + + + + + The formal template parameters that are owned by this template signature. + + + + + + + The element that owns this template signature. + + + + + + + + A named element is an element in a model that may have a name. + + + A named element supports using a string expression to specify its name. This allows names of model elements to involve template parameters. The actual name is evaluated from the string expression only when it is sensible to do so (e.g., when a template is bound). + + + + If there is no name, or one of the containing namespaces has no name, there is no qualified name. + + + OCL + (self.name->isEmpty() or self.allNamespaces()->select(ns | ns.name->isEmpty())->notEmpty()) implies self.qualifiedName->isEmpty() + + + + + When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces. + + + OCL + (self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty()) implies self.qualifiedName = self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result)) + + + + + If a NamedElement is not owned by a Namespace, it does not have a visibility. + + + OCL + namespace->isEmpty() implies visibility->isEmpty() + + + + + + The name of the NamedElement. + + + + + + + Determines where the NamedElement appears within different Namespaces within the overall model, and its accessibility. + + + + + + + A name which allows the NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from the names of the containing namespaces starting at the root of the hierarchy and ending with the name of the NamedElement itself. + + + + + + + Indicates the dependencies that reference the client. + + + + + + + Specifies the namespace that owns the NamedElement. + + + + + + + The string expression used to define the name of this named element. + + + + + + + Creates a dependency between this named element and the specified supplier, owned by this named element's nearest package. + + + + + The supplier for the new dependency. + + + + + + Retrieves a localized label for this named element. + + + + + + + + + Retrieves a label for this named element, localized if indicated. + + + + + + + + Whether to localize the label. + + + + + + Creates a usage between this named element and the specified supplier, owned by this named element's nearest package. + + + + + The supplier for the new usage. + + + + + + When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces. + + + + OCL + result = if self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty() then self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result)) else Set{} endif + + + + + + + The query allNamespaces() gives the sequence of namespaces in which the NamedElement is nested, working outwards. + + + + OCL + result = if self.namespace->isEmpty() then Sequence{} else self.namespace.allNamespaces()->prepend(self.namespace) endif + + + + + + + + + + The query isDistinguishableFrom() determines whether two NamedElements may logically co-exist within a Namespace. By default, two named elements are distinguishable if (a) they have unrelated types or (b) they have related types but different names. + + + + OCL + result = if self.oclIsKindOf(n.oclType) or n.oclIsKindOf(self.oclType) then ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->isEmpty() else true endif + + + + + + + + + The query separator() gives the string that is used to separate names when constructing a qualified name. + + + + OCL + result = '::' + + + + + + + The query allOwningPackages() returns all the directly or indirectly owning packages. + + + + OCL + result = self.namespace->select(p | p.oclIsKindOf(Package))->union(p.allOwningPackages()) + + + + + + + + + + + A template parameter exposes a parameterable element as a formal template parameter of a template. + + + + The default must be compatible with the formal template parameter. + + + OCL + default->notEmpty() implies default->isCompatibleWith(parameteredElement) + + + + + + The template signature that owns this template parameter. + + + + + + + The element exposed by this template parameter. + + + + + + + The element that is owned by this template parameter. + + + + + + + The element that is the default for this formal template parameter. + + + + + + + The element that is owned by this template parameter for the purpose of providing a default. + + + + + + + + An expression that specifies a string value that is derived by concatenating a set of sub string expressions, some of which might be template parameters. + + + + All the operands of a StringExpression must be LiteralStrings + + + OCL + operand->forAll (op | op.oclIsKindOf (LiteralString)) + + + + + If a StringExpression has sub-expressions, it cannot have operands and vice versa (this avoids the problem of having to +define a collating sequence between operands and subexpressions). + + + + OCL + if subExpression->notEmpty() then operand->isEmpty() else operand->notEmpty() + + + + + + + The StringExpressions that constitute this StringExpression. + + + + + + + The string expression of which this expression is a substring. + + + + + + + The query stringValue() returns the string that concatenates, in order, all the component string literals of all the subexpressions that are part of the StringExpression. + + + + + OCL + result = if subExpression->notEmpty() then subExpression->iterate(se; stringValue = ‘| stringValue.concat(se.stringValue())) else operand->iterate()(op; stringValue = ‘ | stringValue.concat(op.value)) + + + + + + + + A template binding represents a relationship between a templateable element and a template. A template binding specifies the substitutions of actual parameters for the formal parameters of the template. + + + + Each parameter substitution must refer to a formal template parameter of the target template signature. + + + OCL + parameterSubstitution->forAll(b | template.parameter->includes(b.formal)) + + + + + A binding contains at most one parameter substitution for each formal template parameter of the target template signature. + + + OCL + template.parameter->forAll(p | parameterSubstitution->select(b | b.formal = p)->size() <= 1) + + + + + + The element that is bound by this binding. + + + + + + + The template signature for the template that is the target of the binding. + + + + + + + The parameter substitutions owned by this template binding. + + + + + + + + A template parameter substitution relates the actual parameter(s) to a formal template parameter as part of a template binding. + + + + The actual parameter must be compatible with the formal template parameter, e.g. the actual parameter for a class template parameter must be a class. + + + OCL + actual->forAll(a | a.isCompatibleWith(formal.parameteredElement)) + + + + + + The formal template parameter that is associated with this substitution. + + + + + + + The optional bindings from this element to templates. + + + + + + + The elements that are the actual parameters for this substitution. + + + + + + + The actual parameters that are owned by this substitution. + + + + + + + + A templateable element is an element that can optionally be defined as a template and bound to other templates. + + + + + The optional bindings from this element to templates. + + + + + + + The optional template signature specifying the formal template parameters. + + + + + + + The query parameterableElements() returns the set of elements that may be used as the parametered elements for a template parameter of this templateable element. By default, this set includes all the owned elements. Subclasses may override this operation if they choose to restrict the set of parameterable elements. + + + + OCL + result = allOwnedElements->select(oclIsKindOf(ParameterableElement)) + + + + + + + + + + The query isTemplate() returns whether this templateable element is actually a template. + + + + OCL + result = ownedTemplateSignature->notEmpty() + + + + + + + + A parameterable element is an element that can be exposed as a formal template parameter for a template, or specified as an actual parameter in a binding of a template. + + + + + The template parameter that exposes this element as a formal parameter. + + + + + + + The formal template parameter that owns this element. + + + + + + + The query isCompatibleWith() determines if this parameterable element is compatible with the specified parameterable element. By default parameterable element P is compatible with parameterable element Q if the kind of P is the same or a subtype as the kind of Q. Subclasses should override this operation to specify different compatibility constraints. + + + + OCL + result = p->oclIsKindOf(self.oclType) + + + + + + + + The query isTemplateParameter() determines if this parameterable element is exposed as a formal template parameter. + + + + OCL + result = templateParameter->notEmpty() + + + + + + + + A property is a structural feature of a classifier that characterizes instances of the classifier. A property related by ownedAttribute to a classifier (other than an association) represents an attribute and might also represent an association end. It relates an instance of the class to a value or set of values of the type of the attribute. A property related by memberEnd or its specializations to an association represents an end of the association. The type of the property is the type of the end of the association. + + + A property represents a set of instances that are owned by a containing classifier instance. + + + A property has the capability of being a deployment target in a deployment relationship. This enables modeling the deployment to hierarchical nodes that have properties functioning as internal parts. + + + Property represents a declared state of one or more instances in terms of a named relationship to a value or values. When a property is an attribute of a classifier, the value or values are related to the instance of the classifier by being held in slots of the instance. When a property is an association end, the value or values are related to the instance or instances at the other end(s) of the association. The range of valid values represented by the property can be controlled by setting the property's type. + + + Property specializes ParameterableElement to specify that a property can be exposed as a formal template parameter, and provided as an actual parameter in a binding of a template. + + + + A multiplicity of a composite aggregation must not have an upper bound greater than 1. + + + A multiplicity on an aggregate end of a composite aggregation must not have an upper bound greater than 1. + + + OCL + isComposite implies (upperBound()->isEmpty() or upperBound() <= 1) + + + + + Subsetting may only occur when the context of the subsetting property conforms to the context of the subsetted property. + + + OCL + self.subsettedProperty->notEmpty() implies (self.subsettingContext()->notEmpty() and self.subsettingContext()->forAll (sc | self.subsettedProperty->forAll(sp | sp.subsettingContext()->exists(c | sc.conformsTo(c))))) + + + + + A redefined property must be inherited from a more general classifier containing the redefining property. + + + OCL + if (redefinedProperty->notEmpty()) then (redefinitionContext->notEmpty() and redefinedProperty->forAll(rp| ((redefinitionContext->collect(fc| fc.allParents()))->asSet())->collect(c| c.allFeatures())->asSet()->includes(rp)) + + + + + A subsetting property may strengthen the type of the subsetted property, and its upper bound may be less. + + + OCL + self.subsettedProperty->forAll(sp | self.type.conformsTo(sp.type) and ((self.upperBound()->notEmpty() and sp.upperBound()->notEmpty()) implies self.upperBound()<=sp.upperBound() )) + + + + + Only a navigable property can be marked as readOnly. + + + OCL + isReadOnly implies isNavigable() + + + + + A derived union is derived. + + + OCL + isDerivedUnion implies isDerived + + + + + A derived union is read only. + + + OCL + isDerivedUnion implies isReadOnly + + + + + A property may not subset a property with the same name. + + + OCL + true + + + + + A Property can be a DeploymentTarget if it is a kind of Node and functions as a part in the internal structure of an encompassing Node. + + + OCL + true + + + + + A binding of a property template parameter representing an attribute must be to an attribute. + + + OCL + (isAttribute(self) and (templateParameterSubstitution->notEmpty()) implies (templateParameterSubstitution->forAll(ts | isAttribute(ts.formal))) + + + + + + + + + If isDerived is true, the value of the attribute is derived from information elsewhere. + + + Specifies whether the Property is derived, i.e., whether its value or values can be computed from other information. + + + + + + If isReadOnly is true, the attribute may not be written to after initialization. + + + If true, the attribute may only be read, and not written. + + + + + + Specifies whether the property is derived as the union of all of the properties that are constrained to subset it. + + + + + + Specifies a String that represents a value to be used when no argument is supplied for the Property. + + + A String that is evaluated to give a default value for the Property when an object of the owning Classifier is instantiated. + + + + + + + Specifies the kind of aggregation that applies to the Property. + + + + + + If isComposite is true, the object containing the attribute is a container for the object or value contained in the attribute. + + + This is a derived value, indicating whether the aggregation of the Property is composite or not. + + + + + + References the Class that owns the Property. + + + + + + + References the properties that are redefined by this property. + + + + + + + References the owning association of this property, if any. + + + + + + + The DataType that owns this Property. + + + + + + + A ValueSpecification that is evaluated to give a default value for the Property when an object of the owning Classifier is instantiated. + + + + + + + In the case where the property is one navigable end of a binary association with both ends navigable, this gives the other end. + + + + + + + References the properties of which this property is constrained to be a subset. + + + + + + + References the association of which this property is a member, if any. + + + + + + + An optional list of ordered qualifier attributes for the end. If the list is empty, then the Association is not qualified. + + + + + + + Designates the optional association end that owns a qualifier attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + Sets the navigability of this property as indicated. + + + + The new navigability. + + + + + + Retrieves the other end of the (binary) association in which this property is a member end. + + + + + + + + + Sets the default value for this property to the specified Boolean value. + + + + The new default value. + + + + + + Sets the default value for this property to the specified integer value. + + + + The new default value. + + + + + + Sets the default value for this property to the specified string value. + + + + The new default value. + + + + + + Sets the default value for this property to the specified unlimited natural value. + + + + The new default value. + + + + + + Sets the default value for this property to the null value. + + + + + The query isAttribute() is true if the Property is defined as an attribute of some classifier. + + + + OCL + result = Classifier.allInstances->exists(c | c.attribute->includes(p)) + + + + + + + + If this property is owned by a class, associated with a binary association, and the other end of the association is also owned by a class, then opposite gives the other end. + + + + OCL + result = if owningAssociation->isEmpty() and association.memberEnd->size() = 2 then let otherEnd = (association.memberEnd - self)->any() in if otherEnd.owningAssociation->isEmpty() then otherEnd else Set{} endif else Set {} endif + + + + + + + The value of isComposite is true only if aggregation is composite. + + + + OCL + result = (self.aggregation = #composite) + + + + + + + The query isConsistentWith() specifies, for any two Properties in a context in which redefinition is possible, whether redefinition would be logically consistent. A redefining property is consistent with a redefined property if the type of the redefining property conforms to the type of the redefined property, the multiplicity of the redefining property (if specified) is contained in the multiplicity of the redefined property, and the redefining property is derived if the redefined property is derived. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = redefinee.oclIsKindOf(Property) and let prop : Property = redefinee.oclAsType(Property) in (prop.type.conformsTo(self.type) and ((prop.lowerBound()->notEmpty() and self.lowerBound()->notEmpty()) implies prop.lowerBound() >= self.lowerBound()) and ((prop.upperBound()->notEmpty() and self.upperBound()->notEmpty()) implies prop.lowerBound() <= self.lowerBound()) and (self.isDerived implies prop.isDerived) and (self.isComposite implies prop.isComposite)) + + + + + + + + The query subsettingContext() gives the context for subsetting a property. It consists, in the case of an attribute, of the corresponding classifier, and in the case of an association end, all of the classifiers at the other ends. + + + + OCL + result = if association->notEmpty() then association.endType-type else if classifier->notEmpty() then Set{classifier} else Set{} endif endif + + + + + + + + + + The query isNavigable() indicates whether it is possible to navigate across the property. + + + + OCL + result = not classifier->isEmpty() or association.owningAssociation.navigableOwnedEnd->includes(self) + + + + + + + The query isCompatibleWith() determines if this parameterable element is compatible with the specified parameterable element. By default parameterable element P is compatible with parameterable element Q if the kind of P is the same or a subtype as the kind of Q. In addition, for properties, the type must be conformant with the type of the specified parameterable element. + + + + + OCL + result = p->oclIsKindOf(self.oclType) and self.type.conformsTo(p.oclAsType(TypedElement).type) + + + + + + + + + A value specification is the specification of a (possibly empty) set of instances, including both objects and data values. + + + ValueSpecification specializes ParameterableElement to specify that a value specification can be exposed as a formal template parameter, and provided as an actual parameter in a binding of a template. + + + + + + The query isComputable() determines whether a value specification can be computed in a model. This operation cannot be fully defined in OCL. A conforming implementation is expected to deliver true for this operation for all value specifications that it can compute, and to compute all of those for which the operation is true. A conforming implementation is expected to be able to compute the value of all literals. + + + + OCL + result = false + + + + + + + The query integerValue() gives a single Integer value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query booleanValue() gives a single Boolean value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query stringValue() gives a single String value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query unlimitedValue() gives a single UnlimitedNatural value when one can be computed. + + + + OCL + result = Set{} + + + + + + + The query isNull() returns true when it can be computed that the value is null. + + + + OCL + result = false + + + + + + + The query isCompatibleWith() determines if this parameterable element is compatible with the specified parameterable element. By default parameterable element P is compatible with parameterable element Q if the kind of P is the same or a subtype as the kind of Q. In addition, for ValueSpecification, the type must be conformant with the type of the specified parameterable element. + + + + + OCL + result = p->oclIsKindOf(self.oclType) and self.type.conformsTo(p.oclAsType(TypedElement).type) + + + + + + + + + An operation is a behavioral feature of a classifier that specifies the name, type, parameters, and constraints for invoking an associated behavior. + + + An operation may invoke both the execution of method behaviors as well as other behavioral responses. + + + Operation specializes TemplateableElement in order to support specification of template operations and bound operations. Operation specializes ParameterableElement to specify that an operation can be exposed as a formal template parameter, and provided as an actual parameter in a binding of a template. + + + + An operation can have at most one return parameter; i.e., an owned parameter with the direction set to 'return' + + + OCL + self.ownedParameter->select(par | par.direction = #return)->size() <= 1 + + + + + A bodyCondition can only be specified for a query operation. + + + OCL + bodyCondition->notEmpty() implies isQuery + + + + + + + + Specifies whether an execution of the BehavioralFeature leaves the state of the system unchanged (isQuery=true) or whether side effects may occur (isQuery=false). + + + + + + This information is derived from the return result for this Operation. + + + Specifies whether the return parameter is ordered or not, if present. + + + + + + This information is derived from the return result for this Operation. + + + Specifies whether the return parameter is unique or not, if present. + + + + + + This information is derived from the return result for this Operation. + + + Specifies the lower multiplicity of the return parameter, if present. + + + + + + + + This information is derived from the return result for this Operation. + + + Specifies the upper multiplicity of the return parameter, if present. + + + + + + + + The class that owns the operation. + + + + + + + An optional set of Constraints on the state of the system when the Operation is invoked. + + + + + + + An optional set of Constraints specifying the state of the system when the Operation is completed. + + + + + + + References the Operations that are redefined by this Operation. + + + + + + + The DataType that owns this Operation. + + + + + + + An optional Constraint on the result values of an invocation of this Operation. + + + + + + + This information is derived from the return result for this Operation. + + + Specifies the return result of the operation, if present. + + + + + + + Specifies the ordered set of formal parameters of this BehavioralFeature. + + + Specifies the parameters owned by this Operation. + + + + + + + References the Types representing exceptions that may be raised during an invocation of this operation. + + + + + + + The Interface that owns this Operation. + + + + + + + The template parameter that exposes this element as a formal parameter. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Retrieves the (only) return result parameter for this operation. + + + + + + + + + If this operation has a return parameter, isOrdered equals the value of isOrdered for that parameter. Otherwise isOrdered is false. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().isOrdered else false endif + + + + + + + If this operation has a return parameter, isUnique equals the value of isUnique for that parameter. Otherwise isUnique is true. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().isUnique else true endif + + + + + + + If this operation has a return parameter, lower equals the value of lower for that parameter. Otherwise lower is not defined. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().lower else Set{} endif + + + + + + + If this operation has a return parameter, upper equals the value of upper for that parameter. Otherwise upper is not defined. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().upper else Set{} endif + + + + + + + If this operation has a return parameter, type equals the value of type for that parameter. Otherwise type is not defined. + + + + OCL + result = if returnResult()->notEmpty() then returnResult()->any().type else Set{} endif + + + + + + + The query isConsistentWith() specifies, for any two Operations in a context in which redefinition is possible, whether redefinition would be consistent in the sense of maintaining type covariance. Other senses of consistency may be required, for example to determine consistency in the sense of contravariance. Users may define alternative queries under names different from 'isConsistentWith()', as for example, users may define a query named 'isContravariantWith()'. + + + A redefining operation is consistent with a redefined operation if it has the same number of owned parameters, and the type of each owned parameter conforms to the type of the corresponding redefined parameter. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = (redefinee.oclIsKindOf(Operation) and let op: Operation = redefinee.oclAsType(Operation) in self.ownedParameter.size() = op.ownedParameter.size() and forAll(i | op.ownedParameter[i].type.conformsTo(self.ownedParameter[i].type)) ) + + + + + + + + The query returnResult() returns the set containing the return parameter of the Operation if one exists, otherwise, it returns an empty set + + + + OCL + result = ownedParameter->select (par | par.direction = #return) + + + + + + + + + + + An operation template parameter exposes an operation as a formal parameter for a template. + + + + + The operation for this template parameter. + + + + + + + + A packageable element indicates a named element that may be owned directly by a package. + + + Packageable elements are able to serve as a template parameter. + + + + + + Indicates that packageable elements must always have a visibility, i.e., visibility is not optional. + + + + + + + A classifier is a classification of instances - it describes a set of instances that have features in common. A classifier can specify a generalization hierarchy by referencing its general classifiers. + + + A classifier has the capability to own collaboration uses. These collaboration uses link a collaboration with the classifier to give a description of the workings of the classifier. + + + A classifier has the capability to own use cases. Although the owning classifier typically represents the subject to which the owned use cases apply, this is not necessarily the case. In principle, the same use case can be applied to multiple subjects, as identified by the subject association role of a use case. + + + Classifier is defined to be a kind of templateable element so that a classifier can be parameterized. It is also defined to be a kind of parameterable element so that a classifier can be a formal template parameter. + + + + Generalization hierarchies must be directed and acyclical. A classifier can not be both a transitively general and transitively specific classifier of the same classifier. + + + OCL + not self.allParents()->includes(self) + + + + + Generalization hierarchies must be directed and acyclical. A classifier can not be both a transitively general and transitively specific classifier of the same classifier. + + + OCL + not self.allParents()->includes(self) + + + + + A classifier may only specialize classifiers of a valid type. + + + OCL + self.parents()->forAll(c | self.maySpecializeType(c)) + + + + + The Classifier that maps to a GeneralizationSet may neither be a specific nor a general Classifier in any of the Generalization relationships defined for that GeneralizationSet. In other words, a power type may not be an instance of itself nor may its instances also be its subclasses. + + + OCL + true + + + + + + + + + If true, the Classifier does not provide a complete declaration and can typically not be instantiated. An abstract classifier is intended to be used by other classifiers e.g. as the target of general metarelationships or generalization relationships. + + + + + + + Specifies the Generalization relationships for this Classifier. These Generalizations navigaten to more general classifiers in the generalization hierarchy. + + + + + + + Note that there may be members of the Classifier that are of the type Feature but are not included in this association, e.g. inherited features. + + + Specifies each feature defined in the classifier. + + + + + + + Specifies all elements inherited by this classifier from the general classifiers. + + + + + + + References the Classifiers that are redefined by this Classifier. + + + + + + + References the general classifier in the Generalization relationship. + + + Specifies the general Classifiers for this Classifier. + + + + + + + References the substitutions that are owned by this Classifier. + + + + + + + Refers to all of the Properties that are direct (i.e. not inherited or imported) attributes of the classifier. + + + + + + + References a collaboration use which indicates the collaboration that represents this classifier. + + + + + + + References the collaboration uses owned by the classifier. + + + + + + + References the use cases owned by this classifier. + + + + + + + The set of use cases for which this Classifier is the subject. + + + + + + + Designates the GeneralizationSet of which the associated Classifier is a power type. + + + + + + + The optional template signature specifying the formal template parameters. + + + + + + + The template parameter that exposes this element as a formal parameter. + + + + + + + Retrieves all the attributes of this classifier, including those inherited from its parents. + + + + + + + + + Retrieves the operations of this classifier. + + + + + + + + + Retrieves all the operations of this classifier, including those inherited from its parents. + + + + + + + + + Retrieves the first operation with the specified name, parameter names, and parameter types from this classifier. + + + + + + + + The name of the operation to retrieve, or null. + + + + + + + The parameter names of the operation to retrieve, or null. + + + + + + + The parameter types of the operation to retrieve, or null. + + + + + + + + Retrieves the first operation with the specified name, parameter names, and parameter types from this classifier, ignoring case if indicated. + + + + + + + + The name of the operation to retrieve, or null. + + + + + + + The parameter names of the operation to retrieve, or null. + + + + + + + The parameter types of the operation to retrieve, or null. + + + + + + + Whether to ignore case in String comparisons. + + + + + + Retrieves the interfaces on which this classifier has a usage dependency. + + + + + + + + + Retrieves all the interfaces on which this classifier or any of its parents has a usage dependency. + + + + + + + + + The general classifiers are the classifiers referenced by the generalization relationships. + + + + OCL + result = self.parents() + + + + + + + + + + The inheritedMember association is derived by inheriting the inheritable members of the parents. + + + + OCL + result = self.inherit(self.parents()->collect(p | p.inheritableMembers(self)) + + + + + + + + + + The query allFeatures() gives all of the features in the namespace of the classifier. In general, through mechanisms such as inheritance, this will be a larger set than feature. + + + + OCL + result = member->select(oclIsKindOf(Feature)) + + + + + + + + + + The query parents() gives all of the immediate ancestors of a generalized Classifier. + + + + OCL + result = generalization.general + + + + + + + + + + The query inheritableMembers() gives all of the members of a classifier that may be inherited in one of its descendants, subject to whatever visibility restrictions apply. + + + + OCL + c.allParents()->includes(self) + + + + + OCL + result = member->select(m | c.hasVisibilityOf(m)) + + + + + + + + + + + The query hasVisibilityOf() determines whether a named element is visible in the classifier. By default all are visible. It is only called when the argument is something owned by a parent. + + + + OCL + self.allParents()->collect(c | c.member)->includes(n) + + + + + OCL + result = if (self.inheritedMember->includes(n)) then (n.visibility <> #private) else true + + + + + + + + The query conformsTo() gives true for a classifier that defines a type that conforms to another. This is used, for example, in the specification of signature conformance for operations. + + + + OCL + result = (self=other) or (self.allParents()->includes(other)) + + + + + + + + The inherit operation is overridden to exclude redefined properties. + + + The query inherit() defines how to inherit a set of elements. Here the operation is defined to inherit them all. It is intended to be redefined in circumstances where inheritance is affected by redefinition. + + + + OCL + result = inhs + + + + + + + + + + + + + + The query maySpecializeType() determines whether this classifier may have a generalization relationship to classifiers of the specified type. By default a classifier may specialize classifiers of the same or a more general type. It is intended to be redefined by classifiers that have different specialization constraints. + + + + OCL + result = self.oclIsKindOf(c.oclType) + + + + + + + + The query allParents() gives all of the direct and indirect ancestors of a generalized Classifier. + + + + OCL + result = self.parents()->union(self.parents()->collect(p | p.allParents()) + + + + + + + + + + The query isTemplate() returns whether this templateable element is actually a template. + + + + OCL + result = oclAsType(TemplatableElement).isTemplate() or general->exists(g | g.isTemplate()) + + + + + + + + A classifier template parameter exposes a classifier as a formal template parameter. + + + + If "allowSubstitutable" is true, then there must be a constrainingClassifier. + + + OCL + allowSubstitutable implies constrainingClassifier->notEmpty() + + + + + + Constrains the required relationship between an actual parameter and the parameteredElement for this formal parameter. + + + + + + The parameterable classifier for this template parameter. + + + + + + + The classifier that is used by default if no argument is provided during template binding. If this property is empty, then there is no default. + + + + + + + The classifier that constrains the argument that can be used for the parameter. If the allowSubstitutable attribute is true, then any classifier that is compatible with this constraining classifier can be substituted, otherwise it must be either this classifier or one of its subclasses. If this property is empty, there are no constraints on the classifier that can be used as an argument. + + + + + + + + A redefinable template signature supports the addition of formal template parameters in a specialization of a template classifier. + + + + The inherited parameters are the parameters of the extended template signature. + + + OCL + if extendedSignature->isEmpty() then Set{} else extendedSignature.parameter endif + + + + + + + The classifier that owns this template signature. + + + + + + + The template signature that is extended by this template signature. + + + + + + + The formal template parameters of the extendedSignature. + + + + + + + + + + + + + The query isConsistentWith() specifies, for any two RedefinableTemplateSignatures in a context in which redefinition is possible, whether redefinition would be logically consistent. A redefining template signature is always consistent with a redefined template signature, since redefinition only adds new formal parameters. + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + OCL + result = redefinee.oclIsKindOf(RedefineableTemplateSignature) + + + + + + + + + A connectable element template parameter exposes a connectable element as a formal parameter for a template. + + + + + The ConnectableElement for this template parameter. + + + + + + + + A package is used to group elements, and provides a namespace for the grouped elements. + + + A package can have one or more profile applications to indicate which profiles have been applied. Because a profile is a package, it is possible to apply a profile not only to packages, but also to profiles. + + + Package specializes TemplateableElement and PackageableElement specializes ParameterableElement to specify that a package can be used as a template and a PackageableElement as a template parameter. + + + + If an element that is owned by a package has visibility, it is public or private. + + + OCL + self.ownedElements->forAll(e | e.visibility->notEmpty() implies e.visbility = #public or e.visibility = #private) + + + + + + + + References the PackageMerges that are owned by this Package. + + + + + + + Specifies the packageable elements that are owned by this Package. + + + + + + + References the packaged elements that are Types. + + + + + + + References the packaged elements that are Packages. + + + + + + + References the Package that owns this Package. + + + + + + + References the ProfileApplications that indicate which profiles have been applied to the Package. + + + + + + + Creates a(n) (abstract) class with the specified name as an owned type of this package. + + + + + The name for the new class, or null. + + + + + Whether the new class should be abstract. + + + + + + Creates a enumeration with the specified name as an owned type of this package. + + + + + The name for the new enumeration, or null. + + + + + + Creates a primitive type with the specified name as an owned type of this package. + + + + + The name for the new primitive type, or null. + + + + + + Creates an interface with the specified name as an owned type of this package. + + + + + The name for the new interface, or null. + + + + + + Determines whether the specified profile is applied to this package. + + + + + The profile in question. + + + + + + Applies the current definition of the specified profile to this package and automatically applies required stereotypes in the profile to elements within this package's namespace hieararchy. If a different definition is already applied, automatically migrates any associated stereotype values on a "best effort" basis (matching classifiers and structural features by name). + + + + + + + + + The profile to apply. + + + + + + Unapplies the specified profile from this package and automatically unapplies stereotypes in the profile from elements within this package's namespace hieararchy. + + + + + + + + + The profile to unapply. + + + + + + Retrieves the profiles that are applied to this package. + + + + + + + + + Retrieves all the profiles that are applied to this package, including profiles applied to its nesting package(s). + + + + + + + + + Retrieves the profile with the specified qualified name that is applied to this package, or null if no such profile is applied. + + + + + + + + The qualified name of the applied profile to retrieve. + + + + + + Retrieves the profile with the specified qualified name that is applied to this package or any of its nesting packages (if indicated), or null if no such profile is applied. + + + + + + + + The qualified name of the applied profile to retrieve. + + + + + Whether to look in nesting packages. + + + + + + Retrieves all the profile applications for this package, including profile applications for its nesting package(s). + + + + + + + + + Retrieves the application of the specified profile to this package, or null if no such profile is applied. + + + + + + + + The profile whose application to retrieve. + + + + + + Retrieves the application of the specified profile to this package or any of its nesting packages (if indicated), or null if no such profile is applied. + + + + + + + + The profile whose application to retrieve. + + + + + Whether to look in nesting packages. + + + + + + Determines whether this package is a model library. + + + + + + The query mustBeOwned() indicates whether elements of this type must have an owner. + + + + OCL + result = false + + + + + + + The query visibleMembers() defines which members of a Package can be accessed outside it. + + + + OCL + result = member->select( m | self.makesVisible(m)) + + + + + + + + + + The query makesVisible() defines whether a Package makes an element visible outside itself. Elements with no visibility and elements with public visibility are made visible. + + + + OCL + self.member->includes(el) + + + + + OCL + result = (ownedMember->includes(el)) or (elementImport->select(ei|ei.importedElement = #public)->collect(ei|ei.importedElement)->includes(el)) or (packageImport->select(pi|pi.visibility = #public)->collect(pi|pi.importedPackage.member->includes(el))->notEmpty()) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ConnectableElement is an abstract metaclass representing a set of instances that play roles of a classifier. Connectable elements may be joined by attached connectors and specify configurations of linked instances to be created within an instance of the containing classifier. + + + A connectable element may be exposed as a connectable element template parameter. + + + + + + The ConnectableElementTemplateParameter for this ConnectableElement parameter. + + + + + + + Denotes a connector that attaches to this connectable element. + + + + + + + + + + + + + + A connector end is an endpoint of a connector, which attaches the connector to a connectable element. Each connector end is part of one connector. + + + + The multiplicity of the connector end may not be more general than the multiplicity of the association typing the owning connector. + + + OCL + true + + + + + If a connector end is attached to a port of the containing classifier, partWithPort will be empty. + + + OCL + true + + + + + If a connector end references both a role and a partWithPort, then the role must be a port that is defined by the type of the partWithPort. + + + OCL + true + + + + + The property held in self.partWithPort must not be a Port. + + + OCL + true + + + + + + A derived association referencing the corresponding association end on the association which types the connector owing this connector end. This association is derived by selecting the association end at the same place in the ordering of association ends as this connector end. + + + + + + + + Indicates the role of the internal structure of a classifier with the port to which the connector end is attached. + + + + + + + The connectable element attached at this connector end. When an instance of the containing classifier is created, a link may (depending on the multiplicities) be created to an instance of the classifier that types this connectable element. + + + + + + + + + + + + + + + + + + + + + + + + A vertex is an abstraction of a node in a state machine graph. In general, it can be the source or destination of any number of transitions. + + + + + The region that contains this vertex. + + + + + + + Specifies the transitions entering this vertex. + + + + + + + Specifies the transitions departing from this vertex. + + + + + + + The operation containingStateMachine() returns the state machine in which this Vertex is defined + + + + OCL + result = if not container->isEmpty() then -- the container is a region container.containingStateMachine() else if (oclIsKindOf(Pseudostate)) then -- entry or exit point? if (kind = #entryPoint) or (kind = #exitPoint) then stateMachine else if (oclIsKindOf(ConnectionPointReference)) then state.containingStateMachine() -- no other valid cases possible endif + + + + + + + + + + + + + + + + + + + + A transition is a directed relationship between a source vertex and a target vertex. It may be part of a compound transition, which takes the state machine from one state configuration to another, representing the complete response of the state machine to an occurrence of an event of a particular type. + + + + A fork segment must not have guards or triggers. + + + OCL + (source.oclIsKindOf(Pseudostate) and source.kind = #fork) implies (guard->isEmpty() and trigger->isEmpty()) + + + + + A join segment must not have guards or triggers. + + + OCL + (target.oclIsKindOf(Pseudostate) and target.kind = #join) implies (guard->isEmpty() and trigger->isEmpty()) + + + + + A fork segment must always target a state. + + + OCL + (source.oclIsKindOf(Pseudostate) and source.kind = #fork) implies (target.oclIsKindOf(State)) + + + + + A join segment must always originate from a state. + + + OCL + (target.oclIsKindOf(Pseudostate) and target.kind = #join) implies (source.oclIsKindOf(State)) + + + + + Transitions outgoing pseudostates may not have a trigger. + + + OCL + source.oclIsKindOf(Pseudostate) and ((source.kind <> #junction) and (source.kind <> #join) and (source.kind <> #initial)) implies trigger->isEmpty() + + + + + An initial transition at the topmost level (region of a statemachine) either has no trigger or it has a trigger with the stereotype <<create>>. + + + OCL + self.source.oclIsKindOf(Pseudostate) implies (self.source.oclAsType(Pseudostate).kind = #initial) implies (self.source.container = self.stateMachine.top) implies ((self.trigger->isEmpty) or (self.trigger.stereotype.name = 'create')) + + + + + In case of more than one trigger, the signatures of these must be compatible in case the parameters of the signal are assigned to local variables/attributes. + + + + OCL + true + + + + + + + Indicates the precise type of the transition. + + + + + + Designates the region that owns this transition. + + + + + + + The transition that is redefined by this transition. + + + + + + + A guard is a constraint that provides a fine-grained control over the firing of the transition. The guard is evaluated when an event occurrence is dispatched by the state machine. If the guard is true at that time, the transition may be enabled, otherwise, it is disabled. Guards should be pure expressions without side effects. Guard expressions with side effects are ill formed. + + + + + + + References the classifier in which context this element may be redefined. + + + + + + + Specifies an optional behavior to be performed when the transition fires. + + + + + + + Specifies the triggers that may fire the transition. + + + + + + + Designates the target vertex that is reached when the transition is taken. + + + + + + + Designates the originating vertex (state or pseudostate) of the transition. + + + + + + + The redefinition context of a transition is the nearest containing statemachine. + + + + OCL + result = let sm = containingStateMachine() in if sm.context->isEmpty() or sm.general->notEmpty() then sm else sm.context endif + + + + + + + The query isConsistentWith() specifies that a redefining transition is consistent with a redefined transition provided that the redefining transition has the following relation to the redefined transition: A redefining transition redefines all properties of the corresponding redefined transition, except the source state and the trigger. + + + + OCL + result = (redefinee.oclIsKindOf(Transition) and let trans: Transition = redefinee.oclAsType(Transition) in (source() = trans.source() and trigger() = tran.trigger()) + + + + + OCL + redefinee.isRedefinitionContextValid(self) + + + + + + + + The query containingStateMachine() returns the state machine that contains the transition either directly or transitively. + + + + OCL + result = container.containingStateMachine() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.emf.cdo.tests/uml2/UML.uml b/plugins/org.eclipse.emf.cdo.tests/uml2/UML.uml new file mode 100644 index 0000000000..65030d1ab8 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.tests/uml2/UML.uml @@ -0,0 +1,1947 @@ + + + + + + + + + + + + + + + + + + + + + + Destroys this element by removing all cross references to/from it and removing it from its containing resource or object. + + + + + Determines whether this element has the specified keyword. + + + + + The keyword in question. + + + + + + Retrieves the keywords for this element. + + + + + + + + + Adds the specified keyword to this element. + + + + + The keyword to add. + + + + + + Removes the specified keyword from this element. + + + + + The keyword to remove. + + + + + + Retrieves the nearest package that owns (either directly or indirectly) this element, or the element itself (if it is a package). + + + + + + + + + Retrieves the model that owns (either directly or indirectly) this element. + + + + + + + + + Determines whether the specified stereotype is applicable to this element. + + + + + The stereotype in question. + + + + + + Determines whether the specified stereotype is required for this element. + + + + + The stereotype in question. + + + + + + Determines whether the specified stereotype is applied to this element. + + + + + The stereotype in question. + + + + + + Applies the specified stereotype to this element. + + + + + + + The stereotype to apply. + + + + + + Unapplies the specified stereotype from this element. + + + + + + + The stereotype to unapply. + + + + + + Retrieves the stereotypes that are applicable to this element, including those that are required and/or may already be applied. + + + + + + + + + Retrieves the stereotype with the specified qualified name that is applicable to this element, or null if no such stereotype is applicable. + + + + + + + + The qualified name of the applicable stereotype to retrieve. + + + + + + Retrieves the stereotype applications for this element. + + + + + + + + + + Retrieves the application of the specified stereotype for this element, or null if no such stereotype application exists. + + + + + + + + + The stereotype for which to retrieve an application. + + + + + + Retrieves the stereotypes that are required for this element. + + + + + + + + + Retrieves the stereotype with the specified qualified name that is required for this element, or null if no such stereotype is required. + + + + + + + + The qualified name of the required stereotype to retrieve. + + + + + + Retrieves the stereotypes that are applied to this element. + + + + + + + + + Retrieves the stereotype with the specified qualified name that is applied to this element, or null if no such stereotype is applied. + + + + + + + + The qualified name of the applied stereotype to retrieve. + + + + + + Retrieves the substereotypes of the specified stereotype that are applied to this element. + + + + + + + + The superstereotype of the applied substereotypes to retrieve. + + + + + + Retrieves the substereotype of the specified stereotype with the specified qualified name that is applied to this element, or null if no such stereotype is applied. + + + + + + + + The superstereotype of the applied substereotype to retrieve. + + + + + The qualified name of the applied substereotype to retrieve. + + + + + + Determines whether this element has a (non-default) value for the property with the specified name in the specified stereotype. + + + + + The stereotype for which to test the property. + + + + + The name of the property in question. + + + + + + Retrieves the value of the property with the specified name in the specified stereotype for this element. + + + + + + + + + The stereotype for which to retrieve the value. + + + + + The name of the property whose value to retrieve. + + + + + + Sets the value of the property with the specified name in the specified stereotype for this element. + + + + The stereotype for which to set the value. + + + + + The name of the property whose value to set. + + + + + The new value for the property. + + + + + + + Creates an annotation with the specified source and this element as its model element. + + + + + + + The source for the new annotation. + + + + + + Retrieves the relationships in which this element is involved. + + + + + + + + + Retrieves the relationships of the specified type in which this element is involved. + + + + + + + + The (meta)type of the relationships to retrieve. + + + + + + + Retrieves the directed relationships for which this element is a source. + + + + + + + + + Retrieves the directed relationships of the specified type for which this element is a source. + + + + + + + + The (meta)type of the directed relationships to retrieve. + + + + + + + Retrieves the directed relationships for which this element is a target. + + + + + + + + + Retrieves the directed relationships of the specified type for which this element is a target. + + + + + + + + The (meta)type of the directed relationships to retrieve. + + + + + + + + + + + + + + + Creates an operation with the specified name, parameter names, parameter types, and return type (or null) as an owned operation of this class. + + + + + The name for the new operation, or null. + + + + + + + The parameter names for the new operation, or null. + + + + + + + The parameter types for the new operation, or null. + + + + + + + The return type for the new operation, or null. + + + + + + + + Determines whether this class is a metaclass. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sets the navigability of this property as indicated. + + + + The new navigability. + + + + + + Retrieves the other end of the (binary) association in which this property is a member end. + + + + + + + + + Sets the default value for this property to the specified Boolean value. + + + + The new default value. + + + + + + Sets the default value for this property to the specified integer value. + + + + The new default value. + + + + + + Sets the default value for this property to the specified string value. + + + + The new default value. + + + + + + Sets the default value for this property to the specified unlimited natural value. + + + + The new default value. + + + + + + Sets the default value for this property to the null value. + + + + + + + + + + + + + + + + + + + + Sets the default value for this parameter to the specified Boolean value. + + + + The new default value. + + + + + + Sets the default value for this parameter to the specified integer value. + + + + The new default value. + + + + + + Sets the default value for this parameter to the specified string value. + + + + The new default value. + + + + + + Sets the default value for this parameter to the specified unlimited natural value. + + + + The new default value. + + + + + + Sets the default value for this parameter to the null value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Retrieves the (only) return result parameter for this operation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Retrieves the interfaces on which this behaviored classifier has an interface realization dependency. + + + + + + + + + Retrieves all the interfaces on which this behaviored classifier or any of its parents has an interface realization dependency. + + + + + + + + + + + Retrieves the extension end that is typed by a stereotype (as opposed to a metaclass). + + + + + + + + + Retrieves the stereotype that extends a metaclass through this extension. + + + + + + + + + + + Creates a dependency between this named element and the specified supplier, owned by this named element's nearest package. + + + + + The supplier for the new dependency. + + + + + + Retrieves a localized label for this named element. + + + + + + + + + Retrieves a label for this named element, localized if indicated. + + + + + + + + Whether to localize the label. + + + + + + Creates a usage between this named element and the specified supplier, owned by this named element's nearest package. + + + + + The supplier for the new usage. + + + + + + + + Creates a(n) (binary) association between this type and the specified other type, with the specified navigabilities, aggregations, names, lower bounds, and upper bounds, and owned by this type's nearest package. + + + + + The navigability for the first end of the new association. + + + + + The aggregation for the first end of the new association. + + + + + The name for the first end of the new association. + + + + + The lower bound for the first end of the new association. + + + + + The upper bound for the first end of the new association. + + + + + The type for the first end of the new association. + + + + + The navigability for the second end of the new association. + + + + + The aggregation for the second end of the new association. + + + + + The name for the second end of the new association. + + + + + The lower bound for the second end of the new association. + + + + + The upper bound for the second end of the new association. + + + + + + Retrieves the associations in which this type is involved. + + + + + + + + + + + Creates an operation with the specified name, parameter names, parameter types, and return type (or null) as an owned operation of this interface. + + + + + The name for the new operation, or null. + + + + + + + The parameter names for the new operation, or null. + + + + + + + The parameter types for the new operation, or null. + + + + + + + The return type for the new operation, or null. + + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this interface. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + + + Creates a(n) (abstract) class with the specified name as an owned type of this package. + + + + + The name for the new class, or null. + + + + + Whether the new class should be abstract. + + + + + + Creates a enumeration with the specified name as an owned type of this package. + + + + + The name for the new enumeration, or null. + + + + + + Creates a primitive type with the specified name as an owned type of this package. + + + + + The name for the new primitive type, or null. + + + + + + Creates an interface with the specified name as an owned type of this package. + + + + + The name for the new interface, or null. + + + + + + Determines whether the specified profile is applied to this package. + + + + + The profile in question. + + + + + + Applies the current definition of the specified profile to this package and automatically applies required stereotypes in the profile to elements within this package's namespace hieararchy. If a different definition is already applied, automatically migrates any associated stereotype values on a "best effort" basis (matching classifiers and structural features by name). + + + + + + + + + The profile to apply. + + + + + + Unapplies the specified profile from this package and automatically unapplies stereotypes in the profile from elements within this package's namespace hieararchy. + + + + + + + + + The profile to unapply. + + + + + + Retrieves the profiles that are applied to this package. + + + + + + + + + Retrieves all the profiles that are applied to this package, including profiles applied to its nesting package(s). + + + + + + + + + Retrieves the profile with the specified qualified name that is applied to this package, or null if no such profile is applied. + + + + + + + + The qualified name of the applied profile to retrieve. + + + + + + Retrieves the profile with the specified qualified name that is applied to this package or any of its nesting packages (if indicated), or null if no such profile is applied. + + + + + + + + The qualified name of the applied profile to retrieve. + + + + + Whether to look in nesting packages. + + + + + + Retrieves all the profile applications for this package, including profile applications for its nesting package(s). + + + + + + + + + Retrieves the application of the specified profile to this package, or null if no such profile is applied. + + + + + + + + The profile whose application to retrieve. + + + + + + Retrieves the application of the specified profile to this package or any of its nesting packages (if indicated), or null if no such profile is applied. + + + + + + + + The profile whose application to retrieve. + + + + + Whether to look in nesting packages. + + + + + + Determines whether this package is a model library. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Creates and returns an instance of (the Ecore representation of) the specified classifier defined in this profile. + + + + + + + The classifier of which to create an instance. + + + + + + Creates a(n) (abstract) stereotype with the specified name as an owned stereotype of this profile. + + + + + The name for the new stereotype, or null. + + + + + Whether the new stereotype should be abstract. + + + + + + Determines whether this profile is defined. + + + + + + Defines this profile by (re)creating Ecore representations of its current contents. + + + + + + + + + + Defines this profile by (re)creating Ecore representations of its current contents, using the specified options, diagnostics, and context. + + + + + + + The options to use. + + + + + The chain of diagnostics to which problems are to be appended. + + + + + + The cache of context-specific information. + + + + + + Retrieves the current definition (Ecore representation) of this profile. + + + + + + + + + + Retrieves the current definition (Ecore representation) of the specified named element in this profile. + + + + + + + + + The named element whose definition to retrieve. + + + + + + Retrieves the metaclasses referenced by this profile. + + + + + + + + + Retrieves the metamodels referenced by this profile. + + + + + + + + + Retrieves the extensions owned by this profile, excluding non-required extensions if indicated. + + + + + + + + Whether to retrieve only required extensions. + + + + + + + + Creates a(n) (required) extension of the specified metaclass with this stereotype. + + + + + The metaclass for the new extension. + + + + + Whether the new extension should be required. + + + + + + Retrieves the profile that owns this stereotype. + + + + + + + + + Retrieves the localized keyword for this stereotype. + + + + + + Retrieves the keyword for this stereotype, localized if indicated. + + + + + Whether to localize the keyword. + + + + + + Retrieves the metaclasses extended by this stereotype. + + + + + + + + + Retrieves all the metaclasses extended by this stereotype, including the metaclasses extended by its superstereotypes. + + + + + + + + + Retrieves the current definition (Ecore representation) of this stereotype. + + + + + + + + + + Creates an icon with the specified location for this stereotype. + + + + + The location for the new icon. + + + + + + Creates an icon with the specified format and content for this stereotype. + + + + + The format for the new icon. + + + + + The content for the new icon. + + + + + + + + Determines whether this model is a metamodel. + + + + + + + + Retrieves the definition (Ecore representation) of the profile associated with this profile application. + + + + + + + + + + Retrieves the definition (Ecore representation) of the specified named element in the profile associated with this profile application. + + + + + + + + + The named element for which to retrieve the applied definition. + + + + + + + + + + + + Retrieves all the attributes of this classifier, including those inherited from its parents. + + + + + + + + + Retrieves the operations of this classifier. + + + + + + + + + Retrieves all the operations of this classifier, including those inherited from its parents. + + + + + + + + + Retrieves the first operation with the specified name, parameter names, and parameter types from this classifier. + + + + + + + + The name of the operation to retrieve, or null. + + + + + + + The parameter names of the operation to retrieve, or null. + + + + + + + The parameter types of the operation to retrieve, or null. + + + + + + + + Retrieves the first operation with the specified name, parameter names, and parameter types from this classifier, ignoring case if indicated. + + + + + + + + The name of the operation to retrieve, or null. + + + + + + + The parameter names of the operation to retrieve, or null. + + + + + + + The parameter types of the operation to retrieve, or null. + + + + + + + Whether to ignore case in String comparisons. + + + + + + Retrieves the interfaces on which this classifier has a usage dependency. + + + + + + + + + Retrieves all the interfaces on which this classifier or any of its parents has a usage dependency. + + + + + + + + + + + + Creates an import of the specified element into this namespace with the specified visibility. + + + + + The element to import. + + + + + The visibility for the new element import. + + + + + + Creates an import of the specified package into this namespace with the specified visibility. + + + + + The package to import. + + + + + The visibility for the new package import. + + + + + + Retrieves the elements imported by this namespace. + + + + + + + + + Retrieves the packages imported by this namespace. + + + + + + + + + + + + Determines whether this association is a binary association, i.e. whether it has exactly two member ends. + + + + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this structured classifier. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + + + Creates an operation with the specified name, parameter names, parameter types, and return type (or null) as an owned operation of this artifact. + + + + + The name for the new operation, or null. + + + + + + + The parameter names for the new operation, or null. + + + + + + + The parameter types for the new operation, or null. + + + + + + + The return type for the new operation, or null. + + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this artifact. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + + Creates an operation with the specified name, parameter names, parameter types, and return type (or null) as an owned operation of this data type. + + + + + The name for the new operation, or null. + + + + + + + The parameter names for the new operation, or null. + + + + + + + The parameter types for the new operation, or null. + + + + + + + The return type for the new operation, or null. + + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this data type. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + + Creates a property with the specified name, type, lower bound, and upper bound as an owned attribute of this signal. + + + + + The name for the new attribute, or null. + + + + + + + The type for the new attribute, or null. + + + + + + + The lower bound for the new attribute. + + + + + The upper bound for the new attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + Creates a return result parameter with the specified name and type. + + + + + The name for the new return result, or null. + + + + + + + The type for the new return result, or null. + + + + + + + + + + + + Creates a(n) (abstract) class with the specified name as a packaged element of this component. + + + + + The name for the new class, or null. + + + + + Whether the new class should be abstract. + + + + + + Creates a enumeration with the specified name as a packaged element of this component. + + + + + The name for the new enumeration, or null. + + + + + + Creates a primitive type with the specified name as a packaged element of this component. + + + + + The name for the new primitive type, or null. + + + + + + Creates an interface with the specified name as a packaged element of this component. + + + + + The name for the new interface, or null. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3