package fi.vtt.simantics.procore.internal; import java.util.HashSet; import java.util.Vector; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.InternalException; import org.simantics.db.exception.RuntimeDatabaseException; import org.simantics.db.exception.TimeoutException; import org.simantics.db.impl.ClusterBase; import org.simantics.db.impl.ClusterSupport; import org.simantics.db.service.ClusterUID; import org.simantics.db.service.InitSupport; import org.simantics.db.service.LifecycleSupport; public class InitSupportImpl implements InitSupport { final private SessionImplSocket session; InitSupportImpl(SessionImplSocket session) { this.session = session; } @Override public void close() throws DatabaseException, TimeoutException { session.getService(LifecycleSupport.class).close(); } @Override public void addBuiltins(final HashSet builtins) throws InternalException { try { session.syncRequest(new WriteRequest() { @Override public void perform(WriteGraph graph) throws DatabaseException { ClusterSupport cs = session.getService(ClusterSupport.class); Vector v = new Vector(); final int N = builtins.size(); v.setSize(N + 1); // Index starts with one, zero left as sentinel. for (Builtin b : builtins) { if (b.index < 1 || b.index > N) throw new RuntimeDatabaseException("Illeagal resource index for builtin." + " index=" + b.index + " uri=" + b.uri + " N=" + N); v.set(b.index, b); } for (int i=1; i