--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.modeling.mapping;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.layer0.utils.binaryPredicates.CompositePredicate;\r
+import org.simantics.layer0.utils.binaryPredicates.IBinaryPredicate;\r
+import org.simantics.layer0.utils.binaryPredicates.Relation;\r
+import org.simantics.layer0.utils.predicates.Conjunction;\r
+import org.simantics.layer0.utils.predicates.Disjunction;\r
+import org.simantics.layer0.utils.predicates.IUnaryPredicate;\r
+import org.simantics.layer0.utils.predicates.Negation;\r
+import org.simantics.layer0.utils.predicates.Type;\r
+import org.simantics.layer0.utils.triggers.Trigger;\r
+import org.simantics.mapping.constraint.instructions.AndInstruction;\r
+import org.simantics.mapping.constraint.instructions.BinaryPredicateInstruction;\r
+import org.simantics.mapping.constraint.instructions.BinaryPredicateObjectQuery;\r
+import org.simantics.mapping.constraint.instructions.BinaryPredicateSubjectQuery;\r
+import org.simantics.mapping.constraint.instructions.ExistsInstruction;\r
+import org.simantics.mapping.constraint.instructions.IInstruction;\r
+import org.simantics.mapping.constraint.instructions.NotInstruction;\r
+import org.simantics.mapping.constraint.instructions.OrInstruction;\r
+import org.simantics.mapping.constraint.instructions.TripletInstruction;\r
+import org.simantics.mapping.constraint.instructions.TripletObjectQuery;\r
+import org.simantics.mapping.constraint.instructions.TripletPredicateObjectQuery;\r
+import org.simantics.mapping.constraint.instructions.TripletSubjectPredicateQuery;\r
+import org.simantics.mapping.constraint.instructions.TypedBracketInstruction;\r
+import org.simantics.mapping.constraint.instructions.TypedBracketInstruction.CreationInstruction;\r
+import org.simantics.mapping.constraint.instructions.UnaryPredicateInstruction;\r
+import org.simantics.mapping.rule.instructions.AndRuleInstruction;\r
+import org.simantics.mapping.rule.instructions.ClaimRuleInstruction;\r
+import org.simantics.mapping.rule.instructions.DenyRuleInstruction;\r
+import org.simantics.mapping.rule.instructions.IRuleInstruction;\r
+import org.simantics.mapping.rule.instructions.IfRuleInstruction;\r
+import org.simantics.mapping.rule.instructions.PrintRuleInstruction;\r
+import org.simantics.mapping.rule.instructions.QueryRuleInstruction;\r
+import org.simantics.mapping.rule.instructions.UnlessRuleInstruction;\r
+\r
+public abstract class MappingBase extends Trigger {\r
+ \r
+ public static IInstruction bf(IBinaryPredicate predicate, int variable0, int variable1) {\r
+ return new BinaryPredicateObjectQuery(variable0, variable1, predicate);\r
+ }\r
+ \r
+ public static IInstruction fb(IBinaryPredicate predicate, int variable0, int variable1) {\r
+ return new BinaryPredicateSubjectQuery(variable0, variable1, predicate);\r
+ }\r
+ \r
+ public static IInstruction bf(Resource relation, int variable0, int variable1) {\r
+ return bf(new Relation(relation), variable0, variable1);\r
+ }\r
+ \r
+ public static IInstruction fb(Resource relation, int variable0, int variable1) {\r
+ return fb(new Relation(relation), variable0, variable1);\r
+ }\r
+ \r
+ public static IInstruction bb(IBinaryPredicate predicate, int variable0, int variable1) {\r
+ return new BinaryPredicateInstruction(variable0, variable1, predicate);\r
+ }\r
+ \r
+ public static IInstruction bb(Resource relation, int variable0, int variable1) {\r
+ return bb(new Relation(relation), variable0, variable1);\r
+ }\r
+ \r
+ public static IInstruction b(IUnaryPredicate predicate, int variable0) {\r
+ return new UnaryPredicateInstruction(variable0, predicate);\r
+ }\r
+ \r
+ public static IInstruction b(Resource type, int variable0) {\r
+ return b(new Type(type), variable0);\r
+ }\r
+ \r
+ public static IInstruction statement_ffb(int variable0, int variable1, int variable2) {\r
+ return new TripletSubjectPredicateQuery(variable0, variable1, variable2);\r
+ }\r
+ \r
+ public static IInstruction statement_ffb(int variable0, int variable1, int variable2, Resource baseRelation) {\r
+ return new TripletSubjectPredicateQuery(variable0, variable1, variable2, baseRelation);\r
+ }\r
+ \r
+ public static IInstruction statement_bff(int variable0, int variable1, int variable2) {\r
+ return new TripletPredicateObjectQuery(variable0, variable1, variable2);\r
+ }\r
+ \r
+ public static IInstruction statement_bbf(int variable0, int variable1, int variable2) {\r
+ return new TripletObjectQuery(variable0, variable1, variable2);\r
+ }\r
+ \r
+ public static IInstruction statement_bff(int variable0, int variable1, int variable2, Resource baseRelation) {\r
+ return new TripletPredicateObjectQuery(variable0, variable1, variable2, baseRelation);\r
+ }\r
+ \r
+ public static IInstruction statement(int variable0, int variable1, int variable2) {\r
+ return new TripletInstruction(variable0, variable1, variable2);\r
+ }\r
+ \r
+ public static IInstruction exists(IInstruction constraint, int ... variables) {\r
+ return new ExistsInstruction(constraint, variables);\r
+ }\r
+ \r
+ public static IInstruction exists(int ... variables) {\r
+ return new ExistsInstruction(and(), variables);\r
+ }\r
+ \r
+ public static IInstruction exists(IInstruction constraint, CreationInstruction ... instrs) {\r
+ return new TypedBracketInstruction(constraint, instrs);\r
+ }\r
+ \r
+ public static IInstruction and() {\r
+ return new AndInstruction();\r
+ }\r
+\r
+ public static IUnaryPredicate and(IUnaryPredicate ... predicates) {\r
+ return new Conjunction(predicates);\r
+ } \r
+\r
+ public static IUnaryPredicate or(IUnaryPredicate ... predicates) {\r
+ return new Disjunction(predicates);\r
+ } \r
+\r
+ public static IUnaryPredicate not(IUnaryPredicate predicate) {\r
+ return new Negation(predicate);\r
+ } \r
+ \r
+ public static IUnaryPredicate implies(IUnaryPredicate from, IUnaryPredicate to) {\r
+ return or(not(from), to);\r
+ }\r
+\r
+ public static IInstruction and(IInstruction ... constraints) {\r
+ return new AndInstruction(constraints);\r
+ }\r
+ \r
+ public static IInstruction or(IInstruction ... constraints) {\r
+ return new OrInstruction(constraints);\r
+ } \r
+ \r
+ public static IInstruction not(IInstruction constraint) {\r
+ return new NotInstruction(constraint);\r
+ }\r
+ \r
+ public static IRuleInstruction and(IRuleInstruction ... rules) {\r
+ return new AndRuleInstruction(rules);\r
+ }\r
+\r
+ public static IRuleInstruction claim(IInstruction constraint) {\r
+ return new ClaimRuleInstruction(constraint);\r
+ }\r
+ \r
+ public static IRuleInstruction claim(IInstruction ... constraints) {\r
+ return claim(and(constraints));\r
+ }\r
+ \r
+ public static IRuleInstruction claim(IInstruction constraint, IRuleInstruction continuation) {\r
+ return new ClaimRuleInstruction(constraint, continuation);\r
+ }\r
+ \r
+ public static IRuleInstruction deny(IInstruction constraint) {\r
+ return new DenyRuleInstruction(constraint);\r
+ }\r
+ \r
+ public static IRuleInstruction if_(IInstruction condition, IRuleInstruction then) {\r
+ return new IfRuleInstruction(condition, then);\r
+ }\r
+ \r
+ public static IRuleInstruction if_(IInstruction condition, IRuleInstruction then, IRuleInstruction else_) {\r
+ return new IfRuleInstruction(condition, then, else_);\r
+ }\r
+\r
+ public static IRuleInstruction unless(IInstruction condition, IRuleInstruction then) {\r
+ return new UnlessRuleInstruction(condition, then);\r
+ }\r
+ \r
+ public static IRuleInstruction query(IRuleInstruction rule) {\r
+ return new QueryRuleInstruction(rule);\r
+ }\r
+ \r
+ public static IRuleInstruction print(String text) {\r
+ return new PrintRuleInstruction(text);\r
+ }\r
+ \r
+ public static IBinaryPredicate compose(Resource a, Resource b) {\r
+ return new CompositePredicate(new Relation(a), new Relation(b)); \r
+ }\r
+ \r
+ public static IBinaryPredicate compose(Resource a, IBinaryPredicate b) {\r
+ return new CompositePredicate(new Relation(a), b); \r
+ }\r
+ \r
+ public static IBinaryPredicate compose(IBinaryPredicate a, Resource b) {\r
+ return new CompositePredicate(a, new Relation(b)); \r
+ }\r
+ \r
+ public static IBinaryPredicate compose(Resource a, Resource b, Resource c) {\r
+ return compose(compose(a, b), c);\r
+ }\r
+}\r