1 package fi.vtt.simantics.procore.internal;
\r
3 import java.util.HashSet;
\r
4 import java.util.Vector;
\r
6 import org.simantics.db.WriteGraph;
\r
7 import org.simantics.db.common.request.WriteRequest;
\r
8 import org.simantics.db.exception.DatabaseException;
\r
9 import org.simantics.db.exception.InternalException;
\r
10 import org.simantics.db.exception.RuntimeDatabaseException;
\r
11 import org.simantics.db.exception.TimeoutException;
\r
12 import org.simantics.db.impl.ClusterBase;
\r
13 import org.simantics.db.impl.ClusterSupport;
\r
14 import org.simantics.db.service.ClusterUID;
\r
15 import org.simantics.db.service.InitSupport;
\r
16 import org.simantics.db.service.LifecycleSupport;
\r
18 public class InitSupportImpl implements InitSupport {
\r
19 final private SessionImplSocket session;
\r
21 InitSupportImpl(SessionImplSocket session) {
\r
22 this.session = session;
\r
26 public void close() throws DatabaseException, TimeoutException {
\r
27 session.getService(LifecycleSupport.class).close();
\r
31 public void addBuiltins(final HashSet<Builtin> builtins)
\r
32 throws InternalException {
\r
34 session.syncRequest(new WriteRequest() {
\r
36 public void perform(WriteGraph graph) throws DatabaseException {
\r
37 ClusterSupport cs = session.getService(ClusterSupport.class);
\r
38 Vector<Builtin> v = new Vector<Builtin>();
\r
39 final int N = builtins.size();
\r
40 v.setSize(N + 1); // Index starts with one, zero left as sentinel.
\r
41 for (Builtin b : builtins) {
\r
42 if (b.index < 1 || b.index > N)
\r
43 throw new RuntimeDatabaseException("Illeagal resource index for builtin."
\r
44 + " index=" + b.index + " uri=" + b.uri + " N=" + N);
\r
47 for (int i=1; i<N+1; ++i) {
\r
48 if (v.get(i) == null)
\r
49 throw new RuntimeDatabaseException("Missing builtin for resource index=" + i);
\r
51 ClusterBase cluster = cs.getClusterByClusterUIDOrMake(ClusterUID.Builtin);
\r
52 long clusterId = cluster.getClusterId();
\r
53 for (int i=1; i<N+1; ++i) {
\r
54 Builtin b = v.get(i);
\r
55 cs.createResource(cluster, (short)b.index, clusterId);
\r
57 cluster.setImmutable(true, cs);
\r
60 } catch (DatabaseException e) {
\r
61 throw new InternalException("Failed to init graph.", e);
\r