fix #3161 Term editors open as singletons
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 16 May 2018 12:01:14 +0000 (14:01 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 16 May 2018 12:01:29 +0000 (14:01 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/handler/OpenDefinedTermEditorHandlerE4.java

index 2579b827c57fbf0e8544e8d6bf252fd0580d0bee..465c47cd50bda3dbc71ad562f98e862c1e99220f 100644 (file)
@@ -8,7 +8,9 @@
  */
 
 package eu.etaxonomy.taxeditor.editor.definedterm.e4.handler;
+import java.util.List;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import org.eclipse.e4.core.di.annotations.Execute;
 import org.eclipse.e4.ui.model.application.MApplication;
@@ -39,15 +41,27 @@ public class OpenDefinedTermEditorHandlerE4 {
            String commandId = menuItem.getCommand().getElementId();
         UUID termTypeUuid = (UUID) menuItem.getTransientData().get(commandId+".termTypeUuid");
 
-               TermEditorInput termEditorInput = new TermEditorInput(TermType.getByUuid(termTypeUuid));
-               MPart part = partService.createPart(eu.etaxonomy.taxeditor.store.AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_DEFINEDTERM);
-               MPartStack editorAreaPartStack = WorkbenchUtility.getEditorAreaPartStack(application, modelService);
-               if(editorAreaPartStack!=null){
-                   editorAreaPartStack.getChildren().add(part);
+               TermType termType = TermType.getByUuid(termTypeUuid);
+        TermEditorInput termEditorInput = new TermEditorInput(termType);
+               List<MPart> alreadyOpenedEditors = partService.getParts().stream()
+               .filter(part->part.getObject()!=null && part.getObject() instanceof DefinedTermEditorE4)
+               .filter(part->((DefinedTermEditorE4)part.getObject()).getDefinedTermEditorInput().getTermType().equals(termType))
+               .collect(Collectors.toList());
+               if(!alreadyOpenedEditors.isEmpty()){
+                   //there should never be more than one already opened editor
+                   //so we just open the first
+                   partService.activate(alreadyOpenedEditors.iterator().next());
+               }
+               else{
+                   MPart part = partService.createPart(eu.etaxonomy.taxeditor.store.AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_DEFINEDTERM);
+                   MPartStack editorAreaPartStack = WorkbenchUtility.getEditorAreaPartStack(application, modelService);
+                   if(editorAreaPartStack!=null){
+                       editorAreaPartStack.getChildren().add(part);
+                   }
+                   part = partService.showPart(part, PartState.ACTIVATE);
+                   DefinedTermEditorE4 termEditor = (DefinedTermEditorE4) part.getObject();
+                   termEditor.init(termEditorInput);
                }
-               part = partService.showPart(part, PartState.ACTIVATE);
-               DefinedTermEditorE4 termEditor = (DefinedTermEditorE4) part.getObject();
-               termEditor.init(termEditorInput);
        }
 
 }