Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'extraplugins/moka/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/Actions/IntermediateActions/ReadLinkActionActivation.java')
-rw-r--r--extraplugins/moka/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/Actions/IntermediateActions/ReadLinkActionActivation.java81
1 files changed, 81 insertions, 0 deletions
diff --git a/extraplugins/moka/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/Actions/IntermediateActions/ReadLinkActionActivation.java b/extraplugins/moka/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/Actions/IntermediateActions/ReadLinkActionActivation.java
new file mode 100644
index 00000000000..ec446580068
--- /dev/null
+++ b/extraplugins/moka/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/Actions/IntermediateActions/ReadLinkActionActivation.java
@@ -0,0 +1,81 @@
+/*****************************************************************************
+ * Copyright (c) 2012 CEA LIST.
+ *
+ *
+ * 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:
+ * CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.fuml.Semantics.Actions.IntermediateActions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.ExtensionalValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.FeatureValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.Link;
+import org.eclipse.uml2.uml.LinkEndData;
+import org.eclipse.uml2.uml.ReadLinkAction;
+
+public class ReadLinkActionActivation extends LinkActionActivation {
+
+ public void doAction() {
+ // Get the extent, at the current execution locus, of the association to
+ // which the action applies.
+ // For all links that match the link end data, place the value of the
+ // remaining "open" end on the result pin.
+ ReadLinkAction action = (ReadLinkAction)(this.node);
+ List<LinkEndData> endDataList = action.getEndData();
+ LinkEndData openEnd = null;
+ int i = 1;
+ while((openEnd == null) & i <= endDataList.size()) {
+ if(endDataList.get(i - 1).getValue() == null) {
+ openEnd = endDataList.get(i - 1);
+ }
+ i = i + 1;
+ }
+ List<ExtensionalValue> extent = this.getExecutionLocus().getExtent(this.getAssociation());
+ List<FeatureValue> featureValues = new ArrayList<FeatureValue>();
+ for(int j = 0; j < extent.size(); j++) {
+ ExtensionalValue value = extent.get(j);
+ Link link = (Link)value;
+ if(this.linkMatchesEndData(link, endDataList)) {
+ FeatureValue featureValue = link.getFeatureValue(openEnd.getEnd());
+ if(!openEnd.getEnd().isOrdered() | featureValues.size() == 0) {
+ featureValues.add(featureValue);
+ } else {
+ int n = featureValue.position;
+ boolean continueSearching = true;
+ int k = 0;
+ while(continueSearching & k < featureValues.size()) {
+ k = k + 1;
+ continueSearching = featureValues.get(k - 1).position < n;
+ }
+ if(continueSearching) {
+ featureValues.add(featureValue);
+ } else {
+ featureValues.add(k - 1, featureValue);
+ }
+ }
+ }
+ }
+ for(int j = 0; j < featureValues.size(); j++) {
+ FeatureValue featureValue = featureValues.get(j);
+ this.putToken(action.getResult(), featureValue.values.get(0));
+ }
+ // Now that matching is done, ensure that all tokens on end data input
+ // pins
+ // are consumed.
+ for(int k = 0; k < endDataList.size(); k++) {
+ LinkEndData endData = endDataList.get(k);
+ if(endData.getValue() != null) {
+ this.takeTokens(endData.getValue());
+ }
+ }
+ }
+}

Back to the top