From: Tuukka Lehtonen Date: Mon, 29 Oct 2018 11:14:28 +0000 (+0000) Subject: Merge "Added Automatic-module-name to all bundles for Java 9 JPMS compatibility" X-Git-Tag: v1.43.0~136^2~309 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=b825d7a7aff95002f355878ec2767352411b5a43;hp=23ad7f815d0717a640f6b286ef473c5c9f30ff96 Merge "Added Automatic-module-name to all bundles for Java 9 JPMS compatibility" --- diff --git a/bundles/org.simantics.browsing.ui.common/META-INF/MANIFEST.MF b/bundles/org.simantics.browsing.ui.common/META-INF/MANIFEST.MF index aa73ac664..0b734538c 100644 --- a/bundles/org.simantics.browsing.ui.common/META-INF/MANIFEST.MF +++ b/bundles/org.simantics.browsing.ui.common/META-INF/MANIFEST.MF @@ -24,6 +24,7 @@ Export-Package: org.simantics.browsing.ui.common, org.simantics.browsing.ui.common.node, org.simantics.browsing.ui.common.processors, org.simantics.browsing.ui.common.property, + org.simantics.browsing.ui.common.state, org.simantics.browsing.ui.common.viewpoints, org.simantics.browsing.ui.common.views Bundle-Vendor: VTT Technical Research Center of Finland diff --git a/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/ExplorerStates.java b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/ExplorerStates.java new file mode 100644 index 000000000..380968bed --- /dev/null +++ b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/ExplorerStates.java @@ -0,0 +1,60 @@ +package org.simantics.browsing.ui.common.state; + +import java.io.File; +import java.util.concurrent.CompletableFuture; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.simantics.DatabaseJob; +import org.simantics.browsing.ui.ExplorerState; +import org.simantics.browsing.ui.NodeContext; +import org.simantics.browsing.ui.StatePersistor; +import org.simantics.browsing.ui.common.Activator; + +/** + * @author Tuukka Lehtonen + * @since 1.36.0 + */ +public class ExplorerStates { + + public static File explorerStateLocation() { + return Platform.getStateLocation(Activator.getDefault().getBundle()).toFile(); + } + + public static CompletableFuture scheduleRead(NodeContext root, StatePersistor persistor) { + CompletableFuture result = new CompletableFuture<>(); + new ReaderJob(root, persistor, result).schedule(); + return result; + } + + private static class ReaderJob extends DatabaseJob { + + private NodeContext root; + private StatePersistor persistor; + private CompletableFuture consumer; + + public ReaderJob(NodeContext root, StatePersistor persistor, CompletableFuture consumer) { + super("Reading previous graph explorer state"); + this.root = root; + this.persistor = persistor; + this.consumer = consumer; + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + monitor.beginTask("Loading persisted data", 1); + ExplorerState state = persistor.deserialize(explorerStateLocation(), root); + monitor.worked(1); + consumer.complete(state); + return Status.OK_STATUS; + } finally { + monitor.done(); + } + } + + } + +} diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerStateBean.java b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/GraphExplorerStateBean.java similarity index 95% rename from bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerStateBean.java rename to bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/GraphExplorerStateBean.java index c9bf211dd..7b4d7877e 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerStateBean.java +++ b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/GraphExplorerStateBean.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.browsing.ui.swt; +package org.simantics.browsing.ui.common.state; import java.util.Map; diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerStateNodeBean.java b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/GraphExplorerStateNodeBean.java similarity index 94% rename from bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerStateNodeBean.java rename to bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/GraphExplorerStateNodeBean.java index 49831e28c..67c5c9d7a 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerStateNodeBean.java +++ b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/GraphExplorerStateNodeBean.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.browsing.ui.swt; +package org.simantics.browsing.ui.common.state; import java.util.TreeMap; diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/IdentifiedStatePersistor.java b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/IdentifiedStatePersistor.java similarity index 89% rename from bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/IdentifiedStatePersistor.java rename to bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/IdentifiedStatePersistor.java index 5a3bb75b2..0a417bd38 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/IdentifiedStatePersistor.java +++ b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/IdentifiedStatePersistor.java @@ -1,4 +1,4 @@ -package org.simantics.browsing.ui.swt; +package org.simantics.browsing.ui.common.state; import java.io.File; import java.nio.file.Files; @@ -11,13 +11,16 @@ import org.simantics.browsing.ui.ExplorerState; import org.simantics.browsing.ui.NodeContext; import org.simantics.browsing.ui.StatePersistor; import org.simantics.databoard.util.StringUtil; -import org.simantics.db.common.utils.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Tuukka Lehtonen */ public class IdentifiedStatePersistor implements StatePersistor { + private static final Logger LOGGER = LoggerFactory.getLogger(IdentifiedStatePersistor.class); + protected final String id; public IdentifiedStatePersistor(String id) { @@ -40,7 +43,7 @@ public class IdentifiedStatePersistor implements StatePersistor { if (bean != null && memento != null) Files.write(memento, bean.serialize()); } catch (Throwable t) { - Logger.defaultLogError(t); + LOGGER.error("Failed to serialize ExplorerState " + state, t); } } @@ -52,7 +55,7 @@ public class IdentifiedStatePersistor implements StatePersistor { stateBean.deserialize( Files.readAllBytes(path) ); return toState(stateBean); } catch (Throwable t) { - Logger.defaultLogError(t); + LOGGER.error("Failed to deserialize ExplorerState from " + path, t); return ExplorerState.EMPTY; } } diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/StringArrayBean.java b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/StringArrayBean.java similarity index 94% rename from bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/StringArrayBean.java rename to bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/StringArrayBean.java index 219db8364..90ff79a14 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/StringArrayBean.java +++ b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/StringArrayBean.java @@ -9,7 +9,7 @@ * Contributors: * Semantum Oy - initial API and implementation *******************************************************************************/ -package org.simantics.browsing.ui.swt; +package org.simantics.browsing.ui.common.state; import org.simantics.databoard.annotations.Optional; import org.simantics.databoard.util.Bean; diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/StringBean.java b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/StringBean.java similarity index 94% rename from bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/StringBean.java rename to bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/StringBean.java index c584da059..c2b435648 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/StringBean.java +++ b/bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/state/StringBean.java @@ -9,7 +9,7 @@ * Contributors: * Semantum Oy - initial API and implementation *******************************************************************************/ -package org.simantics.browsing.ui.swt; +package org.simantics.browsing.ui.common.state; import org.simantics.databoard.annotations.Optional; import org.simantics.databoard.util.Bean; diff --git a/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/NatTableGraphExplorer.java b/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/NatTableGraphExplorer.java index be6a73a0c..37eafd4eb 100644 --- a/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/NatTableGraphExplorer.java +++ b/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/NatTableGraphExplorer.java @@ -26,7 +26,6 @@ import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.resource.ColorDescriptor; @@ -172,6 +171,7 @@ import org.simantics.browsing.ui.common.processors.DefaultViewpointProcessor; import org.simantics.browsing.ui.common.processors.IsExpandedProcessor; import org.simantics.browsing.ui.common.processors.NoSelectionRequestProcessor; import org.simantics.browsing.ui.common.processors.ProcessorLifecycle; +import org.simantics.browsing.ui.common.state.ExplorerStates; import org.simantics.browsing.ui.content.Labeler; import org.simantics.browsing.ui.content.Labeler.CustomModifier; import org.simantics.browsing.ui.content.Labeler.DialogModifier; @@ -198,6 +198,7 @@ import org.simantics.utils.threads.SWTThread; import org.simantics.utils.threads.ThreadUtils; import org.simantics.utils.ui.AdaptionUtils; import org.simantics.utils.ui.ISelectionUtils; +import org.simantics.utils.ui.SWTUtils; import org.simantics.utils.ui.jface.BasePostSelectionProvider; import gnu.trove.map.hash.THashMap; @@ -580,17 +581,16 @@ public class NatTableGraphExplorer extends GraphExplorerImplBase implements Grap private void initializeState() { if (persistor == null) return; + ExplorerStates.scheduleRead(getRoot(), persistor) + .thenAccept(state -> SWTUtils.asyncExec(natTable, () -> restoreState(state))); + } - ExplorerState state = persistor.deserialize( - Platform.getStateLocation(Activator.getDefault().getBundle()).toFile(), - getRoot()); - - + private void restoreState(ExplorerState state) { Object processor = getPrimitiveProcessor(BuiltinKeys.IS_EXPANDED); if (processor instanceof DefaultIsExpandedProcessor) { DefaultIsExpandedProcessor isExpandedProcessor = (DefaultIsExpandedProcessor)processor; for(NodeContext expanded : state.expandedNodes) { - isExpandedProcessor.setExpanded(expanded, true); + isExpandedProcessor.replaceExpanded(expanded, true); } } } diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl.java b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl.java index 3cf5f7478..df736c1e6 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl.java +++ b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl.java @@ -39,7 +39,6 @@ import org.eclipse.core.runtime.AssertionFailedException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.IStatusLineManager; @@ -145,6 +144,7 @@ import org.simantics.browsing.ui.common.processors.DefaultViewpointProcessor; import org.simantics.browsing.ui.common.processors.IsExpandedProcessor; import org.simantics.browsing.ui.common.processors.NoSelectionRequestProcessor; import org.simantics.browsing.ui.common.processors.ProcessorLifecycle; +import org.simantics.browsing.ui.common.state.ExplorerStates; import org.simantics.browsing.ui.content.ImageDecorator; import org.simantics.browsing.ui.content.Imager; import org.simantics.browsing.ui.content.LabelDecorator; @@ -169,6 +169,7 @@ import org.simantics.utils.threads.IThreadWorkQueue; import org.simantics.utils.threads.SWTThread; import org.simantics.utils.threads.ThreadUtils; import org.simantics.utils.ui.ISelectionUtils; +import org.simantics.utils.ui.SWTUtils; import org.simantics.utils.ui.jface.BasePostSelectionProvider; import org.simantics.utils.ui.widgets.VetoingEventHandler; import org.simantics.utils.ui.workbench.WorkbenchUtils; @@ -1883,15 +1884,15 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph }); } } - + private void initializeState() { if (persistor == null) return; + ExplorerStates.scheduleRead(getRoot(), persistor) + .thenAccept(state -> SWTUtils.asyncExec(tree, () -> restoreState(state))); + } - ExplorerState state = persistor.deserialize( - Platform.getStateLocation(Activator.getDefault().getBundle()).toFile(), - getRoot()); - + private void restoreState(ExplorerState state) { // topNodeToSet will be processed by #setData when it encounters a // NodeContext that matches this one. // topNodePath = state.topNodePath; @@ -1902,7 +1903,7 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph if (processor instanceof DefaultIsExpandedProcessor) { DefaultIsExpandedProcessor isExpandedProcessor = (DefaultIsExpandedProcessor)processor; for(NodeContext expanded : state.expandedNodes) { - isExpandedProcessor.setExpanded(expanded, true); + isExpandedProcessor.replaceExpanded(expanded, true); } } } @@ -1947,7 +1948,7 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph } persistor.serialize( - Platform.getStateLocation(Activator.getDefault().getBundle()).toFile(), + ExplorerStates.explorerStateLocation(), getRoot(), new ExplorerState(topNodePath, topNodePathChildIndex, expandedNodes, columnWidths)); } @@ -3251,13 +3252,16 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph */ private void doSetColumns(Column[] cols, Consumer> callback) { // Attempt to keep previous column widths. - Map prevWidths = new HashMap(); + Map prevWidths = new HashMap<>(); for (TreeColumn column : tree.getColumns()) { - prevWidths.put(column.getText(), column.getWidth()); - column.dispose(); + Column c = (Column) column.getData(); + if (c != null) { + prevWidths.put(c.getKey(), column.getWidth()); + column.dispose(); + } } - HashMap keyToIndex = new HashMap(); + HashMap keyToIndex = new HashMap<>(); for (int i = 0; i < cols.length; ++i) { keyToIndex.put(cols[i].getKey(), i); } @@ -3268,7 +3272,7 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph this.columnImageArray = new Image[cols.length]; this.columnDescOrImageArray = new Object[cols.length]; - Map map = new HashMap(); + Map map = new HashMap<>(); tree.setHeaderVisible(columnsAreVisible); for (Column column : columns) { @@ -3281,7 +3285,7 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph int cw = column.getWidth(); // Try to keep previous widths - Integer w = prevWidths.get(column); + Integer w = prevWidths.get(column.getKey()); if (w != null) c.setWidth(w); else if (cw != Column.DEFAULT_CONTROL_WIDTH) @@ -3306,13 +3310,9 @@ class GraphExplorerImpl extends GraphExplorerImplBase implements Listener, Graph if(callback != null) callback.accept(map); // Make sure the explorer fits the columns properly after initialization. - tree.getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - if (tree.isDisposed()) - return; + SWTUtils.asyncExec(tree, () -> { + if (!tree.isDisposed()) refreshColumnSizes(); - } }); } diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl2.java b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl2.java index af0fa25a3..c21158e31 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl2.java +++ b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/GraphExplorerImpl2.java @@ -38,7 +38,6 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.layout.GridDataFactory; @@ -154,6 +153,7 @@ import org.simantics.browsing.ui.common.processors.DefaultViewpointProcessor; import org.simantics.browsing.ui.common.processors.IsExpandedProcessor; import org.simantics.browsing.ui.common.processors.NoSelectionRequestProcessor; import org.simantics.browsing.ui.common.processors.ProcessorLifecycle; +import org.simantics.browsing.ui.common.state.ExplorerStates; import org.simantics.browsing.ui.content.ImageDecorator; import org.simantics.browsing.ui.content.Imager; import org.simantics.browsing.ui.content.LabelDecorator; @@ -174,6 +174,7 @@ import org.simantics.utils.threads.SWTThread; import org.simantics.utils.threads.ThreadUtils; import org.simantics.utils.ui.AdaptionUtils; import org.simantics.utils.ui.ISelectionUtils; +import org.simantics.utils.ui.SWTUtils; import org.simantics.utils.ui.jface.BasePostSelectionProvider; import gnu.trove.map.hash.THashMap; @@ -574,17 +575,16 @@ public class GraphExplorerImpl2 extends GraphExplorerImplBase implements GraphEx private void initializeState() { if (persistor == null) return; + ExplorerStates.scheduleRead(getRoot(), persistor) + .thenAccept(state -> SWTUtils.asyncExec(viewer.getTree(), () -> restoreState(state))); + } - ExplorerState state = persistor.deserialize( - Platform.getStateLocation(Activator.getDefault().getBundle()).toFile(), - getRoot()); - - + private void restoreState(ExplorerState state) { Object processor = getPrimitiveProcessor(BuiltinKeys.IS_EXPANDED); if (processor instanceof DefaultIsExpandedProcessor) { DefaultIsExpandedProcessor isExpandedProcessor = (DefaultIsExpandedProcessor)processor; for(NodeContext expanded : state.expandedNodes) { - isExpandedProcessor.setExpanded(expanded, true); + isExpandedProcessor.replaceExpanded(expanded, true); } } } @@ -717,13 +717,14 @@ public class GraphExplorerImpl2 extends GraphExplorerImplBase implements GraphEx private void doSetColumns(Column[] cols, Consumer> callback) { // Attempt to keep previous column widths. - Map prevWidths = new HashMap(); - + Map prevWidths = new HashMap<>(); for (TreeViewerColumn c : treeViewerColumns) { - prevWidths.put(c.getColumn().getText(), c.getColumn().getWidth()); - c.getColumn().dispose(); + Column col = (Column) (c.getColumn().getData()); + if (col != null) + prevWidths.put(col.getKey(), c.getColumn().getWidth()); + c.getColumn().dispose(); } - + treeViewerColumns.clear(); HashMap keyToIndex = new HashMap(); @@ -765,7 +766,7 @@ public class GraphExplorerImpl2 extends GraphExplorerImplBase implements GraphEx int cw = column.getWidth(); // Try to keep previous widths - Integer w = prevWidths.get(column); + Integer w = prevWidths.get(column.getKey()); if (w != null) c.setWidth(w); else if (cw != Column.DEFAULT_CONTROL_WIDTH) @@ -2487,11 +2488,11 @@ public class GraphExplorerImpl2 extends GraphExplorerImplBase implements GraphEx return context == null; } - @SuppressWarnings("rawtypes") + @SuppressWarnings("unchecked") @Override - public Object getAdapter(Class adapter) { + public T getAdapter(Class adapter) { if (adapter == NodeContext.class) - return context; + return (T) context; return context.getAdapter(adapter); } @@ -2712,9 +2713,8 @@ public class GraphExplorerImpl2 extends GraphExplorerImplBase implements GraphEx * store the key, this is not used. */ NodeContext getNC = new NodeContext() { - @SuppressWarnings("rawtypes") - @Override - public Object getAdapter(Class adapter) { + @Override + public T getAdapter(Class adapter) { return null; } diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/widgets/GraphExplorerComposite.java b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/widgets/GraphExplorerComposite.java index 42ee2bdf8..2f52153a1 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/widgets/GraphExplorerComposite.java +++ b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/widgets/GraphExplorerComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2012 Association for Decentralized Information Management + * Copyright (c) 2007, 2018 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -17,10 +17,8 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.function.BiFunction; -import java.util.function.Consumer; import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.Platform; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; @@ -45,7 +43,6 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchSite; @@ -72,6 +69,7 @@ import org.simantics.browsing.ui.common.processors.LabelerFactoryResolver; import org.simantics.browsing.ui.common.processors.UserSelectedComparableFactoryQueryProcessor; import org.simantics.browsing.ui.common.processors.UserSelectedViewpointFactoryQueryProcessor; import org.simantics.browsing.ui.common.processors.ViewpointFactoryResolver; +import org.simantics.browsing.ui.common.state.ExplorerStates; import org.simantics.browsing.ui.common.views.FilterAreaSource; import org.simantics.browsing.ui.common.views.IFilterArea; import org.simantics.browsing.ui.common.views.IFilterAreaProvider; @@ -83,7 +81,6 @@ import org.simantics.browsing.ui.graph.impl.RelatedObjectsQueryProcessor; import org.simantics.browsing.ui.graph.impl.SessionContextInputSource; import org.simantics.browsing.ui.model.browsecontexts.BrowseContext; import org.simantics.browsing.ui.model.nodetypes.NodeType; -import org.simantics.browsing.ui.swt.Activator; import org.simantics.browsing.ui.swt.ComparatorSelector; import org.simantics.browsing.ui.swt.ContextMenuInitializer; import org.simantics.browsing.ui.swt.DefaultExplorerSelectionListener; @@ -135,6 +132,7 @@ import org.simantics.utils.datastructures.hints.IHintContext.Key; import org.simantics.utils.datastructures.hints.IHintListener; import org.simantics.utils.datastructures.hints.IHintObservable; import org.simantics.utils.datastructures.hints.IHintTracker; +import org.simantics.utils.ui.SWTUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -1194,52 +1192,48 @@ public class GraphExplorerComposite extends Composite implements Widget, IAdapta } private int getColumnWidth(Column column, ExplorerState state) { - // Get saved width from the persistor if there is one. + // Get saved width from the persistor if there is one. if (state != null && state.columnWidths != null) { - Integer width = state.columnWidths.get(column.getLabel()); - if (width != null) - return width; + Integer width = state.columnWidths.get(column.getLabel()); + if (width != null) + return width; } return column.getWidth(); } - - public void setColumns(Column[] columns) { - - explorer.setColumns(columns, new Consumer>() { - - @Override - public void accept(Map objects) { - ExplorerState state = null; - if (persistor != null) { - state = persistor.deserialize( - Platform.getStateLocation(Activator.getDefault().getBundle()).toFile(), - explorer.getRoot()); - } - - for(Map.Entry entry : objects.entrySet()) { - Column column = entry.getKey(); - TreeColumn treeColumn = (TreeColumn)entry.getValue(); - - if (column.getWidth() < 0) { - throw new IllegalArgumentException("Column minimum width cannot be < 0, got " + column.getWidth()); - } - - int width = getColumnWidth(column, state); - if(column.hasGrab()) { - - ad.setColumnData(treeColumn, new ColumnWeightData(column.getWeight(), width)); - - } else { - - ad.setColumnData(treeColumn, new ColumnWeightData(0, width)); - } - - } - } + protected void restoreColumnSizes(Map columns) { + if (persistor != null) { + setColumnData(columns, null); + ExplorerStates.scheduleRead(explorer.getRoot(), persistor).thenAccept(state -> { + SWTUtils.asyncExec(GraphExplorerComposite.this, () -> { + if (explorerComposite.isDisposed()) + setColumnData(columns, state); + }); + }); + } else { + setColumnData(columns, null); + } + } + protected void setColumnData(Map columns, ExplorerState state) { + columns.forEach((column, widget) -> { + org.eclipse.swt.widgets.Widget columnWidget = (org.eclipse.swt.widgets.Widget) widget; + ad.setColumnData(columnWidget, + new ColumnWeightData( + column.hasGrab() ? column.getWeight() : 0, + getColumnWidth(column, state))); }); + } + public void setColumns(Column[] columns) { + // ColumnWeightData does not support column weight/width < 0 + for (Column column : columns) { + if (column.getWeight() < 0) + throw new IllegalArgumentException("Column weight must be >= 0, got " + column.getWeight() + " for " + column); + if (column.getWidth() < 0) + throw new IllegalArgumentException("Column minimum width must be >= 0, got " + column.getWidth() + " for " + column); + } + explorer.setColumns(columns, this::restoreColumnSizes); } @Override diff --git a/bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateNodeManager.java b/bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateNodeManager.java index 0b48e2722..97bc4b1c7 100644 --- a/bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateNodeManager.java +++ b/bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateNodeManager.java @@ -1,9 +1,7 @@ package org.simantics.document.server.state; import java.io.IOException; -import java.util.Collections; import java.util.Map; -import java.util.Set; import org.simantics.databoard.Bindings; import org.simantics.databoard.binding.Binding; @@ -11,38 +9,19 @@ import org.simantics.databoard.binding.error.BindingConstructionException; import org.simantics.databoard.binding.mutable.Variant; import org.simantics.databoard.serialization.RuntimeSerializerConstructionException; import org.simantics.databoard.serialization.SerializerConstructionException; -import org.simantics.db.layer0.variable.NodeSupport; -import org.simantics.simulator.toolkit.StandardNodeManager; import org.simantics.simulator.toolkit.StandardRealm; +import org.simantics.simulator.toolkit.db.StandardVariableNodeManager; import org.simantics.simulator.variable.exceptions.NodeManagerException; import org.slf4j.LoggerFactory; -public class StateNodeManager extends StandardNodeManager { +public class StateNodeManager extends StandardVariableNodeManager { private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(StateNodeManager.class); - private NodeSupport support; - public StateNodeManager(StandardRealm realm, StateNode root) { super(realm, root); } - public void registerSupport(NodeSupport support) { - this.support = support; - } - - @Override - public Set getClassifications(StateNode node) throws NodeManagerException { - return Collections.emptySet(); - } - - @Override - public void refreshVariable(StateNode node) { - super.refreshVariable(node); - support.valueCache.clearExpired(); - support.structureCache.clearExpired(); - } - public void setState(String key, Object value) { try { getRealm().syncExec(() -> { diff --git a/bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateSessionManager.java b/bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateSessionManager.java index 267217c20..321141abc 100644 --- a/bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateSessionManager.java +++ b/bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateSessionManager.java @@ -2,12 +2,10 @@ package org.simantics.document.server.state; import org.simantics.db.ReadGraph; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.NodeSupport; -import org.simantics.simulator.toolkit.StandardNodeManager; import org.simantics.simulator.toolkit.StandardRealm; -import org.simantics.simulator.toolkit.db.StandardSessionManager; +import org.simantics.simulator.toolkit.db.StandardVariableSessionManager; -public class StateSessionManager extends StandardSessionManager { +public class StateSessionManager extends StandardVariableSessionManager { private static StateSessionManager INSTANCE; @@ -28,10 +26,4 @@ public class StateSessionManager extends StandardSessionManager manager, - NodeSupport support) { - ((StateNodeManager)manager).registerSupport(support); - } - } diff --git a/bundles/org.simantics.jdbc/src/org/simantics/jdbc/variable/JDBCSessionManager.java b/bundles/org.simantics.jdbc/src/org/simantics/jdbc/variable/JDBCSessionManager.java index f6a6077e4..17ffcf143 100644 --- a/bundles/org.simantics.jdbc/src/org/simantics/jdbc/variable/JDBCSessionManager.java +++ b/bundles/org.simantics.jdbc/src/org/simantics/jdbc/variable/JDBCSessionManager.java @@ -21,7 +21,7 @@ import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.NodeSupport; import org.simantics.jdbc.SimanticsJDBC; import org.simantics.simulator.toolkit.StandardRealm; -import org.simantics.simulator.toolkit.db.StandardSessionManager; +import org.simantics.simulator.toolkit.db.StandardVariableSessionManager; import org.simantics.simulator.variable.exceptions.NodeManagerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,7 +30,7 @@ import com.impossibl.postgres.api.jdbc.PGConnection; import com.impossibl.postgres.api.jdbc.PGNotificationListener; import com.impossibl.postgres.jdbc.PGDataSource; -public class JDBCSessionManager extends StandardSessionManager { +public class JDBCSessionManager extends StandardVariableSessionManager { private static final Logger LOGGER = LoggerFactory.getLogger(JDBCSessionManager.class); private static JDBCSessionManager INSTANCE = new JDBCSessionManager(); diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerData.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerData.java index e1f179965..ea3f61e80 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerData.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerData.java @@ -235,7 +235,7 @@ public class ComponentTypeViewerData { combo.addListener(SWT.Traverse, listener); } - protected void editUnit(Table table, TableEditor editor, final ComponentTypeViewerPropertyInfo propertyInfo, TableItem selectedItem, int column) { + public void editUnit(Table table, TableEditor editor, final ComponentTypeViewerPropertyInfo propertyInfo, TableItem selectedItem, int column) { // Disallow unit editing for non-numeric configuration properties if (propertyInfo.numberType == null && propertyInfo.sectionSpecificData == null) return; diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerPropertyInfo.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerPropertyInfo.java index 57ba4c462..c5e77383f 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerPropertyInfo.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewerPropertyInfo.java @@ -4,6 +4,7 @@ import org.simantics.databoard.annotations.Optional; import org.simantics.databoard.type.NumberType; import org.simantics.db.Resource; import org.simantics.utils.strings.AlphanumComparator; +import org.simantics.utils.strings.StringUtils; public class ComponentTypeViewerPropertyInfo implements Comparable { public Resource resource; @@ -135,6 +136,16 @@ public class ComponentTypeViewerPropertyInfo implements Comparable VALIDATE_MONITOR_EXPRESSION = new Function4() { @Override @@ -155,11 +155,11 @@ public class DerivedPropertiesSection implements ComponentTypeViewerSection { }, VALIDATE_MONITOR_EXPRESSION); break; -// case 3: -// editUnit(table2, editor2, propertyInfo, selectedItem, column); -// break; - case 3: + data.editUnit(table, editor, propertyInfo, selectedItem, column); + break; + + case 4: data.editValue(table, editor, propertyInfo, selectedItem, column, propertyInfo.immutable ? null : new StringWriter() { @Override public void perform(WriteGraph graph, String newValue) throws DatabaseException { @@ -170,7 +170,7 @@ public class DerivedPropertiesSection implements ComponentTypeViewerSection { }, null); break; - case 4: + case 5: data.editMultilineText(table, editor, propertyInfo, selectedItem, selectedItemBounds, column, new StringWriter() { @Override public void perform(WriteGraph graph, String newValue) throws DatabaseException { @@ -330,9 +330,9 @@ public class DerivedPropertiesSection implements ComponentTypeViewerSection { item.setText(0, info.valid != null ? info.name + " (!)" : info.name); item.setText(1, info.type); item.setText(2, info.expression); - //item.setText(3, unitStr(info)); - item.setText(3, info.label); - item.setText(4, info.description); + item.setText(3, info.unitString()); + item.setText(4, info.label); + item.setText(5, info.description); item.setForeground(fg); @@ -376,4 +376,4 @@ public class DerivedPropertiesSection implements ComponentTypeViewerSection { return 100.0; } -} +} \ No newline at end of file diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/function/StandardPersistor.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/function/StandardPersistor.java index c8bf80cd8..21126cccc 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/function/StandardPersistor.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/function/StandardPersistor.java @@ -24,18 +24,18 @@ import org.simantics.browsing.ui.NodeContext; import org.simantics.browsing.ui.NodeContext.ConstantKey; import org.simantics.browsing.ui.common.NodeContextBuilder; import org.simantics.browsing.ui.common.NodeContextBuilder.MapNodeContext; +import org.simantics.browsing.ui.common.state.GraphExplorerStateBean; +import org.simantics.browsing.ui.common.state.GraphExplorerStateNodeBean; +import org.simantics.browsing.ui.common.state.IdentifiedStatePersistor; +import org.simantics.browsing.ui.common.state.StringArrayBean; +import org.simantics.browsing.ui.common.state.StringBean; import org.simantics.browsing.ui.model.actions.ActionBrowseContext; import org.simantics.browsing.ui.model.browsecontexts.BrowseContext; import org.simantics.browsing.ui.model.browsecontexts.BrowseContexts; import org.simantics.browsing.ui.model.nodetypes.EntityNodeType; import org.simantics.browsing.ui.model.nodetypes.NodeType; import org.simantics.browsing.ui.model.nodetypes.SpecialNodeType; -import org.simantics.browsing.ui.swt.GraphExplorerStateBean; -import org.simantics.browsing.ui.swt.GraphExplorerStateNodeBean; -import org.simantics.browsing.ui.swt.IdentifiedStatePersistor; import org.simantics.browsing.ui.swt.NodeContextValueBean; -import org.simantics.browsing.ui.swt.StringArrayBean; -import org.simantics.browsing.ui.swt.StringBean; import org.simantics.databoard.Bindings; import org.simantics.databoard.binding.impl.ArrayListBinding; import org.simantics.databoard.util.Bean; diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/userComponent/ComponentTypeCommands.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/userComponent/ComponentTypeCommands.java index 0afdb03b7..ea4de26b2 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/userComponent/ComponentTypeCommands.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/userComponent/ComponentTypeCommands.java @@ -11,8 +11,6 @@ *******************************************************************************/ package org.simantics.modeling.userComponent; -import gnu.trove.map.hash.THashMap; - import java.util.Map; import org.simantics.databoard.Bindings; @@ -47,6 +45,8 @@ import org.simantics.structural2.utils.StructuralUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import gnu.trove.map.hash.THashMap; + public class ComponentTypeCommands { private static final Logger LOGGER = LoggerFactory.getLogger(ComponentTypeCommands.class); @@ -334,24 +334,24 @@ public class ComponentTypeCommands { return; } - Datatype dt = graph.getDataType(object); - if (dt instanceof NumberType) { - NumberType nt = (NumberType) dt; - Binding ntb = Bindings.getBindingUnchecked(Datatype.class); - nt.setUnit(unit); + Layer0X L0X = Layer0X.getInstance(graph); + boolean hasRequiresDataType = graph.hasStatement(relation, L0X.RequiresDataType); + if (hasRequiresDataType) { + Datatype dt = graph.getDataType(object); + if (dt instanceof NumberType) { + Layer0 L0 = Layer0.getInstance(graph); + NumberType nt = (NumberType) Bindings.DATATYPE.cloneUnchecked(dt); + nt.setUnit(unit); + graph.claimLiteral(object, L0.HasDataType, L0.DataType, nt, Bindings.DATATYPE); + graph.claimLiteral(relation, L0X.RequiresDataType, L0.DataType, nt, Bindings.DATATYPE); + } + } - Layer0 L0 = Layer0.getInstance(graph); - Layer0X L0X = Layer0X.getInstance(graph); - - String oldUnit = graph.getPossibleRelatedValue2(relation, L0X.HasUnit, Bindings.STRING); + String oldUnit = graph.getPossibleRelatedValue2(relation, L0X.HasUnit, Bindings.STRING); + graph.claimLiteral(relation, L0X.HasUnit, unit, Bindings.STRING); - graph.claimLiteral(object, L0.HasDataType, L0.DataType, nt, ntb); - graph.claimLiteral(relation, L0X.RequiresDataType, L0.DataType, nt, ntb); - graph.claimLiteral(relation, L0X.HasUnit, unit, Bindings.STRING); - - CommentMetadata cm = graph.getMetadata(CommentMetadata.class); - graph.addMetadata(cm.add("Setted unit from " + oldUnit + " to " + unit + " for component/annotation " + type)); - } + CommentMetadata cm = graph.getMetadata(CommentMetadata.class); + graph.addMetadata(cm.add("Set unit from " + oldUnit + " to " + unit + " for component/annotation " + type + " property " + relation)); } /** diff --git a/bundles/org.simantics.simulator.toolkit.db/META-INF/MANIFEST.MF b/bundles/org.simantics.simulator.toolkit.db/META-INF/MANIFEST.MF index d09c829d7..b9b735d66 100644 --- a/bundles/org.simantics.simulator.toolkit.db/META-INF/MANIFEST.MF +++ b/bundles/org.simantics.simulator.toolkit.db/META-INF/MANIFEST.MF @@ -5,7 +5,8 @@ Bundle-SymbolicName: org.simantics.simulator.toolkit.db Bundle-Version: 1.0.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.simantics.simulator.toolkit;bundle-version="1.0.0";visibility:=reexport, - org.simantics.db.layer0;bundle-version="1.1.0" + org.simantics.db.layer0;bundle-version="1.1.0", + org.slf4j.api;bundle-version="1.7.25" Export-Package: org.simantics.simulator.toolkit.db Bundle-Vendor: Semantum Oy Automatic-Module-Name: org.simantics.simulator.toolkit.db diff --git a/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardSessionManager.java b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardSessionManager.java index 47b678282..2ad2546a6 100644 --- a/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardSessionManager.java +++ b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardSessionManager.java @@ -1,130 +1,7 @@ package org.simantics.simulator.toolkit.db; -import java.util.Collection; -import java.util.concurrent.ConcurrentHashMap; - -import org.simantics.db.ReadGraph; -import org.simantics.db.WriteGraph; -import org.simantics.db.common.request.ParametrizedPrimitiveRead; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.NodeSupport; -import org.simantics.db.procedure.Listener; -import org.simantics.simulator.toolkit.StandardNodeManager; import org.simantics.simulator.toolkit.StandardNodeManagerSupport; -import org.simantics.simulator.toolkit.StandardRealm; - -public abstract class StandardSessionManager> { - - private ConcurrentHashMap>> realmListeners = new ConcurrentHashMap<>(); - private ConcurrentHashMap> REALMS = new ConcurrentHashMap<>(); - private ConcurrentHashMap> SUPPORTS = new ConcurrentHashMap<>(); - - // Accessing Realms should be done over ParametrizedPrimitveRead for the - // case if a realm is destroyed and new one is created with the same id than - // the previously deleted one for the listeners to get discarded and new - // registered - private class RealmRequest extends ParametrizedPrimitiveRead> { - - public RealmRequest(String parameter) { - super(parameter); - } - - @Override - public void register(ReadGraph graph, Listener> procedure) { - StandardRealm realm = REALMS.get(parameter); - if (realm == null) { - try { - realm = createRealmInner(graph, parameter); - } catch (DatabaseException e) { - e.printStackTrace(); - } - } - - if(procedure.isDisposed()) { - procedure.execute(realm); - return; - } - - Listener> existing = getOrDisposeListener(parameter); - assert(existing == null); - realmListeners.put(parameter, procedure); - procedure.execute(realm); - } - - private StandardRealm createRealmInner(ReadGraph graph, String id) throws DatabaseException { - Engine engine = createEngine(graph, id); - StandardRealm realm = createRealm(engine, id); - modifyRealms(id, realm); - return realm; - } - } - - protected StandardSessionManager() { - } - - private Listener> getOrDisposeListener(String key) { - Listener> listener = realmListeners.get(key); - if(listener != null) { - if(listener.isDisposed()) { - realmListeners.remove(key); - } else { - return listener; - } - } - return null; - } - - private void modifyRealms(String key, StandardRealm realm) { - if(realm != null) { - REALMS.put(key, realm); - } else { - StandardRealm removedRealm = REALMS.remove(key); - if (removedRealm != null) - removedRealm.close(); - } - Listener> listener = getOrDisposeListener(key); - if(listener != null) { - listener.execute(realm); - } - } - - public void registerNodeSupport(StandardNodeManager realm, NodeSupport support) { - - } - - public NodeSupport getOrCreateNodeSupport(ReadGraph graph, String id) throws DatabaseException { - synchronized(SUPPORTS) { - NodeSupport result = SUPPORTS.get(id); - if(result == null) { - StandardRealm realm = getOrCreateRealm(graph, id); - result = new NodeSupport(realm.getNodeManager()); - registerNodeSupport(realm.getNodeManager(), result); - SUPPORTS.put(id, result); - } - return result; - } - } - - public StandardRealm getOrCreateRealm(ReadGraph graph, String id) throws DatabaseException { - synchronized(REALMS) { - return graph.syncRequest(new RealmRequest(id)); - } - } - - protected abstract Engine createEngine(ReadGraph graph, String id) throws DatabaseException; - protected abstract StandardRealm createRealm(Engine engine, String id); - public void removeRealm(WriteGraph graph, String id) throws DatabaseException { - modifyRealms(id, null); - // remove listeners from this realm - realmListeners.remove(id); - // if node support has been created remove it as well - NodeSupport support = SUPPORTS.remove(id); - if (support != null) - support.dispose(); - } +public abstract class StandardSessionManager> extends StandardVariableSessionManager { - public Collection getRealms() { - return REALMS.keySet(); - } } diff --git a/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableManagerVariableBuilder.java b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableManagerVariableBuilder.java new file mode 100644 index 000000000..7699a24fe --- /dev/null +++ b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableManagerVariableBuilder.java @@ -0,0 +1,29 @@ +package org.simantics.simulator.toolkit.db; + +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.NodeManagerVariableBuilder; +import org.simantics.db.layer0.variable.NodeSupport; +import org.simantics.simulator.toolkit.StandardNodeManager; + +public abstract class StandardVariableManagerVariableBuilder extends NodeManagerVariableBuilder { + + @Override + protected Object getRoot(ReadGraph graph, NodeSupport support, String sessionName) { + StandardNodeManager manager = (StandardNodeManager)support.manager; + return manager.getRoot(); + } + + /* + * For compatibility reasons. Existing implementations implement getNodeSupport directly and in that case this is not needed. + * New implementations should not implement getNodeSupport but rather implement this. + */ + protected StandardVariableSessionManager getSessionManager() { + throw new UnsupportedOperationException(); + } + + protected NodeSupport getNodeSupport(ReadGraph graph, String sessionName) throws DatabaseException { + return getSessionManager().getOrCreateNodeSupport(graph, sessionName); + } + +} diff --git a/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableNodeManager.java b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableNodeManager.java new file mode 100644 index 000000000..883f8099f --- /dev/null +++ b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableNodeManager.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2013 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + * Semantum Oy - initial API and implementation + *******************************************************************************/ +package org.simantics.simulator.toolkit.db; + +import org.simantics.db.layer0.variable.NodeSupport; +import org.simantics.simulator.toolkit.StandardNodeManager; +import org.simantics.simulator.toolkit.StandardNodeManagerSupport; +import org.simantics.simulator.toolkit.StandardRealm; + +/** + * Adds support for Layer0 Variable interface in StandardNodeManager + * + * @author Antti Villberg + */ +public class StandardVariableNodeManager> extends StandardNodeManager { + + protected NodeSupport support; + + public StandardVariableNodeManager(StandardRealm realm, Node root) { + super(realm, root); + this.support = new NodeSupport<>(this); + } + +/* public void registerNodeSupport(NodeSupport support) { + this.support = support; + } + + + public void registerSupport(NodeSupport support) { + this.support = support; + }*/ + + @Override + public void refreshVariable(Node node) { + super.refreshVariable(node); + support.valueCache.clearExpired(); + support.structureCache.clearExpired(); + } + +} \ No newline at end of file diff --git a/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableRealm.java b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableRealm.java new file mode 100644 index 000000000..6ed50d429 --- /dev/null +++ b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableRealm.java @@ -0,0 +1,18 @@ +package org.simantics.simulator.toolkit.db; + +import org.simantics.simulator.toolkit.StandardNodeManager; +import org.simantics.simulator.toolkit.StandardNodeManagerSupport; +import org.simantics.simulator.toolkit.StandardRealm; + +public abstract class StandardVariableRealm> extends StandardRealm { + + protected StandardVariableRealm(Engine engine, String id) { + super(engine, id); + } + + @Override + protected StandardNodeManager createManager(Node root) { + return new StandardVariableNodeManager(this, root); + } + +} \ No newline at end of file diff --git a/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableSessionManager.java b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableSessionManager.java new file mode 100644 index 000000000..5e824f45f --- /dev/null +++ b/bundles/org.simantics.simulator.toolkit.db/src/org/simantics/simulator/toolkit/db/StandardVariableSessionManager.java @@ -0,0 +1,129 @@ +package org.simantics.simulator.toolkit.db; + +import java.util.Collection; +import java.util.concurrent.ConcurrentHashMap; + +import org.simantics.db.ReadGraph; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.ParametrizedPrimitiveRead; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.NodeSupport; +import org.simantics.db.procedure.Listener; +import org.simantics.simulator.toolkit.StandardNodeManagerSupport; +import org.simantics.simulator.toolkit.StandardRealm; +import org.simantics.simulator.variable.NodeManager; + +public abstract class StandardVariableSessionManager> { + + private ConcurrentHashMap>> realmListeners = new ConcurrentHashMap<>(); + private ConcurrentHashMap> REALMS = new ConcurrentHashMap<>(); + private ConcurrentHashMap> SUPPORTS = new ConcurrentHashMap<>(); + + // Accessing Realms should be done over ParametrizedPrimitveRead for the + // case if a realm is destroyed and new one is created with the same id than + // the previously deleted one for the listeners to get discarded and new + // registered + private class RealmRequest extends ParametrizedPrimitiveRead> { + + public RealmRequest(String parameter) { + super(parameter); + } + + @Override + public void register(ReadGraph graph, Listener> procedure) { + StandardRealm realm = REALMS.get(parameter); + if (realm == null) { + try { + realm = createRealmInner(graph, parameter); + } catch (DatabaseException e) { + e.printStackTrace(); + } + } + + if(procedure.isDisposed()) { + procedure.execute(realm); + return; + } + + Listener> existing = getOrDisposeListener(parameter); + assert(existing == null); + realmListeners.put(parameter, procedure); + procedure.execute(realm); + } + + private StandardRealm createRealmInner(ReadGraph graph, String id) throws DatabaseException { + Engine engine = createEngine(graph, id); + StandardRealm realm = createRealm(engine, id); + modifyRealms(id, realm); + return realm; + } + } + + protected StandardVariableSessionManager() { + } + + private Listener> getOrDisposeListener(String key) { + Listener> listener = realmListeners.get(key); + if(listener != null) { + if(listener.isDisposed()) { + realmListeners.remove(key); + } else { + return listener; + } + } + return null; + } + + private void modifyRealms(String key, StandardRealm realm) { + if(realm != null) { + REALMS.put(key, realm); + } else { + StandardRealm removedRealm = REALMS.remove(key); + if (removedRealm != null) + removedRealm.close(); + } + Listener> listener = getOrDisposeListener(key); + if(listener != null) { + listener.execute(realm); + } + } + + public NodeSupport getOrCreateNodeSupport(ReadGraph graph, String id) throws DatabaseException { + synchronized(SUPPORTS) { + NodeSupport result = SUPPORTS.get(id); + if(result == null) { + StandardRealm realm = getOrCreateRealm(graph, id); + NodeManager nodeManager = realm.getNodeManager(); + if(!(nodeManager instanceof StandardVariableNodeManager)) + throw new DatabaseException("StandardVariableSessionManager requires an instance of StandardVariableNodeManager, got " + nodeManager.getClass()); + StandardVariableNodeManager svnm = (StandardVariableNodeManager)nodeManager; + result = svnm.support; + SUPPORTS.put(id, result); + } + return result; + } + } + + public StandardRealm getOrCreateRealm(ReadGraph graph, String id) throws DatabaseException { + synchronized(REALMS) { + return graph.syncRequest(new RealmRequest(id)); + } + } + + protected abstract Engine createEngine(ReadGraph graph, String id) throws DatabaseException; + protected abstract StandardRealm createRealm(Engine engine, String id); + + public void removeRealm(WriteGraph graph, String id) throws DatabaseException { + modifyRealms(id, null); + // remove listeners from this realm + realmListeners.remove(id); + // if node support has been created remove it as well + NodeSupport support = SUPPORTS.remove(id); + if (support != null) + support.dispose(); + } + + public Collection getRealms() { + return REALMS.keySet(); + } +} diff --git a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java index 8a51fd330..b8a549087 100644 --- a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java +++ b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java @@ -13,6 +13,7 @@ package org.simantics.simulator.toolkit; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -46,7 +47,7 @@ import gnu.trove.set.hash.THashSet; * * @author Antti Villberg */ -public abstract class StandardNodeManager> implements NodeManager { +public class StandardNodeManager> implements NodeManager { private static final Logger LOGGER = LoggerFactory.getLogger(StandardNodeManager.class); @@ -424,4 +425,9 @@ public abstract class StandardNodeManager getClassifications(Node node) throws NodeManagerException { + return Collections.emptySet(); + } + } \ No newline at end of file diff --git a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardRealm.java b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardRealm.java index e228b603d..8551222b2 100644 --- a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardRealm.java +++ b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardRealm.java @@ -46,7 +46,21 @@ abstract public class StandardRealm createManager(); + protected StandardNodeManager createManager(Node root) { + return new StandardNodeManager(this, root); + } + + protected StandardNodeManager createManager() { + return createManager(createRootNode()); + } + + /* + * For compatibility reasons. Existing implementations implement createManager() directly and in that case this is not needed. + * New implementations should not implement createManager() but rather implement this. + */ + protected Node createRootNode() { + throw new UnsupportedOperationException(); + } protected String getSCLContextKey() { return getClass().getSimpleName(); diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetBook.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetBook.java index 5a7dcd5ee..d741d4c7a 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetBook.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetBook.java @@ -24,12 +24,12 @@ import org.simantics.spreadsheet.graph.synchronization.LineUpdater; import org.simantics.spreadsheet.graph.synchronization.NullUpdater; import org.simantics.spreadsheet.graph.synchronization.SheetLineComponent; import org.simantics.spreadsheet.graph.synchronization.StyleUpdater; -import org.simantics.structural.synchronization.base.ComponentFactory; -import org.simantics.structural.synchronization.base.MappingBase; import org.simantics.structural.synchronization.base.ModuleUpdaterBase; import org.simantics.structural.synchronization.base.ModuleUpdaterFactoryBase; -import org.simantics.structural.synchronization.base.Solver; import org.simantics.structural.synchronization.base.SolverNameUtil; +import org.simantics.structural.synchronization.utils.ComponentFactory; +import org.simantics.structural.synchronization.utils.MappingBase; +import org.simantics.structural.synchronization.utils.Solver; import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; import it.unimi.dsi.fastutil.longs.AbstractLongList; diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetMapping.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetMapping.java index 23ce1cf11..64079d2b0 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetMapping.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetMapping.java @@ -3,10 +3,10 @@ package org.simantics.spreadsheet.graph; import java.io.Serializable; import org.simantics.spreadsheet.graph.synchronization.SheetLineComponent; -import org.simantics.structural.synchronization.base.ComponentFactory; -import org.simantics.structural.synchronization.base.MappingBase; -import org.simantics.structural.synchronization.base.Solver; -import org.simantics.structural.synchronization.base.StateUndoContextBase; +import org.simantics.structural.synchronization.utils.ComponentFactory; +import org.simantics.structural.synchronization.utils.MappingBase; +import org.simantics.structural.synchronization.utils.Solver; +import org.simantics.structural.synchronization.utils.StateUndoContextBase; public class SpreadsheetMapping extends MappingBase implements Serializable { diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetReferenceResolver.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetReferenceResolver.java index 6428f9b83..6c3c0b17c 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetReferenceResolver.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetReferenceResolver.java @@ -2,7 +2,7 @@ package org.simantics.spreadsheet.graph; import org.simantics.spreadsheet.graph.synchronization.SheetLineComponent; import org.simantics.structural.synchronization.base.ReferenceResolverBase; -import org.simantics.structural.synchronization.base.Solver; +import org.simantics.structural.synchronization.utils.Solver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetSessionManager.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetSessionManager.java index 19c994806..f50463ef0 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetSessionManager.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetSessionManager.java @@ -19,7 +19,7 @@ import org.simantics.db.layer0.variable.ProxyVariables; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.layer0.variable.Variables; import org.simantics.simulator.toolkit.StandardRealm; -import org.simantics.simulator.toolkit.db.StandardSessionManager; +import org.simantics.simulator.toolkit.db.StandardVariableSessionManager; import org.simantics.spreadsheet.graph.formula.SpreadsheetEvaluationEnvironment; import org.simantics.spreadsheet.graph.synchronization.SpreadsheetSynchronizationEventHandler; import org.simantics.spreadsheet.resource.SpreadsheetResource; @@ -27,7 +27,7 @@ import org.simantics.structural.synchronization.Synchronizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class SpreadsheetSessionManager extends StandardSessionManager { +public class SpreadsheetSessionManager extends StandardVariableSessionManager { private static final Logger LOGGER = LoggerFactory.getLogger(SpreadsheetSessionManager.class); diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LineCommandBuilder.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LineCommandBuilder.java index 6e1914361..90c96cc2d 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LineCommandBuilder.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LineCommandBuilder.java @@ -18,7 +18,7 @@ import org.simantics.spreadsheet.graph.parser.SheetFormulaParser; import org.simantics.spreadsheet.graph.parser.ast.AstArrayFormulaReference; import org.simantics.spreadsheet.graph.parser.ast.AstValue; import org.simantics.structural.synchronization.base.CommandBuilder; -import org.simantics.structural.synchronization.base.Solver; +import org.simantics.structural.synchronization.utils.Solver; public class LineCommandBuilder implements CommandBuilder { diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LineUpdater.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LineUpdater.java index 3462b247f..baa0851b2 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LineUpdater.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LineUpdater.java @@ -10,7 +10,7 @@ import org.simantics.structural.synchronization.base.CommandBuilder; import org.simantics.structural.synchronization.base.ModuleUpdateContext; import org.simantics.structural.synchronization.base.ModuleUpdaterBase; import org.simantics.structural.synchronization.base.PropertyUpdateRule; -import org.simantics.structural.synchronization.base.Solver; +import org.simantics.structural.synchronization.utils.Solver; public class LineUpdater extends ModuleUpdaterBase { diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LinesCommandBuilder.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LinesCommandBuilder.java index be7f25c9e..4cf804c2d 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LinesCommandBuilder.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/LinesCommandBuilder.java @@ -3,7 +3,7 @@ package org.simantics.spreadsheet.graph.synchronization; import org.simantics.spreadsheet.graph.SpreadsheetBook; import org.simantics.spreadsheet.graph.SpreadsheetLines; import org.simantics.structural.synchronization.base.CommandBuilder; -import org.simantics.structural.synchronization.base.Solver; +import org.simantics.structural.synchronization.utils.Solver; public class LinesCommandBuilder implements CommandBuilder { diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/NullCommandBuilder.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/NullCommandBuilder.java index 6e16386f7..80ed1ca13 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/NullCommandBuilder.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/NullCommandBuilder.java @@ -1,7 +1,7 @@ package org.simantics.spreadsheet.graph.synchronization; import org.simantics.structural.synchronization.base.CommandBuilder; -import org.simantics.structural.synchronization.base.Solver; +import org.simantics.structural.synchronization.utils.Solver; public class NullCommandBuilder implements CommandBuilder { diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/SheetLineComponent.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/SheetLineComponent.java index c3b40737d..5edea565f 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/SheetLineComponent.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/SheetLineComponent.java @@ -2,7 +2,7 @@ package org.simantics.spreadsheet.graph.synchronization; import java.io.Serializable; -import org.simantics.structural.synchronization.base.ComponentBase; +import org.simantics.structural.synchronization.utils.ComponentBase; import gnu.trove.map.hash.THashMap; import gnu.trove.procedure.TObjectProcedure; diff --git a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/StyleUpdater.java b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/StyleUpdater.java index de5b47cc8..4451d1314 100644 --- a/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/StyleUpdater.java +++ b/bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/synchronization/StyleUpdater.java @@ -12,7 +12,7 @@ import org.simantics.structural.synchronization.base.CommandBuilder; import org.simantics.structural.synchronization.base.ModuleUpdateContext; import org.simantics.structural.synchronization.base.ModuleUpdaterBase; import org.simantics.structural.synchronization.base.PropertyUpdateRule; -import org.simantics.structural.synchronization.base.Solver; +import org.simantics.structural.synchronization.utils.Solver; public class StyleUpdater extends ModuleUpdaterBase { diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/CommandBuilder.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/CommandBuilder.java index 45f2791a8..57b8d9a06 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/CommandBuilder.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/CommandBuilder.java @@ -1,5 +1,7 @@ package org.simantics.structural.synchronization.base; +import org.simantics.structural.synchronization.utils.Solver; + public interface CommandBuilder { void apply(Solver solver); diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ConnectionUpdateRule.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ConnectionUpdateRule.java index dd59baa55..144833a7a 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ConnectionUpdateRule.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ConnectionUpdateRule.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.Map; import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.structural.synchronization.utils.ComponentBase; public interface ConnectionUpdateRule> { diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdateContext.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdateContext.java index 1615aaf2b..854a22d23 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdateContext.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdateContext.java @@ -5,6 +5,8 @@ import gnu.trove.map.hash.THashMap; import java.util.ArrayList; import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.structural.synchronization.utils.ComponentBase; +import org.simantics.structural.synchronization.utils.Solver; public class ModuleUpdateContext> { diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdaterBase.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdaterBase.java index 9ec63c061..45ea7400f 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdaterBase.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdaterBase.java @@ -9,6 +9,7 @@ import java.util.Map; import org.simantics.databoard.binding.mutable.Variant; import org.simantics.structural.synchronization.protocol.Connection; import org.simantics.structural.synchronization.protocol.SerializedVariable; +import org.simantics.structural.synchronization.utils.ComponentBase; abstract public class ModuleUpdaterBase> { diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdaterFactoryBase.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdaterFactoryBase.java index 04320c946..f30527e3d 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdaterFactoryBase.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ModuleUpdaterFactoryBase.java @@ -1,6 +1,7 @@ package org.simantics.structural.synchronization.base; import org.simantics.db.exception.DatabaseException; +import org.simantics.structural.synchronization.utils.ComponentBase; public interface ModuleUpdaterFactoryBase> { diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/PropertyUpdateRule.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/PropertyUpdateRule.java index 32f94c27c..a0b734d15 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/PropertyUpdateRule.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/PropertyUpdateRule.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.Map; import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.structural.synchronization.utils.ComponentBase; public interface PropertyUpdateRule> { diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ReferenceResolverBase.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ReferenceResolverBase.java index 7fabc6747..33b5d9bdc 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ReferenceResolverBase.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ReferenceResolverBase.java @@ -8,6 +8,8 @@ import java.util.Collections; import org.simantics.databoard.util.URIStringUtils; import org.simantics.structural.synchronization.protocol.SynchronizationEventHandler; +import org.simantics.structural.synchronization.utils.ComponentBase; +import org.simantics.structural.synchronization.utils.Solver; import org.slf4j.Logger; abstract public class ReferenceResolverBase> { @@ -116,7 +118,7 @@ abstract public class ReferenceResolverBase> { private static void fullPathOfComponent(StringBuilder b, ComponentBase component) { if(component != null) { - fullPathOfComponent(b, component.parent); + fullPathOfComponent(b, component.getParent()); b.append("/").append(component.solverComponentName); } } diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/SynchronizationEventHandlerBase.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/SynchronizationEventHandlerBase.java index 82dd224b6..7be353a02 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/SynchronizationEventHandlerBase.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/SynchronizationEventHandlerBase.java @@ -15,6 +15,10 @@ import org.simantics.structural.synchronization.protocol.Connection; import org.simantics.structural.synchronization.protocol.SerializedVariable; import org.simantics.structural.synchronization.protocol.SynchronizationEventHandler; import org.simantics.structural.synchronization.protocol.SynchronizationException; +import org.simantics.structural.synchronization.utils.ComponentBase; +import org.simantics.structural.synchronization.utils.ComponentFactory; +import org.simantics.structural.synchronization.utils.MappingBase; +import org.simantics.structural.synchronization.utils.Solver; import org.slf4j.Logger; import gnu.trove.map.hash.THashMap; diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/UpdateComponentUids.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/UpdateComponentUids.java index 0c051ecef..df63ada05 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/UpdateComponentUids.java +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/UpdateComponentUids.java @@ -5,6 +5,7 @@ import org.simantics.db.ReadGraph; import org.simantics.db.exception.CancelTransactionException; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.Variable; +import org.simantics.structural.synchronization.utils.ComponentBase; import gnu.trove.map.hash.THashMap; diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ComponentBase.java b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/ComponentBase.java similarity index 98% rename from bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ComponentBase.java rename to bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/ComponentBase.java index 943b79704..ae0ae7720 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ComponentBase.java +++ b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/ComponentBase.java @@ -1,4 +1,4 @@ -package org.simantics.structural.synchronization.base; +package org.simantics.structural.synchronization.utils; import gnu.trove.map.hash.THashMap; import gnu.trove.procedure.TObjectObjectProcedure; diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ComponentFactory.java b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/ComponentFactory.java similarity index 62% rename from bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ComponentFactory.java rename to bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/ComponentFactory.java index 82ffe07cb..1bd604f8b 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/ComponentFactory.java +++ b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/ComponentFactory.java @@ -1,4 +1,4 @@ -package org.simantics.structural.synchronization.base; +package org.simantics.structural.synchronization.utils; public interface ComponentFactory> { diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/MappingBase.java b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/MappingBase.java similarity index 99% rename from bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/MappingBase.java rename to bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/MappingBase.java index 78678b505..3c96a3fef 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/MappingBase.java +++ b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/MappingBase.java @@ -1,12 +1,12 @@ -package org.simantics.structural.synchronization.base; +package org.simantics.structural.synchronization.utils; + +import java.io.PrintWriter; import gnu.trove.map.hash.THashMap; import gnu.trove.procedure.TObjectObjectProcedure; import gnu.trove.procedure.TObjectProcedure; import gnu.trove.set.hash.THashSet; -import java.io.PrintWriter; - /** * The entry point to the mapping structure between Simantics database and a * designated solver. It is used to synchronize changes from Simantics to the diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/Solver.java b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/Solver.java similarity index 85% rename from bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/Solver.java rename to bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/Solver.java index 6bda54418..a448821a8 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/Solver.java +++ b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/Solver.java @@ -1,4 +1,4 @@ -package org.simantics.structural.synchronization.base; +package org.simantics.structural.synchronization.utils; public interface Solver { diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/StateUndoContextBase.java b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/StateUndoContextBase.java similarity index 83% rename from bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/StateUndoContextBase.java rename to bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/StateUndoContextBase.java index b268104e3..8c5730428 100644 --- a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/StateUndoContextBase.java +++ b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/utils/StateUndoContextBase.java @@ -1,5 +1,4 @@ -package org.simantics.structural.synchronization.base; - +package org.simantics.structural.synchronization.utils; /** * Stores state information of removed modules.