From eaa9ba529f6d20d79583ec64c918ac80685438f7 Mon Sep 17 00:00:00 2001
From: Patrick Plitzner
Date: Tue, 19 Jan 2016 08:02:49 +0100
Subject: [PATCH] Allow creating new taxa in taxon selection dialog #2402
---
.../taxeditor/newWizard/NewTaxonWizard.java | 60 +++++++++++++++++++
...actFilteredCdmResourceSelectionDialog.java | 41 ++++++-------
.../selection/TaxonBaseSelectionDialog.java | 19 ++----
.../element/AbstractCdmEntityWizardPage.java | 29 ++++++---
.../ui/section/taxon/TaxonWizardPage.java | 49 +++++++++++++++
5 files changed, 156 insertions(+), 42 deletions(-)
create mode 100644 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizard.java
create mode 100644 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/taxon/TaxonWizardPage.java
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizard.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizard.java
new file mode 100644
index 000000000..1947c452f
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizard.java
@@ -0,0 +1,60 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* 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.newWizard;
+
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameWizardPage;
+import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonWizardPage;
+
+/**
+ *
+ * @author pplitzner
+ * @date Jan 18, 2016
+ *
+ */
+public class NewTaxonWizard extends AbstractNewEntityWizard {
+
+ private TaxonWizardPage taxonWizardPage;
+
+ /** {@inheritDoc} */
+ @Override
+ public void addPages() {
+ addPage(new NonViralNameWizardPage(formFactory, getConversationHolder(), (NonViralName) getEntity().getName()));
+ taxonWizardPage = new TaxonWizardPage(formFactory, getConversationHolder(), getEntity());
+ addPage(taxonWizardPage);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected Taxon createNewEntity() {
+ return Taxon.NewInstance(NonViralName.NewInstance(null), null);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected void saveEntity() {
+ CdmStore.getService(ITaxonService.class).save(getEntity());
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void setEntity(Taxon entity) {
+ super.setEntity(entity);
+ }
+
+ @Override
+ protected String getEntityName() {
+ return "Taxon";
+ }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java
index fba0ce6c3..a22f14454 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/AbstractFilteredCdmResourceSelectionDialog.java
@@ -477,26 +477,27 @@ public abstract class AbstractFilteredCdmResourceSelectionDialog(entity.getUuid(),
- entity.getId(),
- getTitle(entity)));
- refresh();
- setPattern(entity);
- getConversationHolder().bind();
- }
- //FIXME : Need to make sure this is a stable fix (ticket 3822)
- getConversationHolder().commit();
- }
+ AbstractNewEntityWizard wizard = getNewEntityWizard(e.text);
+ if(wizard!=null){
+ wizard.init(null, null);
+ if(wizard.getEntity() != null) {
+ WizardDialog dialog = new WizardDialog(getShell(), wizard);
+ int status = dialog.open();
+
+ if (status == IStatus.OK) {
+
+ T entity = (T) wizard.getEntity();
+ model.add(new UuidAndTitleCache(entity.getUuid(),
+ entity.getId(),
+ getTitle(entity)));
+ refresh();
+ setPattern(entity);
+ getConversationHolder().bind();
+ }
+ //FIXME : Need to make sure this is a stable fix (ticket 3822)
+ getConversationHolder().commit();
+ }
+ }
}
};
}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/TaxonBaseSelectionDialog.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/TaxonBaseSelectionDialog.java
index 938609096..a02f2c0e1 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/TaxonBaseSelectionDialog.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/TaxonBaseSelectionDialog.java
@@ -12,8 +12,6 @@ package eu.etaxonomy.taxeditor.ui.dialog.selection;
import java.util.UUID;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
@@ -22,6 +20,7 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.newWizard.AbstractNewEntityWizard;
+import eu.etaxonomy.taxeditor.newWizard.NewTaxonWizard;
import eu.etaxonomy.taxeditor.store.CdmStore;
/**
@@ -34,7 +33,7 @@ public class TaxonBaseSelectionDialog extends AbstractFilteredCdmResourceSelecti
public static TaxonBase selectTaxonBase(Shell shell, ConversationHolder conversation) {
AbstractFilteredCdmResourceSelectionDialog dialog = new TaxonBaseSelectionDialog(TaxonBase.class, shell, conversation,
- "Choose a taxon", false, null, null);
+ "Choose a taxon/synonym", false, null, null);
return getSelectionFromDialog(dialog);
}
@@ -48,25 +47,19 @@ public class TaxonBaseSelectionDialog extends AbstractFilteredCdmResourceSelecti
public static Synonym selectSynonym(Shell shell, ConversationHolder conversation) {
AbstractFilteredCdmResourceSelectionDialog dialog = new TaxonBaseSelectionDialog(Synonym.class, shell, conversation,
- "Choose a taxon", false, null, null);
+ "Choose a synonym", false, null, null);
return (Synonym) getSelectionFromDialog(dialog);
}
private final Class extends TaxonBase> clazz;
protected TaxonBaseSelectionDialog(Class extends TaxonBase> clazz, Shell shell, ConversationHolder conversation, String title, boolean multi, TaxonBase taxon, TaxonBase taxonToBeFiltered) {
- super(shell, conversation, title, multi, ReferenceSelectionDialog.class.getCanonicalName(), taxon);
+ super(shell, conversation, title, multi, TaxonBaseSelectionDialog.class.getCanonicalName(), taxon);
this.cdmBaseToBeFiltered = taxonToBeFiltered;
this.clazz = clazz;
initModel();
}
- /** {@inheritDoc} */
- @Override
- protected Control createExtendedContentArea(Composite parent) {
- return null;
- }
-
/** {@inheritDoc} */
@Override
protected TaxonBase getPersistentObject(UUID uuid) {
@@ -90,12 +83,12 @@ public class TaxonBaseSelectionDialog extends AbstractFilteredCdmResourceSelecti
/** {@inheritDoc} */
@Override
protected AbstractNewEntityWizard getNewEntityWizard(String parameter) {
- return null;
+ return new NewTaxonWizard();
}
/** {@inheritDoc} */
@Override
protected String getNewWizardLinkText() {
- return null;
+ return String.format("Create a new %1s", "Taxon ");
}
}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractCdmEntityWizardPage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractCdmEntityWizardPage.java
index e04928fa8..505a653a2 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractCdmEntityWizardPage.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/AbstractCdmEntityWizardPage.java
@@ -1,9 +1,9 @@
// $Id$
/**
* Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy
+ * European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
- *
+ *
* 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.
*/
@@ -28,7 +28,7 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
*
* Abstract AbstractCdmEntityWizardPage class.
*
- *
+ *
* @author n.hoffmann
* @created Jun 1, 2010
* @version 1.0
@@ -46,7 +46,7 @@ public abstract class AbstractCdmEntityWizardPage extends WizardPage
*
* Constructor for AbstractCdmEntityWizardPage.
*
- *
+ *
* @param formFactory
* a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
* object.
@@ -82,7 +82,7 @@ public abstract class AbstractCdmEntityWizardPage extends WizardPage
/*
* (non-Javadoc)
- *
+ *
* @see
* org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
* .Composite)
@@ -115,7 +115,7 @@ public abstract class AbstractCdmEntityWizardPage extends WizardPage
*
* Getter for the field entity
.
*
- *
+ *
* @return a T object.
*/
public T getEntity() {
@@ -124,7 +124,7 @@ public abstract class AbstractCdmEntityWizardPage extends WizardPage
/**
* Creates the detail element for this wizard page
- *
+ *
* @param rootElement
* a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
* object.
@@ -169,6 +169,17 @@ public abstract class AbstractCdmEntityWizardPage extends WizardPage
if (event.getSource() == getDetailElement()) {
checkComplete();
}
+ else if(event.getSource() instanceof AbstractCdmDetailElement){
+ //check if parent element is set as detail element
+ ICdmFormElement formElement = (ICdmFormElement) event.getSource();
+ while(formElement.getParentElement()!=null){
+ if(formElement.getParentElement() == getDetailElement()){
+ checkComplete();
+ return;
+ }
+ formElement = formElement.getParentElement();
+ }
+ }
}
/**
@@ -191,7 +202,7 @@ public abstract class AbstractCdmEntityWizardPage extends WizardPage
*
* getConversationHolder
*
- *
+ *
* @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
* object.
*/
@@ -214,7 +225,7 @@ public abstract class AbstractCdmEntityWizardPage extends WizardPage
*
* Getter for the field detailElement
.
*
- *
+ *
* @return a
* {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement}
* object.
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/taxon/TaxonWizardPage.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/taxon/TaxonWizardPage.java
new file mode 100644
index 000000000..fa6d9ec85
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/taxon/TaxonWizardPage.java
@@ -0,0 +1,49 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* 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.ui.section.taxon;
+
+import org.eclipse.swt.SWT;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.taxeditor.ui.element.AbstractCdmEntityWizardPage;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
+
+/**
+ *
+ * @author pplitzner
+ * @date Jan 18, 2016
+ *
+ */
+public class TaxonWizardPage extends AbstractCdmEntityWizardPage {
+
+ public TaxonWizardPage(CdmFormFactory formFactory, ConversationHolder conversation,
+ TaxonBase entity) {
+ super(formFactory, conversation, entity);
+ setTitle("Taxon");
+ }
+
+
+ /** {@inheritDoc} */
+ @Override
+ public AbstractCdmDetailElement createElement(ICdmFormElement rootElement) {
+ TaxonBaseDetailElement taxonBaseDetailElement = formFactory.createTaxonBaseDetailElement(rootElement, SWT.NULL);
+ taxonBaseDetailElement.setEntity(entity);
+ return taxonBaseDetailElement;
+ }
+
+ @Override
+ public boolean isPageComplete() {
+ return true;
+ }
+}
--
2.34.1