]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.mapping/src/org/simantics/mapping/constraint/instructions/ProfileInstruction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.mapping / src / org / simantics / mapping / constraint / instructions / ProfileInstruction.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 gnu.trove.map.hash.TIntIntHashMap;\r
15 import gnu.trove.set.hash.TIntHashSet;\r
16 \r
17 import org.simantics.db.ReadGraph;\r
18 import org.simantics.db.WriteGraph;\r
19 import org.simantics.db.exception.DatabaseException;\r
20 import org.simantics.mapping.IContextualModification;\r
21 import org.simantics.utils.threads.logger.ITask;\r
22 import org.simantics.utils.threads.logger.ThreadLogger;\r
23 \r
24 public class ProfileInstruction implements IInstruction {\r
25 \r
26         String name;\r
27         IInstruction instruction;       \r
28         \r
29         public ProfileInstruction(String name, IInstruction instruction) {\r
30                 this.name = name;\r
31                 this.instruction = instruction;\r
32         }\r
33 \r
34         @Override\r
35         public IContextualModification claim(ReadGraph g, Object[] bindings) throws DatabaseException {\r
36                 ITask task = ThreadLogger.getInstance().begin(name + ".claim");\r
37                 final IContextualModification modi = instruction.claim(g, bindings);\r
38                 task.finish();\r
39                 if(modi==null)\r
40                         return null;\r
41                 return new IContextualModification() {\r
42 \r
43                         @Override\r
44                         public void perform(WriteGraph g, Object[] bindings) throws DatabaseException {\r
45                                 ITask task = ThreadLogger.getInstance().begin(name + ".claim.perform");\r
46                                 modi.perform(g, bindings);\r
47                                 task.finish();\r
48                         }\r
49                         \r
50                 };\r
51         }\r
52 \r
53         @Override\r
54         public void collectVariables(TIntHashSet reads, TIntHashSet writes) {\r
55                 instruction.collectVariables(reads, writes);            \r
56         }\r
57 \r
58         @Override\r
59         public IContextualModification deny(ReadGraph g, Object[] bindings) throws DatabaseException {\r
60                 ITask task = ThreadLogger.getInstance().begin(name + ".deny");\r
61                 final IContextualModification modi = instruction.deny(g, bindings);\r
62                 task.finish();\r
63                 if(modi==null)\r
64                         return null;\r
65                 return new IContextualModification() {\r
66 \r
67                         @Override\r
68                         public void perform(WriteGraph g, Object[] bindings) throws DatabaseException {\r
69                                 ITask task = ThreadLogger.getInstance().begin(name + ".deny.perform");\r
70                                 modi.perform(g, bindings);\r
71                                 task.finish();\r
72                         }\r
73                         \r
74                 };\r
75         }\r
76 \r
77         @Override\r
78         public void doClaim(WriteGraph g, Object[] bindings) throws DatabaseException {\r
79                 ITask task = ThreadLogger.getInstance().begin(name + ".doClaim");\r
80                 instruction.doClaim(g, bindings);\r
81                 task.finish();          \r
82         }\r
83 \r
84         @Override\r
85         public void doDeny(WriteGraph g, Object[] bindings) throws DatabaseException {\r
86                 ITask task = ThreadLogger.getInstance().begin(name + ".doDeny");\r
87                 instruction.doDeny(g, bindings);\r
88                 task.finish();          \r
89         }\r
90 \r
91         @Override\r
92         public void mapVariables(TIntIntHashMap map) {\r
93                 instruction.mapVariables(map);\r
94         }\r
95 \r
96         @Override\r
97         public Object next(ReadGraph g, Object[] bindings, Object continuation) throws DatabaseException {\r
98                 return instruction.next(g, bindings, continuation);\r
99         }\r
100 \r
101         @Override\r
102         public Object query(ReadGraph g, Object[] bindings) throws DatabaseException {\r
103                 ITask task = ThreadLogger.getInstance().begin(name + ".query");\r
104                 Object ret = instruction.query(g, bindings);\r
105                 task.finish();\r
106                 return ret;\r
107         }\r
108 \r
109         @Override\r
110         public void toString(StringBuilder b, int indent) {\r
111                 instruction.toString(b, indent);\r
112         }\r
113 \r
114 }\r