X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Factions%2FMergeFlagsAction.java;h=ea0a40593be4500aae06ec4efe4ac97bba91f6f8;hb=f102c41489c2cbd78116d513cd0e351434bb43eb;hp=f38cc0e1c0f168d9e02d10565b28c0619a029e51;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/MergeFlagsAction.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/MergeFlagsAction.java index f38cc0e1c..ea0a40593 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/MergeFlagsAction.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/MergeFlagsAction.java @@ -1,103 +1,103 @@ -package org.simantics.modeling.ui.actions; - -import gnu.trove.set.hash.THashSet; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.SubMonitor; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; -import org.simantics.Simantics; -import org.simantics.db.Resource; -import org.simantics.db.WriteGraph; -import org.simantics.db.common.request.WriteRequest; -import org.simantics.db.exception.CancelTransactionException; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.adapter.ActionFactory; -import org.simantics.modeling.flags.MergeFlags; -import org.simantics.utils.ui.ExceptionUtils; - -/** - * @author Hannu Niemistö - * @author Tuukka Lehtonen - */ -public class MergeFlagsAction implements ActionFactory { - - @Override - public Runnable create(Object target) { - if (!(target instanceof Resource)) - return null; - - Resource composite = (Resource) target; - final THashSet composites = new THashSet(); - composites.add(composite); - - return new Runnable() { - @Override - public void run() { - try { - IRunnableWithProgress runnable = new IRunnableWithProgress() { - @Override - public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - final SubMonitor submonitor = SubMonitor.convert(monitor, "Merge Flags", 1000); - try { - Simantics.getSession().sync(new WriteRequest() { - @Override - public void perform(WriteGraph graph) throws DatabaseException { - graph.markUndoPoint(); - - SubMonitor expand = submonitor.newChild(10); - expand.subTask("Expand Composite Set"); - MergeFlags.expandCompositeSet(graph, composites); - if (monitor.isCanceled()) - throw new CancelTransactionException(); - expand.done(); - - SubMonitor collect = submonitor.newChild(490); - collect.subTask("Collect flags"); - collect.setWorkRemaining(composites.size()); - ArrayList> groups = new ArrayList>(); - for(Resource composite : composites) { - MergeFlags.collectFlagGroupsInComposite(graph, composite, groups); - if (monitor.isCanceled()) - throw new CancelTransactionException(); - collect.worked(1); - } - collect.done(); - - SubMonitor merge = submonitor.newChild(500); - merge.subTask("Merge collected flags"); - merge.setWorkRemaining(composites.size()); - for(ArrayList group : groups) { - MergeFlags.merge(graph, group); - if (monitor.isCanceled()) - throw new CancelTransactionException(); - merge.worked(1); - } - merge.done(); - } - }); - } catch (CancelTransactionException e) { - } catch (DatabaseException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }; - - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - new ProgressMonitorDialog(shell).run(true, true, runnable); - } catch (InvocationTargetException e) { - ExceptionUtils.logAndShowError(e.getTargetException()); - } catch (InterruptedException e) { - } - } - }; - } - -} +package org.simantics.modeling.ui.actions; + +import gnu.trove.set.hash.THashSet; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.PlatformUI; +import org.simantics.Simantics; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.CancelTransactionException; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.ActionFactory; +import org.simantics.modeling.flags.MergeFlags; +import org.simantics.utils.ui.ExceptionUtils; + +/** + * @author Hannu Niemistö + * @author Tuukka Lehtonen + */ +public class MergeFlagsAction implements ActionFactory { + + @Override + public Runnable create(Object target) { + if (!(target instanceof Resource)) + return null; + + Resource composite = (Resource) target; + final THashSet composites = new THashSet(); + composites.add(composite); + + return new Runnable() { + @Override + public void run() { + try { + IRunnableWithProgress runnable = new IRunnableWithProgress() { + @Override + public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + final SubMonitor submonitor = SubMonitor.convert(monitor, Messages.MergeFlagsAction_MonitorMergeFlags, 1000); + try { + Simantics.getSession().sync(new WriteRequest() { + @Override + public void perform(WriteGraph graph) throws DatabaseException { + graph.markUndoPoint(); + + SubMonitor expand = submonitor.newChild(10); + expand.subTask(Messages.MergeFlagsAction_ExpandCompositeSet); + MergeFlags.expandCompositeSet(graph, composites); + if (monitor.isCanceled()) + throw new CancelTransactionException(); + expand.done(); + + SubMonitor collect = submonitor.newChild(490); + collect.subTask(Messages.MergeFlagsAction_CollectFlag); + collect.setWorkRemaining(composites.size()); + ArrayList> groups = new ArrayList>(); + for(Resource composite : composites) { + MergeFlags.collectFlagGroupsInComposite(graph, composite, groups); + if (monitor.isCanceled()) + throw new CancelTransactionException(); + collect.worked(1); + } + collect.done(); + + SubMonitor merge = submonitor.newChild(500); + merge.subTask(Messages.MergeFlagsAction_MonitorMergeCollectedFlags); + merge.setWorkRemaining(composites.size()); + for(ArrayList group : groups) { + MergeFlags.merge(graph, group); + if (monitor.isCanceled()) + throw new CancelTransactionException(); + merge.worked(1); + } + merge.done(); + } + }); + } catch (CancelTransactionException e) { + } catch (DatabaseException e) { + throw new InvocationTargetException(e); + } finally { + monitor.done(); + } + } + }; + + Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); + new ProgressMonitorDialog(shell).run(true, true, runnable); + } catch (InvocationTargetException e) { + ExceptionUtils.logAndShowError(e.getTargetException()); + } catch (InterruptedException e) { + } + } + }; + } + +}