]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.mapping/src/org/simantics/mapping/constraint/instructions/UnaryPredicateInstruction.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.mapping / src / org / simantics / mapping / constraint / instructions / UnaryPredicateInstruction.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.mapping.constraint.instructions;
13
14 import org.simantics.db.ReadGraph;
15 import org.simantics.db.Resource;
16 import org.simantics.db.WriteGraph;
17 import org.simantics.db.common.utils.NameUtils;
18 import org.simantics.db.exception.DatabaseException;
19 import org.simantics.layer0.utils.predicates.IUnaryPredicate;
20 import org.simantics.layer0.utils.predicates.Type;
21 import org.simantics.mapping.IContextualModification;
22
23 public class UnaryPredicateInstruction extends Instruction1 {
24         
25         IUnaryPredicate predicate;
26
27         public UnaryPredicateInstruction(int variable0, IUnaryPredicate predicate) {
28                 super(variable0);
29                 this.predicate = predicate;
30         }
31         
32         @Override
33         public Object query(ReadGraph g, Object[] bindings) throws DatabaseException {
34 //              ITask task = ThreadLogger.getInstance().begin("g");
35                 if(predicate.has(g, (Resource)bindings[variable0])) {
36 //                      task.finish();
37                         return null;
38                 }
39                 else {
40 //                      task.finish();
41                         return IInstruction.FAILURE;
42                 }
43         }
44         
45         @Override
46         public Object next(ReadGraph g, Object[] bindings, Object continuation) {
47                 return IInstruction.FAILURE;
48         }
49         
50         @Override
51         public IContextualModification claim(ReadGraph g, Object[] bindings) throws DatabaseException {
52                 Resource r = (Resource)bindings[variable0];
53 //              ITask task = ThreadLogger.getInstance().begin("g");
54                 if(!predicate.has(g, r)) {
55 //                      task.finish();          
56                         return new IContextualModification() {
57
58                                 @Override
59                                 public void perform(WriteGraph g, Object[] bindings) throws DatabaseException {
60 //                                      ITask task = ThreadLogger.getInstance().begin("g");
61                                 if(DEBUG_MODI)
62                                     System.out.println("claim(" + predicate + ", " + 
63                                             NameUtils.getSafeName(g, (Resource)bindings[variable0]));
64                                 if(!DISABLE_MODI)
65                                         predicate.add(g, (Resource)bindings[variable0]);
66 //                                      task.finish();
67                                 }
68                         
69                         };
70                 }
71 //              task.finish();
72                 return null;
73         }
74
75         @Override
76         public void doClaim(WriteGraph g, Object[] bindings) throws DatabaseException {
77                 Resource r0 = (Resource)bindings[variable0];
78 //              ITask task = ThreadLogger.getInstance().begin("g");
79                 if(DEBUG) {
80                 String predicateName = predicate.toString();
81                 if(predicate instanceof Type)
82                     predicateName = ":: " + NameUtils.getSafeName(g, ((Type)predicate).getType());
83                 System.out.println("@ claimUnary(" + NameUtils.getSafeName(g, r0) + ", " + predicateName + ")");
84                 }
85         if(DEBUG_MODI)
86             System.out.println("claim(" + predicate + ", " + 
87                     NameUtils.getSafeName(g, (Resource)bindings[variable0]));
88         if(!DISABLE_MODI)
89                 predicate.add(g, r0);
90 //              task.finish();
91         }
92         
93         @Override
94         public IContextualModification deny(ReadGraph g, Object[] bindings) throws DatabaseException {
95                 Resource r = (Resource)bindings[variable0];
96                 if(predicate.has(g, r))
97                         return new IContextualModification() {
98
99                                 @Override
100                                 public void perform(WriteGraph g, Object[] bindings) throws DatabaseException {
101                                     if(DEBUG_MODI)
102                                         System.out.println("deny(" + predicate + ", " + 
103                                                 NameUtils.getSafeName(g, (Resource)bindings[variable0]));
104                                     if(!DISABLE_MODI)
105                                         predicate.remove(g, (Resource)bindings[variable0]);
106                                 }
107                         
108                         };
109                 return null;
110         }
111         
112         @Override
113         public void doDeny(WriteGraph g, Object[] bindings) throws DatabaseException {
114                 Resource r0 = (Resource)bindings[variable0];
115                 if(predicate.has(g, r0)) {
116             if(DEBUG_MODI)
117                 System.out.println("deny(" + predicate + ", " + 
118                         NameUtils.getSafeName(g, (Resource)bindings[variable0]));
119             if(!DISABLE_MODI)
120                 predicate.remove(g, r0);
121                 }
122         }
123
124         @Override
125         public void toString(StringBuilder b, int indent) {
126                 b.append('(');
127                 b.append(variable0);
128                 b.append(')');
129         }
130 }