Completed type module.
authorp.ciardelli <p.ciardelli@localhost>
Tue, 10 Mar 2009 15:12:52 +0000 (15:12 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Tue, 10 Mar 2009 15:12:52 +0000 (15:12 +0000)
19 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmDataSourceRepository.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/ConceptComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/CdmUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AbstractEditorPropertySheet.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/EditorPropertySheetEntry.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/name/TaxonBasePropertySource.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/ReferencePropertySource.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/TypeCollectionPropertySource.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertyDescriptor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertySource.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseNameTypeWizardPage.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseSpecimenTypeWizardPage.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseTypeDesignationWizardPage.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ListTypeWizardPage.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/NameSearchDialog.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeDesignationWizard.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeListWizard.java

index 726d36bf27b28253b25f10a6fa7916abd1ea83eb..21a08ec984cde13473ad1baaf0456d18c2c756dc 100644 (file)
@@ -555,7 +555,6 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/Nom
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/PreferencesUtil.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/RankMenuPreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/TaxonomicPreferences.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AbstractEditorPropertySheet.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AnnotationPropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AnnotationsDialog.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AnnotationsPropertyDescriptor.java -text
@@ -593,7 +592,9 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/TypeCollectionPropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertyDescriptor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/TypePropertySource.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseTypeDesignationWizardPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseNameTypeWizardPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseSpecimenTypeWizardPage.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ListTypeWizardPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/NameSearchDialog.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeDesignationWizard.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/TypeListWizard.java -text
index f4e6a6410809348057ba0ad5043556a819b47564..8bc1e7077d6a2496a6a3d8f994cbe119bd9c7103 100644 (file)
@@ -12,6 +12,7 @@ package eu.etaxonomy.taxeditor;
 import java.net.URL;\r
 import java.util.HashMap;\r
 import java.util.Locale;\r
+import java.util.Set;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.core.runtime.FileLocator;\r
@@ -171,9 +172,10 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
                CdmDataSourceRepository.getDefault().setCdmApplicationController(applicationController);\r
                CdmSessionDataRepository.getDefault().setApplicationController(applicationController);\r
                \r
-               // Terms have to be initialized explicitly as of now\r
-               DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();\r
-               vocabularyStore.initialize();\r
+//             // Terms have to be initialized explicitly as of now\r
+//             logger.warn("MAC Workaround enabled!!");\r
+//             DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();\r
+//             vocabularyStore.initialize();\r
                \r
                return applicationController;\r
        }\r
@@ -281,7 +283,7 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
                        fontRegistry.put(ITaxEditorConstants.CHOOSE_NAME_TEXT_FONT,\r
                                        new FontData[] { new FontData("Arial", 12, SWT.BOLD) });\r
                        fontRegistry.put(ITaxEditorConstants.DEFAULT_PROMPT_FONT,\r
-                                       new FontData[] { new FontData("Georgia", 10, SWT.ITALIC) });\r
+                                       new FontData[] { new FontData("Georgia", 10, SWT.ITALIC) });                    \r
                }\r
                return fontRegistry;\r
        }\r
@@ -290,6 +292,25 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
                return getFontRegistry().get(key);\r
        }\r
 \r
+       /**\r
+        * @param font\r
+        */\r
+       public Font italicizeFont(Font font) {\r
+               FontData fontData = font.getFontData()[0];\r
+               fontData.setStyle(fontData.getStyle() | SWT.ITALIC);\r
+               Font italFont = new Font(Display.getDefault(), fontData);\r
+               \r
+               int i = 0;\r
+               String fontName = "italic";\r
+               Set keySet = fontRegistry.getKeySet();\r
+               while (keySet.contains(fontName + i)) {\r
+                       i++;\r
+               }\r
+               fontRegistry.put(fontName + i, italFont.getFontData());\r
+               \r
+               return italFont;\r
+       }\r
+\r
        /***************************************************************************\r
         * COLOR MAP\r
         **************************************************************************/\r
index c114de860f88f115cf2eccf6ce07404d2ff67e87..ba377a11f0c02a2336a1fdd532a02edc5bd3f562 100644 (file)
@@ -22,14 +22,13 @@ import eu.etaxonomy.cdm.api.application.CdmApplicationController;
 import eu.etaxonomy.cdm.database.CdmDataSource;\r
 import eu.etaxonomy.cdm.database.CdmPersistentDataSource;\r
 import eu.etaxonomy.cdm.database.DatabaseTypeEnum;\r
+import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
 import eu.etaxonomy.cdm.database.ICdmDataSource;\r
 import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.controller.EditorController;\r
-import eu.etaxonomy.taxeditor.controller.TreeController;\r
 import eu.etaxonomy.taxeditor.controller.GlobalController;\r
