From a2a04809ca6c7ee66db7bcaea8e760e7e37611fb Mon Sep 17 00:00:00 2001
From: Patrick Plitzner
Date: Wed, 13 Sep 2017 11:09:43 +0200
Subject: [PATCH] ref #6932 Fix new element handler and save
---
.../e4/handler/NewObjectHandlerE4.java | 78 +++++++++----------
.../bulkeditor/BulkEditorLineDisplay.java | 3 +-
.../bulkeditor/e4/AnnotatedTableItem.java | 4 +-
.../taxeditor/bulkeditor/e4/BulkEditorE4.java | 29 ++++++-
.../input/AbstractBulkEditorInput.java | 5 +-
5 files changed, 69 insertions(+), 50 deletions(-)
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/e4/handler/NewObjectHandlerE4.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/e4/handler/NewObjectHandlerE4.java
index 94639d63a..d585ed609 100644
--- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/e4/handler/NewObjectHandlerE4.java
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/e4/handler/NewObjectHandlerE4.java
@@ -15,10 +15,16 @@ import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Shell;
import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator;
import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorConstants;
import eu.etaxonomy.taxeditor.bulkeditor.e4.BulkEditorE4;
+import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.GroupCreator;
+import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.UserCreator;
/**
*
@@ -30,56 +36,46 @@ public class NewObjectHandlerE4 {
@Execute
public void execute(@Named(IServiceConstants.ACTIVE_PART)MPart activePart,
+ @Named(IServiceConstants.ACTIVE_SHELL)Shell shell,
MHandledMenuItem menuItem) {
Object key = menuItem.getTransientData().get(IBulkEditorConstants.DYNAMIC_OPEN_OBJECT_ID+".key");
BulkEditorE4 bulkEditor = (BulkEditorE4) activePart.getObject();
-
if (key != null) {
- IEntityCreator entityCreator = bulkEditor.getEditorInput().getEntityCreator();
String text = menuItem.getCommand().getCommandName();
- Object createdEntity = entityCreator.createEntity(text);
- bulkEditor.getEditorInput().getModel().add(createdEntity);
- bulkEditor.refresh();
+ //FIXME : This should probably go into some ValidatorFactory
+ IInputValidator nonEmptyInputValidator = null;
+ //FIXME : This is a workaround to not allow empty strings in the
+ // input dialog for User and Group entities.
+ // Normally this should be default
+ // behaviour, so we need to discuss whether this handler
+ // should be used to handle the creating new entities of
+ // type other than User and Group.
+ // Once #4348 is fixed this check can be removed.
+ if(text.equals(UserCreator.USER) || text.equals(GroupCreator.GROUP)) {
+ nonEmptyInputValidator = new IInputValidator() {
+ @Override
+ public String isValid(String text) {
+ if(text == null || text.isEmpty()) {
+ return "Input cannot be empty";
+ }
+ return null;
+ }
+ };
+ }
+ InputDialog dialog = new InputDialog(shell,
+ String.format("Create %s", text), String.format("Enter new %s", text), "",
+ nonEmptyInputValidator);
- // if(!(key instanceof SpecimenOrObservationType)) {
- //
- // //FIXME : This should probably go into some ValidatorFactory
- // IInputValidator nonEmptyInputValidator = null;
- // //FIXME : This is a workaround to not allow empty strings in the
- // // input dialog for User and Group entities.
- // // Normally this should be default
- // // behaviour, so we need to discuss whether this handler
- // // should be used to handle the creating new entities of
- // // type other than User and Group.
- // // Once #4348 is fixed this check can be removed.
- // if(text.equals(UserCreator.USER) || text.equals(GroupCreator.GROUP)) {
- // nonEmptyInputValidator = new IInputValidator() {
- // @Override
- // public String isValid(String text) {
- // if(text == null || text.isEmpty()) {
- // return "Input cannot be empty";
- // }
- // return null;
- // }
- // };
- // }
- // InputDialog dialog = new InputDialog(shell,
- // String.format("Create %s", text), String.format("Enter new %s", text), "",
- // nonEmptyInputValidator);
- //
- // if (dialog.open() != Window.CANCEL) {
- // ((AnnotatedLineEditor) editor).createAnnotatedLineNewObject(key, dialog.getValue());
- // }
- // } else {
- // ((AnnotatedLineEditor) editor).createAnnotatedLineNewObject(key, "Untitled");
- // }
- //
- // } else {
- // ((AnnotatedLineEditor) editor).createAnnotatedLineNewObject();
- // }
+ if (dialog.open() != Window.CANCEL) {
+ IEntityCreator entityCreator = bulkEditor.getEditorInput().getEntityCreator();
+ Object createdEntity = entityCreator.createEntity(key, dialog.getValue());
+ bulkEditor.getEditorInput().getModel().add(createdEntity);
+ bulkEditor.refresh(true);
+ bulkEditor.setDirty();
+ }
}
}
}
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java
index b48bdc060..2b1dedded 100644
--- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java
@@ -22,7 +22,6 @@ import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.agent.AgentBase;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.common.IAnnotatableEntity;
-import eu.etaxonomy.cdm.model.common.ICdmBase;
import eu.etaxonomy.cdm.model.common.Marker;
import eu.etaxonomy.cdm.model.name.TaxonName;
import eu.etaxonomy.cdm.model.reference.Reference;
@@ -64,7 +63,7 @@ public class BulkEditorLineDisplay implements ILineDisplayStrategy {
/** {@inheritDoc} */
@Override
public String getText(Object entity) {
- return editor.getEditorInput().getText((ICdmBase) entity);
+ return editor.getEditorInput().getText((CdmBase) entity);
}
/** {@inheritDoc} */
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/AnnotatedTableItem.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/AnnotatedTableItem.java
index d714c8fa9..31dca273f 100644
--- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/AnnotatedTableItem.java
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/AnnotatedTableItem.java
@@ -9,14 +9,14 @@
*/
package eu.etaxonomy.taxeditor.bulkeditor.e4;
-import eu.etaxonomy.cdm.model.common.ICdmBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
/**
* @author pplitzner
* @date 12.09.2017
*
*/
-public class AnnotatedTableItem {
+public class AnnotatedTableItem {
private T element;
private boolean isMergeCandidate = false;
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java
index 2fd6341f1..866b2d3fd 100644
--- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java
@@ -126,10 +126,20 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
@Persist
public void save() {
- dirty.setDirty(false);
+ // commit the conversation and start a new transaction immediately
+ conversation.commit(true);
- this.searchBar.updateEditorInput();
+ Object object = viewer.getInput();
+ if(object instanceof List){
+ for (Object item: (List)object) {
+ if(item instanceof AnnotatedTableItem){
+ CdmBase cdmBase = ((AnnotatedTableItem) item).getElement();
+ CdmStore.getService(cdmBase).merge(cdmBase, true);
+ }
+ }
+ }
+ dirty.setDirty(false);
}
/** {@inheritDoc} */
@@ -156,9 +166,24 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
}
public void refresh() {
+ refresh(false);
+ }
+
+ public void refresh(boolean resetInput) {
+ if(resetInput){
+ viewer.setInput(getEditorInput().getWrappedModel());
+ }
viewer.refresh();
}
+ public TableViewer getViewer() {
+ return viewer;
+ }
+
+ public void setDirty(){
+ dirty.setDirty(true);
+ }
+
public boolean isDirty() {
return dirty.isDirty();
}
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java
index 5813dcdd7..0bd958bab 100644
--- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java
@@ -23,7 +23,6 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.common.ICdmBase;
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
import eu.etaxonomy.cdm.model.common.MarkerType;
import eu.etaxonomy.cdm.strategy.merge.IMergable;
@@ -46,12 +45,12 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
* @version 1.0
* @param
*/
-public abstract class AbstractBulkEditorInput extends CdmEntitySessionInput implements IEditorInput ,
+public abstract class AbstractBulkEditorInput extends CdmEntitySessionInput implements IEditorInput ,
IEntityPersistenceService {
private UUID entityUuid;
- private List model;
+ private List model = new ArrayList<>();
private IEntityCreator entityCreator;
private final ConversationHolder conversation;
--
2.34.1