]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.mapping/src/org/simantics/mapping/constraint/instructions/UnaryPredicateInstruction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.mapping / src / org / simantics / mapping / constraint / instructions / UnaryPredicateInstruction.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.mapping.constraint.instructions;\r
13 \r
14 import org.simantics.db.ReadGraph;\r
15 import org.simantics.db.Resource;\r
16 import org.simantics.db.WriteGraph;\r
17 import org.simantics.db.common.utils.NameUtils;\r
18 import org.simantics.db.exception.DatabaseException;\r
19 import org.simantics.layer0.utils.predicates.IUnaryPredicate;\r
20 import org.simantics.layer0.utils.predicates.Type;\r
21 import org.simantics.mapping.IContextualModification;\r
22 \r
23 public class UnaryPredicateInstruction extends Instruction1 {\r
24         \r
25         IUnaryPredicate predicate;\r
26 \r
27         public UnaryPredicateInstruction(int variable0, IUnaryPredicate predicate) {\r
28                 super(variable0);\r
29                 this.predicate = predicate;\r
30         }\r
31         \r
32         @Override\r
33         public Object query(ReadGraph g, Object[] bindings) throws DatabaseException {\r
34 //              ITask task = ThreadLogger.getInstance().begin("g");\r
35                 if(predicate.has(g, (Resource)bindings[variable0])) {\r
36 //                      task.finish();\r
37                         return null;\r
38                 }\r
39                 else {\r
40 //                      task.finish();\r
41                         return IInstruction.FAILURE;\r
42                 }\r
43         }\r
44         \r
45         @Override\r
46         public Object next(ReadGraph g, Object[] bindings, Object continuation) {\r
47                 return IInstruction.FAILURE;\r
48         }\r
49         \r
50         @Override\r
51         public IContextualModification claim(ReadGraph g, Object[] bindings) throws DatabaseException {\r
52                 Resource r = (Resource)bindings[variable0];\r
53 //              ITask task = ThreadLogger.getInstance().begin("g");\r
54                 if(!predicate.has(g, r)) {\r
55 //                      task.finish();          \r
56                         return new IContextualModification() {\r
57 \r
58                                 @Override\r
59                                 public void perform(WriteGraph g, Object[] bindings) throws DatabaseException {\r
60 //                                      ITask task = ThreadLogger.getInstance().begin("g");\r
61                                 if(DEBUG_MODI)\r
62                                     System.out.println("claim(" + predicate + ", " + \r
63                                             NameUtils.getSafeName(g, (Resource)bindings[variable0]));\r
64                                 if(!DISABLE_MODI)\r
65                                         predicate.add(g, (Resource)bindings[variable0]);\r
66 //                                      task.finish();\r
67                                 }\r
68                         \r
69                         };\r
70                 }\r
71 //              task.finish();\r
72                 return null;\r
73         }\r
74 \r
75         @Override\r
76         public void doClaim(WriteGraph g, Object[] bindings) throws DatabaseException {\r
77                 Resource r0 = (Resource)bindings[variable0];\r
78 //              ITask task = ThreadLogger.getInstance().begin("g");\r
79                 if(DEBUG) {\r
80                 String predicateName = predicate.toString();\r
81                 if(predicate instanceof Type)\r
82                     predicateName = ":: " + NameUtils.getSafeName(g, ((Type)predicate).getType());\r
83                 System.out.println("@ claimUnary(" + NameUtils.getSafeName(g, r0) + ", " + predicateName + ")");\r
84                 }\r
85         if(DEBUG_MODI)\r
86             System.out.println("claim(" + predicate + ", " + \r
87                     NameUtils.getSafeName(g, (Resource)bindings[variable0]));\r
88         if(!DISABLE_MODI)\r
89                 predicate.add(g, r0);\r
90 //              task.finish();\r
91         }\r
92         \r
93         @Override\r
94         public IContextualModification deny(ReadGraph g, Object[] bindings) throws DatabaseException {\r
95                 Resource r = (Resource)bindings[variable0];\r
96                 if(predicate.has(g, r))\r
97                         return new IContextualModification() {\r
98 \r
99                                 @Override\r
100                                 public void perform(WriteGraph g, Object[] bindings) throws DatabaseException {\r
101                                     if(DEBUG_MODI)\r
102                                         System.out.println("deny(" + predicate + ", " + \r
103                                                 NameUtils.getSafeName(g, (Resource)bindings[variable0]));\r
104                                     if(!DISABLE_MODI)\r
105                                         predicate.remove(g, (Resource)bindings[variable0]);\r
106                                 }\r
107                         \r
108                         };\r
109                 return null;\r
110         }\r
111         \r
112         @Override\r
113         public void doDeny(WriteGraph g, Object[] bindings) throws DatabaseException {\r
114                 Resource r0 = (Resource)bindings[variable0];\r
115                 if(predicate.has(g, r0)) {\r
116             if(DEBUG_MODI)\r
117                 System.out.println("deny(" + predicate + ", " + \r
118                         NameUtils.getSafeName(g, (Resource)bindings[variable0]));\r
119             if(!DISABLE_MODI)\r
120                 predicate.remove(g, r0);\r
121                 }\r
122         }\r
123 \r
124         @Override\r
125         public void toString(StringBuilder b, int indent) {\r
126                 b.append('(');\r
127                 b.append(variable0);\r
128                 b.append(')');\r
129         }\r
130 }\r