/** * Generated from platform:/resource/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/queries/CpsQueries.vql */ package hu.bme.mit.inf.dslreasoner.domains.cps.queries; import hu.bme.mit.inf.dslreasoner.domains.cps.ApplicationInstance; import hu.bme.mit.inf.dslreasoner.domains.cps.HostInstance; import hu.bme.mit.inf.dslreasoner.domains.cps.queries.internal.AvailableHdd; import hu.bme.mit.inf.dslreasoner.domains.cps.queries.internal.AvailableMemory; import hu.bme.mit.inf.dslreasoner.domains.cps.queries.internal.UnallocatedAppInstance; import java.util.Arrays; import java.util.Collection; import java.util.Collections; 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.IExpressionEvaluator; import org.eclipse.viatra.query.runtime.matchers.psystem.IValueProvider; 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.basicdeferred.ExpressionEvaluation; import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; 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:
* 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 ApplicationInstance fApp;
private HostInstance fHost;
private static List The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
* @param pApp the fixed value of pattern parameter App, or null if not bound.
* @param pHost the fixed value of pattern parameter Host, or null if not bound.
* @return the (partial) match object.
*
*/
public static Allocate.Match newMatch(final ApplicationInstance pApp, final HostInstance pHost) {
return new Immutable(pApp, pHost);
}
private static final class Mutable extends Allocate.Match {
Mutable(final ApplicationInstance pApp, final HostInstance pHost) {
super(pApp, pHost);
}
@Override
public boolean isMutable() {
return true;
}
}
private static final class Immutable extends Allocate.Match {
Immutable(final ApplicationInstance pApp, final HostInstance pHost) {
super(pApp, pHost);
}
@Override
public boolean isMutable() {
return false;
}
}
}
/**
* Generated pattern matcher API of the hu.bme.mit.inf.dslreasoner.domains.cps.queries.allocate 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:
* The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
* @param pApp the fixed value of pattern parameter App, or null if not bound.
* @param pHost the fixed value of pattern parameter Host, or null if not bound.
* @return the (partial) match object.
*
*/
public Allocate.Match newMatch(final ApplicationInstance pApp, final HostInstance pHost) {
return Allocate.Match.newMatch(pApp, pHost);
}
/**
* Retrieve the set of values that occur in matches for App.
* @return the Set of all values or empty set if there are no matches
*
*/
protected Stream
*
* @see Matcher
* @see Match
*
*/
@SuppressWarnings("all")
public final class Allocate extends BaseGeneratedEMFQuerySpecification
* //
* // Transformation rule preconditions for rule-based DSE
* //
*
* pattern allocate(App : ApplicationInstance, Host : HostInstance) {
* ApplicationInstance.type.requirements(App, Req);
* ResourceRequirement.hostType.instances(Req, Host);
* find unallocatedAppInstance(App);
* find availableMemory(Host, AvailableMem);
* find availableHdd(Host, AvailableHdd);
* ResourceRequirement.requiredMemory(Req, RequiredMem);
* ResourceRequirement.requiredHdd(Req, RequiredHdd);
* check(AvailableMem {@literal >}= RequiredMem);
* check(AvailableHdd {@literal >}= RequiredHdd);
* neg ApplicationInstance.requirement.instances.allocatedTo(App, Host);
* }
*
*
* @see Match
* @see Allocate
*
*/
public static class Matcher extends BaseMatcher
* //
* // Transformation rule preconditions for rule-based DSE
* //
*
* pattern allocate(App : ApplicationInstance, Host : HostInstance) {
* ApplicationInstance.type.requirements(App, Req);
* ResourceRequirement.hostType.instances(Req, Host);
* find unallocatedAppInstance(App);
* find availableMemory(Host, AvailableMem);
* find availableHdd(Host, AvailableHdd);
* ResourceRequirement.requiredMemory(Req, RequiredMem);
* ResourceRequirement.requiredHdd(Req, RequiredHdd);
* check(AvailableMem {@literal >}= RequiredMem);
* check(AvailableHdd {@literal >}= RequiredHdd);
* neg ApplicationInstance.requirement.instances.allocatedTo(App, Host);
* }
*
This workaround is required e.g. to support recursion. * */ private static class LazyHolder { private static final Allocate INSTANCE = new Allocate(); /** * 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 Allocate.GeneratedPQuery INSTANCE = new GeneratedPQuery();
private final PParameter parameter_App = new PParameter("App", "hu.bme.mit.inf.dslreasoner.domains.cps.ApplicationInstance", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.example.org/cps", "ApplicationInstance")), PParameterDirection.INOUT);
private final PParameter parameter_Host = new PParameter("Host", "hu.bme.mit.inf.dslreasoner.domains.cps.HostInstance", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("http://www.example.org/cps", "HostInstance")), PParameterDirection.INOUT);
private final List