package org.simantics.graph.db; import java.util.HashSet; import org.simantics.db.Session; import org.simantics.db.WriteOnlyGraph; import org.simantics.db.common.request.WriteOnlyRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.service.InitSupport; import org.simantics.db.service.SerialisationSupport; import org.simantics.graph.representation.TransferableGraph1; import org.simantics.scl.reflection.OntologyVersions; public class CoreInitialization { static final public String LAYER0 = OntologyVersions.getInstance().currentVersion("http://www.simantics.org/Layer0-0.0/"); static final HashSet BUILTINS = new HashSet(); static public HashSet getBuiltins() { return BUILTINS; } private static int builtinId = 0; private static void addBuiltin(String uri) { BUILTINS.add(new InitSupport.Builtin(uri, ++builtinId)); } private static void addLayer0Builtin(String name) { addBuiltin(LAYER0 + name); } static { addLayer0Builtin("InstanceOf"); addLayer0Builtin("Inherits"); addLayer0Builtin("SubrelationOf"); addLayer0Builtin("InverseOf"); addLayer0Builtin("HasName"); addLayer0Builtin("NameOf"); addLayer0Builtin("ConsistsOf"); addLayer0Builtin("PartOf"); addLayer0Builtin("String"); addLayer0Builtin("Library"); addLayer0Builtin("FunctionalRelation"); addLayer0Builtin("SuperrelationOf"); addLayer0Builtin("Asserts"); addLayer0Builtin("HasInstance"); addLayer0Builtin("HasPredicate"); addLayer0Builtin("HasPredicateInverse"); addLayer0Builtin("HasObject"); addBuiltin("http://Projects"); addBuiltin("http:/"); } public static void initializeBuiltins(Session session) throws DatabaseException { session.getService(InitSupport.class).addBuiltins(BUILTINS); } public static long[] initializeGraph(final Session session, TransferableGraph1 tg) throws DatabaseException { final TransferableGraphImportProcess process = new TransferableGraphImportProcess(tg, new ImportAdvisor()); session.syncRequest(new WriteOnlyRequest() { @Override public void perform(WriteOnlyGraph graph) throws DatabaseException { graph.markUndoPoint(); // // Hackety hack // session.getService(XSupport.class).setImmutable(session.getRootLibrary(), true); process.initialPrepare(graph); process.write(graph); graph.clearUndoList(this); } }); return process.getResourceIds( session.getService(SerialisationSupport.class) ); } }