From 58a9431a90d2ca147f56c45dcfd4654145550a01 Mon Sep 17 00:00:00 2001 From: ArenBabikian Date: Mon, 11 May 2020 12:51:37 -0400 Subject: Add Satellite Case Study to testing framework --- .../case.study.pledge.originalFiles/.gitignore | 1 + .../xtend-gen/converter/.UML2TGF.xtendbin | Bin 6885 -> 6885 bytes .../case.study.pledge.run/.classpath | 2 +- .../case.study.pledge.run/.gitignore | 3 + .../case.study.pledge.run/bin/.gitignore | 2 - .../case.study.pledge.run/bin/queries/.gitignore | 120 ----- .../bin/queries/case_study_A.vql | 2 +- .../config/genericSatellite.vsconfig | 25 + .../inputs/SatelliteInstance.xmi | 7 + .../case.study.pledge.run/plugin.xml | 44 -- .../src-gen/queries/.gitignore | 120 ----- .../src-gen/queries/Case_study_short.java | 64 --- .../src-gen/queries/X_inv48.java | 555 --------------------- .../src/queries/SatelliteQueries.vql | 390 +++++++++++++++ .../src/queries/case_study_A.vql | 2 +- .../src/run/GenerateFromConfig.xtend | 4 +- .../xtend-gen/run/.GenerateFromConfig.xtendbin | Bin 10678 -> 10676 bytes .../xtend-gen/run/.GeneratePledgeModels.xtendbin | Bin 16725 -> 16725 bytes .../case.study.pledge.run/xtend-gen/run/.gitignore | 10 - .../xtend-gen/run/GenerateFromConfig.java | 4 +- 20 files changed, 433 insertions(+), 922 deletions(-) delete mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/.gitignore delete mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/queries/.gitignore create mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig create mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/inputs/SatelliteInstance.xmi delete mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/.gitignore delete mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/Case_study_short.java delete mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/X_inv48.java create mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/queries/SatelliteQueries.vql delete mode 100644 Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.gitignore diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.gitignore index ae3c1726..3197db31 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.gitignore +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/.gitignore @@ -1 +1,2 @@ /bin/ +/xtend-gen/ \ No newline at end of file diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/xtend-gen/converter/.UML2TGF.xtendbin b/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/xtend-gen/converter/.UML2TGF.xtendbin index 4a962cb6..134582c5 100644 Binary files a/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/xtend-gen/converter/.UML2TGF.xtendbin and b/Tests/MODELS2020-CaseStudies/case.study.pledge.originalFiles/xtend-gen/converter/.UML2TGF.xtendbin differ diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/.classpath b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/.classpath index 29ba3981..3f0838b6 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/.classpath +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/.classpath @@ -3,7 +3,7 @@ - + diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/.gitignore index 16be8f21..9e0e784a 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/.gitignore +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/.gitignore @@ -1 +1,4 @@ /output/ +/src-gen/ +/xtend-gen/ +/bin/ \ No newline at end of file diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/.gitignore deleted file mode 100644 index 3d70f0da..00000000 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/queries/ -/run/ diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/queries/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/queries/.gitignore deleted file mode 100644 index f679c1a8..00000000 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/queries/.gitignore +++ /dev/null @@ -1,120 +0,0 @@ -/.Inv17.java._trace -/.Inv20.java._trace -/.Inv33_con.java._trace -/.Inv34.java._trace -/.Inv35.java._trace -/.Inv47.java._trace -/.Inv48.java._trace -/.Inv48_helper.java._trace -/.Case_study_A.java._trace -/.Inv49.java._trace -/.Inv49_con.java._trace -/.Inv49_helper.java._trace -/.H_inv49.java._trace -/.Ocl_inv49.java._trace -/.Vql_inv49.java._trace -/.Vql_inv492.java._trace -/.H1_inv48.java._trace -/.H2_inv48.java._trace -/.Vql_inv48.java._trace -/.H3_inv48.java._trace -/.H1_inv49.java._trace -/.H2_inv49.java._trace -/.H_inv47.java._trace -/.Inv35test.java._trace -/.Inv33.java._trace -/.X.java._trace -/.H_inv16_moreThan1.java._trace -/.H_inv48_1.java._trace -/.H_inv48_2.java._trace -/.H_inv48_3.java._trace -/.H_inv49_1.java._trace -/.H_inv49_2.java._trace -/.Inv16.java._trace -/.Inv15.java._trace -/.H_inv13.java._trace -/.Inv13.java._trace -/.Inv12.java._trace -/.H_inv12_notNonRes.java._trace -/.H_inv12_notZZ.java._trace -/.H_inv11_incOver100.java._trace -/.Inv11.java._trace -/.H_inv11_incNotOver100.java._trace -/.H_inv8_notEI.java._trace -/.Inv8.java._trace -/.H_inv08_notEI.java._trace -/.Inv08.java._trace -/.H_inv08_inRange.java._trace -/.X_inv08_inRange.java._trace -/.X_inv08_notEI.java._trace -/.X_inv11_incNotOver100.java._trace -/.X_inv11_incOver100.java._trace -/.X_inv12_notNonRes.java._trace -/.X_inv12_notZZ.java._trace -/.X_inv13.java._trace -/.X_inv47.java._trace -/.X_inv48_1.java._trace -/.X_inv48_2.java._trace -/.X_inv48_3.java._trace -/.X_inv49_1.java._trace -/.X_inv49_2.java._trace -/.X_inv48_Dis.java._trace -/.X_inv48_notDis.java._trace -/.X_inv08_noType.java._trace -/.X_inv08_invalidType.java._trace -/.Inv06.java._trace -/.X_inv06_inRange.java._trace -/.Inv05.java._trace -/.X_inv05_inRange.java._trace -/.Inv03.java._trace -/.X_inv03_noAll.java._trace -/.X_inv03_eligAll.java._trace -/.X_inv03_hasAll.java._trace -/.Inv07.java._trace -/.Inv10.java._trace -/.X_inv15.java._trace -/Inv03.java -/Inv05.java -/Inv06.java -/X_inv03_eligAll.java -/X_inv03_hasAll.java -/X_inv05_inRange.java -/Case_study_A.java -/Inv07.java -/Inv08.java -/Inv10.java -/Inv11.java -/Inv12.java -/Inv13.java -/Inv15.java -/Inv17.java -/Inv20.java -/Inv33.java -/Inv34.java -/Inv35.java -/Inv47.java -/Inv48.java -/Inv49.java -/X_inv08_inRange.java -/X_inv08_noType.java -/X_inv08_notEI.java -/X_inv11_incNotOver100.java -/X_inv11_incOver100.java -/X_inv12_notNonRes.java -/X_inv12_notZZ.java -/X_inv13.java -/X_inv15.java -/X_inv47.java -/X_inv48_3.java -/X_inv48_Dis.java -/X_inv48_notDis.java -/X_inv49_1.java -/X_inv49_2.java -/.FamilyTreeConstraints.java._trace -/.MemberHasParent.java._trace -/.MemberIsItsOwnParent.java._trace -/.NegativeAge.java._trace -/.ParentTooYoung.java._trace -/.TwoMembersHaveNoParent.java._trace -/.Case_study_short.java._trace -/.X_inv48.java._trace diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/queries/case_study_A.vql b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/queries/case_study_A.vql index 01cdf372..d879fd7c 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/queries/case_study_A.vql +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/bin/queries/case_study_A.vql @@ -1,5 +1,5 @@ package queries - + import "http:///TaxCard.ecore" //AttributeRemoved -> DF diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig new file mode 100644 index 00000000..b683073a --- /dev/null +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig @@ -0,0 +1,25 @@ +import epackage "../../../Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/model/satellite.ecore" +//import viatra "../../../Domains/hu.bme.mit.inf.dslreasoner.domains.satellite/src/hu/bme/mit/inf/dslreasoner/domains/satellite/queries/SatelliteQueries.vql" +import viatra "src/queries/SatelliteQueries.vql" + +generate { + metamodel = { package satellite } + constraints = { package hu.bme.mit.inf.dslreasoner.domains.satellite.queries } + partial-model = { "inputs/SatelliteInstance.xmi"} + solver = ViatraSolver + scope = { + #node += 64..128 + } + + config = { + runtime = 10000, + log-level = normal + } + + runs = 1 + + debug = "outputs/debug" + log = "outputs/log.txt" + output = "outputs/models" + statistics = "outputs/statistics.csv" +} diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/inputs/SatelliteInstance.xmi b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/inputs/SatelliteInstance.xmi new file mode 100644 index 00000000..3d07a199 --- /dev/null +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/inputs/SatelliteInstance.xmi @@ -0,0 +1,7 @@ + + diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/plugin.xml b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/plugin.xml index a6ebe14f..80125d37 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/plugin.xml +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/plugin.xml @@ -1,48 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/.gitignore deleted file mode 100644 index f679c1a8..00000000 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/.gitignore +++ /dev/null @@ -1,120 +0,0 @@ -/.Inv17.java._trace -/.Inv20.java._trace -/.Inv33_con.java._trace -/.Inv34.java._trace -/.Inv35.java._trace -/.Inv47.java._trace -/.Inv48.java._trace -/.Inv48_helper.java._trace -/.Case_study_A.java._trace -/.Inv49.java._trace -/.Inv49_con.java._trace -/.Inv49_helper.java._trace -/.H_inv49.java._trace -/.Ocl_inv49.java._trace -/.Vql_inv49.java._trace -/.Vql_inv492.java._trace -/.H1_inv48.java._trace -/.H2_inv48.java._trace -/.Vql_inv48.java._trace -/.H3_inv48.java._trace -/.H1_inv49.java._trace -/.H2_inv49.java._trace -/.H_inv47.java._trace -/.Inv35test.java._trace -/.Inv33.java._trace -/.X.java._trace -/.H_inv16_moreThan1.java._trace -/.H_inv48_1.java._trace -/.H_inv48_2.java._trace -/.H_inv48_3.java._trace -/.H_inv49_1.java._trace -/.H_inv49_2.java._trace -/.Inv16.java._trace -/.Inv15.java._trace -/.H_inv13.java._trace -/.Inv13.java._trace -/.Inv12.java._trace -/.H_inv12_notNonRes.java._trace -/.H_inv12_notZZ.java._trace -/.H_inv11_incOver100.java._trace -/.Inv11.java._trace -/.H_inv11_incNotOver100.java._trace -/.H_inv8_notEI.java._trace -/.Inv8.java._trace -/.H_inv08_notEI.java._trace -/.Inv08.java._trace -/.H_inv08_inRange.java._trace -/.X_inv08_inRange.java._trace -/.X_inv08_notEI.java._trace -/.X_inv11_incNotOver100.java._trace -/.X_inv11_incOver100.java._trace -/.X_inv12_notNonRes.java._trace -/.X_inv12_notZZ.java._trace -/.X_inv13.java._trace -/.X_inv47.java._trace -/.X_inv48_1.java._trace -/.X_inv48_2.java._trace -/.X_inv48_3.java._trace -/.X_inv49_1.java._trace -/.X_inv49_2.java._trace -/.X_inv48_Dis.java._trace -/.X_inv48_notDis.java._trace -/.X_inv08_noType.java._trace -/.X_inv08_invalidType.java._trace -/.Inv06.java._trace -/.X_inv06_inRange.java._trace -/.Inv05.java._trace -/.X_inv05_inRange.java._trace -/.Inv03.java._trace -/.X_inv03_noAll.java._trace -/.X_inv03_eligAll.java._trace -/.X_inv03_hasAll.java._trace -/.Inv07.java._trace -/.Inv10.java._trace -/.X_inv15.java._trace -/Inv03.java -/Inv05.java -/Inv06.java -/X_inv03_eligAll.java -/X_inv03_hasAll.java -/X_inv05_inRange.java -/Case_study_A.java -/Inv07.java -/Inv08.java -/Inv10.java -/Inv11.java -/Inv12.java -/Inv13.java -/Inv15.java -/Inv17.java -/Inv20.java -/Inv33.java -/Inv34.java -/Inv35.java -/Inv47.java -/Inv48.java -/Inv49.java -/X_inv08_inRange.java -/X_inv08_noType.java -/X_inv08_notEI.java -/X_inv11_incNotOver100.java -/X_inv11_incOver100.java -/X_inv12_notNonRes.java -/X_inv12_notZZ.java -/X_inv13.java -/X_inv15.java -/X_inv47.java -/X_inv48_3.java -/X_inv48_Dis.java -/X_inv48_notDis.java -/X_inv49_1.java -/X_inv49_2.java -/.FamilyTreeConstraints.java._trace -/.MemberHasParent.java._trace -/.MemberIsItsOwnParent.java._trace -/.NegativeAge.java._trace -/.ParentTooYoung.java._trace -/.TwoMembersHaveNoParent.java._trace -/.Case_study_short.java._trace -/.X_inv48.java._trace diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/Case_study_short.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/Case_study_short.java deleted file mode 100644 index 5c72b809..00000000 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/Case_study_short.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_short.vql - */ -package queries; - -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; -import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedPatternGroup; -import queries.Inv48; -import queries.X_inv48; - -/** - * A pattern group formed of all public patterns defined in case_study_short.vql. - * - *

