1 package org.simantics.browsing.ui.common.state;
4 import java.util.concurrent.CompletableFuture;
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;
17 * @author Tuukka Lehtonen
20 public class ExplorerStates {
22 public static File explorerStateLocation() {
23 return Platform.getStateLocation(Activator.getDefault().getBundle()).toFile();
26 public static CompletableFuture<ExplorerState> scheduleRead(NodeContext root, StatePersistor persistor) {
27 CompletableFuture<ExplorerState> result = new CompletableFuture<>();
28 new ReaderJob(root, persistor, result).schedule();
32 private static class ReaderJob extends DatabaseJob {
34 private NodeContext root;
35 private StatePersistor persistor;
36 private CompletableFuture<ExplorerState> consumer;
38 public ReaderJob(NodeContext root, StatePersistor persistor, CompletableFuture<ExplorerState> consumer) {
39 super("Reading previous graph explorer state");
41 this.persistor = persistor;
42 this.consumer = consumer;
46 protected IStatus run(IProgressMonitor monitor) {
48 monitor.beginTask("Loading persisted data", 1);
49 ExplorerState state = persistor.deserialize(explorerStateLocation(), root);
51 consumer.complete(state);
52 return Status.OK_STATUS;