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