Use the static instance as any {@link interface org.eclipse.viatra.query.runtime.api.IQueryGroup}, to conveniently prepare - * a VIATRA Query engine for matching all patterns originally defined in file case_study_short.vql, - * in order to achieve better performance than one-by-one on-demand matcher initialization. - * - *

From package queries, the group contains the definition of the following patterns:

    - *
  • inv48
  • - *
  • x_inv48
  • - *
- * - * @see IQueryGroup - * - */ -@SuppressWarnings("all") -public final class Case_study_short extends BaseGeneratedPatternGroup { - /** - * Access the pattern group. - * - * @return the singleton instance of the group - * @throws ViatraQueryRuntimeException if there was an error loading the generated code of pattern specifications - * - */ - public static Case_study_short instance() { - if (INSTANCE == null) { - INSTANCE = new Case_study_short(); - } - return INSTANCE; - } - - private static Case_study_short INSTANCE; - - private Case_study_short() { - querySpecifications.add(Inv48.instance()); - querySpecifications.add(X_inv48.instance()); - } - - public Inv48 getInv48() { - return Inv48.instance(); - } - - public Inv48.Matcher getInv48(final ViatraQueryEngine engine) { - return Inv48.Matcher.on(engine); - } - - public X_inv48 getX_inv48() { - return X_inv48.instance(); - } - - public X_inv48.Matcher getX_inv48(final ViatraQueryEngine engine) { - return X_inv48.Matcher.on(engine); - } -} diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/X_inv48.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/X_inv48.java deleted file mode 100644 index 436818c4..00000000 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src-gen/queries/X_inv48.java +++ /dev/null @@ -1,555 +0,0 @@ -/** - * Generated from platform:/resource/case.study.pledge.run/src/queries/case_study_short.vql - */ -package queries; - -import Taxation.Physical_Person; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.apache.log4j.Logger; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EDataType; -import org.eclipse.viatra.query.runtime.api.IPatternMatch; -import org.eclipse.viatra.query.runtime.api.IQuerySpecification; -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; -import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; -import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; -import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; -import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; -import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; -import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey; -import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; -import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; -import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; -import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; -import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; -import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; -import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; - -/** - * A pattern-specific query specification that can instantiate Matcher in a type-safe way. - * - *

Original source: - *

- *         pattern x_inv48(p : Physical_Person) {
- *             Physical_Person.disability_type(p, ::NONE);
- *         }
- * 
- * - * @see Matcher - * @see Match - * - */ -@SuppressWarnings("all") -public final class X_inv48 extends BaseGeneratedEMFQuerySpecification { - /** - * Pattern-specific match representation of the queries.x_inv48 pattern, - * to be used in conjunction with {@link Matcher}. - * - *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. - * Each instance is a (possibly partial) substitution of pattern parameters, - * usable to represent a match of the pattern in the result of a query, - * or to specify the bound (fixed) input parameters when issuing a query. - * - * @see Matcher - * - */ - public static abstract class Match extends BasePatternMatch { - private Physical_Person fP; - - private static List parameterNames = makeImmutableList("p"); - - private Match(final Physical_Person pP) { - this.fP = pP; - } - - @Override - public Object get(final String parameterName) { - switch(parameterName) { - case "p": return this.fP; - default: return null; - } - } - - @Override - public Object get(final int index) { - switch(index) { - case 0: return this.fP; - default: return null; - } - } - - public Physical_Person getP() { - return this.fP; - } - - @Override - public boolean set(final String parameterName, final Object newValue) { - if (!isMutable()) throw new java.lang.UnsupportedOperationException(); - if ("p".equals(parameterName) ) { - this.fP = (Physical_Person) newValue; - return true; - } - return false; - } - - public void setP(final Physical_Person pP) { - if (!isMutable()) throw new java.lang.UnsupportedOperationException(); - this.fP = pP; - } - - @Override - public String patternName() { - return "queries.x_inv48"; - } - - @Override - public List parameterNames() { - return X_inv48.Match.parameterNames; - } - - @Override - public Object[] toArray() { - return new Object[]{fP}; - } - - @Override - public X_inv48.Match toImmutable() { - return isMutable() ? newMatch(fP) : this; - } - - @Override - public String prettyPrint() { - StringBuilder result = new StringBuilder(); - result.append("\"p\"=" + prettyPrintValue(fP)); - return result.toString(); - } - - @Override - public int hashCode() { - return Objects.hash(fP); - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) { - return false; - } - if ((obj instanceof X_inv48.Match)) { - X_inv48.Match other = (X_inv48.Match) obj; - return Objects.equals(fP, other.fP); - } else { - // this should be infrequent - if (!(obj instanceof IPatternMatch)) { - return false; - } - IPatternMatch otherSig = (IPatternMatch) obj; - return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); - } - } - - @Override - public X_inv48 specification() { - return X_inv48.instance(); - } - - /** - * Returns an empty, mutable match. - * Fields of the mutable match can be filled to create a partial match, usable as matcher input. - * - * @return the empty match. - * - */ - public static X_inv48.Match newEmptyMatch() { - return new Mutable(null); - } - - /** - * Returns a mutable (partial) match. - * Fields of the mutable match can be filled to create a partial match, usable as matcher input. - * - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @return the new, mutable (partial) match object. - * - */ - public static X_inv48.Match newMutableMatch(final Physical_Person pP) { - return new Mutable(pP); - } - - /** - * Returns a new (partial) match. - * This can be used e.g. to call the matcher with a partial match. - *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @return the (partial) match object. - * - */ - public static X_inv48.Match newMatch(final Physical_Person pP) { - return new Immutable(pP); - } - - private static final class Mutable extends X_inv48.Match { - Mutable(final Physical_Person pP) { - super(pP); - } - - @Override - public boolean isMutable() { - return true; - } - } - - private static final class Immutable extends X_inv48.Match { - Immutable(final Physical_Person pP) { - super(pP); - } - - @Override - public boolean isMutable() { - return false; - } - } - } - - /** - * Generated pattern matcher API of the queries.x_inv48 pattern, - * providing pattern-specific query methods. - * - *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, - * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. - * - *

Matches of the pattern will be represented as {@link Match}. - * - *

Original source: - *

-   * pattern x_inv48(p : Physical_Person) {
-   *     Physical_Person.disability_type(p, ::NONE);
-   * }
-   * 
- * - * @see Match - * @see X_inv48 - * - */ - public static class Matcher extends BaseMatcher { - /** - * Initializes the pattern matcher within an existing VIATRA Query engine. - * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. - * - * @param engine the existing VIATRA Query engine in which this matcher will be created. - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * - */ - public static X_inv48.Matcher on(final ViatraQueryEngine engine) { - // check if matcher already exists - Matcher matcher = engine.getExistingMatcher(querySpecification()); - if (matcher == null) { - matcher = (Matcher)engine.getMatcher(querySpecification()); - } - return matcher; - } - - /** - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * @return an initialized matcher - * @noreference This method is for internal matcher initialization by the framework, do not call it manually. - * - */ - public static X_inv48.Matcher create() { - return new Matcher(); - } - - private static final int POSITION_P = 0; - - private static final Logger LOGGER = ViatraQueryLoggingUtil.getLogger(X_inv48.Matcher.class); - - /** - * Initializes the pattern matcher within an existing VIATRA Query engine. - * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. - * - * @param engine the existing VIATRA Query engine in which this matcher will be created. - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * - */ - private Matcher() { - super(querySpecification()); - } - - /** - * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @return matches represented as a Match object. - * - */ - public Collection getAllMatches(final Physical_Person pP) { - return rawStreamAllMatches(new Object[]{pP}).collect(Collectors.toSet()); - } - - /** - * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. - *

- * NOTE: It is important not to modify the source model while the stream is being processed. - * If the match set of the pattern changes during processing, the contents of the stream is undefined. - * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @return a stream of matches represented as a Match object. - * - */ - public Stream streamAllMatches(final Physical_Person pP) { - return rawStreamAllMatches(new Object[]{pP}); - } - - /** - * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. - * Neither determinism nor randomness of selection is guaranteed. - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @return a match represented as a Match object, or null if no match is found. - * - */ - public Optional getOneArbitraryMatch(final Physical_Person pP) { - return rawGetOneArbitraryMatch(new Object[]{pP}); - } - - /** - * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, - * under any possible substitution of the unspecified parameters (if any). - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @return true if the input is a valid (partial) match of the pattern. - * - */ - public boolean hasMatch(final Physical_Person pP) { - return rawHasMatch(new Object[]{pP}); - } - - /** - * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @return the number of pattern matches found. - * - */ - public int countMatches(final Physical_Person pP) { - return rawCountMatches(new Object[]{pP}); - } - - /** - * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. - * Neither determinism nor randomness of selection is guaranteed. - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @param processor the action that will process the selected match. - * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked - * - */ - public boolean forOneArbitraryMatch(final Physical_Person pP, final Consumer processor) { - return rawForOneArbitraryMatch(new Object[]{pP}, processor); - } - - /** - * Returns a new (partial) match. - * This can be used e.g. to call the matcher with a partial match. - *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. - * @param pP the fixed value of pattern parameter p, or null if not bound. - * @return the (partial) match object. - * - */ - public X_inv48.Match newMatch(final Physical_Person pP) { - return X_inv48.Match.newMatch(pP); - } - - /** - * Retrieve the set of values that occur in matches for p. - * @return the Set of all values or empty set if there are no matches - * - */ - protected Stream rawStreamAllValuesOfp(final Object[] parameters) { - return rawStreamAllValues(POSITION_P, parameters).map(Physical_Person.class::cast); - } - - /** - * Retrieve the set of values that occur in matches for p. - * @return the Set of all values or empty set if there are no matches - * - */ - public Set getAllValuesOfp() { - return rawStreamAllValuesOfp(emptyArray()).collect(Collectors.toSet()); - } - - /** - * Retrieve the set of values that occur in matches for p. - * @return the Set of all values or empty set if there are no matches - * - */ - public Stream streamAllValuesOfp() { - return rawStreamAllValuesOfp(emptyArray()); - } - - @Override - protected X_inv48.Match tupleToMatch(final Tuple t) { - try { - return X_inv48.Match.newMatch((Physical_Person) t.get(POSITION_P)); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in tuple not properly typed!",e); - return null; - } - } - - @Override - protected X_inv48.Match arrayToMatch(final Object[] match) { - try { - return X_inv48.Match.newMatch((Physical_Person) match[POSITION_P]); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in array not properly typed!",e); - return null; - } - } - - @Override - protected X_inv48.Match arrayToMatchMutable(final Object[] match) { - try { - return X_inv48.Match.newMutableMatch((Physical_Person) match[POSITION_P]); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in array not properly typed!",e); - return null; - } - } - - /** - * @return the singleton instance of the query specification of this pattern - * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded - * - */ - public static IQuerySpecification querySpecification() { - return X_inv48.instance(); - } - } - - private X_inv48() { - super(GeneratedPQuery.INSTANCE); - } - - /** - * @return the singleton instance of the query specification - * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded - * - */ - public static X_inv48 instance() { - try{ - return LazyHolder.INSTANCE; - } catch (ExceptionInInitializerError err) { - throw processInitializerError(err); - } - } - - @Override - protected X_inv48.Matcher instantiate(final ViatraQueryEngine engine) { - return X_inv48.Matcher.on(engine); - } - - @Override - public X_inv48.Matcher instantiate() { - return X_inv48.Matcher.create(); - } - - @Override - public X_inv48.Match newEmptyMatch() { - return X_inv48.Match.newEmptyMatch(); - } - - @Override - public X_inv48.Match newMatch(final Object... parameters) { - return X_inv48.Match.newMatch((Taxation.Physical_Person) parameters[0]); - } - - /** - * Inner class allowing the singleton instance of {@link X_inv48} to be created - * not at the class load time of the outer class, - * but rather at the first call to {@link X_inv48#instance()}. - * - *

This workaround is required e.g. to support recursion. - * - */ - private static class LazyHolder { - private static final X_inv48 INSTANCE = new X_inv48(); - - /** - * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. - * This initialization order is required to support indirect recursion. - * - *

The static initializer is defined using a helper field to work around limitations of the code generator. - * - */ - private static final Object STATIC_INITIALIZER = ensureInitialized(); - - public static Object ensureInitialized() { - INSTANCE.ensureInitializedInternal(); - return null; - } - } - - private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { - private static final X_inv48.GeneratedPQuery INSTANCE = new GeneratedPQuery(); - - private final PParameter parameter_p = new PParameter("p", "Taxation.Physical_Person", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http:///TaxCard.ecore", "Physical_Person")), PParameterDirection.INOUT); - - private final List parameters = Arrays.asList(parameter_p); - - private GeneratedPQuery() { - super(PVisibility.PUBLIC); - } - - @Override - public String getFullyQualifiedName() { - return "queries.x_inv48"; - } - - @Override - public List getParameterNames() { - return Arrays.asList("p"); - } - - @Override - public List getParameters() { - return parameters; - } - - @Override - public Set doGetContainedBodies() { - setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); - Set bodies = new LinkedHashSet<>(); - { - PBody body = new PBody(this); - PVariable var_p = body.getOrCreateVariableByName("p"); - new TypeConstraint(body, Tuples.flatTupleOf(var_p), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http:///TaxCard.ecore", "Physical_Person"))); - body.setSymbolicParameters(Arrays.asList( - new ExportedParameter(body, var_p, parameter_p) - )); - // Physical_Person.disability_type(p, ::NONE) - PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); - new ConstantValue(body, var__virtual_0_, getEnumLiteral("http:///TaxCard.ecore", "Disability_Types", "NONE").getInstance()); - new TypeConstraint(body, Tuples.flatTupleOf(var_p), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("http:///TaxCard.ecore", "Physical_Person"))); - PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); - new TypeConstraint(body, Tuples.flatTupleOf(var_p, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("http:///TaxCard.ecore", "Physical_Person", "disability_type"))); - new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("http:///TaxCard.ecore", "Disability_Types"))); - new Equality(body, var__virtual_1_, var__virtual_0_); - bodies.add(body); - } - return bodies; - } - } -} diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/queries/SatelliteQueries.vql b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/queries/SatelliteQueries.vql new file mode 100644 index 00000000..57b5933a --- /dev/null +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/queries/SatelliteQueries.vql @@ -0,0 +1,390 @@ +package hu.bme.mit.inf.dslreasoner.domains.satellite.queries + +import "http://www.example.org/satellite" + +@Constraint(severity = "error", key = {Element}, + message = "A communicating element may not have two transmitting communication subsystems.") +pattern communicationLinkDoesNotStartAtContainingElement(Element : CommunicatingElement) { + find transmittingCommSubsystem(Element, Comm1); + find transmittingCommSubsystem(Element, Comm2); + Comm1 != Comm2; +} + +private pattern transmittingCommSubsystem(Element : CommunicatingElement, Comm : CommSubsystem) { + CommunicatingElement.commSubsystem(Element, Comm); + CommSubsystem.target(Comm, _); +} + +@Constraint(severity = "error", key = {Station}, + message = "The ground station network may not have outgoing communication links.") +pattern transmittingGroundStationNetwork(Station : GroundStationNetwork) { + find transmittingCommSubsystem(Station, _); +} + +@Constraint(severity = "error", key = {Station}, + message = "The ground station network may not have UHF communication subsystems.") +pattern roundStationNetworkUHF(Station : GroundStationNetwork) { + CommunicatingElement.commSubsystem(Station, Comm); + UHFCommSubsystem(Comm); +} + +// At least two spacecraft must have the interferometry payload configured + +@Constraint(severity = "error", key = {Mission}, + message = "Interferometry mission needs at least two spacecraft configured with the interferometry payload.") +pattern notEnoughInterferometryPayloads(Mission : InterferometryMission) { + InterferometryMission(Mission); + neg find atLeastTwoInterferometryPayloads(Mission); +} + +private pattern atLeastTwoInterferometryPayloads(Mission : InterferometryMission) { + find spacecraftWithInterferometryPayload(Mission, Spacecraft1); + find spacecraftWithInterferometryPayload(Mission, Spacecraft2); + Spacecraft1 != Spacecraft2; +} + +private pattern spacecraftWithInterferometryPayload(Mission : ConstellationMission, Spacecraft : Spacecraft) { + ConstellationMission.spacecraft(Mission, Spacecraft); + Spacecraft.payload(Spacecraft, Payload); + InterferometryPayload(Payload); +} + +// All spacecraft must have some communication path to the ground station + +//@Constraint(severity = "error", key = {Spacecraft}, +// message = "Spacecraft has no communication path to the ground station.") +//pattern noLinkToGroundStation(Spacecraft : Spacecraft) { +// ConstellationMission.groundStationNetwork(Mission, GroundStation); +// ConstellationMission.spacecraft(Mission, Spacecraft); +// neg find indirectCommunicationLink(Spacecraft, GroundStation); +//} + +//@Constraint(severity = "error", key = {Spacecraft}, message = "UNSAT") +//pattern unsat_linkToGroundStation(Spacecraft : Spacecraft) { +// ConstellationMission.groundStationNetwork(Mission, GroundStation); +// ConstellationMission.spacecraft(Mission, Spacecraft); +// find indirectCommunicationLink(Spacecraft, GroundStation); +//} + +//@Constraint(severity = "error", key = {Mission}, message = "UNSAT") +//pattern unsat_linkToGroundStation(Mission : InterferometryMission) { +// InterferometryMission(Mission); +// neg find noLinkToGroundStation(_); +//} + +//@Constraint(severity = "error", key = {Spacecraft}, +// message = "Spacecraft has no potential communication path to the ground station.") +//pattern noPotentialLinkToGroundStation(Spacecraft : Spacecraft) { +// ConstellationMission.groundStationNetwork(Mission, GroundStation); +// ConstellationMission.spacecraft(Mission, Spacecraft); +// neg find indirectLinkAllowed(Spacecraft, GroundStation); +//} + +//private pattern indirectLinkAllowed(From : Spacecraft, To : CommunicatingElement) { +// find linkAllowed+(From, To); +//} + +//private pattern linkAllowed(From : Spacecraft, To : CommunicatingElement) { +// find matchingAntenna(From, To); +// neg find cubeSat3U(From); +//} or { +// find matchingAntenna(From, To); +// CubeSat3U(From); +//} or { +// find matchingAntenna(From, To); +// CubeSat3U(From); +// GroundStationNetwork(To); +//} + +//private pattern matchingAntenna(From : Spacecraft, To : CommunicatingElement) { +// CommunicatingElement.commSubsystem(From, FromSys); +// CommunicatingElement.commSubsystem(To, ToSys); +// find matchingCommSubsystem(FromSys, ToSys); +//} + +private pattern matchingCommSubsystem(From : CommSubsystem, To : CommSubsystem) { + UHFCommSubsystem(From); + UHFCommSubsystem(To); +} or { + XCommSubsystem(From); + XCommSubsystem(To); +} or { + KaCommSubsystem(From); + KaCommSubsystem(To); +} + +//private pattern cubeSat3U(Sat : CubeSat3U) { +// CubeSat3U(Sat); +//} + +// No communication loops may exist +// No spacecraft may directly communicate with itself + +@Constraint(severity = "error", key = {Element}, + message = "Communication loop.") +pattern communicationLoop(Element : CommunicatingElement) { + find indirectCommunicationLink(Element, Element); +} + +private pattern indirectCommunicationLink(Source : CommunicatingElement, Target : CommunicatingElement) { + find directCommunicationLink+(Source, Target); +} + +private pattern directCommunicationLink(Source : CommunicatingElement, Target : CommunicatingElement) { + CommSubsystem.target(SourceSubsystem, TargetSubsystem); + CommunicatingElement.commSubsystem(Source, SourceSubsystem); + CommunicatingElement.commSubsystem(Target, TargetSubsystem); +} + +// Source and target communication systems must be compatible. + +@Constraint(severity = "error", key = {SourceSubsystem}, + message = "Two ends of a communication link must use the same band.") +pattern incompatibleSourceAndTargetBand(SourceSubsystem : CommSubsystem) { + CommSubsystem.target(SourceSubsystem, TargetSubsystem); + neg find matchingCommSubsystem(SourceSubsystem, TargetSubsystem); +} + +// 3U CubeSats are assumed to only be able to downlink to Earth using an X-band trasmitter, +// but cross-link using UHF + +@Constraint(severity = "error", key = {Sat}, + message = "3U CubeSats can only cross-link using UHF.") +pattern threeUCubeSatWithNonUhfCrossLink(Sat : CubeSat3U) { + CommunicatingElement.commSubsystem(Sat, SourceComm); + neg find commSubsystemBandUhf(SourceComm); + CommSubsystem.target(SourceComm, TargetComm); + CommunicatingElement.commSubsystem(Target, TargetComm); + neg find groundStationNetwork(Target); +} + +private pattern commSubsystemBandUhf(Comm : UHFCommSubsystem) { + UHFCommSubsystem(Comm); +} + +private pattern groundStationNetwork(Network : GroundStationNetwork) { + GroundStationNetwork(Network); +} + +// Only a Small Satellite can be configured with a Ka-band communication system + +@Constraint(severity = "error", key = {Spacecraft}, + message = "Only a Small Satellite can be configured with a Ka-band communication system.") +pattern cubeSatWithKaAntenna(Spacecraft : Spacecraft) { + CommunicatingElement.commSubsystem(Spacecraft, Comm); + KaCommSubsystem(Comm); + neg find smallSat(Spacecraft); +} + +pattern smallSat(Sat : SmallSat) { + SmallSat(Sat); +} + +@Constraint(severity = "error", key = {c1,c2}, message = "error") +pattern differentFrequency(c1 : CommSubsystem, c2 : CommSubsystem) { + CommSubsystem.target(c1,c2); + CommSubsystem.frequency(c1,f1); + CommSubsystem.frequency(c2,f2); + check(f1!=f2); +} + +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooHighFrequencyForUHF(s : UHFCommSubsystem) { + UHFCommSubsystem(s); + CommSubsystem.frequency(s,f); + check(f>1000);//1GHz +} +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooLowFrequencyForUHF(s : UHFCommSubsystem) { + UHFCommSubsystem(s); + CommSubsystem.frequency(s,f); + check(f<300);//300MHz +} +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooHighFrequencyForKaComm(s : KaCommSubsystem) { + KaCommSubsystem(s); + CommSubsystem.frequency(s,f); + check(f>40000);//40GHz +} +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooLowFrequencyForKaComm(s : KaCommSubsystem) { + KaCommSubsystem(s); + CommSubsystem.frequency(s,f); + check(f<26500);//26.5GHz +} +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooHighFrequencyForXComm(s : XCommSubsystem) { + XCommSubsystem(s); + CommSubsystem.frequency(s,f); + check(f>12000);//12GHz +} +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooLowFrequencyForXComm(s : XCommSubsystem) { + XCommSubsystem(s); + CommSubsystem.frequency(s,f); + check(f<8000);//8GHz +} +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooHighPathLengthForSatelite(s:CommSubsystem) { + CommSubsystem.pathLength(s,l); + CommSubsystem.target(s,ts); + Spacecraft.commSubsystem(_,ts); + check(l>250);//250km +} +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooLowPathLengthForSatelite(s:CommSubsystem) { + CommSubsystem.pathLength(s,l); + CommSubsystem.target(s,ts); + Spacecraft.commSubsystem(_,ts); + check(l<150);//150km +} +@Constraint(severity = "error", key = {s,s}, message = "error") +pattern tooLowPathLengthForGroundStation(s:CommSubsystem) { + CommSubsystem.pathLength(s,l); + CommSubsystem.target(s,ts); + GroundStationNetwork.commSubsystem(_,ts); + check(l!=385000);//385.000km +} +//// +//// Metrics +//// +// +//// Coverage +// +//pattern coverageMetric(Coverage : java Double) { +// Coverage == sum find missionCoverage(_, #_); +//} +// +//private pattern missionCoverage(Mission : InterferometryMission, Coverage : java Double) { +// InterferometryMission.observationTime(Mission, ObservationTime); +// ObserverCount == count find spacecraftWithInterferometryPayload(Mission, _); +// Coverage == eval(Math.pow(1 - 2.0 / ObserverCount, 1 + 9 * (1.0 / ObservationTime)) + 0.05 * ObservationTime / 3); +//} +// +//// Time +// +//pattern timeMetric(Time : java Double) { +// Time == sum find missionTime(_, #_); +//} +// +//private pattern missionTime(Mission : InterferometryMission, Time : java Double) { +// InterferometryMission.observationTime(Mission, ObservationTime); +// TrasmitTime == sum find transmitTime(Mission, _, #_); +// Time == eval(TrasmitTime + 60.0 * ObservationTime); +//} +// +//private pattern transmitTime(Mission : InterferometryMission, Spacecraft : Spacecraft, TransmitTime : java Double) { +// ConstellationMission.spacecraft(Mission, Spacecraft); +// find scienceData(Spacecraft, ScienceData); +// IncomingData == sum find incomingData(Spacecraft, _, #_); +// find transmitRate(Spacecraft, TransmitRate); +// TransmitTime == eval((ScienceData + IncomingData) / (7.5 * TransmitRate)); +//} +// +//private pattern incomingData(Spacecraft : Spacecraft, Source : Spacecraft, Data : java Double) { +// find indirectCommunicationLink(Source, Spacecraft); +// find scienceData(Source, Data); +//} +// +//private pattern scienceData(Spacecraft : Spacecraft, Data : java Double) { +// ConstellationMission.spacecraft(Mission, Spacecraft); +// InterferometryMission.observationTime(Mission, ObservationTime); +// Data == eval(12.0 * ObservationTime); +//} +// +//private pattern transmitRate(Spacecraft : Spacecraft, TransmitRate : java Double) { +// find spacecraftUplink(Spacecraft, Comm, Target); +// UHFCommSubsystem(Comm); +// Spacecraft(Target); +// TransmitRate == 5.0; +//} or { +// find spacecraftUplink(Spacecraft, Comm, Target); +// XCommSubsystem(Comm); +// Spacecraft(Target); +// TransmitRate == 1.6; +//} or { +// find spacecraftUplink(Spacecraft, Comm, Target); +// XCommSubsystem(Comm); +// GroundStationNetwork(Target); +// TransmitRate == 0.7; +//} or { +// find spacecraftUplink(Spacecraft, Comm, Target); +// KaCommSubsystem(Comm); +// Spacecraft(Target); +// TransmitRate == 220.0; +//} or { +// find spacecraftUplink(Spacecraft, Comm, Target); +// KaCommSubsystem(Comm); +// GroundStationNetwork(Target); +// TransmitRate == 80.0; +//} +// +//private pattern spacecraftUplink(Spacecraft : Spacecraft, TargetSubsystem : CommSubsystem, Target : CommunicatingElement) { +// CommunicatingElement.commSubsystem.target(Spacecraft, TargetSubsystem); +// CommunicatingElement.commSubsystem(Target, TargetSubsystem); +//} +// +//// Cost +// +//pattern costMetric(Cost : java Double) { +// Cost == sum find missionCost(_, #_); +//} +// +//private pattern missionCost(Mission : InterferometryMission, Cost : java Double) { +// InterferometryMission.observationTime(Mission, ObservationTime); +// SpacecraftCost == sum find spacecraftCost(Mission, _, #_); +// Cost == eval(SpacecraftCost + 100000.0 * ObservationTime); +//} +// +//private pattern spacecraftCost(Mission : InterferometryMission, Spacecraft : Spacecraft, Cost : java Double) { +// ConstellationMission.spacecraft(Mission, Spacecraft); +// find spacecraftOfKindCount(Spacecraft, KindCount); +// find basePrice(Spacecraft, BasePrice); +// find interferometryPayloadCost(Spacecraft, InterferometryPayloadCost); +// find additionalCommSubsystemCost(Spacecraft, AdditionalCommSubsystemCost); +// Cost == eval(BasePrice * Math.pow(KindCount, -0.25) + InterferometryPayloadCost + AdditionalCommSubsystemCost); +//} +// +//private pattern spacecraftOfKindCount(Sat : Spacecraft, Count : java Integer) { +// CubeSat3U(Sat); +// Count == count find cubeSat3U(_); +//} or { +// CubeSat6U(Sat); +// Count == count find cubeSat6U(_); +//} or { +// SmallSat(Sat); +// Count == count find smallSat(_); +//} +// +//private pattern basePrice(Spacecraft : Spacecraft, BasePrice : java Double) { +// CubeSat3U(Spacecraft); +// BasePrice == 250000.0; +//} or { +// CubeSat6U(Spacecraft); +// BasePrice == 750000.0; +//} or { +// SmallSat(Spacecraft); +// BasePrice == 3000000.0; +//} +// +//private pattern interferometryPayloadCost(Spacecraft : Spacecraft, Cost : java Double) { +// find spacecraftWithInterferometryPayload(_, Spacecraft); +// Cost == 50000.0; +//} or { +// neg find spacecraftWithInterferometryPayload(_, Spacecraft); +// Cost == 0.0; +//} +// +//private pattern additionalCommSubsystemCost(Spacecraft : Spacecraft, Cost : java Double) { +// find spacecraftWithTwoCommSubsystems(Spacecraft); +// Cost == 100000.0; +//} or { +// neg find spacecraftWithTwoCommSubsystems(Spacecraft); +// Cost == 0.0; +//} +// +//private pattern spacecraftWithTwoCommSubsystems(Spacecraft : Spacecraft) { +// Spacecraft.commSubsystem(Spacecraft, Subsystem1); +// Spacecraft.commSubsystem(Spacecraft, Subsystem2); +// Subsystem1 != Subsystem2; +//} diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/queries/case_study_A.vql b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/queries/case_study_A.vql index 01cdf372..d879fd7c 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/queries/case_study_A.vql +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/queries/case_study_A.vql @@ -1,5 +1,5 @@ package queries - + import "http:///TaxCard.ecore" //AttributeRemoved -> DF diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/run/GenerateFromConfig.xtend b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/run/GenerateFromConfig.xtend index bd77634f..5cda1e16 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/run/GenerateFromConfig.xtend +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/src/run/GenerateFromConfig.xtend @@ -53,10 +53,10 @@ class GenerateFromConfig { static val SIZE_MUL = 1 static val SIZE_INC = 5 - static var REPS = 1 + static var REPS = 5 static val RUNTIME = 2100 - static val DOMAIN = "Taxation" // "FamilyTree", "Taxation" + static val DOMAIN = "Satellite" // "FamilyTree", "Taxation", "Satellite" static val QUERIES = true static val INITIAL = true static val INDIV_WRT = false diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.GenerateFromConfig.xtendbin b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.GenerateFromConfig.xtendbin index 87d1cc1e..9a7cc0d6 100644 Binary files a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.GenerateFromConfig.xtendbin and b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.GenerateFromConfig.xtendbin differ diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.GeneratePledgeModels.xtendbin b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.GeneratePledgeModels.xtendbin index e7e5d9f0..526b322a 100644 Binary files a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.GeneratePledgeModels.xtendbin and b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.GeneratePledgeModels.xtendbin differ diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.gitignore deleted file mode 100644 index 5f2a65d9..00000000 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -/.GenerateScenarios.java._trace -/.checkQueries.java._trace -/.RunGenerator.xtendbin -/GenerateScenarios.java -/.GenerateScenarios.xtendbin -/.GeneratePledgeModels.java._trace -/.GeneratePledgeModels.xtendbin -/GeneratePledgeModels.java -/.UML2TGF.java._trace -/.GenerateFromConfig.java._trace diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/GenerateFromConfig.java b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/GenerateFromConfig.java index 35f173be..5410113e 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/GenerateFromConfig.java +++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/xtend-gen/run/GenerateFromConfig.java @@ -47,11 +47,11 @@ public class GenerateFromConfig { private static final int SIZE_INC = 5; - private static int REPS = 1; + private static int REPS = 5; private static final int RUNTIME = 2100; - private static final String DOMAIN = "Taxation"; + private static final String DOMAIN = "Satellite"; private static final boolean QUERIES = true; -- cgit v1.2.3-54-g00ecf