]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/MergeFlagsHandler.java
a426915128b7734890066c63d071713dd3cac728
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / actions / MergeFlagsHandler.java
1 package org.simantics.modeling.ui.actions;
2
3 import java.util.Collections;
4 import java.util.List;
5
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.ui.PlatformUI;
8 import org.simantics.db.Resource;
9 import org.simantics.db.WriteGraph;
10 import org.simantics.db.exception.DatabaseException;
11 import org.simantics.diagram.synchronization.runtime.DiagramSelectionUpdater;
12 import org.simantics.g2d.canvas.ICanvasContext;
13 import org.simantics.modeling.flags.MergeFlags;
14
15 /**
16  * @author Hannu Niemistö
17  * @author Tuukka Lehtonen
18  */
19 public class MergeFlagsHandler extends FlagOperationHandler {
20
21     protected void perform(IProgressMonitor monitor, WriteGraph graph, List<Resource> flags, ICanvasContext canvasContext) throws DatabaseException {
22         monitor.beginTask("Merge Selected Flags", IProgressMonitor.UNKNOWN);
23         performMerge(graph, flags, canvasContext);
24     }
25
26     public static void performMerge(WriteGraph graph, List<Resource> flags, ICanvasContext canvasContext) throws DatabaseException {
27         final String text = MergeFlags.validateForMerge(graph, flags);
28         if(text != null) {
29             System.err.println(text);
30             PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
31                 @Override
32                 public void run() {
33                     PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
34                     .getActiveEditor().getEditorSite().getActionBars().getStatusLineManager()
35                     .setErrorMessage(text);
36                 }
37             });
38         }
39         else {
40             String result = MergeFlags.merge(graph, flags);
41             if(result != null && !result.isEmpty()) {
42                 System.err.println(result); // Should not happen because of prevalidation
43             } else {
44                 if (canvasContext != null) {
45                     // Make sure the diagram selection is set to the
46                     // merged flag after the merge.
47                     new DiagramSelectionUpdater( canvasContext )
48                     .setNewSelection(0, Collections.singleton( flags.get(0) ))
49                     .setOneshot(true)
50                     .track();
51                 }
52             }
53         }
54     }
55
56 }