]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/ExplorerStates.java
Merge "Added Automatic-module-name to all bundles for Java 9 JPMS compatibility"
[simantics/platform.git] / bundles / org.simantics.browsing.ui.common / src / org / simantics / browsing / ui / common / state / ExplorerStates.java
1 package org.simantics.browsing.ui.common.state;
2
3 import java.io.File;
4 import java.util.concurrent.CompletableFuture;
5
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.core.runtime.Platform;
9 import org.eclipse.core.runtime.Status;
10 import org.simantics.DatabaseJob;
11 import org.simantics.browsing.ui.ExplorerState;
12 import org.simantics.browsing.ui.NodeContext;
13 import org.simantics.browsing.ui.StatePersistor;
14 import org.simantics.browsing.ui.common.Activator;
15
16 /**
17  * @author Tuukka Lehtonen
18  * @since 1.36.0
19  */
20 public class ExplorerStates {
21
22     public static File explorerStateLocation() {
23         return Platform.getStateLocation(Activator.getDefault().getBundle()).toFile();
24     }
25
26     public static CompletableFuture<ExplorerState> scheduleRead(NodeContext root, StatePersistor persistor) {
27         CompletableFuture<ExplorerState> result = new CompletableFuture<>();
28         new ReaderJob(root, persistor, result).schedule();
29         return result;
30     }
31
32     private static class ReaderJob extends DatabaseJob {
33
34         private NodeContext root;
35         private StatePersistor persistor;
36         private CompletableFuture<ExplorerState> consumer;
37
38         public ReaderJob(NodeContext root, StatePersistor persistor, CompletableFuture<ExplorerState> consumer) {
39             super("Reading previous graph explorer state");
40             this.root = root;
41             this.persistor = persistor;
42             this.consumer = consumer;
43         }
44
45         @Override
46         protected IStatus run(IProgressMonitor monitor) {
47             try {
48                 monitor.beginTask("Loading persisted data", 1);
49                 ExplorerState state = persistor.deserialize(explorerStateLocation(), root);
50                 monitor.worked(1);
51                 consumer.complete(state);
52                 return Status.OK_STATUS;
53             } finally {
54                 monitor.done();
55             }
56         }
57
58     }
59
60 }