* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
-
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;
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;
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;
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.security.RequiredPermissions;
+import eu.etaxonomy.taxeditor.store.CdmStore;
import eu.etaxonomy.taxeditor.workbench.WorkbenchUtility;
+import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
/**
* Utility for the editor package
*
* @author n.hoffmann
* @created 20.01.2009
- * @version 1.0
*/
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<MPart> parts = partService.getParts();
for (MPart part : parts) {
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(parentTaxonUuid);
+ 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);
}
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) {
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);
MPart part = showPart(NAME_EDITOR_ID, modelService, partService, application);
TaxonNameEditorE4 editor = (TaxonNameEditorE4) part.getObject();
+// editor.setDisabled();
editor.init(input);
+// editor.setEnabled();
+ editor.setFocus();
+ if (factsVisible){
+ showFacts(modelService, partService);
+ factsVisible = false;
+ }
+
+ if (mediaVisible){
+ showMedia(modelService, partService);
+ mediaVisible = false;
+ }
+ }
+
+ 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<MPart> checkForChanges(UUID taxonUUID, EPartService partService ){
Collection<MPart> parts = partService.getParts();
+ Collection<MPart> dirtyParts = new HashSet();
//check if part is already opened
boolean isDirty = false;
for (MPart part : parts) {
&& ((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<IE4SavablePart> checkForTaxonChanges(UUID taxonUUID, EPartService partService ){
+ Collection<MPart> parts = partService.getParts();
+ Collection<IE4SavablePart> 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;
}
/**
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;
+ }
+
+ /**
* <p>
* forceUserSave
* </p>
return true;
}
- public static boolean forceUserSaveE4Editor(TaxonNameEditorE4 editor, Shell shell) {
+ public static boolean forceUserSaveE4Editor(IE4SavablePart editor, Shell shell) {
if (editor.isDirty()) {
boolean doSave = MessageDialog
}
}
+ public static void closeObsoleteEditorWithChildren(TaxonNodeDto taxonNode, EPartService partService){
+ String treeIndex = taxonNode.getTreeIndex();
+ Collection<MPart> 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()!= null){
+ if(node.treeIndex().startsWith(treeIndex)){
+ 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");;
+ }
+ }
+ }
+ }
+
+ 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();
+ 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();
if(node.treeIndex().equals(treeIndex)){
TaxonEditorInputE4 input = TaxonEditorInputE4.NewInstance(node.getUuid());
editor.init(input);
-
-
}
}
-}
+}
\ No newline at end of file