/* * Initial version copyright 2008 Lockheed Martin Corporation, except * as stated in the file entitled Licensing-Information. * * All modifications copyright 2009-2017 Data Access Technologies, Inc. * * Licensed under the Academic Free License version 3.0 * (http://www.opensource.org/licenses/afl-3.0.php), except as stated * in the file entitled Licensing-Information. */ package org.modeldriven.fuml.test.builtin.environment; import fUML.Debug; import fUML.Syntax.Classes.Kernel.*; import fUML.Syntax.CommonBehaviors.BasicBehaviors.*; import fUML.Semantics.Classes.Kernel.*; import fUML.Semantics.CommonBehaviors.BasicBehaviors.*; public class ExecutorTest { public TestEnvironment environment = null; public ExecutorTest(org.modeldriven.fuml.test.builtin.environment.TestEnvironment environment) { this.environment = environment; } // ExecutorTest protected fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValueList createDefaultInputValues( fUML.Syntax.Classes.Kernel.ParameterList parameters) { // Debug.println("[createDefaultParameterValues] " + parameters.size() + // " parameter(s):"); ParameterValueList parameterValues = new ParameterValueList(); for (int i = 0; i < parameters.size(); i++) { // Debug.println("[createDefaultParameterValues] Checking parameter " // + parameters.getValue(i).name + "..."); ParameterDirectionKind direction = parameters.getValue(i).direction; if (direction.equals(ParameterDirectionKind.in) || direction.equals(ParameterDirectionKind.inout)) { Debug.println("[createDefaultParameterValues] Creating parameter value for parameter " + parameters.getValue(i).name + "..."); ParameterValue parameterValue = new ParameterValue(); parameterValue.parameter = parameters.getValue(i); Value value = this.environment .makeValue((Classifier) (parameters.getValue(i).type)); if (value == null) { Debug.println("[createDefaultParameterValues] Error creating parameter value."); return null; } Debug.println("[createDefaultParameterValues] value = " + value); parameterValue.values.addValue(value); parameterValues.addValue(parameterValue); } } return parameterValues; } // createDefaultInputValues public void testEvaluate(String typeName) { Debug.println(""); Classifier type = environment.getType(typeName); if (type == null) { Debug.println("[testEvaluate] " + typeName + " not found or not a classifier."); return; } Value originalValue = environment.makeValue(type); Debug.println("[testEvaluate] Original value = " + originalValue); ValueSpecification specification = originalValue.specify(); Debug.println("[testEvaluate] Value specification is " + specification.getClass().getName()); // try{ Value evaluatedValue = this.environment.locus.executor .evaluate(specification); Debug.println("[testEvaluate] Evaluated value = " + evaluatedValue); Debug.println("[testEvaluate] Equality test = " + evaluatedValue.equals(originalValue)); // } // catch (Throwable e) { // Debug.println("[testEvaluate] Evaluation terminated due to " + // e.getClass().getName() + "..."); // StackTraceElement [] stackTrace = e.getStackTrace(); // if (stackTrace.length > 0) Debug.println(stackTrace[0] + "."); // } } // testEvaluate public ParameterValueList testExecute(String behaviorName) { Debug.println(""); NamedElement element = this.environment.getElement(behaviorName); if ((element == null) || !(element instanceof Behavior)) { Debug.println("[testExecute] " + behaviorName + " not found or is not a behavior."); return null; } Behavior behavior = (Behavior) element; ParameterList parameters = behavior.ownedParameter; ParameterValueList parameterValues = this .createDefaultInputValues(parameters); if (parameterValues == null) return null; Debug.println("[testExecute] Executing the behavior..."); ParameterValueList outputParameterValues = this.environment.locus.executor .execute(behavior, null, parameterValues); for (int i = 0; i < outputParameterValues.size(); i++) { ParameterValue outputParameterValue = outputParameterValues .getValue(i); Debug.println("[testExecute] Output parameter " + outputParameterValue.parameter.name + " has " + outputParameterValue.values.size() + " value(s):"); for (int j = 0; j < outputParameterValue.values.size(); j++) { Debug.println("[testExecute] value [" + j + "] = " + outputParameterValue.values.getValue(j)); } } Debug.println(""); return outputParameterValues; } // testExecute public void testStart(String typeName) { Debug.println(""); NamedElement element = this.environment.getElement(typeName); if ((element == null) || !(element instanceof Class_)) { Debug.println("[testStart] " + typeName + " not found or is not a class."); return; } Class_ type = (Class_) element; Behavior behavior; if (type instanceof Behavior) { behavior = (Behavior) type; } else if (type.classifierBehavior != null) { behavior = type.classifierBehavior; } else { Debug.println("[testStart] " + typeName + " does not have behavior."); return; } ParameterList parameters = behavior.ownedParameter; ParameterValueList parameterValues = this .createDefaultInputValues(parameters); if (parameterValues == null) return; Debug.println("[testStart] Starting the behavior..."); Object_ object; // try { object = this.environment.locus.executor.start(type, parameterValues).referent; // } // catch (Exception e) { // Debug.println("[testStart] Execution terminated due to " + // e.getClass().getName() + "..."); // StackTraceElement [] stackTrace = e.getStackTrace(); // //if (stackTrace.length > 0) Debug.println(stackTrace[0] + "."); // for (int i = 0; i < stackTrace.length; i++) { // Debug.println(stackTrace[i]); // } // return; // } Debug.println("[testStart] Instantiated object:" + object); ParameterValueList outputParameterValues; if (object instanceof Execution) { outputParameterValues = ((Execution) object) .getOutputParameterValues(); } else { outputParameterValues = object.objectActivation.classifierBehaviorInvocations .getValue(0).execution.getOutputParameterValues(); } for (int i = 0; i < outputParameterValues.size(); i++) { ParameterValue outputParameterValue = outputParameterValues .getValue(i); Debug.println("[testStart] Output parameter " + outputParameterValue.parameter.name + " has " + outputParameterValue.values.size() + " value(s):"); for (int j = 0; j < outputParameterValue.values.size(); j++) { Debug.println("[testStart] value [" + j + "] = " + outputParameterValue.values.getValue(j)); } } } // testStart } // ExecutorTest