ref #8774: open termTree editors only once
[taxeditor.git] / eu.etaxonomy.taxeditor.workbench / src / main / java / eu / etaxonomy / taxeditor / workbench / OpenPartHandler.java
index 8a04d3b21299bc491c5ddb21839d5ce4e9f05924..1d52b9b4d7592e6c0fb2632e76760951208ee576 100644 (file)
@@ -1,7 +1,9 @@
 
 package eu.etaxonomy.taxeditor.workbench;
 
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.e4.core.di.annotations.CanExecute;
@@ -25,14 +27,22 @@ public class OpenPartHandler {
         }
         Map parameterMap = commandParameters.getParameterMap();
         String partId = parameterMap.get(AppModelId.COMMANDPARAMETER_EU_ETAXONOMY_TAXEDITOR_WORKBENCH_COMMANDPARAMETER_PARTNAME).toString();
-        MPart part = partService.createPart(partId);
-        part = partService.showPart(part, PartState.ACTIVATE);
-        if(part.getObject() instanceof IEditorAreaPart){
+        List<MPart> alreadyOpenedEditors = partService.getParts().stream()
+                .filter(part->part.getElementId()!=null && part.getElementId().equals(partId))
+                .collect(Collectors.toList());
+        MPart partToOpen = partService.createPart(partId);
+
+        if (alreadyOpenedEditors.size() > 0){
+            partToOpen = alreadyOpenedEditors.iterator().next();
+        }
+        partToOpen = partService.showPart(partToOpen, PartState.ACTIVATE);
+
+        if(partToOpen.getObject() instanceof IEditorAreaPart){
             MPartStack editorAreaPartStack = WorkbenchUtility.getEditorAreaPartStack(application, modelService);
             if(editorAreaPartStack!=null){
-                editorAreaPartStack.getChildren().add(part);
+                editorAreaPartStack.getChildren().add(partToOpen);
             }
-            part = partService.showPart(part, PartState.VISIBLE);
+            partToOpen = partService.showPart(partToOpen, PartState.VISIBLE);
         }
     }