cleanup
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / EditorUtil.java
index db7a5f3d82b263ccc26159a955702efbce8bc3c6..142a89bf3b0c531d8f979ec3a00027080e0a9b3c 100644 (file)
@@ -11,6 +11,7 @@ package eu.etaxonomy.taxeditor.editor;
 
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.UUID;
 
 import org.eclipse.core.commands.ExecutionEvent;
@@ -31,6 +32,7 @@ import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.handlers.HandlerUtil;
 
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
@@ -38,6 +40,7 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
+import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
 import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
 import eu.etaxonomy.taxeditor.bulkeditor.input.TaxonEditorInput;
 import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.DescriptiveDataSetEditor;
@@ -101,28 +104,41 @@ public class EditorUtil extends AbstractUtility {
         editor.init(descriptiveDataSetUuid, true);
     }
 
-    public static void openDistributionEditor(UUID parentTaxonUuid, EModelService modelService, EPartService partService, MApplication application){
+    public static void openDistributionEditor(UuidAndTitleCache parentUuidAndTitleCache, EModelService modelService, EPartService partService, MApplication application){
         Collection<MPart> parts = partService.getParts();
         String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_CHECKLIST_E4_DISTRIBUTIONEDITORPART;
+        checkAndCloseFactsAndMediaParts(partService);
+        MPart part = showPart(partId, modelService, partService, application);
+        DistributionEditorPart editor = (DistributionEditorPart) part.getObject();
+        editor.init(parentUuidAndTitleCache);
+    }
+
+    public static void openDistributionEditor(List<UuidAndTitleCache> parentTaxonUuidList, EModelService modelService, EPartService partService, MApplication application){
+        Collection<MPart> parts = partService.getParts();
+        String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_CHECKLIST_E4_DISTRIBUTIONEDITORPART;
+        checkAndCloseFactsAndMediaParts(partService);
+        MPart part = showPart(partId, modelService, partService, application);
+        DistributionEditorPart editor = (DistributionEditorPart) part.getObject();
+        editor.init(parentTaxonUuidList);
+    }
+
+    public static void checkAndCloseFactsAndMediaParts(EPartService partService) {
         String partIdFactualData = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVE_E4_FACTUALDATAPARTE4;
         String partIdMedia = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_MEDIA_E4_MEDIAVIEWPARTE4;
         MPart part1 = partService.findPart(AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVE_E4_FACTUALDATAPARTE4);
-        if (part1!=null && part1.getWidget() != null){
+        if (factsVisible || (part1!=null && part1.getWidget() != null && partService.isPartVisible(part1))){
             factsVisible = true;
         }else{
             factsVisible = false;
         }
         part1 = partService.findPart(AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_MEDIA_E4_MEDIAVIEWPARTE4);
-        if (part1!=null && part1.getWidget() != null){
+        if (mediaVisible || (part1!=null && part1.getWidget() != null && partService.isPartVisible(part1))){
             mediaVisible = true;
         }else{
             mediaVisible = false;
         }
         closePart(partIdMedia, partService);
         closePart(partIdFactualData, partService);
-        MPart part = showPart(partId, modelService, partService, application);
-        DistributionEditorPart editor = (DistributionEditorPart) part.getObject();
-        editor.init(parentTaxonUuid);
     }
 
 
@@ -157,7 +173,9 @@ public class EditorUtil extends AbstractUtility {
         if(editorAreaPartStack!=null){
             editorAreaPartStack.getChildren().add(part);
         }
+
         return partService.showPart(part, PartState.ACTIVATE);
+
     }
 
     public static MPart showPart(String partId, EModelService modelService, EPartService partService){
@@ -234,25 +252,32 @@ public class EditorUtil extends AbstractUtility {
 
         TaxonNameEditorE4 editor = (TaxonNameEditorE4) part.getObject();
         editor.init(input);
-        MPart part1 = partService.findPart(AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVE_E4_FACTUALDATAPARTE4);
+
         if (factsVisible){
-            String partIdFactualData = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVE_E4_FACTUALDATAPARTE4;
-            showPart(partIdFactualData, modelService, partService);
+            showFacts(modelService, partService);
             factsVisible = false;
         }
-        part1 = partService.findPart(AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_MEDIA_E4_MEDIAVIEWPARTE4);
+
         if (mediaVisible){
-            String partIdFactualData = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_MEDIA_E4_MEDIAVIEWPARTE4;
-            showPart(partIdFactualData, modelService, partService);
+            showMedia(modelService, partService);
             mediaVisible = false;
         }
-//        String partIdFactualData = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVE_E4_FACTUALDATAPARTE4;
-//        String partIdMedia = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_MEDIA_E4_MEDIAVIEWPARTE4;
-//        showPart(partIdMedia, modelService, partService);
-//        showPart(partIdFactualData, modelService, partService);
+
         editor.setFocus();
     }
 
+    public static void showMedia(EModelService modelService, EPartService partService) {
+        String partIdFactualData = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_MEDIA_E4_MEDIAVIEWPARTE4;
+        showPart(partIdFactualData, modelService, partService);
+
+    }
+
+    public static void showFacts(EModelService modelService, EPartService partService) {
+        String partIdFactualData = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVE_E4_FACTUALDATAPARTE4;
+        showPart(partIdFactualData, modelService, partService);
+
+    }
+
     public static Collection<MPart> checkForChanges(UUID taxonUUID, EPartService partService ){
         Collection<MPart> parts = partService.getParts();
         Collection<MPart> dirtyParts = new HashSet();
@@ -371,7 +396,7 @@ public class EditorUtil extends AbstractUtility {
                return true;
        }
 
-       public static boolean forceUserSaveE4Editor(TaxonNameEditorE4 editor, Shell shell) {
+       public static boolean forceUserSaveE4Editor(IE4SavablePart editor, Shell shell) {
            if (editor.isDirty()) {
 
                boolean doSave = MessageDialog
@@ -477,6 +502,26 @@ public class EditorUtil extends AbstractUtility {
     }
 
 
+    public static void closeObsoleteDescriptiveDatasetEditor(UUID datasetUuid, EPartService partService){
+
+        Collection<MPart> parts = partService.getParts();
+        for (MPart part : parts) {
+            Object object = part.getObject();
+            if(object instanceof DescriptiveDataSetEditor){
+                DescriptiveDataSetEditor editor = (DescriptiveDataSetEditor)object;
+                DescriptiveDataSet descDataSet = editor.getDescriptiveDataSet();
+                if(descDataSet.getUuid().equals(datasetUuid)){
+                    if (part.isDirty()){
+                        forceUserSaveE4Editor(editor, getShell());
+                    }
+                    partService.hidePart(part);
+                }
+
+            }
+        }
+    }
+
+
     public static void closePart(String partID, EPartService partService){
 
         Collection<MPart> parts = partService.getParts();