X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/e5dadfea18f8c634578e1e008ad0312b05687ac2..cd900bac349f731fa4ba78eaf5c7820e1cbf8d06:/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java index 35cb4040b..142a89bf3 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java @@ -10,6 +10,8 @@ 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; @@ -30,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; @@ -37,6 +40,9 @@ 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; import eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix.CharacterMatrixPart; import eu.etaxonomy.taxeditor.editor.e4.TaxonEditorInputE4; @@ -45,11 +51,13 @@ import eu.etaxonomy.taxeditor.editor.group.authority.e4.CdmAuthorityEditorE4; import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin; import eu.etaxonomy.taxeditor.editor.l10n.Messages; import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4; +import eu.etaxonomy.taxeditor.editor.view.checklist.e4.DistributionEditorPart; import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.workbench.WorkbenchUtility; +import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart; /** * Utility for the editor package @@ -62,7 +70,19 @@ public class EditorUtil extends AbstractUtility { private static final String NAME_EDITOR_ID = "eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4"; + private static boolean factsVisible = true; + + private static boolean mediaVisible = true; + public static void openDescriptiveDataSetEditor(UUID descriptiveDataSetUuid, EModelService modelService, EPartService partService, MApplication application){ + Collection parts = partService.getParts(); + for (MPart part : parts) { + if(part.getObject() instanceof DescriptiveDataSetEditor + && ((DescriptiveDataSetEditor) part.getObject()).getDescriptiveDataSet().getUuid().equals(descriptiveDataSetUuid)){ + partService.showPart(part, PartState.ACTIVATE); + return; + } + } String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVEDATASET_DESCRIPTIVEDATASETEDITOR; MPart part = showPart(partId, modelService, partService, application); DescriptiveDataSetEditor editor = (DescriptiveDataSetEditor) part.getObject(); @@ -70,12 +90,58 @@ public class EditorUtil extends AbstractUtility { } public static void openCharacterMatrix(UUID descriptiveDataSetUuid, EModelService modelService, EPartService partService, MApplication application){ + Collection parts = partService.getParts(); + for (MPart part : parts) { + if(part.getObject() instanceof CharacterMatrixPart + && ((CharacterMatrixPart) part.getObject()).getDescriptiveDataSet().getUuid().equals(descriptiveDataSetUuid)){ + partService.showPart(part, PartState.ACTIVATE); + return; + } + } String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_DESCRIPTIVEDATASET_MATRIX_CHARACTERMATRIXPART; MPart part = showPart(partId, modelService, partService, application); CharacterMatrixPart editor = (CharacterMatrixPart) part.getObject(); editor.init(descriptiveDataSetUuid, true); } + public static void openDistributionEditor(UuidAndTitleCache parentUuidAndTitleCache, EModelService modelService, EPartService partService, MApplication application){ + Collection 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 parentTaxonUuidList, EModelService modelService, EPartService partService, MApplication application){ + Collection 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 (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 (mediaVisible || (part1!=null && part1.getWidget() != null && partService.isPartVisible(part1))){ + mediaVisible = true; + }else{ + mediaVisible = false; + } + closePart(partIdMedia, partService); + closePart(partIdFactualData, partService); + } + + public static void openSpecimenEditor(DerivateViewEditorInput input, EModelService modelService, EPartService partService, MApplication application){ String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DERIVATE_DERIVATEVIEW; MPart part = showPart(partId, modelService, partService, application); @@ -107,7 +173,21 @@ 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){ + MPart part = partService.findPart(partId); + if(part==null || modelService.getPartDescriptor(partId).isAllowMultiple()){ + part = partService.createPart(partId); + partService.activate(part); + }else{ + partService.activate(part); + } + + return part; } public static void openTaxonNodeE4(UUID taxonNodeUuid, EModelService modelService, EPartService partService, MApplication application) { @@ -131,9 +211,18 @@ public class EditorUtil extends AbstractUtility { private static void openNameEditor_internal(TaxonEditorInputE4 input, EModelService modelService, EPartService partService, MApplication application) { TaxonBase taxonBase = input.getTaxon(); + TaxonNode node = input.getTaxonNode(); if(taxonBase==null){ return; } + boolean hasPermission = false; +// if (node != null){ +// hasPermission = CdmStore.currentAuthentiationHasPermission(node, RequiredPermissions.TAXON_EDIT); +// } +// if (!hasPermission){ +// MessagingUtils.warningDialog(Messages.EditorUtil_MISSING_PERMISSION, TaxonEditorInputE4.class, Messages.EditorUtil_MISSING_PERMISSION_MESSAGE); +// return; +// } if (taxonBase.isOrphaned()) { if(taxonBase.isInstanceOf(Synonym.class)){ MessagingUtils.warningDialog(Messages.EditorUtil_ORPHAN_ACCEPTED_TAXON, TaxonEditorInputE4.class, Messages.EditorUtil_ORPHAN_ACCEPTED_TAXON_MESSAGE); @@ -145,6 +234,7 @@ public class EditorUtil extends AbstractUtility { } } + Collection parts = partService.getParts(); //check if part is already opened for (MPart part : parts) { @@ -159,12 +249,38 @@ public class EditorUtil extends AbstractUtility { } } MPart part = showPart(NAME_EDITOR_ID, modelService, partService, application); + TaxonNameEditorE4 editor = (TaxonNameEditorE4) part.getObject(); editor.init(input); + + if (factsVisible){ + showFacts(modelService, partService); + factsVisible = false; + } + + if (mediaVisible){ + showMedia(modelService, partService); + mediaVisible = false; + } + + 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 MPart checkForChanges(UUID taxonUUID, EPartService partService ){ + public static Collection checkForChanges(UUID taxonUUID, EPartService partService ){ Collection parts = partService.getParts(); + Collection dirtyParts = new HashSet(); //check if part is already opened boolean isDirty = false; for (MPart part : parts) { @@ -172,13 +288,39 @@ public class EditorUtil extends AbstractUtility { && ((TaxonNameEditorE4) part.getObject()).getTaxon()!=null && ((TaxonNameEditorE4) part.getObject()).getTaxon().getUuid().equals(taxonUUID)){ if (part.isDirty()){ - return part; + dirtyParts.add(part); } break; + }else if (taxonUUID == null){ + if (part.isDirty()){ + dirtyParts.add(part); + } } } - return null; + return dirtyParts; + } + + public static Collection checkForTaxonChanges(UUID taxonUUID, EPartService partService ){ + Collection parts = partService.getParts(); + Collection dirtyParts = new HashSet<>(); + //check if part is already opened + for (MPart part : parts) { + if(part.getObject() instanceof TaxonNameEditorE4 + && ((TaxonNameEditorE4) part.getObject()).getTaxon()!=null + && ((TaxonNameEditorE4) part.getObject()).getTaxon().getUuid().equals(taxonUUID)){ + if (part.isDirty()){ + dirtyParts.add((IE4SavablePart) part); + } + + break; + }else if (taxonUUID == null){ + if (part.isDirty() && (part.getObject() instanceof TaxonNameEditorE4 || (part.getObject() instanceof BulkEditorE4 && ((BulkEditorE4)part.getObject()).getEditorInput() instanceof TaxonEditorInput))){ + dirtyParts.add((IE4SavablePart) part.getObject()); + } + } + } + return dirtyParts; } /** @@ -211,7 +353,23 @@ public class EditorUtil extends AbstractUtility { return IOperationHistory.GLOBAL_UNDO_CONTEXT; } - /** + public static boolean isFactsVisible() { + return factsVisible; + } + + public static void setFactsVisible(boolean factsVisible) { + EditorUtil.factsVisible = factsVisible; + } + + public static boolean isMediaVisible() { + return mediaVisible; + } + + public static void setMediaVisible(boolean mediaVisible) { + EditorUtil.mediaVisible = mediaVisible; + } + + /** *

* forceUserSave *

@@ -238,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 @@ -343,6 +501,38 @@ public class EditorUtil extends AbstractUtility { } } + + public static void closeObsoleteDescriptiveDatasetEditor(UUID datasetUuid, EPartService partService){ + + Collection 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 parts = partService.getParts(); + for (MPart part : parts) { + String elementId = part.getElementId(); + if (elementId.equals(partID)){ + partService.hidePart(part); + } + } + } + public static void updateEditor(TaxonNode taxonNode, TaxonNameEditorE4 editor){ String treeIndex = taxonNode.treeIndex(); TaxonNode node = editor.getEditorInput().getTaxonNode(); @@ -353,4 +543,5 @@ public class EditorUtil extends AbstractUtility { } } + }