package org.simantics.db.tests.api.support.virtualGraphSupport; import org.simantics.db.ReadGraph; import org.simantics.db.RequestProcessor; import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.Statement; import org.simantics.db.VirtualGraph; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.common.request.WriteResultRequest; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.service.VirtualGraphSupport; import org.simantics.layer0.Layer0; /** * Not really created into a proper test, more a demonstration that is available * in the Simantics * developer wiki. * * @author Tuukka Lehtonen */ public class VirtualGraphExample { public Resource createLibrary(RequestProcessor processor, VirtualGraph vg, final String libraryName) throws DatabaseException { return processor.syncRequest(new WriteResultRequest(vg) { @Override public Resource perform(WriteGraph graph) throws DatabaseException { Layer0 L0 = Layer0.getInstance(graph); Resource r = graph.newResource(); graph.claim(r, L0.InstanceOf, null, L0.Library); graph.claimLiteral(r, L0.HasName, libraryName); return r; } }); } public void testVirtualGraphs(Session session) throws DatabaseException { VirtualGraphSupport vgSupport = session.getService(VirtualGraphSupport.class); VirtualGraph memory = vgSupport.getMemoryPersistent("memory"); VirtualGraph workspace = vgSupport.getWorkspacePersistent("workspace"); // NOTICE: resource are created in difference virtual graphs in separate // transactions through Session.syncRequest. Resource memResource = createLibrary(session, memory, "memory"); Resource workspaceResource = createLibrary(session, workspace, "workspace"); printVirtualGraphs(session); } public void testMultipleVirtualGraphsInSameTransaction(Session session) throws DatabaseException { final VirtualGraphSupport vgSupport = session.getService(VirtualGraphSupport.class); session.syncRequest(new WriteRequest() { @Override public void perform(WriteGraph graph) throws DatabaseException { VirtualGraph memory = vgSupport.getMemoryPersistent("memory"); VirtualGraph workspace = vgSupport.getWorkspacePersistent("workspace"); // NOTICE: resource are created in different virtual graphs in // the same transaction through WriteGraph.syncRequest Resource memResource = createLibrary(graph, memory, "memory"); Resource workspaceResource = createLibrary(graph, workspace, "workspace"); } }); printVirtualGraphs(session); } public void printVirtualGraphs(Session session) throws DatabaseException { session.syncRequest(new ReadRequest() { @Override public void run(ReadGraph graph) throws DatabaseException { VirtualGraphSupport vgSupport = graph.getService(VirtualGraphSupport.class); for (VirtualGraph vg : vgSupport.listGraphs()) { for (Statement stm : vgSupport.listStatements(vg)) { System.out.println("Statement: " + NameUtils.toString(graph, stm)); } for (Resource r : vgSupport.listValues(vg)) { System.out.println("Literal value: " + graph.getValue(r)); } } } }); } }