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