1 package org.simantics.db.tests.api.delayedWrite;
3 import java.util.concurrent.atomic.AtomicReference;
6 import org.simantics.db.ReadGraph;
7 import org.simantics.db.Resource;
8 import org.simantics.db.VirtualGraph;
9 import org.simantics.db.WriteGraph;
10 import org.simantics.db.common.request.DelayedWriteRequest;
11 import org.simantics.db.common.request.ReadRequest;
12 import org.simantics.db.common.request.WriteResultRequest;
13 import org.simantics.db.exception.DatabaseException;
14 import org.simantics.db.service.VirtualGraphSupport;
15 import org.simantics.db.testing.annotation.Fails;
16 import org.simantics.db.testing.base.ExistingDatabaseTest;
19 * This originated from Apros issue #3296.
21 * @author Tuukka Lehtonen
23 public class DelayedWriteGraphVirtualGraphHandling extends ExistingDatabaseTest {
27 public void test() throws Exception {
28 final VirtualGraphSupport vgs = getSession().getService(VirtualGraphSupport.class);
29 final VirtualGraph mem = getSession().getService(VirtualGraphSupport.class).getMemoryPersistent("MEM");
30 final VirtualGraph ws = getSession().getService(VirtualGraphSupport.class).getWorkspacePersistent("WS");
32 final AtomicReference<Resource> transientName = new AtomicReference<Resource>();
33 final AtomicReference<Resource> persistentDescription = new AtomicReference<Resource>();
35 DelayedWriteRequest r = new DelayedWriteRequest() {
37 public void perform(WriteGraph graph) throws DatabaseException {
38 final Resource r = graph.newResource();
39 graph.claim(r, L0.InstanceOf, null, L0.Entity);
41 transientName.set( graph.sync(new WriteResultRequest<Resource>(mem) {
43 public Resource perform(WriteGraph graph) throws DatabaseException {
44 Resource vr = graph.newResource();
45 graph.claim(vr, L0.InstanceOf, null, L0.String);
46 graph.claim(r, L0.HasName, vr);
50 persistentDescription.set( graph.sync(new WriteResultRequest<Resource>(ws) {
52 public Resource perform(WriteGraph graph) throws DatabaseException {
53 Resource vr = graph.newResource();
54 graph.claim(vr, L0.InstanceOf, null, L0.String);
55 graph.claim(r, L0.HasDescription, vr);
63 // Validate that the data was actually written into virtual graphs.
64 getSession().sync(new ReadRequest() {
66 public void run(ReadGraph graph) throws DatabaseException {
67 VirtualGraph nameVg = vgs.getGraph(graph, transientName.get());
68 VirtualGraph descVg = vgs.getGraph(graph, persistentDescription.get());
69 assertEquals(nameVg, mem);
70 assertEquals(descVg, ws);