X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/56d00492ba8a081ce3e6594f636a6d79f82bf518..d960a7a1e845a7177402c58766e4ebcdfcf381e2:/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 6df572b6d..63228443b 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,7 @@ package eu.etaxonomy.taxeditor.editor; import java.util.Collection; +import java.util.HashSet; import java.util.UUID; import org.eclipse.core.commands.ExecutionEvent; @@ -27,28 +28,33 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeNode; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.HandlerUtil; +import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; import eu.etaxonomy.cdm.model.occurrence.FieldUnit; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; 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.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; import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditorInput; 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.editor.workingSet.WorkingSetEditor; -import eu.etaxonomy.taxeditor.editor.workingSet.matrix.CharacterMatrix; 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 @@ -60,54 +66,94 @@ import eu.etaxonomy.taxeditor.workbench.WorkbenchUtility; public class EditorUtil extends AbstractUtility { private static final String NAME_EDITOR_ID = "eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4"; - private static boolean isSaving = false; - /** - * Opens a new {@link DataImportEditor} for the given input - * @param input a {@link DataImportEditorInput} - * @throws PartInitException - */ -// public static void open(DataImportEditorInput input) -// throws PartInitException { -// if(input instanceof BioCaseEditorInput){ -// open(input, SpecimenImportEditor.ID); -// } -// else if(input instanceof GbifImportEditorInput){ -// open(input, GbifImportEditor.ID); -// } -// } - - public static void openWorkingSetEditor(UUID workingSetUuid, EModelService modelService, EPartService partService, MApplication application){ - MPart part = partService.createPart("eu.etaxonomy.taxeditor.editor.view.workingSet.WorkingSetEditor"); - MPartStack editorAreaPartStack = WorkbenchUtility.getEditorAreaPartStack(application, modelService); - if(editorAreaPartStack!=null){ - editorAreaPartStack.getChildren().add(part); + 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; + } } - part = partService.showPart(part, PartState.ACTIVATE); - WorkingSetEditor editor = (WorkingSetEditor) part.getObject(); - editor.init(workingSetUuid); + String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVEDATASET_DESCRIPTIVEDATASETEDITOR; + MPart part = showPart(partId, modelService, partService, application); + DescriptiveDataSetEditor editor = (DescriptiveDataSetEditor) part.getObject(); + editor.init(descriptiveDataSetUuid); } - public static void openCharacterMatrix(UUID workingSetUuid, EModelService modelService, EPartService partService, MApplication application){ - MPart part = partService.createPart("eu.etaxonomy.taxeditor.editor.workingSet.matrix.CharacterMatrix"); - MPartStack editorAreaPartStack = WorkbenchUtility.getEditorAreaPartStack(application, modelService); - if(editorAreaPartStack!=null){ - editorAreaPartStack.getChildren().add(part); + 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; + } } - part = partService.showPart(part, PartState.ACTIVATE); - CharacterMatrix editor = (CharacterMatrix) part.getObject(); - editor.init(workingSetUuid); + 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(UUID parentTaxonUuid, EModelService modelService, EPartService partService, MApplication application){ + Collection parts = partService.getParts(); + String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_CHECKLIST_E4_DISTRIBUTIONEDITORPART; + String partIdFactualData = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DESCRIPTIVE_E4_FACTUALDATAPARTE4; + String partIdMedia = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_MEDIA_E4_MEDIAVIEWPARTE4; + closePart(partIdMedia, partService); + closePart(partIdFactualData, partService); + MPart part = showPart(partId, modelService, partService, application); + DistributionEditorPart editor = (DistributionEditorPart) part.getObject(); + editor.init(parentTaxonUuid); } + public static void openSpecimenEditor(DerivateViewEditorInput input, EModelService modelService, EPartService partService, MApplication application){ - MPart part = partService.createPart(AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DERIVATE_DERIVATEVIEW); + String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DERIVATE_DERIVATEVIEW; + MPart part = showPart(partId, modelService, partService, application); + DerivateView derivateView = (DerivateView) part.getObject(); + derivateView.init(input); + } + + public static void openRightsEditor(CdmAuthorityEditorInput input, EModelService modelService, EPartService partService, MApplication application){ + Collection parts = partService.getParts(); + for (MPart part : parts) { + if(part.getObject() instanceof CdmAuthorityEditorE4 + && ((CdmAuthorityEditorE4) part.getObject()).getInput().getGroup().equals(input.getGroup())){ + partService.showPart(part, PartState.ACTIVATE); + return; + } + } + String partId = AppModelId.PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_GROUP_AUTHORITY_E4_CDMAUTHORITYEDITORE4; + MPart part = showPart(partId, modelService, partService, application); + CdmAuthorityEditorE4 authorityView = (CdmAuthorityEditorE4) part.getObject(); + authorityView.init(input); + } + + public static MPart showPart(String partId, EModelService modelService, EPartService partService, MApplication application){ + MPart part = partService.findPart(partId); + if(part==null || modelService.getPartDescriptor(partId).isAllowMultiple()){ + part = partService.createPart(partId); + } MPartStack editorAreaPartStack = WorkbenchUtility.getEditorAreaPartStack(application, modelService); if(editorAreaPartStack!=null){ editorAreaPartStack.getChildren().add(part); } - part = partService.showPart(part, PartState.ACTIVATE); - DerivateView derivateView = (DerivateView) part.getObject(); - derivateView.init(input); + 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) { @@ -151,30 +197,67 @@ public class EditorUtil extends AbstractUtility { if(part.getObject() instanceof TaxonNameEditorE4 && ((TaxonNameEditorE4) part.getObject()).getTaxon()!=null && ((TaxonNameEditorE4) part.getObject()).getTaxon().getUuid().equals(input.getTaxon().getUuid())){ + if (part.isDirty()){ + forceUserSaveE4Editor(((TaxonNameEditorE4) part.getObject()), getShell()); + } partService.hidePart(part); break; } } - MPart part = partService.createPart(NAME_EDITOR_ID); - - MPartStack editorAreaPartStack = WorkbenchUtility.getEditorAreaPartStack(application, modelService); - if(editorAreaPartStack!=null){ - editorAreaPartStack.getChildren().add(part); - } - part = partService.showPart(part, PartState.ACTIVATE); + MPart part = showPart(NAME_EDITOR_ID, modelService, partService, application); TaxonNameEditorE4 editor = (TaxonNameEditorE4) part.getObject(); editor.init(input); + 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 openRightsEditor(CdmAuthorityEditorInput input, EModelService modelService, EPartService partService, MApplication application){ - MPart part = partService.createPart("eu.etaxonomy.taxeditor.editor.group.authority.e4.CdmAuthorityEditorE4"); - MPartStack editorAreaPartStack = WorkbenchUtility.getEditorAreaPartStack(application, modelService); - if(editorAreaPartStack!=null){ - editorAreaPartStack.getChildren().add(part); + + 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) { + if(part.getObject() instanceof TaxonNameEditorE4 + && ((TaxonNameEditorE4) part.getObject()).getTaxon()!=null + && ((TaxonNameEditorE4) part.getObject()).getTaxon().getUuid().equals(taxonUUID)){ + if (part.isDirty()){ + dirtyParts.add(part); + } + + break; + }else if (taxonUUID == null){ + if (part.isDirty()){ + dirtyParts.add(part); + } + } } - part = partService.showPart(part, PartState.ACTIVATE); - CdmAuthorityEditorE4 authorityView = (CdmAuthorityEditorE4) part.getObject(); - authorityView.init(input); + 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); + } + } + } + return dirtyParts; } /** @@ -195,29 +278,6 @@ public class EditorUtil extends AbstractUtility { editor.init(input); } - /** - *

- * setSaving - *

- * - * @param isSaving - * a boolean. - */ - public static void setSaving(boolean isSaving) { - EditorUtil.isSaving = isSaving; - } - - /** - *

- * isSaving - *

- * - * @return a boolean. - */ - public static boolean isSaving() { - return isSaving; - } - /** *

* getUndoContext @@ -307,21 +367,22 @@ public class EditorUtil extends AbstractUtility { * @return either a FieldUnit or a the topmost DerivedUnit (which can be itself) */ public static SpecimenOrObservationBase getTopMostDerivate(SpecimenOrObservationBase specimen){ + if(specimen==null){ + return null; + } if(specimen.isInstanceOf(FieldUnit.class)){ return specimen; } - else if(specimen instanceof DerivedUnit - && ((DerivedUnit) specimen).getOriginals()!=null - && !((DerivedUnit) specimen).getOriginals().isEmpty()){ - for(SpecimenOrObservationBase original:((DerivedUnit) specimen).getOriginals()){ - return getTopMostDerivate(original); + else if(specimen.isInstanceOf(DerivedUnit.class)){ + DerivedUnit derivedUnit = HibernateProxyHelper.deproxy(specimen, DerivedUnit.class); + if(derivedUnit.getOriginals()!=null + && !(derivedUnit.getOriginals().isEmpty())){ + for(SpecimenOrObservationBase original:((DerivedUnit) specimen).getOriginals()){ + return getTopMostDerivate(original); + } } - //needed to add this for compilation although this is unreachable - return specimen; - } - else{ - return specimen; } + return specimen; } /** @@ -339,8 +400,8 @@ public class EditorUtil extends AbstractUtility { return null; } - public static void closeObsoleteEditor(TaxonNode taxonNode, EPartService partService){ - String treeIndex = taxonNode.treeIndex(); + public static void closeObsoleteEditor(TaxonNodeDto taxonNode, EPartService partService){ + String treeIndex = taxonNode.getTreeIndex(); Collection parts = partService.getParts(); for (MPart part : parts) { Object object = part.getObject(); @@ -349,7 +410,10 @@ public class EditorUtil extends AbstractUtility { TaxonNode node = taxonEditor.getEditorInput().getTaxonNode(); if (node.treeIndex()!= null){ if(node.treeIndex().startsWith(treeIndex)){ - partService.hidePart(part, true); + if (part.isDirty()){ + forceUserSaveE4Editor(taxonEditor, getShell()); + } + partService.hidePart(part); } }else{ logger.debug("The taxonnode of taxon " + node.getTaxon().getTitleCache() + " uuid: " + node.getUuid() + " has no treeindex");; @@ -357,20 +421,28 @@ public class EditorUtil extends AbstractUtility { } } } - - public static void updateEditor(TaxonNode taxonNode, EPartService partService, MApplication application){ - String treeIndex = taxonNode.treeIndex(); + + + public static void closePart(String partID, EPartService partService){ + Collection parts = partService.getParts(); for (MPart part : parts) { - Object object = part.getObject(); - if(object instanceof TaxonNameEditorE4){ - TaxonNameEditorE4 taxonEditor = (TaxonNameEditorE4)object; - TaxonNode node = taxonEditor.getEditorInput().getTaxonNode(); - if(node.treeIndex().startsWith(treeIndex)){ - TaxonEditorInputE4 input = TaxonEditorInputE4.NewInstanceFromTaxonBase(node.getTaxon().getUuid()); - taxonEditor.init(input); - } + 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(); + if(node.treeIndex().equals(treeIndex)){ + TaxonEditorInputE4 input = TaxonEditorInputE4.NewInstance(node.getUuid()); + editor.init(input); + + + } + } + }