From 2e220c1d71649a287f0fb0e3713d9168d8672f54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martti=20K=C3=A4=C3=A4rik?= Date: Thu, 28 Mar 2024 10:13:41 +0200 Subject: [PATCH] Updated TRI --- .../pom.xml | 2 +- .../java/adapters/DefaultAdapter.java | 6 +- .../java/adapters/http/HttpSystemAdapter.java | 10 +- .../execution/java/rt/core/ArgumentImpl.java | 21 +++ .../java/rt/core/ConnectionImpl.java | 27 ++++ .../tdl/execution/java/rt/core/DataImpl.java | 29 ++++ .../java/rt/core/ElementAnnotationImpl.java | 22 +++ .../execution/java/rt/core/ElementImpl.java | 42 +++++ .../java/rt/core/GateReferenceImpl.java | 85 ++++++++++ .../execution/java/rt/core/MappingImpl.java | 5 +- .../java/rt/core/NamedElementImpl.java | 25 +++ .../execution/java/rt/core/ParameterImpl.java | 29 ++++ .../execution/java/rt/core/PojoArgument.java | 4 +- .../tdl/execution/java/rt/core/PojoData.java | 4 +- .../java/rt/core/PredefinedFunctionsImpl.java | 151 ++++++++++++++++++ .../execution/java/rt/core/ProcedureImpl.java | 66 ++++++++ .../java/rt/core/StopExceptionImpl.java | 23 +++ .../execution/java/rt/core/TestControl.java | 20 +-- .../mts/tdl/execution/java/rt/core/Timer.java | 4 +- .../tdl/execution/java/rt/core/TypeImpl.java | 9 +- .../tdl/execution/java/rt/core/ValueImpl.java | 15 +- .../execution/java/rt/core/VerdictImpl.java | 15 ++ .../execution/java/rt/data/AcceptedType.java | 15 -- .../mts/tdl/execution/java/tri/Argument.java | 19 +-- .../tdl/execution/java/tri/Connection.java | 17 +- .../etsi/mts/tdl/execution/java/tri/Data.java | 34 +--- .../mts/tdl/execution/java/tri/Element.java | 18 +-- .../execution/java/tri/ElementAnnotation.java | 17 +- .../tdl/execution/java/tri/GateReference.java | 38 ++--- .../mts/tdl/execution/java/tri/Mapping.java | 14 +- .../tdl/execution/java/tri/NamedElement.java | 17 +- .../mts/tdl/execution/java/tri/Parameter.java | 10 ++ .../java/tri/PredefinedFunctions.java | 118 ++++---------- .../mts/tdl/execution/java/tri/Procedure.java | 29 ++-- .../execution/java/tri/ProviderModule.java | 8 +- .../tdl/execution/java/tri/RuntimeHelper.java | 21 --- .../tdl/execution/java/tri/StopException.java | 21 ++- .../tdl/execution/java/tri/SystemAdapter.java | 4 + .../etsi/mts/tdl/execution/java/tri/Type.java | 18 +-- .../mts/tdl/execution/java/tri/Value.java | 16 +- .../mts/tdl/execution/java/tri/Verdict.java | 11 +- .../java/codegen/JUnitTestGenerator.java | 22 ++- 42 files changed, 712 insertions(+), 369 deletions(-) create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ArgumentImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ConnectionImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/DataImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ElementAnnotationImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ElementImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/GateReferenceImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/NamedElementImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ParameterImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PredefinedFunctionsImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ProcedureImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/StopExceptionImpl.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/VerdictImpl.java delete mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/data/AcceptedType.java create mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Parameter.java delete mode 100644 plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/RuntimeHelper.java diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/pom.xml b/plugins/org.etsi.mts.tdl.execution.java.runtime/pom.xml index 7468d4ff..7f00ced7 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/pom.xml +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.etsi.mts.tdl org.etsi.mts.tdl.execution.java - 1.0.0-SNAPSHOT + 1.0.0 src diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/adapters/DefaultAdapter.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/adapters/DefaultAdapter.java index 0ce39152..35883391 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/adapters/DefaultAdapter.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/adapters/DefaultAdapter.java @@ -2,20 +2,16 @@ package org.etsi.mts.tdl.execution.java.adapters; import org.etsi.mts.tdl.execution.java.tri.Data; import org.etsi.mts.tdl.execution.java.tri.Reporter; -import org.etsi.mts.tdl.execution.java.tri.RuntimeHelper; -import org.etsi.mts.tdl.execution.java.tri.StopException; import org.etsi.mts.tdl.execution.java.tri.Validator; import org.etsi.mts.tdl.execution.java.tri.Verdict; -public class DefaultAdapter implements Validator, Reporter, RuntimeHelper { +public class DefaultAdapter implements Validator, Reporter { - @Override public boolean equals(Object o0, Object o1) { // TODO Auto-generated method stub return false; } - @Override public T clone(T object) { // TODO Auto-generated method stub return object; diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/adapters/http/HttpSystemAdapter.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/adapters/http/HttpSystemAdapter.java index 6f0178e3..5968066c 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/adapters/http/HttpSystemAdapter.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/adapters/http/HttpSystemAdapter.java @@ -25,6 +25,7 @@ import org.etsi.mts.tdl.execution.java.tri.Connection; import org.etsi.mts.tdl.execution.java.tri.Data; import org.etsi.mts.tdl.execution.java.tri.ElementAnnotation; import org.etsi.mts.tdl.execution.java.tri.Mapping; +import org.etsi.mts.tdl.execution.java.tri.NamedElement; import org.etsi.mts.tdl.execution.java.tri.Procedure; import org.etsi.mts.tdl.execution.java.tri.Reporter; import org.etsi.mts.tdl.execution.java.tri.SystemAdapter; @@ -267,6 +268,11 @@ public class HttpSystemAdapter implements SystemAdapter { throw new UnsupportedOperationException("Procedure-based communication is not supported by this adapter."); } + @Override + public Data callFunction(NamedElement function, Argument[] arguments) { + throw new UnsupportedOperationException("Custom function implementations should be provided by extensions."); + } + protected HttpRequestData getRequestData(Data message) { if (message.getValue() instanceof HttpRequestData) return (HttpRequestData) message.getValue(); @@ -290,8 +296,8 @@ public class HttpSystemAdapter implements SystemAdapter { Mapping rs = m.getResource(); boolean isMapped = false; - for (ElementAnnotation a : rs.annotations) { - if (a.key.equals("Tdl::MappingName") && a.value.equals("Java")) { + for (ElementAnnotation a : rs.getAnnotations()) { + if (a.getKey().equals("Tdl::MappingName") && a.getValue().equals("Java")) { isMapped = true; break; } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ArgumentImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ArgumentImpl.java new file mode 100644 index 00000000..06d59fe4 --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ArgumentImpl.java @@ -0,0 +1,21 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import org.etsi.mts.tdl.execution.java.tri.Data; + +public class ArgumentImpl extends DataImpl { + private String parameterName; + + public ArgumentImpl(T type, V value, String parameterName) { + super(type, value); + this.parameterName = parameterName; + } + + public ArgumentImpl(Data data, String parameterName) { + super(data.getType(), data.getValue()); + this.parameterName = parameterName; + } + + public String getParameterName() { + return parameterName; + } +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ConnectionImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ConnectionImpl.java new file mode 100644 index 00000000..2920c661 --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ConnectionImpl.java @@ -0,0 +1,27 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import org.etsi.mts.tdl.execution.java.tri.Connection; +import org.etsi.mts.tdl.execution.java.tri.GateReference; + +public class ConnectionImpl extends ElementImpl implements Connection { + + + private final GateReference[] endPoints = new GateReference[2]; + + public ConnectionImpl(String name, GateReference sourceGate, GateReference targetGate) { + super(name); + getEndPoints()[0] = sourceGate; + getEndPoints()[1] = targetGate; + } + + public GateReference[] getEndPoints() { + return endPoints; + } + + @Override + public String toString() { + if (name != null) + return name; + return getEndPoints()[0].toString() + " :: " + getEndPoints()[1].toString(); + } +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/DataImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/DataImpl.java new file mode 100644 index 00000000..2a82986d --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/DataImpl.java @@ -0,0 +1,29 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import org.etsi.mts.tdl.execution.java.tri.Data; + +/** + * In Java environment the type is a Java class and + * value is an object of that class or a lambda expression that + * returns such object. + */ +public class DataImpl implements Data { + + private T type; + + private V value; + + public DataImpl(T type, V value) { + this.type = type; + this.value = value; + } + + public V getValue() { + return value; + } + + public T getType() { + return type; + } + +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ElementAnnotationImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ElementAnnotationImpl.java new file mode 100644 index 00000000..096e6ff5 --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ElementAnnotationImpl.java @@ -0,0 +1,22 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import org.etsi.mts.tdl.execution.java.tri.ElementAnnotation; + +public class ElementAnnotationImpl implements ElementAnnotation { + + public String key, value; + + public ElementAnnotationImpl(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public String getValue() { + return value; + } + +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ElementImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ElementImpl.java new file mode 100644 index 00000000..b1f54b2b --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ElementImpl.java @@ -0,0 +1,42 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import java.util.ArrayList; +import java.util.List; + +import org.etsi.mts.tdl.execution.java.tri.Element; +import org.etsi.mts.tdl.execution.java.tri.ElementAnnotation; + +public class ElementImpl implements Element { + + protected String name; + + + private List annotations = new ArrayList(); + + public ElementImpl() { + } + + public ElementImpl(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + + @Override + public List getAnnotations() { + return annotations; + } + + + public void setAnnotations(List annotations) { + this.annotations = annotations; + } + + public ElementImpl addAnnotation(String key, String value) { + this.getAnnotations().add(new ElementAnnotationImpl(key, value)); + return this; + } +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/GateReferenceImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/GateReferenceImpl.java new file mode 100644 index 00000000..db1dbcce --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/GateReferenceImpl.java @@ -0,0 +1,85 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import org.etsi.mts.tdl.execution.java.tri.ComponentInstanceRole; +import org.etsi.mts.tdl.execution.java.tri.Element; +import org.etsi.mts.tdl.execution.java.tri.GateReference; +import org.etsi.mts.tdl.execution.java.tri.GateTypeKind; +import org.etsi.mts.tdl.execution.java.tri.NamedElement; + +/** + * Encapsulation of a connection end-point specification. It's an aggregation of + * following TDL model elements: + *
    + *
  • GateInstance
  • + *
  • GateType
  • + *
  • ComponentInstance
  • + *
  • ComponentType
  • + *
  • ComponentInstanceRole
  • + *
+ * + */ +public class GateReferenceImpl implements GateReference { + private Element gate; + private NamedElement gateType; + private GateTypeKind gateTypeKind; + private Element component; + private NamedElement componentType; + private ComponentInstanceRole role; + + public GateReferenceImpl(Element gate, NamedElement gateType, GateTypeKind gateTypeKind, Element component, NamedElement componentType, + ComponentInstanceRole role) { + this.gate = gate; + this.gateType = gateType; + this.gateTypeKind = gateTypeKind; + this.component = component; + this.componentType = componentType; + this.role = role; + } + + @Override + public Element getGate() { + return gate; + } + + @Override + public NamedElement getGateType() { + return gateType; + } + + @Override + public GateTypeKind getGateTypeKind() { + return gateTypeKind; + } + + @Override + public Element getComponent() { + return component; + } + + @Override + public NamedElement getComponentType() { + return componentType; + } + + @Override + public ComponentInstanceRole getComponentRole() { + return role; + } + + @Override + public int hashCode() { + return gate.hashCode() << 8 + gateType.hashCode() << 6 + component.hashCode() << 4 + + componentType.hashCode() << 2 + role.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof GateReferenceImpl) { + GateReferenceImpl gr = (GateReferenceImpl) obj; + return gate.equals(gr.gate) && gateType.equals(gr.gateType) && component.equals(gr.component) + && componentType.equals(gr.componentType) && role.equals(gr.role); + } + return super.equals(obj); + } + +} \ No newline at end of file diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/MappingImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/MappingImpl.java index 176a091e..f675b394 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/MappingImpl.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/MappingImpl.java @@ -3,10 +3,9 @@ package org.etsi.mts.tdl.execution.java.rt.core; import java.util.Hashtable; import java.util.Map; -import org.etsi.mts.tdl.execution.java.tri.ElementAnnotation; import org.etsi.mts.tdl.execution.java.tri.Mapping; -public class MappingImpl extends Mapping implements TriImpl { +public class MappingImpl extends ElementImpl implements Mapping, TriImpl { private String mappingName; private boolean resource; @@ -83,7 +82,7 @@ public class MappingImpl extends Mapping implements TriImpl { + + private TypeImpl type; + + public ParameterImpl(String parameterName) { + super(parameterName); + } + + @Override + public ParameterImpl addAnnotation(String key, String value) { + super.addAnnotation(key, value); + return this; + } + + public ParameterImpl setType(TypeImpl type) { + this.type = type; + return this; + } + + @Override + public TypeImpl getType() { + return type; + } + +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PojoArgument.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PojoArgument.java index 2a46bab2..c3c8ecc3 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PojoArgument.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PojoArgument.java @@ -1,8 +1,6 @@ package org.etsi.mts.tdl.execution.java.rt.core; -import org.etsi.mts.tdl.execution.java.tri.Argument; - -public class PojoArgument extends Argument, V> { +public class PojoArgument extends ArgumentImpl, V> { public PojoArgument(V value, String parameterName) { super((Class) value.getClass(), value, parameterName); diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PojoData.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PojoData.java index 9c7b1116..460be0db 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PojoData.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PojoData.java @@ -1,8 +1,6 @@ package org.etsi.mts.tdl.execution.java.rt.core; -import org.etsi.mts.tdl.execution.java.tri.Data; - -public class PojoData extends Data, V> { +public class PojoData extends DataImpl, V> { public PojoData(V value) { super((Class) value.getClass(), value); diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PredefinedFunctionsImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PredefinedFunctionsImpl.java new file mode 100644 index 00000000..74797f30 --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/PredefinedFunctionsImpl.java @@ -0,0 +1,151 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import java.util.Collection; + +import org.etsi.mts.tdl.execution.java.tri.Data; +import org.etsi.mts.tdl.execution.java.tri.PredefinedFunctions; +import org.etsi.mts.tdl.execution.java.tri.Value; + +import com.google.inject.Inject; + +/** + * Default implementation of predefined functions specified in TDL. + */ +public class PredefinedFunctionsImpl implements PredefinedFunctions { + + @Inject + public PredefinedFunctionsImpl() { + } + + @Override + public boolean equals(Data d0, Data d1) { + return d0.equals(d1); + } + + @Override + public boolean notEquals(Data d0, Data d1) { + return !equals(d0, d1); + } + + @Override + public boolean and(boolean b0, boolean b1) { + return b0 && b1; + } + + @Override + public boolean or(boolean b0, boolean b1) { + return b0 || b1; + } + + @Override + public boolean xor(boolean b0, boolean b1) { + return b0 ^ b1; + } + + @Override + public boolean not(boolean b) { + return !b; + } + + @Override + public boolean lt(int i0, int i1) { + return i0 < i1; + } + + @Override + public boolean gt(int i0, int i1) { + return i0 > i1; + } + + @Override + public boolean lteq(int i0, int i1) { + return i0 <= i1; + } + + @Override + public boolean gteq(int i0, int i1) { + return i0 >= i1; + } + + @Override + public boolean lt(long i0, long i1) { + return i0 < i1; + } + + @Override + public boolean gt(long i0, long i1) { + return i0 > i1; + } + + @Override + public boolean lteq(long i0, long i1) { + return i0 <= i1; + } + + @Override + public boolean gteq(long i0, long i1) { + return i0 >= i1; + } + + @Override + public int plus(int i0, int i1) { + return i0 + i1; + } + + @Override + public int minus(int i0, int i1) { + return i0 - i1; + } + + @Override + public int multiply(int i0, int i1) { + return i0 * i1; + } + + @Override + public int divide(int i0, int i1) { + return i0 / i1; + } + + @Override + public int mod(int i0, int i1) { + return i0 % i1; + } + + @Override + public long plus(long i0, long i1) { + return i0 + i1; + } + + @Override + public long minus(long i0, long i1) { + return i0 - i1; + } + + @Override + public long multiply(long i0, long i1) { + return i0 * i1; + } + + @Override + public long divide(long i0, long i1) { + return i0 / i1; + } + + @Override + public long mod(long i0, long i1) { + return i0 % i1; + } + + @Override + public int size(Data collection) { + Object v = collection.getValue(); + if (v instanceof Collection) + return ((Collection) v).size(); + if (v instanceof Value) + if (((Value) v).isCollection()) + return ((Value) v).getItems().size(); + throw new IllegalArgumentException("Argument is not a collection."); + } + +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ProcedureImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ProcedureImpl.java new file mode 100644 index 00000000..54ccd306 --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ProcedureImpl.java @@ -0,0 +1,66 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import org.etsi.mts.tdl.execution.java.tri.Parameter; +import org.etsi.mts.tdl.execution.java.tri.Procedure; + +/** + * May optionally be mapped to a method that implements the calling of the + * procedure + */ +public class ProcedureImpl extends NamedElementImpl implements Procedure { + + private List in = new ArrayList(); + private List out = new ArrayList(); + private List exception = new ArrayList(); + + private Consumer function; + + public ProcedureImpl addIn(ParameterImpl p) { + this.in.add(p); + return this; + } + + public ProcedureImpl addOut(ParameterImpl p) { + this.out.add(p); + return this; + } + + public ProcedureImpl addException(ParameterImpl p) { + this.exception.add(p); + return this; + } + + @Override + public List getIn() { + return (List)in; + } + + @Override + public List getOut() { + return (List)out; + } + + @Override + public List getException() { + return (List)exception; + } + + /** + * Optional function that implements this procedure call. + *

+ * The function parameters must match the order and types of parameters of the + * procedure call. That is, for each parameter of a procedure call, a method + * parameter must exist such that the procedure call parameter type is mapped to + * the method parameter type (or class). + */ + public void setFunction(Consumer function) { + this.function = function; + } + public Consumer getFunction() { + return function; + } +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/StopExceptionImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/StopExceptionImpl.java new file mode 100644 index 00000000..e1eca365 --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/StopExceptionImpl.java @@ -0,0 +1,23 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import org.etsi.mts.tdl.execution.java.tri.StopException; +import org.etsi.mts.tdl.execution.java.tri.Verdict; + +@SuppressWarnings("serial") +public class StopExceptionImpl extends StopException { + + private Verdict verdict; + + public StopExceptionImpl(String message) { + super(message); + } + + public StopExceptionImpl(String message, Verdict verdict) { + super(message); + this.verdict = verdict; + } + + public Verdict getVerdict() { + return verdict; + } +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/TestControl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/TestControl.java index 34f2bae4..cc13d75c 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/TestControl.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/TestControl.java @@ -19,8 +19,6 @@ import org.etsi.mts.tdl.execution.java.tri.Data; import org.etsi.mts.tdl.execution.java.tri.GateReference; import org.etsi.mts.tdl.execution.java.tri.PredefinedFunctions; import org.etsi.mts.tdl.execution.java.tri.Reporter; -import org.etsi.mts.tdl.execution.java.tri.RuntimeHelper; -import org.etsi.mts.tdl.execution.java.tri.StopException; import org.etsi.mts.tdl.execution.java.tri.SystemAdapter; import org.etsi.mts.tdl.execution.java.tri.Validator; @@ -34,7 +32,6 @@ public class TestControl { public Validator validator; public Reporter reporter; public PredefinedFunctions functions; - public RuntimeHelper runtimeHelper; private Connection[] connections; private Map receiverHubs = Collections @@ -59,7 +56,6 @@ public class TestControl { this.validator = injector.getInstance(Validator.class); this.reporter = injector.getInstance(Reporter.class); this.functions = injector.getInstance(PredefinedFunctions.class); - this.runtimeHelper = injector.getInstance(RuntimeHelper.class); this.executor = Executors.newCachedThreadPool(); this.completionService = new ExecutorCompletionService(executor); @@ -88,7 +84,7 @@ public class TestControl { ExceptionalBehaviour anyReceiver = new ExceptionalBehaviour(false); anyReceiver.behaviour = () -> { - throw new StopException("Unexpected message received"); + throw new StopExceptionImpl("Unexpected message received"); }; anyReceiver.callable = new ExecutionCallable() { @Override @@ -109,16 +105,16 @@ public class TestControl { for (Connection c : connections) { int testerEP = -1; for (int i = 0; i <= 1; i++) - if (c.endPoints[i].component.getName().equals(testerComponentName) - && c.endPoints[i].gate.getName().equals(testerGateName)) { + if (c.getEndPoints()[i].getComponent().getName().equals(testerComponentName) + && c.getEndPoints()[i].getGate().getName().equals(testerGateName)) { testerEP = i; break; } if (testerEP == -1) continue; int targetEP = testerEP == 0 ? 1 : 0; - if (c.endPoints[targetEP].component.getName().equals(remoteComponentName) - && c.endPoints[targetEP].gate.getName().equals(remoteGateName)) + if (c.getEndPoints()[targetEP].getComponent().getName().equals(remoteComponentName) + && c.getEndPoints()[targetEP].getGate().getName().equals(remoteGateName)) return c; } throw new RuntimeException(String.format("Unknown connection: from %s.%s to %s.%s", testerComponentName, @@ -128,9 +124,9 @@ public class TestControl { public GateReference getGateReference(String testerComponentName, String testerGateName) { for (Connection c : connections) { for (int i = 0; i <= 1; i++) - if (c.endPoints[i].component.getName().equals(testerComponentName) - && c.endPoints[i].gate.getName().equals(testerGateName)) { - return c.endPoints[i]; + if (c.getEndPoints()[i].getComponent().getName().equals(testerComponentName) + && c.getEndPoints()[i].getGate().getName().equals(testerGateName)) { + return c.getEndPoints()[i]; } } throw new RuntimeException(String.format("Unknown gate: %s.%s", testerComponentName, testerGateName)); diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/Timer.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/Timer.java index 097881ec..ece89a6e 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/Timer.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/Timer.java @@ -1,8 +1,6 @@ package org.etsi.mts.tdl.execution.java.rt.core; -import org.etsi.mts.tdl.execution.java.tri.NamedElement; - -public class Timer extends NamedElement { +public class Timer extends NamedElementImpl { private TimeUnit unit; diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/TypeImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/TypeImpl.java index a1aadfd8..9628d567 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/TypeImpl.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/TypeImpl.java @@ -7,12 +7,11 @@ import java.util.List; import java.util.Map; import org.etsi.mts.tdl.execution.java.tri.Data; -import org.etsi.mts.tdl.execution.java.tri.ElementAnnotation; import org.etsi.mts.tdl.execution.java.tri.Mapping; import org.etsi.mts.tdl.execution.java.tri.Type; import org.etsi.mts.tdl.execution.java.tri.Value; -public class TypeImpl extends Type implements TriImpl { +public class TypeImpl extends NamedElementImpl implements Type, TriImpl { private boolean structure = false; private boolean collection = false; private boolean enumerated = false; @@ -95,20 +94,20 @@ public class TypeImpl extends Type implements TriImpl { } public TypeImpl addEnumLiteral(ValueImpl literal) { - this.enumLiterals.add(new Data(this, literal)); + this.enumLiterals.add(new DataImpl(this, literal)); return this; } @Override public TypeImpl setName(String name, String qualifiedName) { this.name = name; - this.qualifiedName = qualifiedName; + this.setQualifiedName(qualifiedName); return this; } @Override public TypeImpl addAnnotation(String key, String value) { - this.annotations.add(new ElementAnnotation(key, value)); + super.addAnnotation(key, value); return this; } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ValueImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ValueImpl.java index 9230ae42..efbd59cc 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ValueImpl.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/ValueImpl.java @@ -7,12 +7,11 @@ import java.util.List; import java.util.Map; import org.etsi.mts.tdl.execution.java.tri.Data; -import org.etsi.mts.tdl.execution.java.tri.ElementAnnotation; import org.etsi.mts.tdl.execution.java.tri.Mapping; import org.etsi.mts.tdl.execution.java.tri.Type; import org.etsi.mts.tdl.execution.java.tri.Value; -public class ValueImpl extends Value implements TriImpl> { +public class ValueImpl extends NamedElementImpl implements Value, TriImpl> { private TypeImpl type; private boolean collection = false; @@ -23,14 +22,14 @@ public class ValueImpl extends Value implements TriImpl> items = new ArrayList>(); private MappingImpl mapping; - + public ValueImpl() { } public ValueImpl(TypeImpl type) { this.type = type; } - + public ValueImpl setType(TypeImpl type) { this.type = type; return this; @@ -75,7 +74,7 @@ public class ValueImpl extends Value implements TriImpl getParameters() { return this.parameters.keySet(); @@ -110,18 +109,18 @@ public class ValueImpl extends Value implements TriImpl asData() { - return new Data(type, this); + return new DataImpl(type, this); } } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/VerdictImpl.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/VerdictImpl.java new file mode 100644 index 00000000..82495e9c --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/core/VerdictImpl.java @@ -0,0 +1,15 @@ +package org.etsi.mts.tdl.execution.java.rt.core; + +import org.etsi.mts.tdl.execution.java.tri.Verdict; + +public class VerdictImpl extends NamedElementImpl implements Verdict { + /** + * Verdict instance predefined in TDL. + */ + public static VerdictImpl pass = new VerdictImpl("pass"), fail = new VerdictImpl("fail"), + inconclusive = new VerdictImpl("inconclusive"); + + public VerdictImpl(String name) { + super(name, null); + } +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/data/AcceptedType.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/data/AcceptedType.java deleted file mode 100644 index c1295269..00000000 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/rt/data/AcceptedType.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.etsi.mts.tdl.execution.java.rt.data; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * HTTP Accept header value usable on String fields. - * XXX who dis? - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface AcceptedType { -} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Argument.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Argument.java index 11391cc0..ae35783d 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Argument.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Argument.java @@ -4,23 +4,10 @@ package org.etsi.mts.tdl.execution.java.tri; * Extends {@link Data Data} to provide name of a parameter. The argument is * specified using type and value. */ -public class Argument extends Data { +public interface Argument extends Data { + /** * Name of the parameter as specified in TDL model. */ - private String parameterName; - - public Argument(T type, V value, String parameterName) { - super(type, value); - this.parameterName = parameterName; - } - - public Argument(Data data, String parameterName) { - super(data.getType(), data.getValue()); - this.parameterName = parameterName; - } - - public String getParameterName() { - return parameterName; - } + String getParameterName(); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Connection.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Connection.java index 3b0303f1..415dff5a 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Connection.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Connection.java @@ -4,23 +4,10 @@ package org.etsi.mts.tdl.execution.java.tri; * Encapsulation of connected GateReferences. * */ -public class Connection extends Element { +public interface Connection extends Element { /** * The end-points of this connection as specified in TDL model. */ - public final GateReference[] endPoints = new GateReference[2]; - - public Connection(String name, GateReference sourceGate, GateReference targetGate) { - super(name); - endPoints[0] = sourceGate; - endPoints[1] = targetGate; - } - - @Override - public String toString() { - if (name != null) - return name; - return endPoints[0].toString() + " :: " + endPoints[1].toString(); - } + GateReference[] getEndPoints(); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Data.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Data.java index 6f45ace0..2343744e 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Data.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Data.java @@ -3,41 +3,17 @@ package org.etsi.mts.tdl.execution.java.tri; /** * Encapsulation of type and value. The objects are resolved using TDL data * mappings. - *

- * In Java environment the type is a Java class and - * value is an object of that class or a lambda expression that - * returns such object. */ -public class Data { - - /** - * The type information in environment specific form that can be used to decode - * incoming data. For example, an annotated class. - */ - private T type; - +public interface Data { /** * The decoded value of the data that matches the type. */ - private V value; - - public Data(T type, V value) { - this.type = type; - this.value = value; - } - - /** - * @see #value - */ - public V getValue() { - return value; - } + V getValue(); /** - * @see #type + * The type information in environment specific form that can be used to decode + * incoming data. For example, an annotated class. */ - public T getType() { - return type; - } + T getType(); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Element.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Element.java index 305dd732..6ee44bae 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Element.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Element.java @@ -1,6 +1,5 @@ package org.etsi.mts.tdl.execution.java.tri; -import java.util.ArrayList; import java.util.List; /** @@ -10,25 +9,16 @@ import java.util.List; * meta-class. * */ -public class Element { +public interface Element { + /** * The name of the element as specified in TDL model. */ - protected String name; + String getName(); /** * The annotations assigned to the element as specified in TDL model. */ - public List annotations = new ArrayList(); - - public Element() { - } + List getAnnotations(); - public Element(String name) { - this.name = name; - } - - public String getName() { - return name; - } } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/ElementAnnotation.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/ElementAnnotation.java index 62a1d4f9..d7062d83 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/ElementAnnotation.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/ElementAnnotation.java @@ -3,15 +3,16 @@ package org.etsi.mts.tdl.execution.java.tri; /** * Annotation as specified in TDL model. */ -public class ElementAnnotation { +public interface ElementAnnotation { + + /** + * Key of the annotation. + */ + String getKey(); + /** - * Key and value of the annotation. + * Value of the annotation. */ - public String key, value; + String getValue(); - public ElementAnnotation(String key, String value) { - this.key = key; - this.value = value; - } - } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/GateReference.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/GateReference.java index f00f9e1d..382a7ef2 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/GateReference.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/GateReference.java @@ -12,36 +12,18 @@ package org.etsi.mts.tdl.execution.java.tri; * * */ -public class GateReference { - public Element gate; - public Element gateType; - public Element component; - public Element componentType; - public ComponentInstanceRole role; +public interface GateReference { - public GateReference(Element gate, Element gateType, Element component, Element componentType, - ComponentInstanceRole role) { - this.gate = gate; - this.gateType = gateType; - this.component = component; - this.componentType = componentType; - this.role = role; - } + Element getGate(); - @Override - public int hashCode() { - return gate.hashCode() << 8 + gateType.hashCode() << 6 + component.hashCode() << 4 - + componentType.hashCode() << 2 + role.hashCode(); - } + NamedElement getGateType(); + + GateTypeKind getGateTypeKind(); - @Override - public boolean equals(Object obj) { - if (obj instanceof GateReference) { - GateReference gr = (GateReference) obj; - return gate.equals(gr.gate) && gateType.equals(gr.gateType) && component.equals(gr.component) - && componentType.equals(gr.componentType) && role.equals(gr.role); - } - return super.equals(obj); - } + Element getComponent(); + + NamedElement getComponentType(); + + ComponentInstanceRole getComponentRole(); } \ No newline at end of file diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Mapping.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Mapping.java index 38e3fb40..9ae6c726 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Mapping.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Mapping.java @@ -4,14 +4,14 @@ package org.etsi.mts.tdl.execution.java.tri; * Representation of a TDL model element of class DataResourceMapping, * DataElementMapping or ParameterMapping. */ -public abstract class Mapping extends Element { +public interface Mapping extends Element { /** * Get the name applied to the associated DataResourceMapping element * using the predefined MappingName annotation. * * @return A distinctive name for this mapping. */ - public abstract String getMappingName(); + String getMappingName(); /** * If this is a resource mapping. @@ -19,7 +19,7 @@ public abstract class Mapping extends Element { * @return true if this type represents a DataResourceMapping * element. */ - public abstract boolean isResource(); + boolean isResource(); /** * If this is a parameter mapping. @@ -27,14 +27,14 @@ public abstract class Mapping extends Element { * @return true if this type represents a ParameterMapping * element. */ - public abstract boolean isParameter(); + boolean isParameter(); /** * Get the type-sepcific URI for this mapping. * * @return The URI of this mapping as specified in corresponding model element. */ - public abstract String getUri(); + String getUri(); /** * Get the resource mapping for this data mapping. @@ -43,7 +43,7 @@ public abstract class Mapping extends Element { * element referenced by the associated DataElementMapping * element. */ - public abstract Mapping getResource(); + Mapping getResource(); /** * Get the parameter mappings of this data mapping. @@ -54,6 +54,6 @@ public abstract class Mapping extends Element { * @return A Mapping representing a ParameterMapping * element. */ - public abstract Mapping getParameter(String parameterName); + Mapping getParameter(String parameterName); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/NamedElement.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/NamedElement.java index 53e0df11..71e395ca 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/NamedElement.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/NamedElement.java @@ -5,21 +5,10 @@ package org.etsi.mts.tdl.execution.java.tri; * in TDL. * */ -public class NamedElement extends Element { +public interface NamedElement extends Element { + /** * The qualified name of the element as specified in TDL model. */ - protected String qualifiedName; - - public NamedElement() { - } - - public NamedElement(String name, String qualifiedName) { - super(name); - this.qualifiedName = qualifiedName; - } - - public String getQualifiedName() { - return qualifiedName; - } + String getQualifiedName(); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Parameter.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Parameter.java new file mode 100644 index 00000000..98c4b473 --- /dev/null +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Parameter.java @@ -0,0 +1,10 @@ +package org.etsi.mts.tdl.execution.java.tri; + +/** + * Representation of a TDL model element of class Parameter and its + * sub-classes. + */ +public interface Parameter extends Element { + + T getType(); +} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/PredefinedFunctions.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/PredefinedFunctions.java index 16bea9c8..b9870fd8 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/PredefinedFunctions.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/PredefinedFunctions.java @@ -1,122 +1,58 @@ package org.etsi.mts.tdl.execution.java.tri; -import java.util.Collection; +public interface PredefinedFunctions { -import com.google.inject.Inject; + boolean equals(Data d0, Data d1); -/** - * Default implementation of predefined functions specified in TDL. - */ -public class PredefinedFunctions { + boolean notEquals(Data d0, Data d1); - public RuntimeHelper helper; + boolean and(boolean b0, boolean b1); - @Inject - public PredefinedFunctions(RuntimeHelper helper) { - this.helper = helper; - } + boolean or(boolean b0, boolean b1); - public boolean equals(Data d0, Data d1) { - return helper.equals(d0.getValue(), d1.getValue()); - } + boolean xor(boolean b0, boolean b1); - public boolean notEquals(Data d0, Data d1) { - return !equals(d0, d1); - } + boolean not(boolean b); - public boolean and(boolean b0, boolean b1) { - return b0 && b1; - } + boolean lt(int i0, int i1); - public boolean or(boolean b0, boolean b1) { - return b0 || b1; - } + boolean gt(int i0, int i1); - public boolean xor(boolean b0, boolean b1) { - return b0 ^ b1; - } + boolean lteq(int i0, int i1); - public boolean not(boolean b) { - return !b; - } + boolean gteq(int i0, int i1); - public boolean lt(int i0, int i1) { - return i0 < i1; - } + boolean lt(long i0, long i1); - public boolean gt(int i0, int i1) { - return i0 > i1; - } + boolean gt(long i0, long i1); - public boolean lteq(int i0, int i1) { - return i0 <= i1; - } + boolean lteq(long i0, long i1); - public boolean gteq(int i0, int i1) { - return i0 >= i1; - } + boolean gteq(long i0, long i1); - public boolean lt(long i0, long i1) { - return i0 < i1; - } + int plus(int i0, int i1); - public boolean gt(long i0, long i1) { - return i0 > i1; - } + int minus(int i0, int i1); - public boolean lteq(long i0, long i1) { - return i0 <= i1; - } + int multiply(int i0, int i1); - public boolean gteq(long i0, long i1) { - return i0 >= i1; - } + int divide(int i0, int i1); - public int plus(int i0, int i1) { - return i0 + i1; - } + int mod(int i0, int i1); - public int minus(int i0, int i1) { - return i0 - i1; - } + long plus(long i0, long i1); - public int multiply(int i0, int i1) { - return i0 * i1; - } + long minus(long i0, long i1); - public int divide(int i0, int i1) { - return i0 / i1; - } + long multiply(long i0, long i1); - public int mod(int i0, int i1) { - return i0 % i1; - } + long divide(long i0, long i1); - public long plus(long i0, long i1) { - return i0 + i1; - } - - public long minus(long i0, long i1) { - return i0 - i1; - } - - public long multiply(long i0, long i1) { - return i0 * i1; - } - - public long divide(long i0, long i1) { - return i0 / i1; - } - - public long mod(long i0, long i1) { - return i0 % i1; - } + long mod(long i0, long i1); /** * @param collection An object that a CollectionDataInstance is mapped to. */ - public int size(Data> collection) { - return collection.getValue().size(); - } + int size(Data collection); -} +} \ No newline at end of file diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Procedure.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Procedure.java index 22c086b5..46a8bf6e 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Procedure.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Procedure.java @@ -1,20 +1,25 @@ package org.etsi.mts.tdl.execution.java.tri; -import java.util.function.Consumer; +import java.util.List; /** - * Encapsulation of procedure signature as specified in TDL model that may - * optionally be mapped to a method that implements the calling of the - * procedure. + * Encapsulation of procedure signature as specified in TDL model . */ -public class Procedure extends NamedElement { +public interface Procedure extends NamedElement { + + /** + * Get the parameters with ParameterKind::In. + */ + List getIn(); + + /** + * Get the parameters with ParameterKind::Out. + */ + List getOut(); + /** - * Optional function that implements this procedure call. - *

- * The function parameters must match the order and types of parameters of the - * procedure call. That is, for each parameter of a procedure call, a method - * parameter must exist such that the procedure call parameter type is mapped to - * the method parameter type (or class). + * Get the parameters with ParameterKind::Exception. */ - public Consumer function; + List getException(); } + \ No newline at end of file diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/ProviderModule.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/ProviderModule.java index 66d75903..12f9894d 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/ProviderModule.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/ProviderModule.java @@ -26,11 +26,5 @@ public interface ProviderModule extends com.google.inject.Module { @Provides @Singleton - default PredefinedFunctions providePredefinedFunctions(RuntimeHelper helper) { - return new PredefinedFunctions(helper); - } - - @Provides - @Singleton - RuntimeHelper provideRuntimeHelper(); + PredefinedFunctions providePredefinedFunctions(); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/RuntimeHelper.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/RuntimeHelper.java deleted file mode 100644 index 99a5ef30..00000000 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/RuntimeHelper.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.etsi.mts.tdl.execution.java.tri; - -/** - * Helper functions to provide environment specific implementation for various - * operations. - */ -public interface RuntimeHelper { - /** - * Compare two objects. Can be used to implement deep equals operation for - * {@link Data Data} objects. - * - * @return True if objects are equal. - */ - boolean equals(Object o0, Object o1); - - /** - * Create a copy of an object. Can be used to implement deep clone of - * {@link Data Data} objects. - */ - T clone(T object); -} diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/StopException.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/StopException.java index e0dfff77..c7597d46 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/StopException.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/StopException.java @@ -13,22 +13,19 @@ package org.etsi.mts.tdl.execution.java.tri; * */ @SuppressWarnings("serial") -public class StopException extends Exception { - /** - * Optional final verdict. - */ - private Verdict verdict; +public abstract class StopException extends Exception { public StopException(String message) { super(message); } - - public StopException(String message, Verdict verdict) { - super(message); - this.verdict = verdict; + + @Override + public String getMessage() { + return super.getMessage(); } - public Verdict getVerdict() { - return verdict; - } + /** + * Optional final verdict. + */ + public abstract Verdict getVerdict(); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/SystemAdapter.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/SystemAdapter.java index f68a0340..4f6f09d0 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/SystemAdapter.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/SystemAdapter.java @@ -101,4 +101,8 @@ public interface SystemAdapter { */ void replyCall(Procedure operation, Data reply, Data exception, Connection connection); + /** + * XXX do we need this? + */ + Data callFunction(NamedElement function, Argument[] arguments); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Type.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Type.java index 9b3791f6..46206ccd 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Type.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Type.java @@ -7,7 +7,7 @@ import java.util.List; * Representation of a TDL model element of class DataType and its * sub-classes. */ -public abstract class Type extends NamedElement { +public interface Type extends NamedElement { /** * If this type is a structure. @@ -15,7 +15,7 @@ public abstract class Type extends NamedElement { * @return true if this type represents a StructureDataType * element. */ - public abstract boolean isStructure(); + boolean isStructure(); /** * If this type is a collection. @@ -23,14 +23,14 @@ public abstract class Type extends NamedElement { * @return true if this type represents a CollectionDataType * element. */ - public abstract boolean isCollection(); + boolean isCollection(); /** * If this type is an enum. * * @return true if this type represents a EnumDataType element. */ - public abstract boolean isEnum(); + boolean isEnum(); /** * Get the data mapping chosen for the runtime. The mapping that is chosen is @@ -39,7 +39,7 @@ public abstract class Type extends NamedElement { * @return A Mapping representing a DataElementMapping * element. */ - public abstract Mapping getMapping(); + Mapping getMapping(); /** * Get the names of members of this structured type. Includes all inherited @@ -48,7 +48,7 @@ public abstract class Type extends NamedElement { * @return Collection of names from the Member elements contained or * inherited in the corresponding StructuredDataType element. */ - public abstract Collection getParameters(); + Collection getParameters(); /** * Get the type of a parameter. @@ -59,7 +59,7 @@ public abstract class Type extends NamedElement { * DataType of the Member element corresponding to the * parameter. */ - public abstract Type getParameter(String parameterName); + Type getParameter(String parameterName); /** * Get the type of items of this collection type. @@ -67,7 +67,7 @@ public abstract class Type extends NamedElement { * @return The Type of the items contained in a collection of this * Type. */ - public abstract Type getItemType(); + Type getItemType(); /** * Get the literal values of this enumerated type. @@ -76,5 +76,5 @@ public abstract class Type extends NamedElement { * SimpleDataInstance elements contained in the corresponding * EnumDataType element. */ - public abstract List> getEnumLiterals(); + List> getEnumLiterals(); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Value.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Value.java index d95db038..6529e73a 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Value.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Value.java @@ -7,14 +7,14 @@ import java.util.List; * Representation of a TDL model element of class DataInstance or * DataUse and their sub-classes. */ -public abstract class Value extends NamedElement { +public interface Value extends NamedElement { /** * If this value is a structure. * * @return true if the type of this value represents a * StructureDataType element. */ - public abstract boolean isStructure(); + boolean isStructure(); /** * If this value is a collection. @@ -22,7 +22,7 @@ public abstract class Value extends NamedElement { * @return true if the type of this value represents a * CollectionDataType element. */ - public abstract boolean isCollection(); + boolean isCollection(); /** * Get the data mapping chosen for the runtime. The mapping that is chosen is @@ -31,7 +31,7 @@ public abstract class Value extends NamedElement { * @return A Mapping representing a DataElementMapping * element. */ - public abstract Mapping getMapping(); + Mapping getMapping(); /** * Get the primitive or special value of this value object. @@ -39,7 +39,7 @@ public abstract class Value extends NamedElement { * @return A String, a Boolean or any other boxed * primitive value or an instance of {@link SpecialValue SpecialValue}. */ - public abstract Object getValue(); + Object getValue(); /** * Get the names of members of the structured type of this value. Only returns @@ -49,7 +49,7 @@ public abstract class Value extends NamedElement { * ParameterBinding elements contained in the corresponding * DataInstance or DataUse element. */ - public abstract Collection getParameters(); + Collection getParameters(); /** * Get the value data of a parameter. @@ -59,7 +59,7 @@ public abstract class Value extends NamedElement { * @return The Value of the parameter wrapped in Data * object. */ - public abstract Data getParameter(String parameterName); + Data getParameter(String parameterName); /** * Get the values contained in this collection value. @@ -67,5 +67,5 @@ public abstract class Value extends NamedElement { * @return The Values of the items wrapped in Data * objects. */ - public abstract List> getItems(); + List> getItems(); } diff --git a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Verdict.java b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Verdict.java index 570cabcc..8950cebd 100644 --- a/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Verdict.java +++ b/plugins/org.etsi.mts.tdl.execution.java.runtime/src/org/etsi/mts/tdl/execution/java/tri/Verdict.java @@ -3,14 +3,5 @@ package org.etsi.mts.tdl.execution.java.tri; /** * Either predefined or custom verdict. */ -public class Verdict extends NamedElement { - /** - * Verdict instance predefined in TDL. - */ - public static Verdict pass = new Verdict("pass"), fail = new Verdict("fail"), - inconclusive = new Verdict("inconclusive"); - - public Verdict(String name) { - super(name, null); - } +public interface Verdict extends NamedElement { } diff --git a/plugins/org.etsi.mts.tdl.execution.java/src/org/etsi/mts/tdl/execution/java/codegen/JUnitTestGenerator.java b/plugins/org.etsi.mts.tdl.execution.java/src/org/etsi/mts/tdl/execution/java/codegen/JUnitTestGenerator.java index 6aa8ef50..64c4a78d 100644 --- a/plugins/org.etsi.mts.tdl.execution.java/src/org/etsi/mts/tdl/execution/java/codegen/JUnitTestGenerator.java +++ b/plugins/org.etsi.mts.tdl.execution.java/src/org/etsi/mts/tdl/execution/java/codegen/JUnitTestGenerator.java @@ -248,7 +248,8 @@ public class JUnitTestGenerator extends Renderer { } private Annotation getAnnotation(Element e, String keyName) { - Optional op = e.getAnnotation().stream().filter(a -> a.getKey().getName().equals(keyName)).findAny(); + Optional op = e.getAnnotation().stream().filter(a -> a.getKey().getName().equals(keyName)) + .findAny(); if (op.isPresent()) return op.get(); return null; @@ -499,7 +500,7 @@ public class JUnitTestGenerator extends Renderer { connectionNames.add(connectionName); List endpoints = conn.getEndPoint(); - append("Connection " + connectionName + " = new Connection"); + append("Connection " + connectionName + " = new ConnectionImpl"); callOpen(); line("\"" + conn.getName() + "\", "); writeGateReference(endpoints.get(0)); @@ -523,11 +524,13 @@ public class JUnitTestGenerator extends Renderer { } private void writeGateReference(GateReference e) { - append("new GateReference("); + append("new GateReferenceImpl("); writeElement(e.getGate()); append(", "); writeElement(e.getGate().getType()); append(", "); + append("GateTypeKind." + e.getGate().getType().getKind()); + append(", "); writeElement(e.getComponent()); append(", "); writeElement(e.getComponent().getType()); @@ -611,7 +614,7 @@ public class JUnitTestGenerator extends Renderer { declareType(iType, declaredTypes); } - //TODO add mapping name to mapping + // TODO add mapping name to mapping DataElementMapping mapping = getMapping(t); if (mapping == null) mapping = getMapping(t, settings.useMapping); @@ -645,11 +648,11 @@ public class JUnitTestGenerator extends Renderer { private void writeMapping(DataElementMapping mapping, String mappingVarName, boolean inline) { Annotation nameAnnotation = getAnnotation(mapping.getDataResourceMapping(), MAPPING_KEY); - String name = nameAnnotation != null ? nameAnnotation.getValue() : null; - + String name = nameAnnotation != null ? nameAnnotation.getValue() : null; + if (!inline) append(CORE_PACKAGE + ".MappingImpl " + mappingVarName + " = "); - + append("new " + CORE_PACKAGE + ".MappingImpl("); append("\"" + name + "\", "); // XXX @@ -693,7 +696,10 @@ public class JUnitTestGenerator extends Renderer { } private void writeElement(Element e) { - append("new Element(\"" + e.getName() + "\")"); + if (e instanceof NamedElement) + append("new NamedElementImpl(\"" + e.getName() + "\", \"" + ((NamedElement) e).getQualifiedName() + "\")"); + else + append("new ElementImpl(\"" + e.getName() + "\")"); } private void writeTestDescription(TestDescription tc) { -- GitLab