+import eu.etaxonomy.taxeditor.controller.TreeController;\r
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
-import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
 public class CdmDataSourceRepository implements ICdmDataSourceRepository {\r
        private static final Logger logger = Logger\r
@@ -165,6 +164,7 @@ public class CdmDataSourceRepository implements ICdmDataSourceRepository {
                                                                                \r
                                        try {\r
                                                getCdmAppController().changeDataSource(dataSource);\r
+//                                             getCdmAppController().changeDataSource(dataSource, DbSchemaValidation.CREATE);\r
                                        } catch (TermNotFoundException e) {\r
                                                // TODO Auto-generated catch block\r
                                                e.printStackTrace();\r
index 163cc776c67ff487db503e7bf613f67cf8c231af..2e091c724468b2de096ab83a249370e69f0ffd20 100644 (file)
@@ -87,6 +87,11 @@ public class ConceptComposite extends NameComposite {
 \r
                TaxonRelationshipType relationshipType = relationship.getType();\r
                \r
+               if (relationship.getToTaxon() == null || relationship.getFromTaxon() == null) {\r
+                       logger.warn("Could not create concept composite - related taxon is null");\r
+                       return null;\r
+               }\r
+               \r
                if (relationship.getToTaxon().equals(taxon)) {\r
                        return new ConceptComposite (parent, form, taxon, \r
                                        relationship.getFromTaxon(), relationshipType, false);\r
index 852f9cb3cfa015313eb0d33573ff6cf9f93ddebd..3b644cdac01cfdeccf841e6e63014793506f9ce1 100644 (file)
@@ -29,6 +29,7 @@ import eu.etaxonomy.cdm.model.common.TimePeriod;
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.NameRelationship;\r
 import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
@@ -409,4 +410,22 @@ public class CdmUtil {
                }\r
                return false;\r
        }\r
+\r
+       /**\r
+        * @param name\r
+        * @return\r
+        */\r
+       public static boolean isNameSupraSpecific(TaxonNameBase name) {\r
+               \r
+               if (name == null || name.getRank() == null) {\r
+                       return false;\r
+               }\r
+               \r
+               if (name.getRank().isHigher(Rank.SPECIES())) {\r
+//             if (name.isInfraGeneric() || name.isSupraGeneric() || name.isGenus()) {\r
+                       return true;\r
+               } else {\r
+                       return false;\r
+               }\r
+       }\r
 }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AbstractEditorPropertySheet.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AbstractEditorPropertySheet.java
deleted file mode 100644 (file)
index d5aa2cb..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/**\r
-* Copyright (C) 2009 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-\r
-package eu.etaxonomy.taxeditor.propertysheet;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.ui.views.properties.IPropertySource;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.controller.EditorController;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 09.02.2009\r
- * @version 1.0\r
- */\r
-abstract public class AbstractEditorPropertySheet implements IPropertySource {\r
-       private static Logger logger = Logger\r
-                       .getLogger(AbstractEditorPropertySheet.class);\r
-\r
-       /** \r
-        * A reference to the taxon the concrete operation is working on \r
-        */\r
-       protected Taxon taxon;\r
-       \r
-       public AbstractEditorPropertySheet(Taxon taxon) {\r
-               this.taxon = taxon;\r
-       }\r
-               \r
-       /**\r
-        * \r
-        * @return\r
-        */\r
-       protected boolean redrawOpenEditor() {  \r
-               return EditorController.redraw(taxon);\r
-       }\r
-}\r
index 3fbd35e21874eb9c14c1eb82dad03d453ac1b4a5..248a9b664c0a11c7c8aaf3d0ae903cc368150ea2 100644 (file)
@@ -9,6 +9,8 @@
 package eu.etaxonomy.taxeditor.propertysheet;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.ui.views.properties.PropertySheetEntry;\r
 \r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
@@ -19,7 +21,7 @@ import eu.etaxonomy.taxeditor.controller.EditorController;
  * <p>\r
  * Also includes a lovely little hack to enable custom sorting:\r
  * <p>\r
- * GetDisplayName is called by two methods from the PropertySheetViewer, which\r
+ * GetDisplayName() is called by two methods from the PropertySheetViewer, which\r
  * <ul>\r
  *    <li>we are not allowed to set, and</li>\r
  *    <li>uses a comparator which sorts alphabetically.</li>\r
@@ -93,8 +95,7 @@ public class EditorPropertySheetEntry extends PropertySheetEntry {
        \r
        // If this is the top level of the property sheet, redraw the freetext area\r
        if (getParent() == null) {\r
-               EditorController.redraw(taxon);\r
+               EditorController.redraw(taxon);  // causing infinite loops?\r
        }\r
     }\r
-\r
 }
\ No newline at end of file
index 64fc6ebc76229b6db96e493030551965d4817b34..9acf9ad9fdf2ccf0ff50aa0958475c6353a93cc3 100644 (file)
@@ -26,9 +26,8 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.taxeditor.propertysheet.reference.IReferenceSearch;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
-import eu.etaxonomy.taxeditor.propertysheet.reference.ReferenceSearchDescriptor;\r
 import eu.etaxonomy.taxeditor.propertysheet.type.TypeCollectionPropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.type.TypePropertyDescriptor;\r
 \r
@@ -51,7 +50,7 @@ public class TaxonBasePropertySource implements IPropertySource {
     // Property display keys\r
        public String P_TAXONNAME;\r
        public static final String P_TAXONSEC = "01:Secundum";\r
-       public static final String P_TYPES = "02:Name Types";\r
+       public String P_TYPES = "02:Specimen Types";\r
        \r
        \r
        public TaxonBasePropertySource(TaxonBase taxon, String nameTitle) {\r
@@ -59,6 +58,10 @@ public class TaxonBasePropertySource implements IPropertySource {
                \r
                this.P_TAXONNAME = "00:" + nameTitle;\r
                \r
+               if (CdmUtil.isNameSupraSpecific(taxon.getName())) {\r
+                       this.P_TYPES = "02:Name Types";\r
+               }\r
+               \r
                addDescriptor(P_ID_TAXONNAME);\r
                addDescriptor(P_ID_TAXONSEC);\r
                addDescriptor(P_ID_TYPES);              \r
@@ -72,19 +75,12 @@ public class TaxonBasePropertySource implements IPropertySource {
                                        new PropertyDescriptor(P_ID_TAXONNAME, P_TAXONNAME));\r
                }               \r
                if (id.equals(P_ID_TAXONSEC)) {\r
-                       descriptors.addElement(new ReferenceSearchDescriptor(P_ID_TAXONSEC, P_TAXONSEC, IReferenceSearch.BIBREF) {\r
-                               protected void saveReference(ReferenceBase reference) {\r
-                                       setPropertyValue(P_ID_TAXONSEC, reference);\r
-                               }\r
-                       });\r
+                       descriptors.addElement(\r
+                                       new PropertyDescriptor(P_ID_TAXONSEC, P_TAXONSEC));                     \r
                }\r
                if (id.equals(P_ID_TYPES)) {\r
                        descriptors.addElement(\r
-                               new TypePropertyDescriptor(P_ID_TYPES, P_TYPES, taxon.getName()) {\r
-                                       protected void saveTypes(Set set) {\r
-                                               setPropertyValue(P_ID_TYPES, set);\r
-                                       }\r
-                               }\r
+                               new TypePropertyDescriptor(P_ID_TYPES, P_TYPES, taxon.getName())\r
                        );\r
                };\r
        }\r
@@ -160,7 +156,13 @@ public class TaxonBasePropertySource implements IPropertySource {
                \r
                if (id.equals(P_ID_TYPES)) {\r
                        if (taxon.getName() != null) {\r
-                               return new TypeCollectionPropertySource(taxon.getName(), taxon.getName().getSpecimenTypeDesignations());\r
+                               TaxonNameBase name = taxon.getName();\r
+                               \r
+                               if (CdmUtil.isNameSupraSpecific(taxon.getName())) {\r
+                                       return new TypeCollectionPropertySource(name, name.getNameTypeDesignations());\r
+                               } else {\r
+                                       return new TypeCollectionPropertySource(name, name.getSpecimenTypeDesignations());\r
+                               }\r
                        }\r
                }\r
                \r
@@ -183,10 +185,5 @@ public class TaxonBasePropertySource implements IPropertySource {
         * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object, java.lang.Object)\r
         */\r
        public void setPropertyValue(Object id, Object value) {\r
-        if (id.equals(P_ID_TAXONSEC)) {\r
-               if (value instanceof ReferenceBase) {\r
-                       taxon.setSec((ReferenceBase) value);\r
-               }\r
-        }\r
        }\r
 }\r
index 5bd2a1704f0a29f4a40536a48c9c0c5c960cfd96..1a64419bc001317759807ab1a9858e4365e3de89 100644 (file)
@@ -430,29 +430,6 @@ public class ReferencePropertySource implements IPropertySource {
                        descriptors.addElement(\r
                                        new TextPropertyDescriptor(P_ID_YEAR, P_YEAR));\r
                }\r
-//             if (id.equals(P_ID_YEAR)) {\r
-////                   TextPropertyDescriptor yearDescriptor = new TextPropertyDescriptor(P_ID_YEAR, P_YEAR) {\r
-////                       public CellEditor createPropertyEditor(Composite parent) {\r
-////                           CellEditor editor = new TextCellEditor(parent);\r
-////                           \r
-////                           // Colors cell yellow upon activation\r
-////                           editor.getControl().setBackground(new Color(Display.getDefault(), WarningAnnotation.WARNING_RGB));\r
-////                           \r
-////                           if (getValidator() != null) {\r
-////                                           editor.setValidator(getValidator());\r
-////                                   }\r
-////                           return editor;\r
-////                       }\r
-////                   };\r
-//                     \r
-//                     TextPropertyDescriptor yearDescriptor = new TextPropertyDescriptor(P_ID_YEAR, P_YEAR);\r
-//                     \r
-//                     // BibtexReference.setYear() takes a String, no need for validation\r
-//                     if (!(reference instanceof BibtexReference)) {\r
-//                             yearDescriptor.setValidator(new YearValidator());\r
-//                     }\r
-//                     descriptors.addElement(yearDescriptor);         \r
-//             }\r
                \r
                // Date published\r
                if (id.equals(P_ID_DATEPUBLISHED)) {\r
@@ -1121,10 +1098,6 @@ public class ReferencePropertySource implements IPropertySource {
                return reference;\r
        }\r
 \r
-       public String toString() {\r
-               return CdmUtils.Nz(reference.getTitleCache());\r
-       }\r
-\r
        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);\r
        \r
        public void addPropertyChangeListener(\r
index ba0ebe620403f1e1940f9dcf60d5c858b9d259a0..d24e59ba47953d387bac5689f469245503bc315d 100644 (file)
@@ -8,16 +8,28 @@
  */\r
 package eu.etaxonomy.taxeditor.propertysheet.type;\r
 \r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
 import java.util.Collection;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.jface.viewers.TextCellEditor;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.views.properties.IPropertyDescriptor;\r
+import org.eclipse.ui.views.properties.IPropertySource;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;\r
 \r
-import eu.etaxonomy.cdm.model.name.NameRelationship;\r
-import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.cdm.model.name.NameTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.taxeditor.controller.GlobalController;\r
+import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
+import eu.etaxonomy.cdm.model.reference.Generic;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 import eu.etaxonomy.taxeditor.propertysheet.CollectionPropertySource;\r
+import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
 \r
 public class TypeCollectionPropertySource extends CollectionPropertySource {\r
        private static final Logger logger = Logger\r
@@ -30,6 +42,38 @@ public class TypeCollectionPropertySource extends CollectionPropertySource {
                this.name = name;\r
        }\r
        \r
+       protected void addDescriptor(Object item) {\r
+               String itemDisplayName = getItemDisplayName(item);\r
+               \r
+               if (item instanceof NameTypeDesignation) {\r
+                       descriptors.addElement(\r
+                                       new PropertyDescriptor(item, itemDisplayName));\r
+               } else {\r
+                       \r
+                       // TextPropertyDescriptor expects its value to be set w/ a String and throws\r
+                       //      an Assert exception when this is not the case, i.e. when it is passed an \r
+                       //      IPropertySource; hence, this override\r
+                       descriptors.addElement(\r
+                                       new TextPropertyDescriptor(item, itemDisplayName) {\r
+                                           public CellEditor createPropertyEditor(Composite parent) {\r
+                                               CellEditor editor = new TextCellEditor(parent) {\r
+                                                   protected void doSetValue(Object value) {\r
+                                                       if (value instanceof String) {\r
+                                                               super.doSetValue(value);\r
+                                                       } else {\r
+                                                               super.doSetValue(value.toString());\r
+                                                       }                                                       \r
+                                                   }\r
+                                               };\r
+                                               if (getValidator() != null) {\r
+                                                               editor.setValidator(getValidator());\r
+                                                       }\r
+                                               return editor;\r
+                                           }\r
+                                       });\r
+               }\r
+       }\r
+       \r
        @Override\r
        protected String getItemDisplayName(Object item) {\r
                String str = "";\r
@@ -40,8 +84,22 @@ public class TypeCollectionPropertySource extends CollectionPropertySource {
                        \r
                        if (typeDesignation.getTypeStatus() != null) {\r
                                str = typeDesignation.getTypeStatus().getLabel();\r
+                       } else {\r
+                               str = "UNDEFINED";\r
                        }\r
                }\r
+\r
+               if (item instanceof NameTypeDesignation) {\r
+                       \r
+                       NameTypeDesignation typeDesignation = (NameTypeDesignation) item;\r
+                       \r
+                       if (typeDesignation.isLectoType()) {\r
+                               str = "Lectotype";\r
+                       } else {\r
+                               str = "Type";\r
+                       }\r
+               }\r
+               \r
                return str;\r
        }\r
 \r
@@ -49,27 +107,92 @@ public class TypeCollectionPropertySource extends CollectionPropertySource {
        public Object getPropertyValue(Object id) {\r
                String str = "";\r
                \r
-               if (id instanceof SpecimenTypeDesignation) {\r
+               if (id instanceof TypeDesignationBase) {\r
+                       \r
+                       final TypeDesignationBase typeDesignation = (TypeDesignationBase) id;\r
+                       \r
+                       return new IPropertySource() {\r
+\r
+                               @Override\r
+                               public Object getEditableValue() {\r
+                                       return this;\r
+                               }\r
+\r
+                               @Override\r
+                               public IPropertyDescriptor[] getPropertyDescriptors() {\r
+                                       return new IPropertyDescriptor[]{\r
+                                                       new PropertyDescriptor(\r
+                                                                       typeDesignation, "Citation")\r
+                                       };\r
+                               }\r
+\r
+                               @Override\r
+                               public Object getPropertyValue(Object id) {\r
+                                       ReferenceBase reference = typeDesignation.getCitation();\r
+                                       if (reference == null) {\r
+                                               reference = Generic.NewInstance();\r
+                                       }\r
+                                       ReferencePropertySource referencePropertySource = new ReferencePropertySource(reference);\r
+                                       referencePropertySource.addPropertyChangeListener(new PropertyChangeListener() {\r
+                                               public void propertyChange(PropertyChangeEvent evt) {\r
+                                                       if (evt.getNewValue() instanceof ReferenceBase) {       \r
+                                                               typeDesignation.setCitation((ReferenceBase) evt.getNewValue());\r
+                                                       }\r
+                                               }\r
+                                       });\r
+                                       return referencePropertySource;\r
+                               }\r
+\r
+                               @Override\r
+                               public boolean isPropertySet(Object id) {\r
+                                       return false;\r
+                               }\r
+\r
+                               @Override\r
+                               public void resetPropertyValue(Object id) {}\r
+\r
+                               @Override\r
+                               public void setPropertyValue(Object id, Object value) {\r
+                               }\r
+                               \r
+                               public String toString() {\r
+                                       if (typeDesignation instanceof SpecimenTypeDesignation) {\r
+                                               return ((SpecimenTypeDesignation) typeDesignation).getTypeSpecimen().getTitleCache();\r
+                                       }\r
+                                       \r
+                                       if (typeDesignation instanceof NameTypeDesignation) {\r
+                                               if (((NameTypeDesignation) typeDesignation).getTypeName() != null) {\r
+                                                       return ((NameTypeDesignation) typeDesignation).getTypeName().getTitleCache();\r
+                                               }\r
+                                       }\r
+                                       \r
+                                       return null;\r
+                               }\r
+                       };\r
                        \r
+               }\r
+               return str;\r
+       }       \r
+       \r
+       @Override\r
+       public void setPropertyValue(Object id, Object value) {\r
+                               \r
+               if (id instanceof SpecimenTypeDesignation && value instanceof String) {\r
                        SpecimenTypeDesignation typeDesignation = (SpecimenTypeDesignation) id;\r
-                                               \r
+                       \r
                        if (typeDesignation.getTypeSpecimen() != null) {\r
-                               str = typeDesignation.getTypeSpecimen().getTitleCache();\r
+                               typeDesignation.getTypeSpecimen().setTitleCache((String) value);\r
                        } else {\r
-                               str = "UNDEFINED";\r
+                               logger.warn("'typeDesignation.getTypeSpecimen()' returned null.");\r
                        }\r
                }\r
-               return str;\r
-       }\r
-\r
-       @Override\r
-       public void setPropertyValue(Object id, Object value) {\r
-               // Fields not editable in property sheet view\r
        }\r
 \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.propertysheet.CollectionPropertySource#toString()\r
+        */\r
        @Override\r
        public String toString() {\r
-               // "Name Relations" header has no value\r
                return "";\r
        }\r
 }
\ No newline at end of file
index cee88fc772e0020855b6b81a32ca6b73e3175ec2..8131cfdd18d9d82c384c753432ff8a85d21b8cfd 100644 (file)
@@ -22,6 +22,7 @@ import org.eclipse.ui.views.properties.PropertyDescriptor;
 \r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.taxeditor.controller.GlobalController;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 import eu.etaxonomy.taxeditor.propertysheet.type.wizard.TypeListWizard;\r
 \r
 /**\r
@@ -32,7 +33,7 @@ import eu.etaxonomy.taxeditor.propertysheet.type.wizard.TypeListWizard;
  * @created 19.05.2008\r
  * @version 1.0\r
  */\r
-abstract public class TypePropertyDescriptor extends PropertyDescriptor {\r
+public class TypePropertyDescriptor extends PropertyDescriptor {\r
        private static final Logger logger = Logger\r
                        .getLogger(TypePropertyDescriptor.class);\r
        \r
@@ -57,7 +58,11 @@ abstract public class TypePropertyDescriptor extends PropertyDescriptor {
                                dialog.create();\r
                                dialog.open();\r
                                \r
-                               return new TypeCollectionPropertySource(name, name.getSpecimenTypeDesignations());\r
+                               if (CdmUtil.isNameSupraSpecific(name)) {\r
+                                       return new TypeCollectionPropertySource(name, name.getNameTypeDesignations());\r
+                               } else {\r
+                                       return new TypeCollectionPropertySource(name, name.getSpecimenTypeDesignations());\r
+                               }\r
                        }\r
                \r
         };\r
@@ -66,6 +71,4 @@ abstract public class TypePropertyDescriptor extends PropertyDescriptor {
                }\r
         return editor;\r
     }\r
-        \r
-    abstract protected void saveTypes(Set set);        \r
 }\r
index ce0a2b52b26ae3fbb9b0494d7224e794f8afad16..06ffc5d3b067bf2d3ee1d02d312a2561d495ccec 100644 (file)
@@ -55,7 +55,7 @@ public class TypePropertySource implements IPropertySource {
        \r
        protected Vector<PropertyDescriptor> descriptors = new Vector<PropertyDescriptor>();\r
        \r
-       public TypePropertySource(TaxonNameBase name) {\r
+       public TypePropertySource(TaxonNameBase name, String f) {\r
                this.name = name;\r
                \r
                addDescriptor(P_ID_NAMETYPES);\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseNameTypeWizardPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseNameTypeWizardPage.java
new file mode 100644 (file)
index 0000000..5912c57
--- /dev/null
@@ -0,0 +1,415 @@
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.propertysheet.type.wizard;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.jface.wizard.WizardPage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.KeyAdapter;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Text;\r
+\r
+import eu.etaxonomy.cdm.model.name.NameTypeDesignation;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
+import eu.etaxonomy.cdm.model.reference.Generic;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
+import eu.etaxonomy.taxeditor.propertysheet.reference.IReferenceSearch;\r
+import eu.etaxonomy.taxeditor.propertysheet.reference.ReferenceSearchDialog;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 09.03.2009\r
+ * @version 1.0\r
+ */\r
+public class ChooseNameTypeWizardPage extends WizardPage {\r
+       private static Logger logger = Logger\r
+                       .getLogger(ChooseNameTypeWizardPage.class);\r
+\r
+       private TaxonNameBase name;     \r
+       private NameTypeDesignation typeDesignation;\r
+       private TaxonNameBase savedName;\r
+       \r
+       private ReferenceBase savedReference;\r
+       \r
+       private Text txtName;\r
+       private Button btnClearName;\r
+       private Text txtReference;\r
+       private Button btnClearReference;\r
+       private Button btnRejected;\r
+       private Button btnConserved;\r
+       private Button btnLecto;\r
+       private Button btnNotDesignated;\r
+\r
+       private WritableList typeDesignationsList;\r
+\r
+       /**\r
+        * @param typeDesignation\r
+        * @param name\r
+        * @param typeDesignationsList \r
+        */\r
+       public ChooseNameTypeWizardPage(TypeDesignationBase typeDesignation,\r
+                       TaxonNameBase name, WritableList typeDesignationsList) {\r
+               super("");\r
+               \r
+               Assert.isTrue(typeDesignation == null || typeDesignation instanceof NameTypeDesignation);\r
+               \r
+               this.typeDesignation = (NameTypeDesignation) typeDesignation;\r
+               this.name = name;\r
+               this.typeDesignationsList = typeDesignationsList;\r
+               \r
+               setTitle("Create or edit type designation");\r
+               setDescription("Create or edit type designation for '" + name.getTitleCache() + "\".");\r
+       }\r
+       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       @Override\r
+       public void createControl(Composite parent) {\r
+               \r
+               // Create composite for popup dialog    \r
+               Composite container = new Composite(parent, SWT.NULL);\r
+               container.setLayout(new GridLayout());\r
+               setControl(container);\r
+               \r
+               // Create name text\r
+               final Label lblName = new Label(container, SWT.NONE);\r
+               lblName.setText("Choose a name either by searching or entering it as free text:");\r
+               \r
+               // Create 3-columned composite for name\r
+               Composite nameComposite = new Composite(container, SWT.NULL);\r
+               nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 3;\r
+               gridLayout.marginHeight = 0;\r
+               gridLayout.marginWidth = 0;\r
+               nameComposite.setLayout(gridLayout);\r
+               \r
+               // Create name input\r
+               txtName = new Text(nameComposite, SWT.BORDER);\r
+               txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               txtName.addKeyListener(new KeyAdapter() {\r
+                       @Override\r
+                       public void keyReleased(KeyEvent e) {\r
+                               updatePage();\r
+                       }                       \r
+               });\r
+               \r
+               // Create name search button\r
+               Button btnSearchName = new Button(nameComposite, SWT.NONE);\r
+               btnSearchName.setEnabled(true);\r
+               btnSearchName.setLayoutData(new GridData());\r
+               btnSearchName.setText("Search ...");\r
+               btnSearchName.addSelectionListener(new SelectionAdapter() {\r
+                       \r
+                       // Popup reference search\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               popupNameSearch();\r
+                       }\r
+               });\r
+\r
+               // Create clear name button\r
+               btnClearName = new Button(nameComposite, SWT.NONE);\r
+               btnClearName.setEnabled(false);\r
+               btnClearName.setText("Clear");\r
+               btnClearName.addSelectionListener(new SelectionAdapter() {\r
+                       \r
+                       // Clear selected reference\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               clearName();\r
+                       }\r
+               });\r
+\r
+               // Set text to name text if exists, disable ability to edit name\r
+               if (typeDesignation != null && typeDesignation.getTypeName() != null) {\r
+                       \r
+                       savedName = typeDesignation.getTypeName();\r
+                       txtName.setText(savedName.getTitleCache());\r
+                       txtName.setEditable(false);\r
+                                               \r
+                       btnClearName.setEnabled(false);\r
+                       btnSearchName.setEnabled(false);\r
+               }\r
+               \r
+               // Tell user when he is entering a new name\r
+               Label lblNewNameFeedback = new Label(container, SWT.NONE);\r
+               lblNewNameFeedback.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));\r
+               lblNewNameFeedback.setFont(\r
+                               TaxEditorPlugin.getDefault().italicizeFont(lblNewNameFeedback.getFont()));\r
+               lblNewNameFeedback.setText("Existing names can not be edited.");\r
+               \r
+               // Create 2-columned composite for name\r
+               Composite booleansComposite = new Composite(container, SWT.NULL);\r
+               booleansComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               GridLayout gridLayout2 = new GridLayout();\r
+               gridLayout2.numColumns = 2;\r
+               gridLayout2.marginHeight = 15;\r
+               gridLayout2.marginWidth = 0;\r
+               booleansComposite.setLayout(gridLayout2);\r
+               \r
+               btnRejected = new Button(booleansComposite, SWT.CHECK);\r
+               btnRejected.setText("Is rejected type");\r
+               btnRejected.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               \r
+               btnConserved = new Button(booleansComposite, SWT.CHECK);\r
+               btnConserved.setText("Is conserved type");\r
+               btnConserved.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               \r
+               btnLecto = new Button(booleansComposite, SWT.CHECK);\r
+               btnLecto.setText("Is lecto type");\r
+               btnLecto.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               \r
+               btnNotDesignated = new Button(booleansComposite, SWT.CHECK);\r
+               btnNotDesignated.setText("Is not designated");\r
+               btnNotDesignated.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               \r
+               // Set any boolean values\r
+               if (typeDesignation != null) {\r
+                       if (typeDesignation.isRejectedType()) {\r
+                               btnRejected.setSelection(true);\r
+                       }\r
+                       if (typeDesignation.isConservedType()) {\r
+                               btnConserved.setSelection(true);\r
+                       }\r
+                       if (typeDesignation.isLectoType()) {\r
+                               btnLecto.setSelection(true);\r
+                       }\r
+                       if (typeDesignation.isNotDesignated()) {\r
+                               btnNotDesignated.setSelection(true);\r
+                       }\r
+               }\r
+               \r
+               // Create reference text\r
+               final Label lblReference = new Label(container, SWT.NONE);\r
+               lblReference.setText("Choose a reference either by searching or entering it as free text:");\r
+               \r
+               // Create 3-columned composite for reference\r
+               Composite referenceComposite = new Composite(container, SWT.NULL);\r
+               referenceComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               GridLayout gridLayout3 = new GridLayout();\r
+               gridLayout3.numColumns = 3;\r
+               gridLayout3.marginHeight = 0;\r
+               gridLayout3.marginWidth = 0;\r
+               referenceComposite.setLayout(gridLayout3);\r
+               \r
+               // Create reference input\r
+               txtReference = new Text(referenceComposite, SWT.BORDER);\r
+               txtReference.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               \r
+               // Create reference search button\r
+               Button btnSearchReference = new Button(referenceComposite, SWT.NONE);\r
+               btnSearchReference.setEnabled(true);\r
+               btnSearchReference.setLayoutData(new GridData());\r
+               btnSearchReference.setText("Search ...");\r
+               btnSearchReference.addSelectionListener(new SelectionAdapter() {\r
+                       \r
+                       // Popup reference search\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               popupReferenceSearch();\r
+                       }\r
+               });\r
+\r
+               // Create clear reference button\r
+               btnClearReference = new Button(referenceComposite, SWT.NONE);\r
+               btnClearReference.setEnabled(false);\r
+               btnClearReference.setText("Clear");\r
+               btnClearReference.addSelectionListener(new SelectionAdapter() {\r
+                       \r
+                       // Clear selected reference\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               clearReference();\r
+                       }\r
+               });\r
+\r
+               // Set text to reference text if exists\r
+               if (typeDesignation != null && typeDesignation.getCitation() != null) {\r
+                       \r
+                       savedReference = typeDesignation.getCitation();\r
+                       txtReference.setText(savedReference.getTitleCache());\r
+                       txtReference.setEditable(false);\r
+                                               \r
+                       btnClearReference.setEnabled(true);\r
+               }\r
+               \r
+               // Tell user when he is entering a new reference\r
+               Label lblNewRefFeedback = new Label(container, SWT.NONE);\r
+               lblNewRefFeedback.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));\r
+               lblNewRefFeedback.setFont(\r
+                               TaxEditorPlugin.getDefault().italicizeFont(lblNewRefFeedback.getFont()));\r
+               lblNewRefFeedback.setText("Existing references can only be edited in property sheet.");\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void popupNameSearch() {\r
+               Dialog dialog = new NameSearchDialog(getShell());\r
+        Object value = ((NameSearchDialog) dialog).open();\r
+        \r
+               if (value instanceof TaxonNameBase) {\r
+                       setSavedName((TaxonNameBase) value);\r
+                       updatePage();\r
+               }\r
+       }\r
+\r
+       protected void popupReferenceSearch() {\r
+               Dialog dialog = new ReferenceSearchDialog(getShell(), \r
+                               IReferenceSearch.BIBREF);\r
+        Object value = ((ReferenceSearchDialog) dialog).open();\r
+        \r
+               if (value instanceof ReferenceBase) {\r
+                       setSavedReference((ReferenceBase) value);\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * @param value\r
+        */\r
+       private void setSavedName(TaxonNameBase savedName) {\r
+               \r
+               this.savedName = savedName;\r
+               \r
+               txtName.setText(savedName.getTitleCache());\r
+               txtName.setEditable(false);\r
+               \r
+               btnClearName.setEnabled(true);\r
+       }\r
+       \r
+       /**\r
+        * @param value\r
+        */\r
+       private void setSavedReference(ReferenceBase reference) {\r
+               \r
+               savedReference = reference;\r
+               \r
+               txtReference.setText(reference.getTitleCache());\r
+               txtReference.setEditable(false);\r
+               \r
+               btnClearReference.setEnabled(true);\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void clearName() {\r
+               savedName = null;\r
+               \r
+               txtName.setText("");\r
+               txtName.setEditable(true);\r
+               \r
+               btnClearName.setEnabled(false);         \r
+       }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       protected void clearReference() {\r
+               savedReference = null;\r
+               \r
+               txtReference.setText("");\r
+               txtReference.setEditable(true);\r
+               \r
+               btnClearReference.setEnabled(false);            \r
+       }\r
+       \r
+       @Override\r
+       public boolean canFlipToNextPage() {\r
+               return isPageComplete();\r
+       }\r
+\r
+       public boolean isPageComplete() {\r
+               return (txtName.getText().length() > 0);\r
+       }\r
+       \r
+       private void updatePage() {\r
+               \r
+               getWizard().getContainer().updateButtons();\r
+       }\r
+       \r
+    public void setPageComplete(boolean complete) {\r
+        super.setPageComplete(complete);\r
+        \r
+        if (complete) {\r
+               \r
+               TaxonNameBase typeName = null;\r
+               if (savedName != null) {\r
+                       typeName = savedName;\r
+               } else {\r
+                       if (!txtName.getText().equals("")) {\r
+                               typeName = PreferencesUtil.getInstanceOfPreferredNameClass();\r
+                               typeName.setTitleCache(txtName.getText());\r
+                       }\r
+               }\r
+               \r
+               ReferenceBase citation = null;\r
+               if (savedReference != null) {\r
+                       citation = savedReference;\r
+               } else {\r
+                       if (!txtReference.getText().equals("")) {\r
+                               citation = Generic.NewInstance();\r
+                               citation.setTitleCache(txtReference.getText());\r
+                       }\r
+               }\r
+                               \r
+               if (typeDesignation == null) {\r
+                       typeDesignation = new TemporaryNameTypeDesignation(typeName, citation, null,\r
+                                       null, btnRejected.getSelection(), btnConserved.getSelection(), btnNotDesignated.getSelection());\r
+                       typeDesignation.setLectoType(btnLecto.getSelection()); \r
+               } else {\r
+                       typeDesignation.setRejectedType(btnRejected.getSelection());\r
+                       typeDesignation.setConservedType(btnConserved.getSelection());\r
+                       typeDesignation.setLectoType(btnLecto.getSelection());\r
+                       typeDesignation.setNotDesignated(btnNotDesignated.getSelection());\r
+                       typeDesignation.setCitation(citation);\r
+               }\r
+               \r
+               typeDesignationsList.remove(typeDesignation);\r
+               typeDesignationsList.add(typeDesignation);\r
+        }\r
+    }\r
+    \r
+       public class TemporaryNameTypeDesignation extends\r
+                       NameTypeDesignation {\r
+               \r
+               /**\r
+                * @param typeName\r
+                * @param citation\r
+                * @param object\r
+                * @param object2\r
+                * @param selection\r
+                * @param selection2\r
+                * @param selection3\r
+                */\r
+//             public TemporaryNameTypeDesignation() {\r
+//                     super(null, null, null, null, false, false, false);\r
+//                     setLectoType(false);\r
+//             }\r
+               \r
+               public TemporaryNameTypeDesignation(TaxonNameBase typeName, ReferenceBase citation, String citationMicroReference,\r
+                               String originalNameString, boolean isRejectedType, boolean isConservedType, boolean isNotDesignated) {\r
+                       super(typeName, citation, citationMicroReference, originalNameString, \r
+                                       isRejectedType, isConservedType, isNotDesignated);\r
+               }\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseSpecimenTypeWizardPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseSpecimenTypeWizardPage.java
new file mode 100644 (file)
index 0000000..585c1ae
--- /dev/null
@@ -0,0 +1,311 @@
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.propertysheet.type.wizard;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.jface.wizard.WizardPage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.CCombo;\r
+import org.eclipse.swt.events.KeyAdapter;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Text;\r
+\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
+import eu.etaxonomy.cdm.model.name.TypeDesignationStatus;\r
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;\r
+import eu.etaxonomy.cdm.model.occurrence.Specimen;\r
+import eu.etaxonomy.cdm.model.reference.Generic;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+import eu.etaxonomy.taxeditor.propertysheet.reference.IReferenceSearch;\r
+import eu.etaxonomy.taxeditor.propertysheet.reference.ReferenceSearchDialog;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.02.2009\r
+ * @version 1.0\r
+ */\r
+public class ChooseSpecimenTypeWizardPage extends WizardPage {\r
+       private static Logger logger = Logger\r
+                       .getLogger(ChooseSpecimenTypeWizardPage.class);\r
+\r
+       private TaxonNameBase name;     \r
+       private SpecimenTypeDesignation typeDesignation;\r
+       private WritableList typeDesignationsList;\r
+\r
+       private ReferenceBase savedReference;\r
+       \r
+       private CCombo statusCombo;\r
+       private Text txtDesignationType;\r
+       private TypeDesignationStatus[] typeStatusArray;\r
+       private Text txtReference;\r
+       private Button btnClearReference;\r
+\r
+\r
+       /**\r
+        * @param typeDesignation\r
+        * @param typeDesignationsList \r
+        */\r
+       public ChooseSpecimenTypeWizardPage(\r
+                       TypeDesignationBase typeDesignation, TaxonNameBase name, WritableList typeDesignationsList) {\r
+               super("");\r
+                               \r
+               Assert.isTrue(typeDesignation == null || typeDesignation instanceof SpecimenTypeDesignation,"");\r
+               \r
+               this.typeDesignation = (SpecimenTypeDesignation) typeDesignation;\r
+               this.name = name;\r
+               this.typeDesignationsList = typeDesignationsList;\r
+               \r
+               setTitle("Create or edit type designation");\r
+               setDescription("Create or edit type designation for '" + name.getTitleCache() + "\".");\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       @Override\r
+       public void createControl(Composite parent) {\r
+               \r
+               // Create composite for popup dialog    \r
+               Composite container = new Composite(parent, SWT.NULL);\r
+               container.setLayout(new GridLayout());\r
+               setControl(container);\r
+\r
+               // Create text\r
+               final Label lblChooseStatus = new Label(container, SWT.NONE);\r
+               lblChooseStatus.setText("Choose designation type status:");\r
+\r
+               // Create designation type status dropdown \r
+               statusCombo = new CCombo(container, SWT.BORDER);\r
+               statusCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               TermVocabulary<TypeDesignationStatus> typeStatusSet = CdmSessionDataRepository.getDefault().getTypeDesignationStatus();\r
+               typeStatusArray = new TypeDesignationStatus[CdmSessionDataRepository.getDefault().getTypeDesignationStatus().size()];\r
+               int i = 0;\r
+               int selectedIndex = -1;\r
+               for (TypeDesignationStatus typeStatus : \r
+                               CdmSessionDataRepository.getDefault().getTypeDesignationStatus()) {\r
+                       String label = typeStatus.getLabel();\r
+                       typeStatusArray[i] = typeStatus;\r
+                       \r
+                       if (typeDesignation != null && typeDesignation.getTypeStatus() != null) {\r
+                               if (typeStatus.equals(typeDesignation.getTypeStatus())) {\r
+                                       selectedIndex = i;\r
+                               }\r
+                       }\r
+                       \r
+                       i++;\r
+                       statusCombo.add(label);\r
+               }\r
+               \r
+               // Set menu to type designation status if exists\r
+               statusCombo.select(selectedIndex);\r
+\r
+               statusCombo.addSelectionListener(new SelectionAdapter() {\r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               updatePage();\r
+                       }\r
+               });\r
+\r
+               // Create text\r
+               final Label lblEnterText = new Label(container, SWT.NONE);\r
+               lblEnterText.setText("Enter designation type text:");\r
+               \r
+               txtDesignationType = new Text(container, SWT.BORDER);\r
+               txtDesignationType.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+               txtDesignationType.addKeyListener(new KeyAdapter() {\r
+                       @Override\r
+                       public void keyReleased(KeyEvent e) {\r
+                               updatePage();\r
+                       }                       \r
+               });\r
+               \r
+               // Set text to specimen text if exists\r
+               if (typeDesignation != null && typeDesignation.getTypeSpecimen() != null) {\r
+                       txtDesignationType.setText(typeDesignation.getTypeSpecimen().getTitleCache());\r
+               }\r
+               \r
+               // Create reference text\r
+               final Label lblReference = new Label(container, SWT.NONE);\r
+               lblReference.setText("Choose a reference either by searching or entering it as free text:");\r
+               \r
+               // Create 3-columned composite for reference\r
+               Composite referenceComposite = new Composite(container, SWT.NULL);\r
+               referenceComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 3;\r
+               gridLayout.marginHeight = 0;\r
+               gridLayout.marginWidth = 0;\r
+               referenceComposite.setLayout(gridLayout);\r
+               \r
+               // Create reference input\r
+               txtReference = new Text(referenceComposite, SWT.BORDER);\r
+               txtReference.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               \r
+               // Create reference search button\r
+               Button btnSearchReference = new Button(referenceComposite, SWT.NONE);\r
+               btnSearchReference.setEnabled(true);\r
+               btnSearchReference.setLayoutData(new GridData());\r
+               btnSearchReference.setText("Search ...");\r
+               btnSearchReference.addSelectionListener(new SelectionAdapter() {\r
+                       \r
+                       // Popup reference search\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               popupSearch();\r
+                       }\r
+               });\r
+\r
+               // Create clear reference button\r
+               btnClearReference = new Button(referenceComposite, SWT.NONE);\r
+               btnClearReference.setEnabled(false);\r
+               btnClearReference.setText("Clear");\r
+               btnClearReference.addSelectionListener(new SelectionAdapter() {\r
+                       \r
+                       // Clear selected reference\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               clearReference();\r
+                       }\r
+               });\r
+\r
+               // Set text to reference text if exists\r
+               if (typeDesignation != null && typeDesignation.getCitation() != null) {\r
+                       \r
+                       savedReference = typeDesignation.getCitation();\r
+                       txtReference.setText(savedReference.getTitleCache());\r
+                       txtReference.setEditable(false);\r
+                                               \r
+                       btnClearReference.setEnabled(true);\r
+               }\r
+               \r
+               // Tell user when he is entering a new reference\r
+               Label lblNewRefFeedback = new Label(container, SWT.NONE);\r
+               lblNewRefFeedback.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));\r
+               lblNewRefFeedback.setFont(\r
+                               TaxEditorPlugin.getDefault().italicizeFont(lblNewRefFeedback.getFont()));\r
+               lblNewRefFeedback.setText("Existing references can only be edited in property sheet.");\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void popupSearch() {\r
+               Dialog dialog = new ReferenceSearchDialog(getShell(), \r
+                               IReferenceSearch.BIBREF);\r
+        Object value = ((ReferenceSearchDialog) dialog).open();\r
+        \r
+               if (value instanceof ReferenceBase) {\r
+                       setSavedReference((ReferenceBase) value);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @param value\r
+        */\r
+       private void setSavedReference(ReferenceBase reference) {\r
+               \r
+               savedReference = reference;\r
+               \r
+               txtReference.setText(reference.getTitleCache());\r
+               txtReference.setEditable(false);\r
+               \r
+               btnClearReference.setEnabled(true);\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void clearReference() {\r
+               savedReference = null;\r
+               \r
+               txtReference.setText("");\r
+               txtReference.setEditable(true);\r
+               \r
+               btnClearReference.setEnabled(false);            \r
+       }\r
+       \r
+       @Override\r
+       public boolean canFlipToNextPage() {\r
+               return isPageComplete();\r
+       }\r
+\r
+       public boolean isPageComplete() {\r
+               return (statusCombo.getSelectionIndex() > -1 \r
+                               && txtDesignationType.getText().length() > 0);\r
+       }\r
+       \r
+       private void updatePage() {\r
+               \r
+               getWizard().getContainer().updateButtons();\r
+       }\r
+       \r
+    public void setPageComplete(boolean complete) {\r
+        super.setPageComplete(complete);\r
+        \r
+        if (complete) {\r
+               \r
+               ReferenceBase citation = null;\r
+               if (savedReference != null) {\r
+                       citation = savedReference;\r
+               } else {\r
+                       if (!txtReference.getText().equals("")) {\r
+                               citation = Generic.NewInstance();\r
+                               citation.setTitleCache(txtReference.getText());\r
+                       }\r
+               }\r
+               \r
+               TypeDesignationStatus status = typeStatusArray[statusCombo.getSelectionIndex()];\r
+               \r
+               Specimen specimen;\r
+               if (typeDesignation == null || typeDesignation.getTypeSpecimen() == null) {\r
+                       specimen = Specimen.NewInstance();\r
+               } else {\r
+                       specimen = CdmBase.deproxy(typeDesignation.getTypeSpecimen(), Specimen.class);\r
+               }\r
+               specimen.setTitleCache(txtDesignationType.getText());\r
+               \r
+               if (typeDesignation == null) {\r
+                       typeDesignation = new TemporarySpecimenTypeDesignation(specimen, status, \r
+                                       citation, null, null, true);\r
+               } else {\r
+                       typeDesignation.setTypeSpecimen(specimen);\r
+                       typeDesignation.setTypeStatus(status);\r
+                       typeDesignation.setCitation(citation);\r
+               }\r
+               \r
+               typeDesignationsList.remove(typeDesignation);\r
+               typeDesignationsList.add(typeDesignation);\r
+        }\r
+    }\r
+    \r
+       public class TemporarySpecimenTypeDesignation extends\r
+                       SpecimenTypeDesignation {\r
+               \r
+               TemporarySpecimenTypeDesignation(DerivedUnitBase specimen, TypeDesignationStatus status, ReferenceBase citation, String citationMicroReference, \r
+                               String originalNameString, boolean isNotDesignated) {\r
+                       super(specimen, status, citation, citationMicroReference, \r
+                                       originalNameString, isNotDesignated);\r
+               }\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseTypeDesignationWizardPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseTypeDesignationWizardPage.java
deleted file mode 100644 (file)
index 21e68d9..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/**\r
-* Copyright (C) 2009 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-\r
-package eu.etaxonomy.taxeditor.propertysheet.type.wizard;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jface.wizard.WizardPage;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.custom.CCombo;\r
-import org.eclipse.swt.events.KeyAdapter;\r
-import org.eclipse.swt.events.KeyEvent;\r
-import org.eclipse.swt.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Label;\r
-import org.eclipse.swt.widgets.Text;\r
-\r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
-import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.name.TypeDesignationStatus;\r
-import eu.etaxonomy.cdm.model.occurrence.Specimen;\r
-import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 13.02.2009\r
- * @version 1.0\r
- */\r
-public class ChooseTypeDesignationWizardPage extends WizardPage {\r
-       private static Logger logger = Logger\r
-                       .getLogger(ChooseTypeDesignationWizardPage.class);\r
-\r
-       private TaxonNameBase name;     \r
-       private SpecimenTypeDesignation typeDesignation;\r
-       \r
-       private CCombo statusCombo;\r
-       private Text txtDesignationType;\r
-\r
-       private TypeDesignationStatus[] typeStatusArray;\r
-\r
-       /**\r
-        * @param typeDesignation\r
-        */\r
-       public ChooseTypeDesignationWizardPage(\r
-                       SpecimenTypeDesignation typeDesignation, TaxonNameBase name) {\r
-               super("");\r
-                               \r
-               this.typeDesignation = typeDesignation;\r
-               this.name = name;\r
-               \r
-               setTitle("Create or edit type designation");\r
-               setDescription("Create or edit type designation for '" + name.getTitleCache() + "\".");\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)\r
-        */\r
-       @Override\r
-       public void createControl(Composite parent) {\r
-               \r
-               // Create composite for popup dialog    \r
-               Composite container = new Composite(parent, SWT.NULL);\r
-               final GridLayout gridLayout = new GridLayout();\r
-               container.setLayout(gridLayout);\r
-               setControl(container);\r
-\r
-               // Create text\r
-               final Label lblChooseStatus = new Label(container, SWT.NONE);\r
-               lblChooseStatus.setText("Choose designation type status:");\r
-\r
-               // Create designation type status dropdown \r
-               statusCombo = new CCombo(container, SWT.BORDER);\r
-               statusCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
-               TermVocabulary<TypeDesignationStatus> typeStatusSet = CdmSessionDataRepository.getDefault().getTypeDesignationStatus();\r
-               typeStatusArray = new TypeDesignationStatus[CdmSessionDataRepository.getDefault().getTypeDesignationStatus().size()];\r
-               int i = 0;\r
-               int selectedIndex = -1;\r
-               for (TypeDesignationStatus typeStatus : \r
-                               CdmSessionDataRepository.getDefault().getTypeDesignationStatus()) {\r
-                       String label = typeStatus.getLabel();\r
-                       typeStatusArray[i] = typeStatus;\r
-                       \r
-                       if (typeDesignation != null && typeDesignation.getTypeStatus() != null) {\r
-                               if (typeStatus.equals(typeDesignation.getTypeStatus())) {\r
-                                       selectedIndex = i;\r
-                               }\r
-                       }\r
-                       \r
-                       i++;\r
-                       statusCombo.add(label);\r
-               }\r
-               \r
-               // Set menu to type designation status if exists\r
-               statusCombo.select(selectedIndex);\r
-\r
-               statusCombo.addSelectionListener(new SelectionAdapter() {\r
-                       @Override\r
-                       public void widgetSelected(SelectionEvent e) {\r
-                               updatePage();\r
-                       }\r
-               });\r
-\r
-               // Create text\r
-               final Label lblEnterText = new Label(container, SWT.NONE);\r
-               lblEnterText.setText("Enter designation type text:");\r
-               \r
-               txtDesignationType = new Text(container, SWT.BORDER);\r
-               txtDesignationType.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
-               txtDesignationType.addKeyListener(new KeyAdapter() {\r
-                       @Override\r
-                       public void keyReleased(KeyEvent e) {\r
-                               updatePage();\r
-                       }                       \r
-               });\r
-               \r
-               // Set text to specimen text if exists\r
-               if (typeDesignation != null && typeDesignation.getTypeSpecimen() != null) {\r
-                       txtDesignationType.setText(typeDesignation.getTypeSpecimen().getTitleCache());\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public boolean canFlipToNextPage() {\r
-               return isPageComplete();\r
-       }\r
-\r
-       public boolean isPageComplete() {\r
-               return (statusCombo.getSelectionIndex() > -1 \r
-                               && txtDesignationType.getText().length() > 0);\r
-       }\r
-       \r
-       private void updatePage() {\r
-               \r
-               getWizard().getContainer().updateButtons();\r
-       }\r
-       \r
-    public void setPageComplete(boolean complete) {\r
-        super.setPageComplete(complete);\r
-        \r
-        if (complete) {\r
-               \r
-               TypeDesignationStatus status = typeStatusArray[statusCombo.getSelectionIndex()];\r
-               \r
-               Specimen specimen;\r
-               if (typeDesignation == null || typeDesignation.getTypeSpecimen() == null) {\r
-                       specimen = Specimen.NewInstance();\r
-                       typeDesignation.setTypeSpecimen(specimen);\r
-               } else {\r
-                       specimen = (Specimen) typeDesignation.getTypeSpecimen(); // Next version (or 3 or 4 version from now) - this or something like this will return specimen: \r
-               }\r
-               specimen.setTitleCache(txtDesignationType.getText());\r
-               \r
-               if (typeDesignation == null) {\r
-                       name.addSpecimenTypeDesignation(specimen, status, null, null, null, true, true);\r
-               } else {\r
-                       typeDesignation.setTypeStatus(status);\r
-               }\r
-        }\r
-    }\r
-}\r
index e40009a04e286603e5b555bfe93e6acb1587e5d6..7a3ef30a1fc172ee10d48f22ffa6fcfde4be6328 100644 (file)
@@ -33,8 +33,10 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Table;\r
 import org.eclipse.swt.widgets.TableItem;\r
 \r
+import eu.etaxonomy.cdm.model.name.NameTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
 import eu.etaxonomy.taxeditor.controller.GlobalController;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
@@ -67,7 +69,7 @@ public class ListTypeWizardPage extends WizardPage {
        private Button btnRemove;\r
        private Button btnEdit;\r
 \r
-       private SpecimenTypeDesignation typeDesignation;\r
+       private TypeDesignationBase typeDesignation;\r
        private TableViewer tableViewer;\r
 \r
 \r
@@ -122,8 +124,8 @@ public class ListTypeWizardPage extends WizardPage {
                        public void widgetSelected(SelectionEvent e) { \r
                                setEnableTypeDesignationButtons(true);\r
                                TableItem[] selectedItem = typeDesignationsTable.getSelection();\r
-                               if (e.item.getData() instanceof SpecimenTypeDesignation) {\r
-                                       setSelectedTypeDesignation((SpecimenTypeDesignation) e.item.getData());\r
+                               if (e.item.getData() instanceof TypeDesignationBase) {\r
+                                       setSelectedTypeDesignation((TypeDesignationBase) e.item.getData());\r
                                }\r
                        }\r
                });\r
@@ -131,22 +133,29 @@ public class ListTypeWizardPage extends WizardPage {
                ObservableListContentProvider providerList = new ObservableListContentProvider();\r
                tableViewer.setContentProvider(providerList);\r
 \r
-               IObservableMap[] providerMaps = BeansObservables.observeMaps(\r
-                               providerList.getKnownElements(), SpecimenTypeDesignation.class,\r
-                               new String[] { "typeSpecimen", "typeStatus" });\r
+               IObservableMap[] providerMaps;\r
+               if (CdmUtil.isNameSupraSpecific(name)) {\r
+                       providerMaps = BeansObservables.observeMaps(\r
+                                       providerList.getKnownElements(), NameTypeDesignation.class,\r
+                                       new String[] { "typeName" });\r
+               } else {\r
+                       providerMaps = BeansObservables.observeMaps(\r
+                                       providerList.getKnownElements(), SpecimenTypeDesignation.class,\r
+                                       new String[] { "typeSpecimen", "typeStatus" });\r
+               }\r
                tableViewer.setLabelProvider(new ObservableMapLabelProvider(\r
                                providerMaps) {\r
                        public String getColumnText(Object element, int columnIndex) {\r
-                               if (element instanceof SpecimenTypeDesignation) {\r
-                                       SpecimenTypeDesignation typeDesignation = (SpecimenTypeDesignation) element;\r
+                               if (element instanceof TypeDesignationBase) {\r
+                                       TypeDesignationBase typeDesignation = (TypeDesignationBase) element;\r
                                        return getTypeDesignationString(typeDesignation);\r
                                }\r
                                return "";\r
                        }\r
 \r
                        public Image getColumnImage(Object element, int columnIndex) {\r
-                               if (element instanceof SpecimenTypeDesignation) {\r
-                                       SpecimenTypeDesignation typeDesignation = (SpecimenTypeDesignation) element;\r
+                               if (element instanceof TypeDesignationBase) {\r
+                                       TypeDesignationBase typeDesignation = (TypeDesignationBase) element;\r
                                        return getTypeDesignationImage(typeDesignation);\r
                                }\r
                                return null;\r
@@ -158,7 +167,7 @@ public class ListTypeWizardPage extends WizardPage {
                        public void doubleClick(DoubleClickEvent event) {\r
                                if (((StructuredSelection) event.getSelection())\r
                                                .getFirstElement() instanceof SpecimenTypeDesignation) {\r
-                                       SpecimenTypeDesignation typeDesignation = (SpecimenTypeDesignation\r
+                                       TypeDesignationBase typeDesignation = (TypeDesignationBase\r
                                                        ((StructuredSelection) event.getSelection()).getFirstElement();\r
                                        createTypeDesignationWizard(typeDesignation);\r
                                }\r
@@ -166,15 +175,15 @@ public class ListTypeWizardPage extends WizardPage {
                });\r
        }\r
 \r
-       private void setSelectedTypeDesignation(SpecimenTypeDesignation typeDesignation) {\r
+       private void setSelectedTypeDesignation(TypeDesignationBase typeDesignation) {\r
                this.typeDesignation = typeDesignation;\r
        }\r
 \r
-       private SpecimenTypeDesignation getSelectedTypeDesignation() {\r
+       private TypeDesignationBase getSelectedTypeDesignation() {\r
                return typeDesignation;\r
        }\r
        \r
-       private void createTypeDesignationWizard(SpecimenTypeDesignation typeDesignation) {\r
+       private void createTypeDesignationWizard(TypeDesignationBase typeDesignation) {\r
                Wizard wizard = new TypeDesignationWizard(typeDesignation, name, typeDesignationsList);\r
                \r
                WizardDialog dialog = new WizardDialog(GlobalController.getShell(), wizard);\r
@@ -188,19 +197,32 @@ public class ListTypeWizardPage extends WizardPage {
                btnEdit.setEnabled(enabled);\r
        }\r
 \r
-       private Image getTypeDesignationImage(SpecimenTypeDesignation typeDesignation) {\r
+       private Image getTypeDesignationImage(TypeDesignationBase typeDesignation) {\r
                return null;\r
        }\r
 \r
-       private String getTypeDesignationString(SpecimenTypeDesignation typeDesignation) {\r
+       private String getTypeDesignationString(TypeDesignationBase typeDesignation) {\r
                String str = "";\r
-               if (typeDesignation.getTypeSpecimen() != null) {\r
-                       str += typeDesignation.getTypeSpecimen().getTitleCache();\r
-               } else {\r
-                       str += "UNDEFINED";\r
+               \r
+               if (typeDesignation instanceof SpecimenTypeDesignation) {\r
+                       if (((SpecimenTypeDesignation) typeDesignation).getTypeSpecimen() != null) {\r
+                               str = ((SpecimenTypeDesignation) typeDesignation).getTypeSpecimen().getTitleCache();\r
+                       } else {\r
+                               str = "UNDEFINED";\r
+                       }\r
+                       if (((SpecimenTypeDesignation) typeDesignation).getTypeStatus() != null) {\r
+                               str += " [" + ((SpecimenTypeDesignation) typeDesignation).getTypeStatus().getLabel() + "]";\r
+                       }\r
                }\r
-               if (typeDesignation.getTypeStatus() != null) {\r
-                       str += " [" + typeDesignation.getTypeStatus().getLabel() + "]";\r
+               \r
+               if (typeDesignation instanceof NameTypeDesignation) {\r
+                       if (((NameTypeDesignation) typeDesignation).getTypeName() != null) {\r
+                               str = ((NameTypeDesignation) typeDesignation).getTypeName().getTitleCache();\r
+                       }\r
+                       \r
+                       if (((NameTypeDesignation) typeDesignation).isLectoType()) {\r
+                               str += " (Lectotype)";\r
+                       }\r
                }\r
                \r
                return str;\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/NameSearchDialog.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/NameSearchDialog.java
new file mode 100644 (file)
index 0000000..a602ad5
--- /dev/null
@@ -0,0 +1,251 @@
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.propertysheet.type.wizard;\r
+\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.viewers.ArrayContentProvider;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.viewers.ViewerComparator;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.KeyAdapter;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Table;\r
+import org.eclipse.swt.widgets.Text;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.11.2008\r
+ * @version 1.0\r
+ */\r
+public class NameSearchDialog extends Dialog {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(NameSearchDialog.class);\r
+       \r
+       private Table resultsTable;\r
+       private Text searchTermText;\r
+               \r
+       protected Object result;\r
+       private Shell shell;\r
+       private Button okButton;\r
+       private TableViewer resultsTableViewer;\r
+       private TaxonNameBase selectedName;\r
+       \r
+       public NameSearchDialog(Shell parent) {\r
+               super(parent, SWT.NONE);\r
+       }\r
+       \r
+       /**\r
+        * Open the dialog\r
+        * @return the result\r
+        */\r
+       public Object open() {\r
+               createContents();\r
+               shell.open();\r
+               shell.layout();\r
+               Display display = getParent().getDisplay();\r
+               while (!shell.isDisposed()) {\r
+                       if (!display.readAndDispatch())\r
+                               display.sleep();\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       /**\r
+        * Create contents of the dialog\r
+        */\r
+       protected void createContents() {\r
+               \r
+               // Create shell for popup dialog                \r
+               shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);\r
+               shell.setLayout(new GridLayout());\r
+               shell.setSize(500, 375);\r
+               shell.setText("Search for a name in datasource");\r
+               \r
+               // Create composite for entire shell            \r
+               final Composite composite = new Composite(shell, SWT.NONE);\r
+               composite.setLayout(new GridLayout());\r
+               composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+\r
+               // Create composite for search text, search term input, and "Search" button\r
+               final Composite searchComposite = new Composite(composite, SWT.NONE);\r
+               searchComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               final GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 2;\r
+               searchComposite.setLayout(gridLayout);\r
+\r
+               // Create search text\r
+               final Label label = new Label(searchComposite, SWT.NONE);\r
+               label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));\r
+               label.setText("Enter a search term for a full name, using '*' as a wildcard.");\r
+\r
+               // Create input field for search term\r
+               searchTermText = new Text(searchComposite, SWT.BORDER | SWT.SINGLE);\r
+               final GridData gd_searchTermText = new GridData(SWT.FILL, SWT.CENTER, true, false);\r
+               searchTermText.setLayoutData(gd_searchTermText);\r
+               \r
+               // Listen for user hitting <CR> in input field\r
+               searchTermText.addKeyListener(new KeyAdapter() {\r
+                       public void keyReleased(KeyEvent e) {\r
+                               int key = e.keyCode;\r
+                               if (key == SWT.CR) {\r
+                                       populateSearchResults();\r
+                               }\r
+                       }\r
+               });\r
+\r
+               // Create "Search" button\r
+               final Button searchButton = new Button(searchComposite, SWT.NONE);\r
+               searchButton.setLayoutData(new GridData());\r
+               searchButton.setText("Search");\r
+               searchButton.addMouseListener(new MouseAdapter() {\r
+                       \r
+                       // Populate search results resultsTable after clicking button\r
+                       public void mouseUp(MouseEvent e) {\r
+                               populateSearchResults();\r
+                       }\r
+               });\r
+\r
+               // Create composite for results table\r
+               final Composite resultsComposite = new Composite(composite, SWT.NONE);\r
+               resultsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+               resultsComposite.setLayout(new GridLayout());\r
+\r
+               // Create results resultsTable\r
+               resultsTableViewer = new TableViewer(resultsComposite, SWT.BORDER);\r
+               resultsTable = resultsTableViewer.getTable();\r
+               resultsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+\r
+               // Set content provider of results resultsTable\r
+               resultsTableViewer.setContentProvider(new ArrayContentProvider());\r
+\r
+               // Set label provider for results resultsTable which shows ReferenceBase.getTitleCache()\r
+               resultsTableViewer.setLabelProvider(new LabelProvider() {\r
+                       public String getText(Object element) {\r
+                               if (element instanceof ReferenceBase) {\r
+                                       return ((ReferenceBase) element).getTitleCache();\r
+                               }\r
+                               return super.getText(element);\r
+                       }\r
+               });\r
+       \r
+               // Sort results alphabetically\r
+               resultsTableViewer.setComparator(new ViewerComparator());\r
+               \r
+               // Listen for user selecting reference from results list\r
+               resultsTable.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               \r
+                               Object data = e.item.getData();\r
+                               \r
+                               // Make sure selection is a ReferenceBase\r
+                               if (data instanceof TaxonNameBase) {\r
+\r
+                                       setSelectedName((TaxonNameBase) data);\r
+                                       \r
+                                       // Enable "OK" button\r
+                                       okButton.setEnabled(true);\r
+                               }\r
+                       }\r
+               });\r
+               \r
+               // Double-clicking results entry submits selected reference\r
+               resultsTable.addListener(SWT.MouseDoubleClick, new Listener() {\r
+                       public void handleEvent(Event event) {\r
+                               submitResult();\r
+                       }\r
+               });\r
+               \r
+               // Create composite for "OK" and "Cancel" buttons\r
+               final Composite okCancelComposite = new Composite(composite, SWT.NONE);\r
+               okCancelComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));\r
+               final GridLayout gridLayout_1 = new GridLayout();\r
+               gridLayout_1.numColumns = 2;\r
+               okCancelComposite.setLayout(gridLayout_1);\r
+\r
+               // Create "Cancel" button\r
+               final Button cancelButton = new Button(okCancelComposite, SWT.NONE);\r
+               cancelButton.setText("Cancel");\r
+               \r
+               // Close dialog popup after clicking "Cancel" button\r
+               cancelButton.addMouseListener(new MouseAdapter() {\r
+                       public void mouseUp(MouseEvent e) {\r
+                               shell.dispose();\r
+                       }\r
+               });\r
+\r
+               // Create "OK" button\r
+               okButton = new Button(okCancelComposite, SWT.NONE);\r
+               okButton.setEnabled(false);\r
+               final GridData gd_okButton = new GridData();\r
+               okButton.setLayoutData(gd_okButton);\r
+               okButton.setText("OK");\r
+               \r
+               // Submit result when "OK" button is clicked\r
+               okButton.addMouseListener(new MouseAdapter() {\r
+                       public void mouseUp(MouseEvent e) {\r
+                               submitResult();\r
+                       }\r
+               });\r
+\r
+       }\r
+       \r
+       private void populateSearchResults() {\r
+               // Get search results\r
+               List resultsArray = CdmUtil.searchNameString(searchTermText.getText());\r
+               \r
+               // Tell user if there are no results\r
+               if (resultsArray.size() == 0) {\r
+                       resultsArray.add("Query returned no results.");\r
+               }\r
+               \r
+               // Send results to results resultsTable\r
+               resultsTableViewer.setInput(resultsArray.toArray());\r
+               \r
+               // Disable OK button\r
+               okButton.setEnabled(false);             \r
+       }\r
+       \r
+       /**\r
+        * Populate result and close dialog popup\r
+        */\r
+       private void submitResult() {\r
+               result = getSelectedName();\r
+               shell.dispose();\r
+       }\r
+       \r
+       private void setSelectedName(TaxonNameBase selectedName) {\r
+               this.selectedName = selectedName;\r
+       }\r
+       \r
+       private TaxonNameBase getSelectedName() {\r
+               return selectedName;\r
+       }\r
+}\r
index f1dd411d2cb0aa08117f3a9b65c47d5ee89a5a22..9aefaeac8ee55299cb426431551480900c0ca5ad 100644 (file)
@@ -14,8 +14,9 @@ import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.jface.wizard.Wizard;\r
 import org.eclipse.jface.wizard.WizardPage;\r
 \r
-import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -27,47 +28,59 @@ public class TypeDesignationWizard extends Wizard {
        private static Logger logger = Logger\r
                        .getLogger(TypeDesignationWizard.class);\r
        \r
-       private SpecimenTypeDesignation typeDesignation;\r
+       private TypeDesignationBase typeDesignation;\r
        private TaxonNameBase name;\r
        private WritableList typeDesignationsList;\r
-\r
-       public class TemporarySpecimenTypeDesignation extends\r
-                       SpecimenTypeDesignation {\r
-               TemporarySpecimenTypeDesignation() {\r
-                       super();\r
-               }\r
-       }\r
        \r
-       private WizardPage chooseNamePage;\r
+       private WizardPage chooseTypePage;\r
 \r
        /**\r
         * @param typeDesignation\r
         * @param typeDesignationsList \r
         */\r
-       public TypeDesignationWizard(SpecimenTypeDesignation typeDesignation, TaxonNameBase name, WritableList typeDesignationsList) {\r
+       public TypeDesignationWizard(TypeDesignationBase typeDesignation, TaxonNameBase name, WritableList typeDesignationsList) {\r
 \r
                this.name = name;\r
-               if (typeDesignation == null) {\r
-                       createEmptyTypeDesignation();\r
-               } else {\r
+//             if (typeDesignation == null) {\r
+//                     createEmptyTypeDesignation();\r
+//             } else {\r
                        this.typeDesignation = typeDesignation;\r
-               }\r
+//             }\r
                this.typeDesignationsList = typeDesignationsList;\r
        }\r
 \r
        /**\r
         * \r
         */\r
-       private void createEmptyTypeDesignation() {\r
-               typeDesignation = new TemporarySpecimenTypeDesignation(); \r
-       }\r
+//     private void createEmptyTypeDesignation() {\r
+//             if (CdmUtil.isNameSupraSpecific(name)) {\r
+//                     typeDesignation = new TemporaryNameTypeDesignation();\r
+//             } else {\r
+//                     typeDesignation = new TemporarySpecimenTypeDesignation();\r
+//             }\r
+//     }\r
 \r
        /* (non-Javadoc)\r
         * @see org.eclipse.jface.wizard.Wizard#addPages()\r
         */\r
        public void addPages() {\r
-               chooseNamePage = new ChooseTypeDesignationWizardPage(typeDesignation, name);\r
-       addPage(chooseNamePage);\r
+               \r
+//             if (typeDesignation instanceof SpecimenTypeDesignation) {\r
+//                     chooseTypePage = new ChooseSpecimenTypeWizardPage((SpecimenTypeDesignation) typeDesignation, name);\r
+//             }\r
+//             \r
+//             if (typeDesignation instanceof NameTypeDesignation) {\r
+//                     chooseTypePage = new ChooseNameTypeWizardPage((NameTypeDesignation) typeDesignation, name);\r
+//             }\r
+               \r
+//             if (name.getRank().isHigher(Rank.SPECIES())) {\r
+               if (CdmUtil.isNameSupraSpecific(name)) {\r
+                       chooseTypePage = new ChooseNameTypeWizardPage(typeDesignation, name, typeDesignationsList);\r
+               } else {\r
+                       chooseTypePage = new ChooseSpecimenTypeWizardPage(typeDesignation, name, typeDesignationsList);\r
+               }\r
+               \r
+       addPage(chooseTypePage);\r
     }\r
        \r
        /* (non-Javadoc)\r
@@ -76,11 +89,12 @@ public class TypeDesignationWizard extends Wizard {
        @Override\r
        public boolean performFinish() {\r
                \r
-               chooseNamePage.setPageComplete(true);\r
+               chooseTypePage.setPageComplete(true);\r
                \r
                // Remove then re-add in case any name editing has taken place\r
-               typeDesignationsList.remove(typeDesignation);\r
-               typeDesignationsList.add(typeDesignation);\r
+               \r
+//             typeDesignationsList.remove(typeDesignation);\r
+//             typeDesignationsList.add(typeDesignation);\r
                \r
                return true;\r
        }\r
index 0eaaaf9fb37bb45dc1453f0b53ee6b7f18fb7a99..fc388fbd83652366717fc310844119ad2e5cea61 100644 (file)
@@ -9,14 +9,20 @@
 \r
 package eu.etaxonomy.taxeditor.propertysheet.type.wizard;\r
 \r
+import java.util.Set;\r
+\r
 import org.apache.log4j.Logger;\r
 import org.eclipse.core.databinding.observable.list.WritableList;\r
 import org.eclipse.jface.wizard.IWizardPage;\r
 import org.eclipse.jface.wizard.Wizard;\r
 \r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.name.NameTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
 import eu.etaxonomy.cdm.model.occurrence.Specimen;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -38,7 +44,11 @@ public class TypeListWizard extends Wizard {
                this.name = name;\r
                this.typeDesignationsList = new WritableList();\r
                if (name != null) {\r
-                       this.typeDesignationsList.addAll(name.getSpecimenTypeDesignations());\r
+                       if (CdmUtil.isNameSupraSpecific(name)) {\r
+                               this.typeDesignationsList.addAll(name.getNameTypeDesignations());                               \r
+                       } else {\r
+                               this.typeDesignationsList.addAll(name.getSpecimenTypeDesignations());\r
+                       }\r
                }\r
        }\r
 \r
@@ -55,25 +65,48 @@ public class TypeListWizard extends Wizard {
                \r
                if (name != null) {\r
                        \r
-                       // Remove all designations\r
-                       for (Object typeDesignation : name.getSpecimenTypeDesignations()) {\r
-                               if (typeDesignation instanceof SpecimenTypeDesignation) {\r
-                                       name.removeTypeDesignation((SpecimenTypeDesignation) typeDesignation);\r
+                       // Remove name's designations\r
+                       Set existingDesignations; \r
+                       if (CdmUtil.isNameSupraSpecific(name)) {\r
+                               existingDesignations = name.getNameTypeDesignations();\r
+                       } else {\r
+                               existingDesignations = name.getSpecimenTypeDesignations();                              \r
+                       }\r
+                       \r
+                       for (Object typeDesignation : existingDesignations) {   \r
+                               if (typeDesignation instanceof TypeDesignationBase) {\r
+                                       name.removeTypeDesignation((TypeDesignationBase) typeDesignation);\r
                                }\r
                        }\r
                        \r
                        // Then re-add them from list\r
                        for (Object typeDesignation : typeDesignationsList) {\r
                                if (typeDesignation instanceof SpecimenTypeDesignation) {\r
-                                       name.addSpecimenTypeDesignation(\r
-                                               (Specimen) ((SpecimenTypeDesignation) typeDesignation).getTypeSpecimen(),\r
-                                               ((SpecimenTypeDesignation) typeDesignation).getTypeStatus(),\r
-                                               ((SpecimenTypeDesignation) typeDesignation).getCitation(),\r
-                                               ((SpecimenTypeDesignation) typeDesignation).getCitationMicroReference(),\r
-                                               ((SpecimenTypeDesignation) typeDesignation).getOriginalNameString(),\r
-                                               ((SpecimenTypeDesignation) typeDesignation).isNotDesignated(),\r
-                                               false);\r
-                               }                               \r
+                                       \r
+                                       Specimen specimen = CdmBase.deproxy(((SpecimenTypeDesignation) typeDesignation).getTypeSpecimen(), Specimen.class);\r
+                                       \r
+                                       name.addSpecimenTypeDesignation(                                                        \r
+                                                       specimen,\r
+                                                       ((SpecimenTypeDesignation) typeDesignation).getTypeStatus(),\r
+                                                       ((SpecimenTypeDesignation) typeDesignation).getCitation(),\r
+                                                       ((SpecimenTypeDesignation) typeDesignation).getCitationMicroReference(),\r
+                                                       ((SpecimenTypeDesignation) typeDesignation).getOriginalNameString(),\r
+                                                       ((SpecimenTypeDesignation) typeDesignation).isNotDesignated(),\r
+                                                       false);\r
+                               }\r
+                               \r
+                               if (typeDesignation instanceof NameTypeDesignation) {\r
+                                       name.addNameTypeDesignation(\r
+                                                       ((NameTypeDesignation) typeDesignation).getTypeName(), \r
+                                                       ((NameTypeDesignation) typeDesignation).getCitation(), \r
+                                                       ((NameTypeDesignation) typeDesignation).getCitationMicroReference(),\r
+                                                       ((NameTypeDesignation) typeDesignation).getOriginalNameString(), \r
+                                                       ((NameTypeDesignation) typeDesignation).isRejectedType(), \r
+                                                       ((NameTypeDesignation) typeDesignation).isConservedType(), \r
+                                                       ((NameTypeDesignation) typeDesignation).isLectoType(), \r
+                                                       ((NameTypeDesignation) typeDesignation).isNotDesignated(), \r
+                                                       false);\r
+                               }\r
                        }\r
                }\r
                return true;\r