.
authorp.ciardelli <p.ciardelli@localhost>
Mon, 20 Apr 2009 13:30:37 +0000 (13:30 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Mon, 20 Apr 2009 13:30:37 +0000 (13:30 +0000)
21 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/GlobalController.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DistributionDialog.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/LanguageDialog.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/IReferenceSearch.java [moved from eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/IReferenceSearch.java with 85% similarity]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/ReferenceSearchDialog.java [moved from eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDialog.java with 96% similarity]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/ReferenceSelectComposite.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/CdmUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/DescriptionUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/IDistributionInfoProvider.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/AddElementOperation.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/FeaturePreferences.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/description/DescriptionElementPropertySource.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/NomenclaturalReferencePropertySource.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/ReferencePropertySource.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDescriptor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseNameTypeWizardPage.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ChooseSpecimenTypeWizardPage.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ListTypeWizardPage.java

index 82f80e911209fc9d964a7956cbcc6fd521f2af34..8da30dda98efd2a7a1f19f9bb84c1736e919c8c6 100644 (file)
@@ -505,6 +505,9 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/Na
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/RulerWithIcon.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/IReferenceSearch.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/ReferenceSearchDialog.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/ReferenceSelectComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/handlers/AddTaxonomicChildHandler.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/handlers/CreateHeterotypicSynonymHandler.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/handlers/CreateHomotypicSynonymHandler.java -text
@@ -526,6 +529,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/CdmUtil.
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/DescriptionUtil.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/ICdmSessionDataRepository.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/ICdmTaxonSetListener.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/IDistributionInfoProvider.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/LanguageUtil.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/NameEditorInput.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/ReferenceUtil.java -text
@@ -603,11 +607,9 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationWizard.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationWizardModel.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelations/wizard/NameRelationsListWizard.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/IReferenceSearch.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/NomenclaturalReferencePropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/ReferencePropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDescriptor.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/ReferenceSearchDialog.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/SingleRefTypePropertySource.java -text
 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
index f9e0feec8b531456c22f1412ffb9c2f7b948c830..d68bfde517954f782ca638c7731b1cb748481810 100644 (file)
@@ -17,7 +17,11 @@ import java.util.Set;
 import org.apache.log4j.Logger;\r
 import org.eclipse.core.runtime.FileLocator;\r
 import org.eclipse.core.runtime.IPath;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.MultiStatus;\r
 import org.eclipse.core.runtime.Path;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.ErrorDialog;\r
 import org.eclipse.jface.resource.FontRegistry;\r
 import org.eclipse.jface.resource.ImageDescriptor;\r
 import org.eclipse.jface.resource.ImageRegistry;\r
@@ -37,6 +41,7 @@ import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
 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.controller.GlobalController;\r
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;\r
 import eu.etaxonomy.taxeditor.datasource.CdmTransactionController;\r
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
@@ -399,4 +404,4 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
        public PropertySheetPage getPropertySheetPage() {\r
                return propertySheetPage;\r
        }\r
-}
\ No newline at end of file
+}\r
index 6a18543752fc2528b03c164d4f2f5a8fa5667b22..3d084f5176500e76c0a93efda8ea40937269d970 100644 (file)
@@ -23,6 +23,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;\r
 import org.eclipse.core.runtime.Status;\r
 import org.eclipse.jface.action.IStatusLineManager;\r
+import org.eclipse.jface.dialogs.ErrorDialog;\r
 import org.eclipse.jface.window.Window;\r
 import org.eclipse.swt.widgets.Shell;\r
 import org.eclipse.ui.IViewPart;\r
@@ -212,13 +213,18 @@ public class GlobalController {
                }\r
        }\r
        \r
-//     public static URL getUrlFromDialog() {\r
-//             UrlDialog dialog = new UrlDialog(GlobalController.getShell(), \r
-//                             "Enter image URL", \r
-//                             "Enter the new image's URL:");\r
-//             if (dialog.open() == Window.CANCEL) {\r
-//                     return null;\r
-//             }\r
-//             return dialog.getUrl();\r
-//     }\r
+       /**\r
+        * Displays exception details in a dialog. Only shows first line in stack trace.\r
+        *<p>\r
+        *To show entire stack trace, implement following: \r
+        * http://rubenlaguna.com/wp/2007/07/25/eclipse-error-reporting-exception-stacktrace-details/\r
+        */\r
+       public static void openError(Exception exception) {\r
+               IStatus status = new Status(IStatus.ERROR, TaxEditorPlugin.PLUGIN_ID, \r
+                               "Joe mama", exception); \r
+               ErrorDialog.openError(GlobalController.getShell(), \r
+                               "Could not init application controller", \r
+                               "Could not init application controller", \r
+                               status);\r
+       }\r
 }
\ No newline at end of file
index 410c7a7a5e1b42c46a5878503ae944c6da24e640..4cecf23ec879c0e739c0eaeb032ab09377473a7b 100644 (file)
@@ -12,6 +12,7 @@ package eu.etaxonomy.taxeditor.editor.description;
 \r
 import java.util.ArrayList;\r
 import java.util.List;\r
+import java.util.Map;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.jface.dialogs.Dialog;\r
@@ -27,10 +28,13 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;\r
 import org.eclipse.swt.widgets.Shell;\r
 \r
+import eu.etaxonomy.cdm.api.service.ILocationService;\r
 import eu.etaxonomy.cdm.model.description.Distribution;\r
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.taxeditor.controller.GlobalController;\r
+import eu.etaxonomy.taxeditor.editor.reference.ReferenceSelectComposite;\r
 import eu.etaxonomy.taxeditor.model.DescriptionUtil;\r
 import eu.etaxonomy.taxeditor.model.IDistributionInfoProvider;\r
 \r
