]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/MappingBase.java
Sync git svn branch with SVN repository r33158.
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / mapping / MappingBase.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.modeling.mapping;\r
13 \r
14 import org.simantics.db.Resource;\r
15 import org.simantics.layer0.utils.binaryPredicates.CompositePredicate;\r
16 import org.simantics.layer0.utils.binaryPredicates.IBinaryPredicate;\r
17 import org.simantics.layer0.utils.binaryPredicates.Relation;\r
18 import org.simantics.layer0.utils.predicates.Conjunction;\r
19 import org.simantics.layer0.utils.predicates.Disjunction;\r
20 import org.simantics.layer0.utils.predicates.IUnaryPredicate;\r
21 import org.simantics.layer0.utils.predicates.Negation;\r
22 import org.simantics.layer0.utils.predicates.Type;\r
23 import org.simantics.layer0.utils.triggers.Trigger;\r
24 import org.simantics.mapping.constraint.instructions.AndInstruction;\r
25 import org.simantics.mapping.constraint.instructions.BinaryPredicateInstruction;\r
26 import org.simantics.mapping.constraint.instructions.BinaryPredicateObjectQuery;\r
27 import org.simantics.mapping.constraint.instructions.BinaryPredicateSubjectQuery;\r
28 import org.simantics.mapping.constraint.instructions.ExistsInstruction;\r
29 import org.simantics.mapping.constraint.instructions.IInstruction;\r
30 import org.simantics.mapping.constraint.instructions.NotInstruction;\r
31 import org.simantics.mapping.constraint.instructions.OrInstruction;\r
32 import org.simantics.mapping.constraint.instructions.TripletInstruction;\r
33 import org.simantics.mapping.constraint.instructions.TripletObjectQuery;\r
34 import org.simantics.mapping.constraint.instructions.TripletPredicateObjectQuery;\r
35 import org.simantics.mapping.constraint.instructions.TripletSubjectPredicateQuery;\r
36 import org.simantics.mapping.constraint.instructions.TypedBracketInstruction;\r
37 import org.simantics.mapping.constraint.instructions.TypedBracketInstruction.CreationInstruction;\r
38 import org.simantics.mapping.constraint.instructions.UnaryPredicateInstruction;\r
39 import org.simantics.mapping.rule.instructions.AndRuleInstruction;\r
40 import org.simantics.mapping.rule.instructions.ClaimRuleInstruction;\r
41 import org.simantics.mapping.rule.instructions.DenyRuleInstruction;\r
42 import org.simantics.mapping.rule.instructions.IRuleInstruction;\r
43 import org.simantics.mapping.rule.instructions.IfRuleInstruction;\r
44 import org.simantics.mapping.rule.instructions.PrintRuleInstruction;\r
45 import org.simantics.mapping.rule.instructions.QueryRuleInstruction;\r
46 import org.simantics.mapping.rule.instructions.UnlessRuleInstruction;\r
47 \r
48 public abstract class MappingBase extends Trigger {\r
49         \r
50         public static IInstruction bf(IBinaryPredicate predicate, int variable0, int variable1) {\r
51                 return new BinaryPredicateObjectQuery(variable0, variable1, predicate);\r
52         }\r
53         \r
54         public static IInstruction fb(IBinaryPredicate predicate, int variable0, int variable1) {\r
55         return new BinaryPredicateSubjectQuery(variable0, variable1, predicate);\r
56     }\r
57         \r
58         public static IInstruction bf(Resource relation, int variable0, int variable1) {\r
59                 return bf(new Relation(relation), variable0, variable1);\r
60         }\r
61         \r
62         public static IInstruction fb(Resource relation, int variable0, int variable1) {\r
63         return fb(new Relation(relation), variable0, variable1);\r
64     }\r
65         \r
66         public static IInstruction bb(IBinaryPredicate predicate, int variable0, int variable1) {\r
67                 return new BinaryPredicateInstruction(variable0, variable1, predicate);\r
68         }\r
69         \r
70         public static IInstruction bb(Resource relation, int variable0, int variable1) {\r
71                 return bb(new Relation(relation), variable0, variable1);\r
72         }\r
73         \r
74         public static IInstruction b(IUnaryPredicate predicate, int variable0) {\r
75                 return new UnaryPredicateInstruction(variable0, predicate);\r
76         }\r
77         \r
78         public static IInstruction b(Resource type, int variable0) {\r
79                 return b(new Type(type), variable0);\r
80         }\r
81         \r
82         public static IInstruction statement_ffb(int variable0, int variable1, int variable2) {\r
83                 return new TripletSubjectPredicateQuery(variable0, variable1, variable2);\r
84         }\r
85         \r
86         public static IInstruction statement_ffb(int variable0, int variable1, int variable2, Resource baseRelation) {\r
87                 return new TripletSubjectPredicateQuery(variable0, variable1, variable2, baseRelation);\r
88         }\r
89         \r
90         public static IInstruction statement_bff(int variable0, int variable1, int variable2) {\r
91                 return new TripletPredicateObjectQuery(variable0, variable1, variable2);\r
92         }\r
93         \r
94         public static IInstruction statement_bbf(int variable0, int variable1, int variable2) {\r
95                 return new TripletObjectQuery(variable0, variable1, variable2);\r
96         }\r
97         \r
98         public static IInstruction statement_bff(int variable0, int variable1, int variable2, Resource baseRelation) {\r
99                 return new TripletPredicateObjectQuery(variable0, variable1, variable2, baseRelation);\r
100         }\r
101         \r
102         public static IInstruction statement(int variable0, int variable1, int variable2) {\r
103                 return new TripletInstruction(variable0, variable1, variable2);\r
104         }\r
105         \r
106         public static IInstruction exists(IInstruction constraint, int ... variables) {\r
107                 return new ExistsInstruction(constraint, variables);\r
108         }\r
109         \r
110         public static IInstruction exists(int ... variables) {\r
111                 return new ExistsInstruction(and(), variables);\r
112         }\r
113         \r
114         public static IInstruction exists(IInstruction constraint, CreationInstruction ... instrs) {\r
115                 return new TypedBracketInstruction(constraint, instrs);\r
116         }\r
117         \r
118         public static IInstruction and() {\r
119                 return new AndInstruction();\r
120         }\r
121 \r
122         public static IUnaryPredicate and(IUnaryPredicate ... predicates) {\r
123         return new Conjunction(predicates);\r
124     }   \r
125 \r
126         public static IUnaryPredicate or(IUnaryPredicate ... predicates) {\r
127         return new Disjunction(predicates);\r
128     }   \r
129 \r
130         public static IUnaryPredicate not(IUnaryPredicate predicate) {\r
131         return new Negation(predicate);\r
132     }   \r
133         \r
134         public static IUnaryPredicate implies(IUnaryPredicate from, IUnaryPredicate to) {\r
135                 return or(not(from), to);\r
136         }\r
137 \r
138         public static IInstruction and(IInstruction ... constraints) {\r
139                 return new AndInstruction(constraints);\r
140         }\r
141         \r
142         public static IInstruction or(IInstruction ... constraints) {\r
143         return new OrInstruction(constraints);\r
144     }   \r
145         \r
146         public static IInstruction not(IInstruction constraint) {\r
147         return new NotInstruction(constraint);\r
148     }\r
149         \r
150         public static IRuleInstruction and(IRuleInstruction ... rules) {\r
151                 return new AndRuleInstruction(rules);\r
152         }\r
153 \r
154         public static IRuleInstruction claim(IInstruction constraint) {\r
155                 return new ClaimRuleInstruction(constraint);\r
156         }\r
157         \r
158         public static IRuleInstruction claim(IInstruction ... constraints) {\r
159                 return claim(and(constraints));\r
160         }\r
161         \r
162         public static IRuleInstruction claim(IInstruction constraint, IRuleInstruction continuation) {\r
163                 return new ClaimRuleInstruction(constraint, continuation);\r
164         }\r
165         \r
166         public static IRuleInstruction deny(IInstruction constraint) {\r
167                 return new DenyRuleInstruction(constraint);\r
168         }\r
169         \r
170         public static IRuleInstruction if_(IInstruction condition, IRuleInstruction then) {\r
171                 return new IfRuleInstruction(condition, then);\r
172         }\r
173         \r
174         public static IRuleInstruction if_(IInstruction condition, IRuleInstruction then, IRuleInstruction else_) {\r
175                 return new IfRuleInstruction(condition, then, else_);\r
176         }\r
177 \r
178         public static IRuleInstruction unless(IInstruction condition, IRuleInstruction then) {\r
179                 return new UnlessRuleInstruction(condition, then);\r
180         }\r
181         \r
182         public static IRuleInstruction query(IRuleInstruction rule) {\r
183                 return new QueryRuleInstruction(rule);\r
184         }\r
185         \r
186         public static IRuleInstruction print(String text) {\r
187                 return new PrintRuleInstruction(text);\r
188         }\r
189         \r
190         public static IBinaryPredicate compose(Resource a, Resource b) {\r
191                 return new CompositePredicate(new Relation(a), new Relation(b)); \r
192         }\r
193         \r
194         public static IBinaryPredicate compose(Resource a, IBinaryPredicate b) {\r
195                 return new CompositePredicate(new Relation(a), b); \r
196         }\r
197         \r
198         public static IBinaryPredicate compose(IBinaryPredicate a, Resource b) {\r
199                 return new CompositePredicate(a, new Relation(b)); \r
200         }\r
201         \r
202         public static IBinaryPredicate compose(Resource a, Resource b, Resource c) {\r
203                 return compose(compose(a, b), c);\r
204         }\r
205 }\r