]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.tests/src/org/simantics/modeling/tests/commands/WriteState.java
Added missing org.simantics.modeling.tests plug-ins.
[simantics/platform.git] / bundles / org.simantics.modeling.tests / src / org / simantics / modeling / tests / commands / WriteState.java
1 package org.simantics.modeling.tests.commands;
2
3 import org.simantics.databoard.binding.Binding;
4 import org.simantics.db.WriteGraph;
5 import org.simantics.db.common.CommentMetadata;
6 import org.simantics.db.common.request.WriteResultRequest;
7 import org.simantics.db.exception.DatabaseException;
8 import org.simantics.db.layer0.request.PossibleURIVariable;
9 import org.simantics.db.layer0.variable.Variable;
10 import org.simantics.db.testing.common.CommandSequenceEnvironment;
11 import org.simantics.db.testing.common.WriteCommand;
12 import org.simantics.diagram.adapter.DisposableListener;
13 import org.simantics.diagram.adapter.DisposableListenerAdapter;
14 import org.simantics.modeling.tests.traits.SingleResourceTrait;
15
16 public class WriteState extends WriteCommand<CommandSequenceEnvironment> {
17         
18         private static final long TIMEOUT = 5000000000L;
19         
20         transient public SingleResourceTrait run;
21         transient public String rvi;
22         transient public Object value;
23         transient public Binding binding;
24         
25         public WriteState(SingleResourceTrait run, String rvi, Object value, Binding binding) {
26                 this.run = run;
27                 this.rvi = rvi;
28                 this.value = value;
29                 this.binding = binding;
30         }
31         
32         @Override
33         public void run(CommandSequenceEnvironment environment) throws DatabaseException {
34
35                 long start = System.nanoTime();
36                 long current = System.nanoTime();
37                 
38                 final DisposableListener<Variable> listener = new DisposableListenerAdapter<Variable>();
39
40                 try {
41
42                         while((current-start) < TIMEOUT) {
43
44                                 boolean success = environment.getSession().sync(new WriteResultRequest<Boolean>() {
45
46                                         @Override
47                                         public Boolean perform(WriteGraph graph) throws DatabaseException {
48
49                                                 Variable state = graph.syncRequest(new PossibleURIVariable(graph.getURI(run.getResource(graph)) + rvi), listener);
50                                                 if(state == null) return false;
51
52                                                 state.setValue(graph, value, binding);
53
54                                                 CommentMetadata cm = graph.getMetadata(CommentMetadata.class);
55                                                 // Add comment to change set.
56                                                 graph.addMetadata(cm.add("Set value"));
57
58                                                 return true;
59
60                                         }
61
62                                 });
63
64                                 if(success) return;
65
66                                 try {
67                                         Thread.sleep(1);
68                                 } catch (InterruptedException e1) {
69                                         throw new DatabaseException(e1);
70                                 }
71
72                                 current = System.nanoTime();
73
74                         }
75
76                         throw new DatabaseException("Timeout writing " + rvi);
77                         
78                 } finally {
79
80                         listener.disposeListener();
81
82                 }
83                 
84         }
85
86 }