@@ -47,36 +51,51 @@ public class DistributionDialog extends Dialog {
 \r
        private String title;\r
        private String message;\r
-\r
+       \r
+       private static final String PRESENCE_ABSENCE_SEPARATOR = "----------------------------";\r
+       /**\r
+        * Number of area menus to show\r
+        */\r
+       private static final int NUM_AREA_MENUS = 4; \r
        /**\r
         * UI elements\r
         */\r
        private CCombo vocabTypeCombo;\r
-       private CCombo areaCombo1;\r
-       private CCombo areaCombo2;\r
-       private CCombo areaCombo3;\r
-       private CCombo areaCombo4;\r
+       private CCombo[] areaCombos = new CCombo[NUM_AREA_MENUS];\r
+//     private CCombo areaCombo1;\r
+//     private CCombo areaCombo2;\r
+//     private CCombo areaCombo3;\r
+//     private CCombo areaCombo4;\r
        private CCombo presenceAbsenceCombo;\r
-\r
+       private ReferenceSelectComposite referenceComposite;\r
        /**\r
         * Distribution fields\r
         */\r
-       private PresenceAbsenceTermBase<?> status;\r
        private NamedArea area;\r
+       private PresenceAbsenceTermBase<?> presenceAbsenceStatus;\r
        private Distribution distribution;\r
-\r
-       \r
+       private Object vocabType;\r
+       private ReferenceBase reference;\r
+       /**\r
+        * Lists to populate drop downs\r
+        */\r
        private List<Object> vocabTypes;\r
-//     private List<PresenceTerm> presenceTerms;\r
-//     private List<AbsenceTerm> absenceTerms;\r
-\r
-       private PresenceAbsenceTermBase presenceAbsence;\r
-\r
-       private List<PresenceAbsenceTermBase> presenceAbsenceTerms;\r
-\r
-       private static PresenceAbsenceTermBase lastPresenceAbsence;\r
-\r
-       private static final String PRESENCE_ABSENCE_SEPARATOR = "----------------------------";\r
+//     private List<NamedArea> areas1;\r
+//     private List<NamedArea> areas2;\r
+//     private List<NamedArea> areas3;\r
+//     private List<NamedArea> areas4;\r
+//     private List<List<NamedArea>> areas; // = new ArrayList<NamedArea>[4];  \r
+       private List<PresenceAbsenceTermBase<?>> presenceAbsenceTerms;\r
+       private List<List<NamedArea>> areas = new ArrayList<List<NamedArea>>();\r
+       private NamedArea[] selectedAreas = new NamedArea[NUM_AREA_MENUS];\r
+       private Map<NamedArea, List<NamedArea>> areaChildren;\r
+       private Map<NamedArea, NamedArea> areaParents;\r
+       /**\r
+        * Static fields to persist default values\r
+        */\r
+       private static ReferenceBase lastReference;\r
+       private static PresenceAbsenceTermBase<?> lastPresenceAbsence;\r
+       private static Object lastVocabType;\r
 \r
        /**\r
         * @param shell\r
@@ -99,9 +118,9 @@ public class DistributionDialog extends Dialog {
         * Set inputs to selections from last time dialog was used.\r
         */\r
        private void recallPreviousSelections() {\r
-//             if (lastVocab != null)  {\r
-//                     vocab = lastVocab;\r
-//             }\r
+               if (lastVocabType != null)  {\r
+                       vocabType = lastVocabType;\r
+               }\r
 //             if (lastArea1 != null) {\r
 //                     area1 = lastArea1;\r
 //             }\r
@@ -115,7 +134,10 @@ public class DistributionDialog extends Dialog {
 //                     area4 = lastArea4;\r
 //             }\r
                if (lastPresenceAbsence != null) {\r
-                       presenceAbsence = lastPresenceAbsence; \r
+                       presenceAbsenceStatus = lastPresenceAbsence; \r
+               }\r
+               if (lastReference != null) {\r
+                       reference = lastReference;\r
                }\r
        }\r
 \r
@@ -142,7 +164,7 @@ public class DistributionDialog extends Dialog {
                return distribution;\r
        }\r
        \r
-    /*\r
+    /*y\r
      * (non-Javadoc)\r
      * \r
      * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)\r
@@ -159,9 +181,9 @@ public class DistributionDialog extends Dialog {
        Composite composite = (Composite) super.createDialogArea(parent);\r
         // create message\r
         if (message != null) {\r
-            createText(message, composite, parent);\r
+            createLabel(message, composite, parent);\r
         }\r
-       createText("Select an area vocabulary:", composite, parent);\r
+       createLabel("Select an area vocabulary:", composite, parent);\r
         // create vocab type\r
         vocabTypeCombo = createCombo(composite);\r
         vocabTypeCombo.addSelectionListener(new SelectionAdapter() {\r
@@ -171,57 +193,13 @@ public class DistributionDialog extends Dialog {
                        }\r
                });\r
         // create areas\r
-        createText("Select an area:", composite, parent);\r
-        areaCombo1 = createCombo(composite); \r
-        areaCombo1.addSelectionListener(new SelectionAdapter() {\r
-                       @Override\r
-                       public void widgetSelected(SelectionEvent e) {\r
-                               selectArea(1);\r
-                       }\r
-               });\r
-        areaCombo2 = createCombo(composite);\r
-        areaCombo2.addSelectionListener(new SelectionAdapter() {\r
-                       @Override\r
-                       public void widgetSelected(SelectionEvent e) {\r
-                               selectArea(2);\r
-                       }\r
-               });\r
-        areaCombo3 = createCombo(composite);\r
-        areaCombo3.addSelectionListener(new SelectionAdapter() {\r
-                       @Override\r
-                       public void widgetSelected(SelectionEvent e) {\r
-                               selectArea(3);\r
-                       }\r
-               });\r
-        areaCombo4 = createCombo(composite);\r
-        areaCombo4.addSelectionListener(new SelectionAdapter() {\r
-                       @Override\r
-                       public void widgetSelected(SelectionEvent e) {\r
-                               selectArea(4);\r
-                       }\r
-               });\r
+        createLabel("Select an area:", composite, parent);\r
+        for (int i = 0; i < NUM_AREA_MENUS; i++) {\r
+               areaCombos[i] = createCombo(composite); \r
+            areaCombos[i].addSelectionListener(new AreaComboListener(i));\r
+        }\r
         // create presence / absence\r
-        createText("Select presence / absence:", composite, parent);\r
-//        Composite buttons = new Composite(composite, SWT.NONE);\r
-//        buttons.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
-//                | GridData.HORIZONTAL_ALIGN_FILL));\r
-//        GridLayout gridLayout = new GridLayout();\r
-//             gridLayout.numColumns = 2;\r
-//             buttons.setLayout(gridLayout);\r
-//             presenceButton = new Button(buttons, SWT.RADIO);\r
-//             presenceButton.setText("Presence");\r
-//             presenceButton.addSelectionListener(new SelectionAdapter() {\r
-//                     public void widgetSelected(SelectionEvent e) {\r
-//                             populatePresenceTerms();\r
-//                     }\r
-//             });\r
-//             absenceButton = new Button(buttons, SWT.RADIO);\r
-//             absenceButton.setText("Absence");\r
-//             absenceButton.addSelectionListener(new SelectionAdapter() {\r
-//                     public void widgetSelected(SelectionEvent e) {\r
-//                             populateAbsenceTerms();\r
-//                     }\r
-//             });\r
+        createLabel("Select presence / absence:", composite, parent);\r
                presenceAbsenceCombo =  new CCombo(composite, SWT.BORDER);\r
                presenceAbsenceCombo.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
                 | GridData.HORIZONTAL_ALIGN_FILL));\r
@@ -231,44 +209,147 @@ public class DistributionDialog extends Dialog {
                                selectPresenceAbsenceTerm();\r
                        }\r
                });\r
-               \r
+               // create reference\r
+               referenceComposite = new ReferenceSelectComposite(composite);\r
+\r
         populateVocabTypes();\r
                populateAreas();\r
                populatePresenceAbsenceTerms();\r
+               populateReference();\r
         \r
         applyDialogFont(composite);\r
         return composite;\r
     }\r
 \r
+    class AreaComboListener extends SelectionAdapter {\r
+       private int i;\r
+               AreaComboListener(int i) {\r
+               this.i = i;\r
+       }\r
+               @Override\r
+               public void widgetSelected(SelectionEvent e) {\r
+                       selectArea(i);\r
+               }\r
+    }\r
+    \r
+       /**\r
+        * @return\r
+        */\r
+       private CCombo createCombo(Composite composite) {\r
+               CCombo combo = new CCombo(composite, SWT.BORDER);\r
+               combo.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
+                               | GridData.HORIZONTAL_ALIGN_FILL));\r
+               return combo;\r
+       }\r
+    \r
        /**\r
         * \r
         */\r
