]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/GraphSessionVirtual.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / GraphSessionVirtual.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 fi.vtt.simantics.procore.internal;\r
13 \r
14 import gnu.trove.map.hash.THashMap;\r
15 \r
16 import java.io.File;\r
17 import java.io.FileInputStream;\r
18 import java.io.IOException;\r
19 import java.io.InputStream;\r
20 import java.util.Properties;\r
21 import java.util.Set;\r
22 import java.util.concurrent.atomic.AtomicLong;\r
23 \r
24 import org.simantics.db.ClusterCreator;\r
25 import org.simantics.db.Database;\r
26 import org.simantics.db.SessionReference;\r
27 import org.simantics.db.Database.Session;\r
28 import org.simantics.db.exception.DatabaseException;\r
29 import org.simantics.db.impl.support.VirtualGraphServerSupport;\r
30 import org.simantics.db.procore.protocol.Constants;\r
31 import org.simantics.db.server.ProCoreException;\r
32 import org.simantics.db.service.ClusterUID;\r
33 \r
34 class GraphSessionVirtual extends GraphSession { // Äsh! This extends relation was/is a pure design choice.\r
35     private static String FileName = "virtualGraph.builtins.dat";\r
36     private static long BuiltinClusterId = -1; // Virtual graph doesn't have clusters.\r
37     static class VirtualSession implements Session {\r
38         @Override\r
39         public Database getDatabase() {\r
40             return null;\r
41         }\r
42         @Override\r
43         public void close() throws ProCoreException {\r
44         }\r
45         @Override\r
46         public void open() throws ProCoreException {\r
47         }\r
48         @Override\r
49         public boolean isClosed() throws ProCoreException {\r
50             return false;\r
51         }\r
52         @Override\r
53         public String execute(String command) throws ProCoreException {\r
54             return null;\r
55         }\r
56         @Override\r
57         public void acceptCommit(long transactionId, long changeSetId, byte[] metadata) throws ProCoreException {\r
58         }\r
59         @Override\r
60         public long cancelCommit(long transactionId, long changeSetId, byte[] metadata, OnChangeSetUpdate on) throws ProCoreException {\r
61             return 0;\r
62         }\r
63         @Override\r
64         public Transaction askReadTransaction() throws ProCoreException {\r
65             return null;\r
66         }\r
67         @Override\r
68         public Transaction askWriteTransaction(long transactionId) throws ProCoreException {\r
69             return null;\r
70         }\r
71         @Override\r
72         public long endTransaction(long transactionId) throws ProCoreException {\r
73             return 0;\r
74         }\r
75         @Override\r
76         public byte[] getChangeSetMetadata(long changeSetId) throws ProCoreException {\r
77             return null;\r
78         }\r
79         @Override\r
80         public ChangeSetData getChangeSetData(long minChangeSetId, long maxChangeSetId, OnChangeSetUpdate on) throws ProCoreException {\r
81             return null;\r
82         }\r
83         @Override\r
84         public ChangeSetIds getChangeSetIds() throws ProCoreException {\r
85             return null;\r
86         }\r
87         @Override\r
88         public Cluster getCluster(byte[] clusterId) throws ProCoreException {\r
89             return null;\r
90         }\r
91         @Override\r
92         public ClusterChanges getClusterChanges(long changeSetId, byte[] clusterId) throws ProCoreException {\r
93             return null;\r
94         }\r
95         @Override\r
96         public ClusterIds getClusterIds() throws ProCoreException {\r
97             return null;\r
98         }\r
99         @Override\r
100         public Information getInformation() throws ProCoreException {\r
101             return null;\r
102         }\r
103         @Override\r
104         public Refresh getRefresh(long changeSetId) throws ProCoreException {\r
105             return null;\r
106         }\r
107         @Override\r
108         public ResourceSegment getResourceSegment(byte[] clusterUID, int resourceIndex, long offset, short size) throws ProCoreException {\r
109             return null;\r
110         }\r
111         @Override\r
112         public long reserveIds(int count) throws ProCoreException {\r
113             return 0;\r
114         }\r
115         @Override\r
116         public void updateCluster(byte[] operations) throws ProCoreException {\r
117         }\r
118         @Override\r
119         public boolean undo(long[] cChangeSetIds, OnChangeSetUpdate onChangeSetUpdate) throws ProCoreException {\r
120             return false;\r
121         }\r
122         @Override\r
123         public <T> T clone(ClusterUID clusterUID, ClusterCreator clusterCreator) throws DatabaseException {\r
124             throw new UnsupportedOperationException();\r
125         }\r
126         @Override\r
127         public boolean refreshEnabled() {\r
128             return false;\r
129         }\r
130     }\r
131     private AtomicLong changeSetId = new AtomicLong(Constants.NullChangeSetId);\r
132     private AtomicLong transactionId = new AtomicLong(Constants.NullTransactionId);\r
133     public static ServerInformationImpl serverInfo = new ServerInformationImpl("serverId", "protocolId", "databaseId", 0);\r
134     private VirtualGraphServerSupport virtualGraphServerSupport;\r
135         public GraphSessionVirtual(SessionImplSocket sessionImpl, SessionReference sessionReference, VirtualGraphServerSupport vgss) {\r
136         super(sessionImpl, sessionReference, new VirtualSession()); // Super does not expect null session.\r
137         virtualGraphServerSupport = vgss;\r
138     }\r
139     protected THashMap<String, BuiltinData> initBuiltinMap()\r
140     throws DatabaseException {\r
141         try {\r
142             Properties props = new Properties();\r
143             File from = new File(FileName);\r
144             InputStream in = new FileInputStream(from);\r
145             props.load(in);\r
146             THashMap<String, BuiltinData>  builtins = new THashMap<String, BuiltinData>();\r
147             Set<String> keys = props.stringPropertyNames();\r
148             for (String key : keys) {\r
149                 long resourceId = Long.parseLong(key);\r
150                 long cluster = BuiltinClusterId;\r
151                 int resourceIndex = (int)resourceId;\r
152                 String uri = props.getProperty(key);\r
153                 BuiltinData bd = new BuiltinData(resourceIndex, cluster);\r
154                 builtins.put(uri, bd);\r
155             }\r
156             return builtins;\r
157         } catch(IOException e) {\r
158             if (DEBUG)\r
159                 e.printStackTrace();\r
160             throw new DatabaseException("Failed to read builtins.", e);\r
161         }\r
162     }\r
163     @Override\r
164     protected ServerInformationImpl getServerInformation() {\r
165         return serverInfo;\r
166     }\r
167     @Override\r
168     public void acceptCommit(long transactionId, long csid, byte[] metadata)\r
169     throws DatabaseException {\r
170         changeSetId.incrementAndGet();\r
171     }\r
172 \r
173     @Override\r
174     public void cancelCommit(long transactionId, long csid, byte[] metadata, SynchronizeContextI context)\r
175     throws DatabaseException {\r
176         changeSetId.incrementAndGet();\r
177     }\r
178 \r
179     @Override\r
180     public void endTransaction(long transactionId, boolean write)\r
181     throws DatabaseException {\r
182 \r
183     }\r
184 \r
185     @Override\r
186     public long askWriteTransaction(int thread, long transactionId)\r
187     throws DatabaseException {\r
188         if (Constants.NullTransactionId != transactionId)\r
189             return transactionId;\r
190         else\r
191             return this.transactionId.incrementAndGet();\r
192     }\r
193     @Override\r
194     public long askReadTransaction(int thread)\r
195     throws DatabaseException {\r
196         return transactionId.incrementAndGet();\r
197     }\r
198     @Override\r
199     public void stop() throws DatabaseException {\r
200         if (DEBUG)\r
201             System.out.println("GraphSessionVirtual: stop.");\r
202 \r
203     }\r
204     @Override\r
205     public long reserveIds(int count)\r
206     throws DatabaseException {\r
207 //        VirtualGraphServerSupport s = session.getService(VirtualGraphServerSupport.class);\r
208         long id = Constants.NullSubjectId;\r
209         for (int i=0; i<count; ++i)\r
210            id = virtualGraphServerSupport.createVirtual();\r
211         return id;\r
212     }\r
213 }