-       private void populatePresenceAbsenceTerms() {\r
+       private void populateVocabTypes() {\r
                int index = 0;\r
                int i = 0;\r
-//             for (PresenceTerm term : getPresenceTerms()) {\r
-//                     presenceAbsenceCombo.add(provider.getPresenceAbsenceTermLabel(term));\r
-//                     if (this.presenceAbsence != null && this.presenceAbsence.equals(term)) {\r
-//                             index = i;\r
-//                     }\r
-//                     i++;\r
-//             }\r
-//             presenceAbsenceCombo.add(PRESENCE_ABSENCE_SEPARATOR );\r
-//             i++;\r
-//             for (AbsenceTerm term : getAbsenceTerms()) {\r
-//                     presenceAbsenceCombo.add(provider.getPresenceAbsenceTermLabel(term));\r
-//                     if (this.presenceAbsence != null && this.presenceAbsence.equals(term)) {\r
-//                             index = i;\r
-//                     }\r
-//                     i++;\r
-//             }\r
+               for (Object vocabType : getVocabTypes()) {\r
+                       if (vocabType == null) {\r
+                               vocabTypeCombo.add("");\r
+                       } else {\r
+                               if (vocabType.equals(this.vocabType)) {\r
+                                       index = i;\r
+                               }\r
+                               vocabTypeCombo.add(provider.getVocabularyTypeLabel(vocabType));\r
+                       }\r
+                       i++;\r
+               }\r
+               vocabTypeCombo.select(index);\r
+       }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       private void populateAreas() {\r
+               clearAreas();\r
+               if (vocabType != null) {\r
+                       int index = 0;\r
+                       int i = 0;\r
+                       for (NamedArea area : getNamedAreas(vocabType)) {\r
+                               if (area == null) {\r
+                                       areaCombos[0].add("");\r
+                               } else {\r
+                                       if (area.equals(this.area)) {\r
+                                               index = i;\r
+                                       }\r
+                                       areaCombos[0].add(area.getDescription());\r
+                               }\r
+                               i++;\r
+                       }\r
+                       areaCombos[0].select(index);\r
+               }\r
+               for (int j = 1; j < NUM_AREA_MENUS; j++) {\r
+                       NamedArea selectedArea = selectedAreas[j - 1];\r
+                       if (selectedArea != null) {\r
+                               int index = 0;\r
+                               int i = 0;\r
+                               for (NamedArea area : getNamedAreas(selectedArea, j)) {\r
+                                       if (area == null) {\r
+                                               areaCombos[i].add("");\r
+                                       } else {\r
+                                               if (area.equals(this.area)) {\r
+                                                       index = i;\r
+                                               }\r
+                                               areaCombos[0].add(area.getDescription());\r
+                                       }\r
+                                       i++;\r
+                               }\r
+                               areaCombos[0].select(index);\r
+                       }\r
+               }\r
+//             areaCombo2.setVisible(false);\r
+//             areaCombo3.setVisible(false);\r
+//             areaCombo4.setVisible(false);\r
+//             areaCombo2.moveBelow(referenceComposite);\r
+//             areaCombo3.moveBelow(referenceComposite);\r
+//             areaCombo4.moveBelow(referenceComposite);\r
+       }\r
+\r
+       \r
+       /**\r
+        * @param namedArea\r
+        * @return\r
+        */\r
+       private List<NamedArea> getNamedAreas(NamedArea namedArea, int depth) {\r
+               List<NamedArea> areasTemp = new ArrayList<NamedArea>();\r
+               areasTemp.add(null);\r
+               areasTemp.addAll(provider.getVocabularyNextLevelAreas(namedArea));\r
+               return areasTemp;\r
+       }\r
+\r
+       /**\r
+        * @param vocabType\r
+        * @return\r
+        */\r
+       private List<NamedArea> getNamedAreas(Object vocabType) {\r
+               List<NamedArea> areasTemp = new ArrayList<NamedArea>();\r
+               areasTemp.add(null);\r
+               areasTemp.addAll(provider.getVocabularyTopLevelAreas(vocabType));\r
+//             areas\r
+               return areasTemp;\r
+       }\r
 \r
-               for (PresenceAbsenceTermBase term : getPresenceAbsenceTerms()) {\r
+       /**\r
+        * \r
+        */\r
+       private void populatePresenceAbsenceTerms() {\r
+               int index = 0;\r
+               int i = 0;\r
+               for (PresenceAbsenceTermBase<?> term : getPresenceAbsenceTerms()) {\r
                        if (term == null) {\r
-                               presenceAbsenceCombo.add(PRESENCE_ABSENCE_SEPARATOR);\r
+                               if (i == 0) {\r
+                                       presenceAbsenceCombo.add("");\r
+                               } else {\r
+                                       presenceAbsenceCombo.add(PRESENCE_ABSENCE_SEPARATOR);\r
+                               }\r
                        } else {\r
                                presenceAbsenceCombo.add(provider.getPresenceAbsenceTermLabel(term));                           \r
-                               if (this.presenceAbsence != null && this.presenceAbsence.equals(term)) {\r
+                               if (this.presenceAbsenceStatus != null && this.presenceAbsenceStatus.equals(term)) {\r
                                        index = i;\r
                                }\r
                        }\r
@@ -277,17 +358,42 @@ public class DistributionDialog extends Dialog {
                presenceAbsenceCombo.select(index);\r
        }\r
 \r
+       /**\r
+        * \r
+        */\r
+       private void populateReference() {\r
+               if (reference != null) {\r
+                       referenceComposite.setReference(reference);\r
+               }\r
+       }\r
+       \r
        /**\r
         * @return\r
         */\r
-       private List<PresenceAbsenceTermBase> getPresenceAbsenceTerms() {\r
+       private List<Object> getVocabTypes() {\r
+               if (vocabTypes == null) {\r
+                       vocabTypes = new ArrayList<Object>();\r
+                       // Add empty entry for selection menu\r
+                       vocabTypes.add(null);\r
+                       vocabTypes.addAll(provider.getVocabularyTypes());\r
+               }\r
+               return vocabTypes;\r
+       }\r
+       \r
+       /**\r
+        * @return\r
+        */\r
+       private List<PresenceAbsenceTermBase<?>> getPresenceAbsenceTerms() {\r
                if (presenceAbsenceTerms == null) {\r
-                       presenceAbsenceTerms = new ArrayList<PresenceAbsenceTermBase>();\r
-                       for (PresenceAbsenceTermBase term : provider.getPresenceTerms()) {\r
+                       presenceAbsenceTerms = new ArrayList<PresenceAbsenceTermBase<?>>();\r
+                       // Add empty entry for selection menu\r
+                       presenceAbsenceTerms.add(null);\r
+                       \r
+                       for (PresenceAbsenceTermBase<?> term : provider.getPresenceTerms()) {\r
                                presenceAbsenceTerms.add(term);\r
                        }\r
                        presenceAbsenceTerms.add(null);\r
-                       for (PresenceAbsenceTermBase term : provider.getAbsenceTerms()) {\r
+                       for (PresenceAbsenceTermBase<?> term : provider.getAbsenceTerms()) {\r
                                presenceAbsenceTerms.add(term);\r
                        }\r
                }\r
@@ -295,114 +401,74 @@ public class DistributionDialog extends Dialog {
        }\r
 \r
        /**\r
-        * \r
+        * @param i\r
         */\r
-       private void populateAreas() {\r
-               areaCombo2.setVisible(false);\r
-               areaCombo3.setVisible(false);\r
-               areaCombo4.setVisible(false);\r
-               areaCombo2.moveBelow(presenceAbsenceCombo);\r
-               areaCombo3.moveBelow(presenceAbsenceCombo);\r
-               areaCombo4.moveBelow(presenceAbsenceCombo);\r
+       protected void selectArea(int depth) {\r
+               // This selection is made currently selected area\r
+               int i = areaCombos[depth].getSelectionIndex();\r
+               selectedAreas[depth] = getSelectedArea(depth, i);\r
+               \r
+               // Combos below this area combo are cleared\r
+//             clearArea(depth+1);\r
+               populateAreas();\r
+                               \r
+               // Next combo repopulated with this combo's named area children, if any\r
+//             populateArea(i+1);\r
+               \r
+               // Contents of this combo become current area list\r
+               \r
+//             switch (i) {\r
+//             case 1:\r
+//                     areaCombo1.removeAll();\r
+//             case 2:\r
+//                     areaCombo2.removeAll();\r
+//             case 3:\r
+//                     areaCombo3.removeAll();\r
+//             case 4:\r
+//                     areaCombo4.removeAll(); \r
+//             }\r
        }\r
 \r
        /**\r
         * @param i\r
+        * @param index\r
+        * @return\r
         */\r
-       protected void selectArea(int i) {\r
-               // TODO Auto-generated method stub\r
-               \r
+       private NamedArea getSelectedArea(int depth, int index) {\r
+               return areas.get(depth).get(index);\r
        }\r
 \r
        /**\r
-        * @return\r
+        * \r
         */\r
-       private CCombo createCombo(Composite composite) {\r
-               CCombo combo = new CCombo(composite, SWT.BORDER);\r
-               combo.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL\r
-                               | GridData.HORIZONTAL_ALIGN_FILL));\r
-               return combo;\r
+       protected void selectVocabType() {\r
+               int i = vocabTypeCombo.getSelectionIndex();\r
+               selectVocabType(i);\r
        }\r
-\r
+       \r
+       private void selectVocabType(int i) {\r
+               vocabType = getVocabTypes().get(i);\r
+               \r
+               clearAreas();\r
+               populateAreas();\r
+//             populateArea(1);\r
+       }\r
+       \r
        /**\r
         * \r
         */\r
        protected void selectPresenceAbsenceTerm() {\r
                int i = presenceAbsenceCombo.getSelectionIndex();\r
-               status = presenceAbsenceTerms.get(i);\r
-//             if (isPresence) {\r
-//                     status = presenceTerms.get(i);\r
-//             } else {\r
-//                     status = absenceTerms.get(i);\r
-//             }\r
+               presenceAbsenceStatus = presenceAbsenceTerms.get(i);\r
        }\r
 \r
-//     /**\r
-//      * \r
-//      */\r
-//     protected void populateAbsenceTerms() {\r
-//             \r
-//             isAbsence = true;\r
-//             isPresence = false;\r
-//             \r
-//             presenceButton.setSelection(false);\r
-//             absenceButton.setSelection(true);\r
-//             \r
-//             clearPresenceAbsenceTerms();\r
-//             for (AbsenceTerm term : getAbsenceTerms()) {\r
-//                     presenceAbsenceCombo.add(provider.getPresenceAbsenceTermLabel(term));\r
-//             }\r
-//     }\r
-//\r
-//     /**\r
-//      * \r
-//      */\r
-//     protected void populatePresenceTerms() {                \r
-//             isAbsence = false;\r
-//             isPresence = true;\r
-//             \r
-//             presenceButton.setSelection(true);\r
-//             absenceButton.setSelection(false);\r
-//             \r
-//             clearPresenceAbsenceTerms();\r
-//             for (PresenceTerm term : getPresenceTerms()) {\r
-//                     presenceAbsenceCombo.add(provider.getPresenceAbsenceTermLabel(term));\r
-//             }\r
-//     }\r
-\r
-//     /**\r
-//      * @return\r
-//      */\r
-//     private List<PresenceTerm> getPresenceTerms() {\r
-//             if (presenceTerms == null) {\r
-//                     presenceTerms = provider.getPresenceTerms();\r
-//             }\r
-//             return presenceTerms;\r
-//     }\r
-//\r
-//     /**\r
-//      * @return\r
-//      */\r
-//     private List<AbsenceTerm> getAbsenceTerms() {\r
-//             if (absenceTerms == null) {\r
-//                     absenceTerms = provider.getAbsenceTerms();\r
-//             }\r
-//             return absenceTerms;\r
-//     }\r
-       \r
-//     /**\r
-//      * \r
-//      */\r
-//     private void clearPresenceAbsenceTerms() {\r
-//             presenceAbsenceCombo.removeAll();\r
-//     }\r
-\r
        /**\r
         * @param string\r
         * @param parent \r
         * @param composite \r
+        * @return \r
         */\r
-       private void createText(String string, Composite composite, Composite parent) {\r
+       private Label createLabel(String string, Composite composite, Composite parent) {\r
                Label label = new Label(composite, SWT.WRAP);\r
         label.setText(string);\r
         GridData data = new GridData(GridData.GRAB_HORIZONTAL\r
@@ -411,52 +477,23 @@ public class DistributionDialog extends Dialog {
         data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);\r
         label.setLayoutData(data);\r
         label.setFont(parent.getFont());\r
+        return label;\r
        }\r
 \r
        /**\r
-        * \r
+        * @param i\r
         */\r
-       private void populateVocabTypes() {\r
-               for (Object vocabType : getVocabTypes()) {\r
-                       vocabTypeCombo.add(provider.getVocabularyTypeLabel(vocabType));\r
+       private void clearArea(int i) {\r
+               for (int j = i; j < NUM_AREA_MENUS; j++) {\r
+                       areaCombos[j].removeAll();\r
                }\r
        }\r
 \r
        /**\r
         * \r
         */\r
-       protected void selectVocabType() {\r
-               int i = vocabTypeCombo.getSelectionIndex();\r
-               Object vocabType = getVocabTypes().get(i);\r
-               \r
-               clearAreaCombos();\r
-               populateTopLevelAreaCombo();\r
-       }\r
-\r
-       /**\r
-        * \r
-        */\r
-       private void populateTopLevelAreaCombo() {\r
-               // TODO Auto-generated method stub\r
-               \r
-       }\r
-\r
-       /**\r
-        * \r
-        */\r
-       private void clearAreaCombos() {\r
-               // TODO Auto-generated method stub\r
-               \r
-       }\r
-\r
-       /**\r
-        * @return\r
-        */\r
-       private List<Object> getVocabTypes() {\r
-               if (vocabTypes == null) {\r
-                       vocabTypes = provider.getVocabularyTypes();\r
-               }\r
-               return vocabTypes;\r
+       private void clearAreas() {\r
+               clearArea(0);\r
        }\r
        \r
        protected void createButtonsForButtonBar(Composite parent) {\r
@@ -468,17 +505,55 @@ public class DistributionDialog extends Dialog {
        \r
        protected void buttonPressed(int buttonId) {\r
                if (IDialogConstants.OK_ID == buttonId) {\r
-                       createDistribution();\r
                        okPressed();\r
                } else if (IDialogConstants.CANCEL_ID == buttonId) {\r
                        cancelPressed();\r
                }\r
        }\r
 \r
+       protected void okPressed() {\r
+               createDistribution();\r
+               setStaticFields();\r
+               \r
+               super.okPressed();\r
+       }\r
+       \r
+       /**\r
+        * \r
+        */\r
+       private void setStaticFields() {\r
+               lastPresenceAbsence = getPresenceAbsenceTerm();\r
+               lastReference = getReference(); \r
+               lastVocabType = getVocabType();\r
+       }\r
+\r
+       /**\r
+        * @return\r
+        */\r
+       private Object getVocabType() {\r
+               int i = vocabTypeCombo.getSelectionIndex();\r
+               return vocabTypes.get(i);\r
+       }\r
+\r
+       /**\r
+        * @return\r
+        */\r
+       private ReferenceBase getReference() {\r
+               return referenceComposite.getReference();\r
+       }\r
+\r
+       /**\r
+        * @return\r
+        */\r
+       private PresenceAbsenceTermBase<?> getPresenceAbsenceTerm() {\r
+               int i = presenceAbsenceCombo.getSelectionIndex();\r
+               return presenceAbsenceTerms.get(i);\r
+       }\r
+       \r
        /**\r
         * \r
         */\r
        private void createDistribution() {\r
-               distribution = Distribution.NewInstance(area, status);\r
+               distribution = Distribution.NewInstance(area, presenceAbsenceStatus);\r
        }\r
-}\r
+}
\ No newline at end of file
index 15967643780e7486c8283059ab4ca6a4b2c3898e..3b39e9ce966b9f525425faf3606f4aa9dcac9a3c 100644 (file)
@@ -45,8 +45,12 @@ public class LanguageDialog extends InputDialog {
        private String message;\r
        \r
        private Language language;\r
-       private static Language lastLanguage;\r
        protected Language languageTemp;\r
+       \r
+       /**\r
+        * Language selected last time the dialog was used.\r
+        */\r
+       private static Language lastLanguage;\r
 \r
        private CCombo combo;\r
 \r
@@ -143,7 +147,6 @@ public class LanguageDialog extends InputDialog {
                        }\r
                        i++;\r
                }\r
-               \r
                combo.select(index);\r
        }\r
 \r
@@ -179,15 +182,23 @@ public class LanguageDialog extends InputDialog {
        \r
        protected void buttonPressed(int buttonId) {\r
                if (IDialogConstants.OK_ID == buttonId) {\r
-                       language = getLanguageSelection();\r
-                       lastLanguage = language;\r
                        okPressed();\r
                } else if (IDialogConstants.CANCEL_ID == buttonId) {\r
-                       language = null; \r
                        cancelPressed();\r
                }\r
        }\r
        \r
+       protected void okPressed() {\r
+               language = getLanguageSelection();\r
+               lastLanguage = language;                \r
+               super.okPressed();\r
+       }\r
+       \r
+       protected void cancelPressed() {\r
+               language = null;\r
+               super.cancelPressed();\r
+       }\r
+       \r
        private Language getLanguageSelection() {\r
                int i = combo.getSelectionIndex();\r
                return languages.get(i);\r
index 332a66f10a36889bfc51c7893a117ee6ed72a347..c23a7205a52b2645ec9cd52dc8d9cb50aef6787e 100644 (file)
@@ -28,7 +28,7 @@ import eu.etaxonomy.cdm.model.name.NameRelationship;
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
-import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
@@ -226,7 +226,7 @@ public abstract class NameComposite extends GroupedComposite {
 \r
 //             name.addPropertyChangeListener(ITaxEditorConstants.REFRESH_NAMEVIEWER, listener);\r
                \r
-               StrictReferenceBase reference = (StrictReferenceBase) name.getNomenclaturalReference();\r
+               ReferenceBase reference = name.getNomenclaturalReference();\r
                if (reference != null) {\r
                        reference.addPropertyChangeListener("titleCache", listener);\r
                }\r
similarity index 85%
rename from eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/reference/IReferenceSearch.java
rename to eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/IReferenceSearch.java
index 77bae7b9ff6c00c0720423f1702e1e1c79120559..db5effaaff03902cb3d9310c007a917e2309e51a 100644 (file)
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
 \r
-package eu.etaxonomy.taxeditor.propertysheet.reference;\r
+package eu.etaxonomy.taxeditor.editor.reference;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -7,7 +7,7 @@
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
 \r
-package eu.etaxonomy.taxeditor.propertysheet.reference;\r
+package eu.etaxonomy.taxeditor.editor.reference;\r
 \r
 import java.util.ArrayList;\r
 import java.util.List;\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/ReferenceSelectComposite.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/reference/ReferenceSelectComposite.java
new file mode 100644 (file)
index 0000000..17d99e2
--- /dev/null
@@ -0,0 +1,184 @@
+// $Id$\r
+/**\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.editor.reference;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.SWT;\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.reference.Generic;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 07.04.2009\r
+ * @version 1.0\r
+ */\r
+public class ReferenceSelectComposite extends Composite {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ReferenceSelectComposite.class);\r
+       private ReferenceBase savedReference;\r
+       private Text txtReference;\r
+       private Button btnClearReference;\r
+       private Text txtMicroRef;\r
+       \r
+       /**\r
+        * @param parent\r
+        * @param style\r
+        */\r
+       public ReferenceSelectComposite(Composite parent) {\r
+               super(parent, SWT.NULL);\r
+               createContent(parent);\r
+       }\r
+       \r
+       private void createContent(Composite xcontainer) {\r
+               setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
+               GridLayout gridLayout = new GridLayout();\r
+               gridLayout.marginHeight = 0;\r
+               gridLayout.marginWidth = 0;\r
+               setLayout(gridLayout);\r
+               \r
+               Label lblReference = new Label(this, SWT.NONE);\r
+               lblReference.setLayoutData(new GridData());\r
+               lblReference.setText("Choose a reference either by searching or entering it as free text:");\r
+               \r
+               // Create 3-columned composite for reference input\r
+               Composite refComposite = new Composite(this, SWT.NONE);\r
+               GridLayout gridLayout2 = new GridLayout();\r
+               gridLayout2.numColumns = 3;     \r
+               gridLayout2.marginHeight = 0;\r
+               gridLayout2.marginWidth = 0;\r
+               refComposite.setLayout(gridLayout2);\r
+               refComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               \r
+               // Create reference input\r
+               txtReference = new Text(refComposite, SWT.BORDER);\r
+               txtReference.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               \r
+               // Create reference search button\r
+               Button btnSearchReference = new Button(refComposite, 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(refComposite, 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
+               // Create message re: editing references\r
+               Label lblNewRefFeedback = new Label(this, 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
+               Label lblMicroref = new Label(this, SWT.NONE);\r
+               lblMicroref.setText("Enter reference detail (e.g., page no.):");\r
+               \r
+               // Create microref input\r
+               txtMicroRef = new Text(this, SWT.BORDER);\r
+               txtMicroRef.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));\r
+       }\r
+       \r
+       public void setReference(ReferenceBase reference) {\r
+               savedReference = reference;\r
+               txtReference.setText(reference.getTitleCache());\r
+               txtReference.setEditable(false);\r
+                                       \r
+               btnClearReference.setEnabled(true);\r
+       }\r
+       \r
+       public void setMicroReference(String microref) {\r
+               txtMicroRef.setText(microref);\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
+       protected void clearReference() {\r
+               savedReference = null;\r
+               \r
+               txtReference.setText("");\r
+               txtReference.setEditable(true);\r
+               \r
+               btnClearReference.setEnabled(false);            \r
+       }\r
+\r
+       /**\r
+        * Returns reference object, if any. Otherwise, creates a new Generic\r
+        * reference object using text the user has i nput.\r
+        *  \r
+        * @return\r
+        */\r
+       public ReferenceBase getReference() {\r
+               ReferenceBase reference = null;\r
+           if (savedReference != null) {\r
+               reference = savedReference;\r
+               } else {\r
+                       if (!txtReference.getText().equals("")) {\r
+                               reference = Generic.NewInstance();\r
+                               reference.setTitleCache(txtReference.getText());\r
+                       }\r
+               }\r
+               return reference;\r
+       }\r
+       \r
+       public String getMicroReference() {\r
+               return txtMicroRef.getText();\r
+       }\r
+}
\ No newline at end of file
index e005e7c0451fd5cb2d9a68ece1af25275c3a0d48..184ab2ea2d9a9e2c97ad98a4297435bbcb2bc903 100644 (file)
@@ -36,6 +36,7 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.controller.GlobalController;\r
 import eu.etaxonomy.taxeditor.navigation.SearchResult;\r
@@ -258,6 +259,7 @@ public class CdmUtil {
                \r
                ITaxonServiceConfigurator configurator = new TaxonServiceConfiguratorImpl();\r
                \r
+               configurator.setMatchMode(MatchMode.ANYWHERE);\r
                configurator.setSearchString(name.replace("*", "%"));\r
                configurator.setDoTaxa(true);\r
                configurator.setDoNamesWithoutTaxa(true);\r
index 9ee77b3a4f1550484c7e7c3084923609bf513308..a475006a15524a07bca025dd9576be5c27757172 100644 (file)
 \r
 package eu.etaxonomy.taxeditor.model;\r
 \r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
 import org.apache.log4j.Logger;\r
 \r
+import eu.etaxonomy.cdm.api.service.ILocationService;\r
+import eu.etaxonomy.cdm.api.service.ILocationService.NamedAreaVocabularyType;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.description.AbsenceTerm;\r
 import eu.etaxonomy.cdm.model.description.CommonTaxonName;\r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
+import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
+import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
+import eu.etaxonomy.cdm.model.location.NamedAreaType;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -89,4 +102,152 @@ public class DescriptionUtil {
                        String value) {\r
                setCache(element, value, Language.DEFAULT());\r
        }\r
+       \r
+       public static IDistributionInfoProvider getDistributionInfoProvider() {\r
+               IDistributionInfoProvider provider = new DistributionInfoProvider();\r
+               return provider;\r
+       }\r
+       \r
+       static class DistributionInfoProvider implements IDistributionInfoProvider {\r
+\r
+               private static final String TDWG = "TDWG Areas";\r
+               private static final String ISO_COUNTRY = "ISO Country Codes";\r
+               private static final String ISO_WATERBODY = "ISO Waterbody Codes";\r
+               private static ILocationService locationService;\r
+               private List<Object> vocabTypes;\r
+               \r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getAbsenceTerms()\r
+                */\r
+               @Override\r
+               public List<AbsenceTerm> getAbsenceTerms() {\r
+                       List<AbsenceTerm> absenceTerms = new ArrayList<AbsenceTerm>();                  \r
+                       absenceTerms.add(AbsenceTerm.ABSENT());\r
+                       return absenceTerms;\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getPresenceTerms()\r
+                */\r
+               @Override\r
+               public List<PresenceTerm> getPresenceTerms() {\r
+                       List<PresenceTerm> presenceTerms = new ArrayList<PresenceTerm>();\r
+                       presenceTerms.add(PresenceTerm.CULTIVATED());\r
+                       presenceTerms.add(PresenceTerm.ENDEMIC_FOR_THE_RELEVANT_AREA());\r
+                       presenceTerms.add(PresenceTerm.INTRODUCED());\r
+                       return presenceTerms;\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getVocabularyNextLevelAreas(eu.etaxonomy.cdm.model.location.NamedArea)\r
+                */\r
+               @Override\r
+               public List<NamedArea> getVocabularyNextLevelAreas(NamedArea namedArea) {\r
+                       List<NamedArea> namedAreas = new ArrayList<NamedArea>();\r
+                       namedAreas.add(NamedArea.NewInstance("USA", "USA", "USA"));\r
+                       namedAreas.add(NamedArea.NewInstance("Canada", "Canada", "CAN"));\r
+                       namedAreas.add(NamedArea.NewInstance("Mexico", "Mexico", "MEX"));\r
+                       return namedAreas;\r
+               }\r
+\r
+               private ILocationService getLocationService() {\r
+                       if (locationService == null) {\r
+                               locationService = TaxEditorPlugin.getDefault().getApplicationController().getLocationService();\r
+                       }\r
+                       return locationService;\r
+               }\r
+               \r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getVocabularyTopLevelAreas(java.lang.Object)\r
+                */\r
+               @Override\r
+               public List<NamedArea> getVocabularyTopLevelAreas(Object vocabularyType) {\r
+\r
+                       if (!(vocabularyType instanceof NamedAreaVocabularyType)) {\r
+                               return null;\r
+                       }\r
+                       for (Object o :getLocationService().getNamedAreaVocabulary(\r
+                                       (NamedAreaVocabularyType) vocabularyType, NamedAreaLevel.TDWG_LEVEL1(), \r
+                                       NamedAreaType.NATURAL_AREA())) {\r
+                               logger.warn(o.toString());\r
+                       }\r
+                       \r
+                       if (vocabularyType.equals(TDWG)) {\r
+//                             for (Object o : locationService.getNamedAreaTypeVocabulary()) {\r
+//                             for (Object o : locationService.getNamedAreaLevelVocabulary()) {\r
+//                             NamedAreaVocabularyType\r
+//                             for (Object o : locationService.getNamedAreaVocabulary(vocabularyType, namedAreaLevel, namedAreaType) .getNamedAreaLevelVocabulary()) {\r
+//                                     logger.warn(o.toString());\r
+//                             }\r
+                       }\r
+                       if (vocabularyType.equals(ISO_COUNTRY)) {\r
+                               \r
+                       }\r
+                       if (vocabularyType.equals(ISO_WATERBODY)) {\r
+                               \r
+                       }\r
+                       return null;\r
+//                     List<NamedArea> namedAreas = new ArrayList<NamedArea>();\r
+//                     namedAreas.add(NamedArea.NewInstance("North America", "North America", "NA"));\r
+//                     namedAreas.add(NamedArea.NewInstance("Europe", "Europe", "EUR"));\r
+//                     return namedAreas;\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getVocabularyTypes()\r
+                */\r
+               @Override\r
+               public List<Object> getVocabularyTypes() {\r
+                       if (vocabTypes == null) {\r
+                               vocabTypes = new ArrayList<Object>();\r
+                               for (NamedAreaVocabularyType vocabType: getLocationService().getNamedAreaVocabularyTypes()) {\r
+                                       vocabTypes.add(vocabType);\r
+                               }\r
+                       }\r
+                               \r
+//                     vocabTypes.add("TDWG Areas");\r
+//                     vocabTypes.add("ISO Country Codes");\r
+//                     vocabTypes.add("ISO Waterbody Codes");\r
+//                     return vocabTypes;\r
+                       return vocabTypes;\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getVocabularyTypeLabel()\r
+                */\r
+               @Override\r
+               public String getVocabularyTypeLabel(Object vocabularyType) {\r
+                       if (vocabularyType instanceof String) {\r
+                               return (String) vocabularyType;\r
+                       } else {\r
+                               return vocabularyType.toString();       \r
+                       }\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getPresenceAbsenceTermLabel(eu.etaxonomy.cdm.model.description.PresenceTerm)\r
+                */\r
+               @Override\r
+               public String getPresenceAbsenceTermLabel(PresenceAbsenceTermBase term) {\r
+                       return term.getDescription();\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getNamedAreaChildren(eu.etaxonomy.cdm.model.location.NamedArea)\r
+                */\r
+               @Override\r
+               public List<NamedArea> getNamedAreaChildren(NamedArea namedArea) {\r
+                       // TODO Auto-generated method stub\r
+                       return null;\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see eu.etaxonomy.taxeditor.model.IDistributionInfoProvider#getNamedAreaParent(eu.etaxonomy.cdm.model.location.NamedArea)\r
+                */\r
+               @Override\r
+               public NamedArea getNamedAreaParent(NamedArea namedArea) {\r
+                       // TODO Auto-generated method stub\r
+                       return null;\r
+               }\r
+       }\r
 }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/IDistributionInfoProvider.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/IDistributionInfoProvider.java
new file mode 100644 (file)
index 0000000..54fce77
--- /dev/null
@@ -0,0 +1,49 @@
+// $Id$\r
+/**\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.model;\r
+\r
+import java.util.List;\r
+\r
+import eu.etaxonomy.cdm.model.description.AbsenceTerm;\r
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
+import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 03.04.2009\r
+ * @version 1.0\r
+ */\r
+public interface IDistributionInfoProvider {\r
+       \r
+       /**\r
+        * i.e. TDWG, ISO\r
+        * \r
+        * @return\r
+        */\r
+       List<Object> getVocabularyTypes();\r
+       \r
+       List<NamedArea> getVocabularyTopLevelAreas(Object vocabularyType);\r
+       \r
+       List<NamedArea> getVocabularyNextLevelAreas(NamedArea namedArea);\r
+               \r
+       List<PresenceTerm> getPresenceTerms();\r
+       \r
+       List<AbsenceTerm> getAbsenceTerms();\r
+\r
+       String getVocabularyTypeLabel(Object vocabularyType);\r
+\r
+       String getPresenceAbsenceTermLabel(PresenceAbsenceTermBase<?> term);\r
+       \r
+       NamedArea getNamedAreaParent(NamedArea namedArea);\r
+       \r
+       List<NamedArea> getNamedAreaChildren(NamedArea namedArea);\r
+}
\ No newline at end of file
index f9ccacc63c42d150ebbf2d4211d02a75b9d6e116..bc06b33b6f0a46cb51006589fafc9194eee08f68 100644 (file)
@@ -24,6 +24,7 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.description.DistributionDialog;\r
 import eu.etaxonomy.taxeditor.editor.description.LanguageDialog;\r
 import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
 \r
@@ -54,18 +55,31 @@ public class AddElementOperation extends AbstractEditorOperation {
        @Override\r
        public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
-               \r
+\r
+               // Common name\r
                if (feature.supportsCommonTaxonName()) {\r
-                       \r
-                       // Get language for the common name\r
                        Language language = LanguageDialog.getLanguage\r
                                        ("Select language", "Select the common name's language:");\r
                        if (language == null) {\r
                                return Status.CANCEL_STATUS;\r
                        }\r
-                       \r
                        element = CommonTaxonName.NewInstance("", language);\r
-               } else {\r
+                       // Feature must be explicitly set to sync w term in persistence layer\r
+                       element.setFeature(feature);\r
+               } \r
+               // Distribution\r
+               if (feature.supportsDistribution()) {\r
+                       element = DistributionDialog.getDistribution\r
+                                       ("Create distribution", null);\r
+                       if (element == null) {\r
+                               return Status.CANCEL_STATUS;\r
+                       }\r
+                       // Feature must be explicitly set to sync w term in persistence layer\r
+                       element.setFeature(feature);\r
+               }\r
+               \r
+               // Default element type is TextData\r
+               if (element == null) {\r
                        element = TextData.NewInstance(feature);\r
                }\r
                description.addElement(element);\r
index 1320fa9812db443485cb4d1c7a8876918c1bf981..0f6c67ad03b97b0a71f56d5eaf48ffde36d717db 100644 (file)
@@ -73,21 +73,15 @@ public class FeaturePreferences extends PreferencePage implements
                if (count % 3 > 0) {\r
                        colheight++;\r
                }\r
-               \r
                for (int i = 0; i < colheight; i++) {\r
-                       \r
                        createButton((Feature) array[i]);\r
-                       \r
                        if (i + colheight < count) {\r
                                createButton((Feature) array[i + colheight]);\r
                        }\r
-\r
                        if (i + (colheight * 2) < count) {\r
                                createButton((Feature) array[i + (colheight * 2)]);\r
                        }\r
-                       \r
                }\r
-               \r
                return container;\r
        }\r
 \r
index 44f5a6e436a44997364a9c559703fa400e58b769..ce4783b85bcd5cbf1d292ae2a9050b57f2127a59 100644 (file)
@@ -34,9 +34,9 @@ import eu.etaxonomy.cdm.model.description.TaxonInteraction;
 import eu.etaxonomy.cdm.model.description.TextData;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.editor.reference.IReferenceSearch;\r
 import eu.etaxonomy.taxeditor.model.DescriptionUtil;\r
 import eu.etaxonomy.taxeditor.model.ReferenceUtil;\r
-import eu.etaxonomy.taxeditor.propertysheet.reference.IReferenceSearch;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.reference.ReferenceSearchDescriptor;\r
 \r
index 312f9f32548ae421ca1f88694d4badf878de2d0b..ab913f700873f1002da719f614fba2ba1e53dbf7 100644 (file)
@@ -20,6 +20,7 @@ import eu.etaxonomy.cdm.model.reference.Book;
 import eu.etaxonomy.cdm.model.reference.BookSection;\r
 import eu.etaxonomy.cdm.model.reference.Generic;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.editor.reference.IReferenceSearch;\r
 \r
 /**\r
  * Subclass of <code>ReferencePropertySource</code> which restricts reference type menu \r
index 1a64419bc001317759807ab1a9858e4365e3de89..a3eb7084250407f62d46c5a78520969521442b4f 100644 (file)
@@ -56,6 +56,7 @@ import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;
 import eu.etaxonomy.cdm.model.reference.Thesis;\r
 import eu.etaxonomy.cdm.model.reference.WebPage;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.editor.reference.IReferenceSearch;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 import eu.etaxonomy.taxeditor.propertysheet.TimePeriodPropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.YearValidator;\r
index 8e0cae8471cad4daa7642d6fcf2aa8434cb57d28..e30c2a0a2f1fdcd15c9fb0350256c260e8ae03f0 100644 (file)
@@ -18,6 +18,7 @@ import org.eclipse.swt.widgets.Dialog;
 import org.eclipse.ui.views.properties.PropertyDescriptor;\r
 \r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.editor.reference.ReferenceSearchDialog;\r
 \r
 /**  \r
  * @author p.ciardelli\r
index 64b54cb9756e4a27e92cb81488d533d0883e0162..ad69e97960bcd37a3d07b7405b6b8bda7262c074 100644 (file)
@@ -29,12 +29,10 @@ import org.eclipse.swt.widgets.Text;
 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.controller.PreferencesController;\r
-import eu.etaxonomy.taxeditor.propertysheet.reference.IReferenceSearch;\r
-import eu.etaxonomy.taxeditor.propertysheet.reference.ReferenceSearchDialog;\r
+import eu.etaxonomy.taxeditor.editor.reference.ReferenceSelectComposite;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -49,12 +47,8 @@ public class ChooseNameTypeWizardPage extends WizardPage {
        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
@@ -62,6 +56,8 @@ public class ChooseNameTypeWizardPage extends WizardPage {
 \r
        private WritableList typeDesignationsList;\r
 \r
+       private ReferenceSelectComposite referenceComposite;\r
+\r
        /**\r
         * @param typeDesignation\r
         * @param name\r
@@ -198,65 +194,17 @@ public class ChooseNameTypeWizardPage extends WizardPage {
                                btnNotDesignated.setSelection(true);\r
                        }\r
                }\r
+                               \r
+               // Create reference input composite\r
+               referenceComposite = new ReferenceSelectComposite(container);\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
+                       referenceComposite.setMicroReference(typeDesignation.getCitationMicroReference());\r
+                       if (typeDesignation.getCitation() != null) {\r
+                               referenceComposite.setReference(typeDesignation.getCitation());\r
+                       }\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
@@ -271,16 +219,6 @@ public class ChooseNameTypeWizardPage extends WizardPage {
                        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
@@ -295,19 +233,6 @@ public class ChooseNameTypeWizardPage extends WizardPage {
                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
@@ -319,19 +244,7 @@ public class ChooseNameTypeWizardPage extends WizardPage {
                \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
@@ -361,18 +274,11 @@ public class ChooseNameTypeWizardPage extends WizardPage {
                        }\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
+               ReferenceBase citation = referenceComposite.getReference();\r
+               String citationMicroReference = referenceComposite.getMicroReference();\r
                                \r
                if (typeDesignation == null) {\r
-                       typeDesignation = new TemporaryNameTypeDesignation(typeName, citation, null,\r
+                       typeDesignation = new TemporaryNameTypeDesignation(typeName, citation, citationMicroReference,\r
                                        null, btnRejected.getSelection(), btnConserved.getSelection(), btnLecto.getSelection(), btnNotDesignated.getSelection());\r
                        typeDesignation.setLectoType(btnLecto.getSelection()); \r
                } else {\r
@@ -381,6 +287,7 @@ public class ChooseNameTypeWizardPage extends WizardPage {
                        typeDesignation.setLectoType(btnLecto.getSelection());\r
                        typeDesignation.setNotDesignated(btnNotDesignated.getSelection());\r
                        typeDesignation.setCitation(citation);\r
+                       typeDesignation.setCitationMicroReference(citationMicroReference);\r
                }\r
                \r
                typeDesignationsList.remove(typeDesignation);\r
index 3c57d99876d703c966450b2eaba812526a615b7f..dc41ac1f37637947e7bdf8c80327ad7d5ac852bd 100644 (file)
@@ -23,7 +23,6 @@ import org.eclipse.swt.layout.GridData;
 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
@@ -37,10 +36,8 @@ import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
 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.editor.reference.ReferenceSelectComposite;\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
@@ -55,14 +52,11 @@ public class ChooseSpecimenTypeWizardPage extends WizardPage {
        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
+       private ReferenceSelectComposite referenceComposite;\r
 \r
        /**\r
         * @param typeDesignation\r
@@ -145,104 +139,22 @@ public class ChooseSpecimenTypeWizardPage extends WizardPage {
                if (typeDesignation != null && typeDesignation.getTypeSpecimen() != null) {\r
                        txtDesignationType.setText(typeDesignation.getTypeSpecimen().getTitleCache());\r
                }\r
+       \r
+               // Create reference input composite\r
+               referenceComposite = new ReferenceSelectComposite(container);\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
+               // Set text to reference text if exists\r
+               if (typeDesignation != null) {\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
+                       referenceComposite.setMicroReference(typeDesignation.getCitationMicroReference());\r
                        \r
-                       // Clear selected reference\r
-                       public void widgetSelected(SelectionEvent e) {\r
-                               clearReference();\r
+                       if (typeDesignation.getCitation() != null) {\r
+                               referenceComposite.setReference(typeDesignation.getCitation());                         \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
-       /**\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
@@ -264,15 +176,8 @@ public class ChooseSpecimenTypeWizardPage extends WizardPage {
         \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
+               ReferenceBase citation = referenceComposite.getReference();\r
+               String citationMicroReference = referenceComposite.getMicroReference();\r
                \r
                TypeDesignationStatus status = typeStatusArray[statusCombo.getSelectionIndex()];\r
                \r
@@ -286,11 +191,12 @@ public class ChooseSpecimenTypeWizardPage extends WizardPage {
                \r
                if (typeDesignation == null) {\r
                        typeDesignation = new TemporarySpecimenTypeDesignation(specimen, status, \r
-                                       citation, null, null, true);\r
+                                       citation, citationMicroReference, null, true);\r
                } else {\r
                        typeDesignation.setTypeSpecimen(specimen);\r
                        typeDesignation.setTypeStatus(status);\r
                        typeDesignation.setCitation(citation);\r
+                       typeDesignation.setCitationMicroReference(citationMicroReference);\r
                }\r
                \r
                typeDesignationsList.remove(typeDesignation);\r
index 787027861b3e0c914167a22d13928f075c027a30..af19c0d57af246361bf5e35329f957d2980b3ffb 100644 (file)
@@ -31,7 +31,6 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;\r
 import org.eclipse.swt.widgets.Composite;\r
 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
@@ -165,7 +164,7 @@ public class ListTypeWizardPage extends WizardPage {
                tableViewer.addDoubleClickListener(new IDoubleClickListener() {\r
                        public void doubleClick(DoubleClickEvent event) {\r
                                if (((StructuredSelection) event.getSelection())\r
-                                               .getFirstElement() instanceof SpecimenTypeDesignation) {\r
+                                               .getFirstElement() instanceof TypeDesignationBase) {\r
                                        TypeDesignationBase typeDesignation = (TypeDesignationBase) \r
                                                        ((StructuredSelection) event.getSelection()).getFirstElement();\r
                                        createTypeDesignationWizard(typeDesignation);\r