Commit before updating to new version of cdmlib.
authorp.ciardelli <p.ciardelli@localhost>
Wed, 21 May 2008 12:53:58 +0000 (12:53 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Wed, 21 May 2008 12:53:58 +0000 (12:53 +0000)
29 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/icons/autonym_no_bg.gif [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/plugin.xml
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ITaxEditorConstants.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Messages.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/NomenclaturalCodePreferences.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxonomicPreferences.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddQuickName.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionDeleteTaxon.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionSaveTaxon.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameListView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/TaxonomicTreeViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineBreakListener.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineWrapSupport.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/TaxonCompositeFactory.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationsPropertyDescriptor.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CompletionProcessor.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsDialog.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsPropertyDescriptor.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NomStatusPropertySource.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NonViralNamePropertySource.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/SourceViewerConfig.java [new file with mode: 0644]

index 7b72046d25d1f7dc85bd980e5f8b0d14c9034c70..4c1d3476f5c40436c0c298aeffe2f61dabfc373e 100644 (file)
@@ -320,6 +320,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/icons/add_no_bg.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/add_no_bg2.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/alt_window_16.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/alt_window_32.gif -text
+eclipseprojects/eu.etaxonomy.taxeditor/icons/autonym_no_bg.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/basionym.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/basionym_no_bg.gif -text
 eclipseprojects/eu.etaxonomy.taxeditor/icons/change.gif -text
@@ -376,8 +377,12 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationAct
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ITaxEditorConstants.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Messages.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/NomenclaturalCodePreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxonomicPreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddQuickName.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddSynonymToTaxon.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionDeleteTaxon.java -text
@@ -424,6 +429,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewe
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/IParentDataAdapter.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/ISelectionWrapper.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineBreakListener.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineWrapSupport.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/Messages.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/ParseListener.java -text
@@ -434,13 +440,19 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewe
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/messages.properties -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationPropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationsDialog.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationsPropertyDescriptor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CheckboxPropertyDescriptor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CollectionPropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CompletionProcessor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CustomSortPropertySheetEntry.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/MarkersPropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsDialog.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsPropertyDescriptor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsPropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NomStatusPropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NonViralNamePropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetContentProvider.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueEditingSupport.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/PropertySheetValueLabelProvider.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/SourceViewerConfig.java -text
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/icons/autonym_no_bg.gif b/eclipseprojects/eu.etaxonomy.taxeditor/icons/autonym_no_bg.gif
new file mode 100644 (file)
index 0000000..b7cdc65
Binary files /dev/null and b/eclipseprojects/eu.etaxonomy.taxeditor/icons/autonym_no_bg.gif differ
index c6f2345129f04063736081a65ad3bbb329cf1b22..52573029a1f667ca76b545a099ba936157483877 100644 (file)
          </property>\r
       </product>\r
    </extension>\r
+   <extension\r
+         point="org.eclipse.ui.preferencePages">\r
+      <page\r
+            class="eu.etaxonomy.taxeditor.TaxonomicPreferences"\r
+            id="eu.etaxonomy.taxeditor.preferences"\r
+            name="Taxonomic">\r
+      </page>\r
+   </extension>\r
+   <extension\r
+         point="org.eclipse.ui.preferencePages">\r
+      <page\r
+            category="eu.etaxonomy.taxeditor.preferences"\r
+            class="eu.etaxonomy.taxeditor.NomenclaturalCodePreferences"\r
+            id="eu.etaxonomy.taxeditor.preferences.nomenclatural"\r
+            name="Nomenclatural Code">\r
+      </page>\r
+   </extension>\r
 \r
 </plugin>\r
index 5127bfa7829296b8727b1b80739f3270ede58fe0..6626dbb5aa202a7a38152c6b8e7465edec0cafb1 100644 (file)
@@ -25,6 +25,7 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
        private IWorkbenchAction exitAction;
        private ActionOpenNameEditor newNameAction;
        private IWorkbenchAction saveAction;
+       private IWorkbenchAction preferencesAction;
 
        public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
                super(configurer);
@@ -39,12 +40,15 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
                // the window is closed.
 
                saveAction = ActionFactory.SAVE.create(window);
+               register(saveAction);
                
                exitAction = ActionFactory.QUIT.create(window);
                register(exitAction);
                
                newNameAction = new ActionOpenNameEditor();
                register(newNameAction);
+               
+               preferencesAction = ActionFactory.PREFERENCES.create(window);
        }
 
        protected void fillMenuBar(IMenuManager menuBar) {
@@ -54,6 +58,11 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
                fileMenu.add(newNameAction);
                fileMenu.add(saveAction);
                fileMenu.add(exitAction);
+               
+               MenuManager preferencesMenu = new MenuManager("&Preferences",
+                               null);
+               menuBar.add(preferencesMenu);
+               preferencesMenu.add(preferencesAction);
        }
 
 }
index f8a57e0529e8c3f34428b7a2c7e66bfa6b057cf0..603e3c4c7ed58d490f0e3e3e6a5ba323f6d829a6 100644 (file)
@@ -1,15 +1,28 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
 package eu.etaxonomy.taxeditor;
 
+import org.apache.log4j.Logger;
 import org.eclipse.ui.IFolderLayout;
 import org.eclipse.ui.IPageLayout;
 import org.eclipse.ui.IPerspectiveFactory;
-import org.eclipse.ui.views.markers.internal.ProblemView;
 
-import eu.etaxonomy.taxeditor.view.LeftPane;
 import eu.etaxonomy.taxeditor.view.NameListView;
 
+/**
+ * @author p.ciardelli
+ * @created 15.05.2008
+ * @version 1.0
+ */
 public class FreetextPropertiesPerspective implements IPerspectiveFactory {
-
+       private static final Logger logger = Logger.getLogger(FreetextPropertiesPerspective.class);
        /*
         * To remember the user's layout and window sizes for the next time they 
         *  start your application, add configurer.setSaveAndRestore(true); to the 
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ITaxEditorConstants.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ITaxEditorConstants.java
new file mode 100644 (file)
index 0000000..8f66dd0
--- /dev/null
@@ -0,0 +1,44 @@
+/**\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;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 20.05.2008\r
+ * @version 1.0\r
+ */\r
+public class ITaxEditorConstants {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ITaxEditorConstants.class);\r
+       \r
+       /* ***************************************************************************************\r
+                       ICONS\r
+       ************************************************************************************** */\r
+       public static final String ACCEPTED_TAXON_ICON = "accepted_icon";\r
+       public static final String HOMOTYPIC_SYN_ICON = "homotypic_syn_icon";\r
+       public static final String HOMOTYPIC_SYN_ORIGINAL_ICON = "homotypic_syn_original_icon";\r
+       public static final String HETEROTYPIC_SYN_ICON = "heterotypic_syn_icon";\r
+       public static final String HETEROTYPIC_SYN_ORIGINAL_ICON = "heterotypic_syn_original_icon";\r
+       public static final String MISAPPLIED_NAME_ICON = "misapplied_icon";\r
+       public static final String AUTONYM_ICON = "autonym_icon";\r
+       public static final String BASIONYM_ICON = "basionym_icon";\r
+       public static final String DB_ICON = "db_icon";\r
+       public static final String MOVE_ICON = "move_icon";\r
+\r
+       /* ***************************************************************************************\r
+                       PREFERENCES\r
+        ************************************************************************************** */\r
+       public static final String CODE_PREFERENCE = "code";\r
+       public static final String CODE_PREFERENCE_ICBN = "icbn";\r
+       public static final String CODE_PREFERENCE_ICZN = "iczn";\r
+       public static final String DEFAULT_CODE_PREFERENCE = CODE_PREFERENCE_ICZN;\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Messages.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Messages.java
new file mode 100644 (file)
index 0000000..3d369b1
--- /dev/null
@@ -0,0 +1,26 @@
+\r
+package eu.etaxonomy.taxeditor;\r
+\r
+import java.util.MissingResourceException;\r
+import java.util.ResourceBundle;\r
+import org.apache.log4j.Logger;\r
+\r
+public class Messages {\r
+       private static final Logger logger = Logger.getLogger(Messages.class);\r
+\r
+       private static final String BUNDLE_NAME = "eu.etaxonomy.taxeditor.messages"; //$NON-NLS-1$\r
+\r
+       private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle\r
+                       .getBundle(BUNDLE_NAME);\r
+\r
+       private Messages() {\r
+       }\r
+\r
+       public static String getString(String key) {\r
+               try {\r
+                       return RESOURCE_BUNDLE.getString(key);\r
+               } catch (MissingResourceException e) {\r
+                       return '!' + key + '!';\r
+               }\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/NomenclaturalCodePreferences.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/NomenclaturalCodePreferences.java
new file mode 100644 (file)
index 0000000..2b16b44
--- /dev/null
@@ -0,0 +1,93 @@
+package eu.etaxonomy.taxeditor;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.preference.PreferencePage;\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.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPreferencePage;\r
+\r
+public class NomenclaturalCodePreferences extends PreferencePage implements\r
+               IWorkbenchPreferencePage {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(NomenclaturalCodePreferences.class);\r
+\r
+       public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences.nomenclatural";\r
+\r
+       private Button icznButton;\r
+       private Button icbnButton;      \r
+       \r
+       private String preferredCode;\r
+       \r
+       /**\r
+        * Create the preference page\r
+        */\r
+       public NomenclaturalCodePreferences() {\r
+               super();\r
+       }\r
+\r
+       /**\r
+        * Create contents of the preference page\r
+        * @param parent\r
+        */\r
+       @Override\r
+       public Control createContents(Composite parent) {\r
+               Composite container = new Composite(parent, SWT.NULL);\r
+               container.setLayout(new GridLayout());\r
+\r
+               icbnButton = new Button(container, SWT.RADIO);\r
+               icbnButton.setText("Botanical (ICBN)");\r
+               icbnButton.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               preferredCode = ITaxEditorConstants.CODE_PREFERENCE_ICBN;\r
+                       }\r
+               });\r
+\r
+               icznButton = new Button(container, SWT.RADIO);\r
+               icznButton.setText("Zoological (ICZN)");\r
+               icznButton.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               preferredCode = ITaxEditorConstants.CODE_PREFERENCE_ICZN;\r
+                       }\r
+               });\r
+               \r
+               setButton(getPreferenceStore().getString(ITaxEditorConstants.CODE_PREFERENCE));         \r
+               \r
+               return container;\r
+       }\r
+\r
+       /**\r
+        * Initialize the preference page\r
+        */\r
+       public void init(IWorkbench workbench) {\r
+               setPreferenceStore(TaxEditorPlugin.getDefault().getPreferenceStore());\r
+       }\r
+       \r
+       protected void performDefaults() {\r
+               setButton(ITaxEditorConstants.DEFAULT_CODE_PREFERENCE);\r
+       }\r
+       \r
+       public boolean performOk() {\r
+               TaxEditorPlugin.getDefault().getPreferenceStore().\r
+                               setValue(ITaxEditorConstants.CODE_PREFERENCE, preferredCode);\r
+               return true;\r
+       }\r
+       \r
+       private void setButton(String preferredCode) {\r
+               this.preferredCode = preferredCode;\r
+               \r
+               if (preferredCode.equals(ITaxEditorConstants.CODE_PREFERENCE_ICBN)) {           \r
+                       icbnButton.setSelection(true);\r
+                       icznButton.setSelection(false);\r
+               }\r
+               if (preferredCode.equals(ITaxEditorConstants.CODE_PREFERENCE_ICZN)) {\r
+                       icbnButton.setSelection(false);\r
+                       icznButton.setSelection(true);\r
+               }\r
+       }\r
+}\r
index a450a0850a41a8a938a811a28bf6adc7b5e11540..87e5c6a344013e0044df22d679e243c2283c663a 100644 (file)
@@ -10,6 +10,7 @@
 package eu.etaxonomy.taxeditor;\r
 \r
 import java.net.URL;\r
+import java.util.List;\r
 import java.util.ResourceBundle;\r
 import java.util.Set;\r
 import java.util.UUID;\r
@@ -19,6 +20,8 @@ import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.set.WritableSet;\r
 import org.eclipse.core.runtime.IPath;\r
 import org.eclipse.core.runtime.Path;\r
+import org.eclipse.jface.preference.IPreferenceStore;\r
+import org.eclipse.jface.preference.PreferenceConverter;\r
 import org.eclipse.jface.resource.ImageDescriptor;\r
 import org.eclipse.jface.resource.ImageRegistry;\r
 import org.eclipse.swt.graphics.Image;\r
@@ -37,9 +40,8 @@ import eu.etaxonomy.cdm.model.name.NameRelationshipType;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\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
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 \r
 /**\r
@@ -256,28 +258,17 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
        // Resource bundle.\r
        private ResourceBundle resourceBundle;\r
        private FormColors formColors;\r
-       public static final String ACCEPTED_TAXON = "accepted";\r
-       public static final String HOMOTYPIC_SYN = "homotypic_syn";\r
-       public static final String HOMOTYPIC_SYN_ORIGINAL = "homotypic_syn_original";\r
-       public static final String HETEROTYPIC_SYN = "heterotypic_syn";\r
-       public static final String HETEROTYPIC_SYN_ORIGINAL = "heterotypic_syn_original";\r
-       public static final String MISAPPLIED_NAME = "misapplied";\r
-       public static final String AUTONYM = "autonym";\r
-       public static final String BASIONYM = "basionym";\r
-       public static final String DB = "db";\r
-       public static final String MOVE = "move";\r
-       \r
        protected void initializeImageRegistry(ImageRegistry registry) {\r
-               registerImage(registry, ACCEPTED_TAXON, "accepted_small.gif"); //$NON-NLS-1$\r
-               registerImage(registry, HOMOTYPIC_SYN, "homosyn_no_bg.gif"); //$NON-NLS-1$\r
-               registerImage(registry, HOMOTYPIC_SYN_ORIGINAL, "homosyn_original_no_bg.gif"); //$NON-NLS-1$\r
-               registerImage(registry, HETEROTYPIC_SYN, "heterosyn_no_bg.gif"); //$NON-NLS-1$\r
-               registerImage(registry, HETEROTYPIC_SYN_ORIGINAL, "heterosyn_original_no_bg.gif"); //$NON-NLS-1$                \r
-               registerImage(registry, MISAPPLIED_NAME, "misapplied_no_bg.gif"); //$NON-NLS-1$\r
-               registerImage(registry, AUTONYM, "autonym_no_bg.gif"); //$NON-NLS-1$\r
-               registerImage(registry, BASIONYM, "basionym_no_bg.gif"); //$NON-NLS-1$\r
-               registerImage(registry, DB, "db.gif"); //$NON-NLS-1$\r
-               registerImage(registry, MOVE, "move_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.ACCEPTED_TAXON_ICON, "accepted_small.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.HOMOTYPIC_SYN_ICON, "homosyn_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.HOMOTYPIC_SYN_ORIGINAL_ICON, "homosyn_original_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.HETEROTYPIC_SYN_ICON, "heterosyn_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.HETEROTYPIC_SYN_ORIGINAL_ICON, "heterosyn_original_no_bg.gif"); //$NON-NLS-1$               \r
+               registerImage(registry, ITaxEditorConstants.MISAPPLIED_NAME_ICON, "misapplied_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.AUTONYM_ICON, "autonym_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.BASIONYM_ICON, "basionym_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.DB_ICON, "db.gif"); //$NON-NLS-1$\r
+               registerImage(registry, ITaxEditorConstants.MOVE_ICON, "move_no_bg.gif"); //$NON-NLS-1$\r
        }\r
        private void registerImage(ImageRegistry registry, String key,\r
                        String fileName) {\r
@@ -292,6 +283,14 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
                }\r
        }\r
 \r
+       /* ***************************************************************************************\r
+                       PREFERENCES\r
+       ************************************************************************************** */\r
+       protected void initializeDefaultPreferences(IPreferenceStore store) {\r
+               logger.warn("setting default");\r
+               store.setDefault(ITaxEditorConstants.CODE_PREFERENCE, ITaxEditorConstants.DEFAULT_CODE_PREFERENCE);\r
+       }\r
+       \r
        /* ***************************************************************************************\r
                        TAXONOMIC CHILDREN\r
         ************************************************************************************** */\r
@@ -416,4 +415,9 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
 \r
                return genusTaxon;\r
        }\r
+\r
+       public List<TaxonNameBase> getNameByName(String searchText) {\r
+               // TODO make sure last character is %\r
+               return cdmApp.getNameService().getNamesByName(searchText);\r
+       }\r
 }
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxonomicPreferences.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxonomicPreferences.java
new file mode 100644 (file)
index 0000000..b876fd8
--- /dev/null
@@ -0,0 +1,56 @@
+/**\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;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.preference.PreferencePage;\r
+import org.eclipse.swt.SWT;\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.Control;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPreferencePage;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 20.05.2008\r
+ * @version 1.0\r
+ */\r
+public class TaxonomicPreferences extends PreferencePage implements\r
+               IWorkbenchPreferencePage {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(TaxonomicPreferences.class);\r
+\r
+       public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences";\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)\r
+        */\r
+       @Override\r
+       protected Control createContents(Composite parent) {\r
+               \r
+               Composite container = new Composite(parent, SWT.NULL);\r
+               container.setLayout(new GridLayout());\r
+\r
+               //\r
+               return container;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)\r
+        */\r
+       @Override\r
+       public void init(IWorkbench workbench) {\r
+               // TODO Auto-generated method stub\r
+\r
+       }\r
+}\r
index 625cb54e173cf701dda6209c18bb8c0713f35384..169a19eaff1b3d54b31155ee77257ad5a69bd067 100644 (file)
@@ -32,7 +32,7 @@ public class ActionAddQuickName extends Action {
                \r
                // TODO getTitleCache is currently returning "null", not null\r
                //  hence its being set here - change!\r
-//             childTaxon.getName().setTitleCache(null);\r
+               childTaxon.getName().setTitleCache(null);\r
                parentTaxon.addTaxonomicChild(childTaxon, null, null);\r
                \r
                // Add childTaxon to observable tree list, \r
index 07a30387e5c78e073bba895473ff0d5a4b30dd12..4f35c9822110793061b4241e07e5c7dd801c1a79 100644 (file)
@@ -1,8 +1,30 @@
+/**\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.controller;\r
 \r
+/**\r
+ * Adds tree functionality (get parent, get children) to ObservableListContentProvider;\r
+ *  much code was copied almost in tact from parent class due to\r
+ *  viewer type restrictions and private settings of variables and methods\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 14.05.2008\r
+ * @version 1.0\r
+ */\r
+import org.apache.log4j.Logger;\r
 import org.eclipse.jface.action.Action;\r
 \r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 \r
 /**\r
  * Delete this taxon from the CDM\r
@@ -11,6 +33,8 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
  *\r
  */\r
 public class ActionDeleteTaxon extends Action {\r
+       private static final Logger logger = Logger.getLogger(ActionDeleteTaxon.class);\r
+       \r
        Taxon taxon;\r
        \r
        public ActionDeleteTaxon(Taxon taxon) {\r
@@ -18,6 +42,19 @@ public class ActionDeleteTaxon extends Action {
        }\r
        \r
        public void run() {\r
-//             TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().saveTaxon(taxon);\r
+               Taxon parentTaxon = taxon.getTaxonomicParent();\r
+               for (TaxonRelationship taxonRelation : parentTaxon.getTaxonRelations()) {\r
+                       \r
+                       TaxonRelationshipType type = taxonRelation.getType();\r
+                       Taxon fromTaxon = taxonRelation.getFromTaxon();\r
+                       \r
+                       if (type.equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN()) &&\r
+                                       fromTaxon.equals(taxon)) {\r
+                               parentTaxon.removeTaxonRelation(taxonRelation);\r
+                               TaxEditorPlugin.getDefault().getObservableTaxonTreeList().remove(taxon);\r
+                               TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().saveTaxon(parentTaxon);\r
+                               return;\r
+                       }\r
+               }\r
        }\r
-}\r
+}
\ No newline at end of file
index 676f7ded58548389957b146e19109f3f1e979f6f..eea44a11f207ed79dadca05c7cf1e33988dda7b0 100644 (file)
@@ -22,7 +22,6 @@ public class ActionSaveTaxon extends Action {
        }\r
        \r
        public void run() {\r
-               \r
                // If this is a new taxon, add it to the recent names list;\r
                //  if it is already in the tree, remove then re-add it\r
                //  to force a re-sort\r
@@ -34,10 +33,9 @@ public class ActionSaveTaxon extends Action {
                TaxEditorPlugin.getDefault().getObservableTaxonTreeList().add(taxon);\r
 \r
                // Save the taxon to the CDM\r
-               logger.warn("n Synonyms:" + taxon.getSynonyms().size());\r
                TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().saveTaxon(taxon);\r
                \r
                // Notify taxon listeners in case name has been updated \r
-               taxon.firePropertyChange("name", null, null);\r
+//             taxon.firePropertyChange("name", null, null);\r
        }\r
 }
\ No newline at end of file
index d75fdb91c0616461302a747b14bacc8534c0ab02..4db2e63f65d9082e833a1caf0c10b09c85c8fbc9 100644 (file)
@@ -1,14 +1,25 @@
+/**\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.view;\r
 \r
 import java.beans.PropertyChangeEvent;\r
 import java.beans.PropertyChangeListener;\r
 \r
+import org.apache.log4j.Logger;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorSite;\r
 import org.eclipse.ui.PartInitException;\r
 import org.eclipse.ui.part.MultiPageEditorPart;\r
 \r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.controller.ActionSaveTaxon;\r
 \r
@@ -18,14 +29,18 @@ import eu.etaxonomy.taxeditor.controller.ActionSaveTaxon;
  *  "Facts", "Specimen", "Geography", etc.\r
  * \r
  * @author p.ciardelli\r
- *\r
+ * @created 15.05.2008\r
+ * @version 1.0\r
  */\r
+\r
 public class MultiPageTaxonEditor extends MultiPageEditorPart {\r
-//public class MultiPageTaxonEditor extends FormEditor {\r
+       private static final Logger logger = Logger.getLogger(MultiPageTaxonEditor.class);\r
 \r
        public static final String ID = "eu.etaxonomy.taxeditor.view.multipagetaxonview";\r
-       private Taxon taxon;\r
        \r
+       private Taxon taxon;\r
+       private boolean dirty;\r
+               \r
        @Override\r
        protected void createPages() {\r
                        \r
@@ -49,20 +64,44 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart {
        \r
        @Override\r
        public void doSave(IProgressMonitor monitor) {\r
-               System.out.println("Start save");\r
+//             monitor.beginTask(name, totalWork)\r
+               logger.warn("Calling doSave");\r
                new ActionSaveTaxon(taxon).run();\r
-               System.out.println("Save finished");\r
+               setDirty(false);\r
        }\r
 \r
-       @Override\r
-       public void doSaveAs() {\r
-               // TODO Auto-generated method stub\r
-               \r
+       private void setDirty(boolean dirty) {\r
+               this.dirty = dirty;\r
+               firePropertyChange(PROP_DIRTY);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.MultiPageEditorPart#isDirty()\r
+        */\r
+       public boolean isDirty() {\r
+               return dirty;\r
        }\r
 \r
+    /**\r
+     * Checks whether nested editors are calling <code>firePropertyChange(PROP_DIRTY)</code>\r
+     * to single an edit has taken place before passing property change along to \r
+     * <code>super.handlePropertyChange(int propertyId)</code>.\r
+     */\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.MultiPageEditorPart#handlePropertyChange(int)\r
+        */\r
+       protected void handlePropertyChange(int propertyId) {\r
+               if (propertyId == PROP_DIRTY) {\r
+                       setDirty(true);\r
+               }\r
+               super.handlePropertyChange(propertyId);\r
+       }\r
+       \r
+       @Override\r
+       public void doSaveAs() {}\r
+\r
        @Override\r
        public boolean isSaveAsAllowed() {\r
-               // TODO Auto-generated method stub\r
                return false;\r
        }\r
 \r
@@ -84,18 +123,34 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart {
                //  change tab for this taxon editor accordingly\r
                taxon.addPropertyChangeListener("name", new PropertyChangeListener() {\r
                        public void propertyChange(PropertyChangeEvent e) {\r
-                               setPartName(taxon.getName().getTitleCache());\r
+                               setPartName();\r
                        }\r
                });\r
 \r
-                // Any taxon that has been saved will by necessity have a name;\r
-                //  only a new taxon will not\r
-               if (taxon.getName().getTitleCache() == null)\r
-                       setPartName("New taxon");\r
-               else\r
-                       setPartName(taxon.getName().getTitleCache());\r
+               setPartName();\r
                \r
                super.init(site, input);\r
-       \r
-       }       \r
-}\r
+       }\r
+               \r
+    /**\r
+     * Calls <code>MultiPageEditorPart.setPartName(String partName)</code>\r
+     *  with text appropriate to the state of the taxon: any taxon that has \r
+     *  been saved will by necessity have a name to display; a new taxon \r
+     *  should display "New taxon" in the editor tab.\r
+     */\r
+    private void setPartName() {\r
+        \r
+       String partName = null;\r
+       TaxonNameBase name = taxon.getName();\r
+       \r
+       if (name != null) {\r
+               partName = name.getTitleCache();\r
+       }\r
+       \r
+       if (partName == null || partName.equals("")) {\r
+               partName = ("New taxon");\r
+       }\r
+\r
+        setPartName(partName);\r
+    }\r
+}
\ No newline at end of file
index b4b22888cd44f44e34596af965ed026d6777f0db..0f8d68af73990ef4eb263a85fa52baada9590814 100644 (file)
@@ -44,7 +44,6 @@ import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.controller.WidgetTransfer;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
@@ -59,33 +58,25 @@ import eu.etaxonomy.taxeditor.view.propertysheetsupport.CustomSortPropertySheetE
  * @version 1.0\r
  */\r
 public class NameEditorView extends EditorPart implements IAdaptable {\r
-       private static final Logger logger = Logger.getLogger(TaxEditorPlugin.class);\r
+       private static final Logger logger = Logger.getLogger(NameEditorView.class);\r
 \r
        private Taxon taxon;\r
-       \r
-       private boolean dirty;\r
-       \r
+               \r
        /**\r
         * Shared listener that sets dirty state to true \r
         *  when any registered property changes \r
         */\r
        private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
                public void propertyChange(PropertyChangeEvent arg0) {\r
-                       dirty = true;\r
                        firePropertyChange(PROP_DIRTY);\r
                }\r
        };              \r
        \r
        @Override\r
-       public void doSave(IProgressMonitor monitor) {\r
-               // TODO Auto-generated method stub\r
-       }\r
+       public void doSave(IProgressMonitor monitor) {}\r
 \r
        @Override\r
-       public void doSaveAs() {\r
-               // TODO Auto-generated method stub\r
-               \r
-       }\r
+       public void doSaveAs() {}\r
 \r
        @Override\r
        public void init(IEditorSite site, IEditorInput input)\r
@@ -104,6 +95,7 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                // Register listeners for any change in accepted name or set of relations\r
                taxon.getName().addPropertyChangeListener(taxonChangeListener);\r
                taxon.addPropertyChangeListener("synonyms", taxonChangeListener);\r
+               taxon.addPropertyChangeListener(taxonChangeListener);\r
                                \r
                setSite(site);\r
                setInput(input);\r
@@ -139,13 +131,11 @@ public class NameEditorView extends EditorPart implements IAdaptable {
        \r
        @Override\r
        public boolean isDirty() {\r
-               return dirty;\r
-//             return true;\r
+               return false;\r
        }\r
 \r
        @Override\r
        public boolean isSaveAsAllowed() {\r
-               // TODO Auto-generated method stub\r
                return false;\r
        }\r
 \r
@@ -242,13 +232,6 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                \r
                // We've added elements to the managed form, so redraw it\r
                scrolledForm.reflow(true);\r
-               \r
-//             managedForm.getMessageManager().addMessage\r
-//             ("TEST", "Testeroo error", null, IMessageProvider.ERROR, nameComposite.getTextWidget());\r
-//managedForm.getMessageManager().addMessage\r
-//             ("TEST2", "Testeroo warn", null, IMessageProvider.WARNING, nameComposite.getTextWidget());\r
-//managedForm.getMessageManager().addMessage\r
-//             ("TEST2", "Testeroo info", null, IMessageProvider.INFORMATION, nameComposite.getTextWidget());\r
        }\r
                \r
        private NameComposite warnIfNameConflictWithParent(NameComposite nameComposite) {\r
@@ -269,9 +252,12 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                        if (rank.equals(Rank.SPECIES())) {\r
                                                String genus = name.getGenusOrUninomial();\r
                                                String parentGenus = parentName.getGenusOrUninomial();\r
-                                               \r
-                                               if (!parentGenus.equals(genus)) {\r
-                                                       message = "Warning: taxon's genus does not match parent taxon's genus.";\r
+\r
+                                               // If either taxon has a problem, name fields will be null\r
+                                               if (genus != null && parentGenus != null) {\r
+                                                       if (!parentGenus.equals(genus)) {\r
+                                                               message = "Warning: taxon's genus does not match parent taxon's genus.";\r
+                                                       }\r
                                                }\r
                                        }\r
        \r
@@ -279,8 +265,11 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                                String specificEpithet = name.getSpecificEpithet();\r
                                                String parentSpecificEpithet = parentName.getSpecificEpithet();\r
                                                \r
-                                               if (!parentSpecificEpithet.equals(specificEpithet)) {\r
-                                                       message = "Warning: taxon's specific epithet does not match parent taxon's specific epithet.";\r
+                                               // If either taxon has a problem, name fields will be null\r
+                                               if (specificEpithet != null && parentSpecificEpithet != null) {\r
+                                                       if (!parentSpecificEpithet.equals(specificEpithet)) {\r
+                                                               message = "Warning: taxon's specific epithet does not match parent taxon's specific epithet.";\r
+                                                       }\r
                                                }\r
                                        }\r
                                }\r
@@ -298,7 +287,5 @@ public class NameEditorView extends EditorPart implements IAdaptable {
        }\r
 \r
        @Override\r
-       public void setFocus() {\r
-               // TODO Auto-generated method stub\r
-       }\r
-}
\ No newline at end of file
+       public void setFocus() { }\r
+}\r
index faafb799c9a813547cc0fb6da086421794a20ff1..46882cc279e5b68e7db21678a01620f3d22c1f0a 100644 (file)
@@ -25,6 +25,7 @@ import org.eclipse.ui.part.ViewPart;
 import com.swtdesigner.ResourceManager;\r
 import com.swtdesigner.SWTResourceManager;\r
 \r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 \r
 /**\r
@@ -82,7 +83,7 @@ public class NameListView extends ViewPart {
                lblDbImg.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));\r
                lblDbImg.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
                lblDbImg.setImage(ResourceManager.getPluginImage(TaxEditorPlugin.getDefault(), "icons/db.gif"));\r
-               lblDbImg.setImage(TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.DB));\r
+               lblDbImg.setImage(TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.DB_ICON));\r
 \r
                final Menu menu = new Menu(lblDbImg);\r
                lblDbImg.setMenu(menu);\r
index 62daaa1a28d8d925eea74f28ad2416b5ad483860..0971bc7f21f63670a9c8b612e0dae71b061547ec 100644 (file)
@@ -58,6 +58,8 @@ public class NameViewer extends SourceViewer {
                \r
                this.addPainter(annotationPainter);\r
                \r
+               this.getTextWidget().getLineCount();\r
+               \r
        }\r
 \r
        public void setShowError(boolean hasProblem) {\r
index 124e66d93ffcda033cbb4cd6e14038078c9d4894..c697eba621a634a99e0cc459b6231e25fcc2e3f8 100644 (file)
@@ -1,5 +1,15 @@
+/**\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.view;\r
 \r
+import org.apache.log4j.Logger;\r
 import org.eclipse.core.databinding.beans.BeansObservables;\r
 import org.eclipse.core.databinding.observable.map.IObservableMap;\r
 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
@@ -24,8 +34,8 @@ import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.Transfer;\r
 import org.eclipse.swt.events.MenuAdapter;\r
 import org.eclipse.swt.events.MenuEvent;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
 import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
 import org.eclipse.swt.graphics.Image;\r
 import org.eclipse.swt.graphics.Point;\r
 import org.eclipse.swt.graphics.Rectangle;\r
@@ -53,6 +63,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.strategy.parser.TaxonNameParserBotanicalNameImpl;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.controller.ActionAddQuickName;\r
+import eu.etaxonomy.taxeditor.controller.ActionDeleteTaxon;\r
 import eu.etaxonomy.taxeditor.controller.ActionMoveTaxon;\r
 import eu.etaxonomy.taxeditor.controller.ActionOpenNameEditor;\r
 import eu.etaxonomy.taxeditor.controller.ActionOpenNewChildNameEditor;\r
@@ -65,11 +76,14 @@ import eu.etaxonomy.taxeditor.model.NameTreeContentProvider;
  * \r
  * Good overview of TreeViewer: \r
  *   http://www.eclipse.org/articles/Article-TreeViewer/TreeViewerArticle.htm\r
- * \r
- * @author p.ciardelli\r
  *\r
+ * @author p.ciardelli\r
+ * @created 06.05.2008\r
+ * @version 1.0\r
  */\r
 public class TaxonomicTreeViewer extends TreeViewer {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(TaxonomicTreeViewer.class);\r
        \r
        /**\r
         * Creates a lazy-loading taxonomic tree that is sorted by TitleCache,\r
@@ -266,8 +280,9 @@ public class TaxonomicTreeViewer extends TreeViewer {
                        public boolean canModify(Object element, String property) {\r
                                // If name element has not been initialized,\r
                                //  this is a taxon added with QuickAdd\r
-                               if (((Taxon) element).getName().getTitleCache() == null)\r
+                               if (((Taxon) element).getName().getTitleCache() == null) {\r
                                        return true;\r
+                               }\r
                                return false;\r
                        }\r
                        public Object getValue(Object element, String property) {\r
@@ -338,13 +353,11 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                \r
                                // Get Taxon associated with this node\r
                                final Taxon taxon = (Taxon) tree.getSelection()[0].getData();\r
-                               System.out.println("open " + taxon.toString());\r
                                \r
                                // Add menu item to edit Taxon\r
                                MenuItem itemEditTaxon = new MenuItem(menu, SWT.NONE);\r
                                itemEditTaxon.setText("Edit taxon");\r
-                               itemEditTaxon.addSelectionListener(new SelectionListener() {\r
-                                       public void widgetDefaultSelected(SelectionEvent e) {}\r
+                               itemEditTaxon.addSelectionListener(new SelectionAdapter() {\r
                                        public void widgetSelected(SelectionEvent e) {\r
                                                new ActionOpenNameEditor(taxon).run();\r
                                        }\r
@@ -355,8 +368,7 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                // Add menu item to add a child node\r
                                MenuItem itemAddChildTaxon = new MenuItem(menu, SWT.NONE);\r
                                itemAddChildTaxon.setText("Add child taxon");\r
-                               itemAddChildTaxon.addSelectionListener(new SelectionListener() {\r
-                                       public void widgetDefaultSelected(SelectionEvent e) {}\r
+                               itemAddChildTaxon.addSelectionListener(new SelectionAdapter() {\r
                                        public void widgetSelected(SelectionEvent e) {\r
                                                new ActionOpenNewChildNameEditor(taxon).run();\r
                                        }\r
@@ -365,12 +377,22 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                // Add menu item to add a child node with edit name in place                            \r
                                MenuItem itemQuickAdd = new MenuItem(menu, SWT.NONE);\r
                                itemQuickAdd.setText("Add child taxon with quick name");\r
-                               itemQuickAdd.addSelectionListener(new SelectionListener() {\r
-                                       public void widgetDefaultSelected(SelectionEvent e) {}\r
+                               itemQuickAdd.addSelectionListener(new SelectionAdapter() {\r
                                        public void widgetSelected(SelectionEvent e) {\r
                                                new ActionAddQuickName(taxon).run();                                            \r
                                        }\r
                                });\r
+                               \r
+                               MenuItem itemSeparator = new MenuItem(menu, SWT.SEPARATOR);\r
+                               \r
+                               // Delete menu item from parent node                            \r
+                               MenuItem itemDelete = new MenuItem(menu, SWT.NONE);\r
+                               itemDelete.setText("Delete taxon from tree");\r
+                               itemDelete.addSelectionListener(new SelectionAdapter() {\r
+                                       public void widgetSelected(SelectionEvent e) {\r
+                                               new ActionDeleteTaxon(taxon).run();\r
+                                       }\r
+                               });\r
                        }\r
                });\r
        }\r
index be2016dbbf8c463fcb401441ac0c7875ea1ef32b..bf9e05ce17dd5453b7e34cea86ed7887ff180822 100644 (file)
@@ -1,18 +1,32 @@
+/**\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.view.nameviewersupport;\r
 \r
 import java.util.Scanner;\r
 \r
+import org.apache.log4j.Logger;\r
 import org.eclipse.swt.custom.StyledText;\r
 import org.eclipse.swt.events.VerifyEvent;\r
 import org.eclipse.swt.events.VerifyListener;\r
 \r
 /**\r
  * Checks text entered into a StyledText widget for line breaks, sends\r
- *  split text to handleSplitText()\r
+ *  split text to abstract method handleSplitText().\r
  * \r
  * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
  */\r
 public abstract class LineBreakListener implements VerifyListener {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(LineBreakListener.class);\r
        \r
        /** \r
         * Checks for 3 conditions of name viewer text:\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineWrapSupport.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineWrapSupport.java
new file mode 100644 (file)
index 0000000..f29e550
--- /dev/null
@@ -0,0 +1,80 @@
+/**\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.view.nameviewersupport;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.TextViewer;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+\r
+/**\r
+ * Checks whether the ScrolledForm a TextViewer is on needs to be\r
+ *  redrawn because of a new line break or the removal of an existing\r
+ *  one ...\r
+ *  <p>\r
+ *  ... in theory, anyway. Until I figure out how to detect a word wrap,\r
+ *   the ScrolledForm is redrawn with every modify event. \r
+ * \r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+public class LineWrapSupport {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(LineWrapSupport.class);\r
+       \r
+       ModifyListener listener = new LineWrapListener();\r
+       int lineCount;\r
+\r
+       private StyledText textWidget;\r
+       private ScrolledForm scrolledForm;\r
+\r
+       private TextViewer viewer;\r
+       \r
+       public LineWrapSupport(TextViewer viewer, IManagedForm form) {\r
+               \r
+               this.viewer = viewer;\r
+               \r
+               textWidget = viewer.getTextWidget();\r
+               textWidget.addModifyListener(listener);\r
+                               \r
+               this.lineCount = textWidget.getLinePixel(textWidget.getLineCount());\r
+               this.scrolledForm = form.getForm();\r
+       }\r
+       \r
+       /**\r
+        * Redraws the scrolledForm if a line wrap is detected. \r
+        */\r
+       private void checkLineCount() {\r
+\r
+               boolean lineWrapDetected = true;\r
+               if (lineWrapDetected ) {\r
+                       scrolledForm.getBody().layout();\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * Calls <code>checkLineCount()</code> on a modify event.\r
+        * \r
+        * @author p.ciardelli\r
+        * @created 21.05.2008\r
+        * @version 1.0\r
+        */\r
+       class LineWrapListener implements ModifyListener {\r
+\r
+               @Override\r
+               public void modifyText(ModifyEvent e) {\r
+                       checkLineCount();\r
+               }\r
+       }\r
+}
\ No newline at end of file
index d256dbfadbba6edd166a9604d2b7ef66668e5438..278fc73a3656054903cba00930b402dd1dc6c626 100644 (file)
@@ -12,6 +12,7 @@ import com.swtdesigner.SWTResourceManager;
 import eu.etaxonomy.cdm.model.name.NameRelationship;\r
 import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 \r
 public class NameComposite extends EditableGroupedComposite {\r
@@ -24,15 +25,15 @@ public class NameComposite extends EditableGroupedComposite {
        public static final Font SYNONYM_FONT = SWTResourceManager.getFont("Georgia", 10, SWT.NONE);\r
        public static final Font MISAPPLIEDNAME_FONT = SWTResourceManager.getFont("Georgia", 10, SWT.NONE);;\r
        \r
-       public static final Image ACCEPTED_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.ACCEPTED_TAXON);\r
-       public static final Image HOMOTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.HOMOTYPIC_SYN);\r
-       public static final Image HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.HOMOTYPIC_SYN_ORIGINAL);\r
-       public static final Image HETEROTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.HETEROTYPIC_SYN);\r
-       public static final Image HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.HETEROTYPIC_SYN_ORIGINAL);\r
-       public static final Image MISAPPLIEDNAME_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.MISAPPLIED_NAME);\r
-       public static final Image AUTONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.AUTONYM);\r
-       public static final Image BASIONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.BASIONYM);\r
-       public static final Image MOVE = TaxEditorPlugin.getDefault().getImageRegistry().get(TaxEditorPlugin.MOVE);\r
+       public static final Image ACCEPTED_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.ACCEPTED_TAXON_ICON);\r
+       public static final Image HOMOTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.HOMOTYPIC_SYN_ICON);\r
+       public static final Image HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.HOMOTYPIC_SYN_ORIGINAL_ICON);\r
+       public static final Image HETEROTYPIC_SYNONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.HETEROTYPIC_SYN_ICON);\r
+       public static final Image HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.HETEROTYPIC_SYN_ORIGINAL_ICON);\r
+       public static final Image MISAPPLIEDNAME_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.MISAPPLIED_NAME_ICON);\r
+       public static final Image AUTONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.AUTONYM_ICON);\r
+       public static final Image BASIONYM_ICON = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.BASIONYM_ICON);\r
+       public static final Image MOVE = TaxEditorPlugin.getDefault().getImageRegistry().get(ITaxEditorConstants.MOVE_ICON);\r
        \r
        public NameComposite(Composite parent) {\r
                super(parent);\r
index bed407be5a0a55a0bfcd2a46b8f8409a444fba6e..21a4391fa8df80da373e4626641b00706fc86d70 100644 (file)
@@ -9,6 +9,9 @@
 \r
 package eu.etaxonomy.taxeditor.view.nameviewersupport;\r
 \r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
+\r
 import org.apache.log4j.Logger;\r
 import org.eclipse.jface.text.TextViewer;\r
 import org.eclipse.jface.viewers.ISelectionProvider;\r
@@ -26,6 +29,7 @@ import org.eclipse.ui.forms.IManagedForm;
 \r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
@@ -86,6 +90,16 @@ public class TaxonCompositeFactory {
                final NameComposite nameComposite = new NameComposite(parent);\r
                nameComposite.setData(data);\r
                \r
+               TaxonNameBase name = data.getName();\r
+               if (name != null) {\r
+                       name.addPropertyChangeListener(new PropertyChangeListener() {\r
+                               @Override\r
+                               public void propertyChange(PropertyChangeEvent evt) {\r
+                                       taxon.firePropertyChange(evt);\r
+                               }\r
+                       });\r
+               }\r
+               \r
                nameComposite.setTextViewer(createNameViewer(nameComposite, data));\r
                nameComposite.setFocus();\r
                \r
@@ -189,8 +203,7 @@ public class TaxonCompositeFactory {
        }\r
        \r
        public NameComposite transformAcceptedNameComposite(NameComposite nameComposite) {\r
-//             nameComposite.setDraggable(false);\r
-               nameComposite.setDraggable(true);\r
+               nameComposite.setDraggable(false);\r
                nameComposite.setIcon(NameComposite.ACCEPTED_ICON);\r
                nameComposite.setFont(NameComposite.ACCEPTED_FONT);\r
                nameComposite.setIndent(NameComposite.ACCEPTED_INDENT);\r
@@ -206,6 +219,15 @@ public class TaxonCompositeFactory {
        }\r
 \r
        public NameComposite transformMisappliedNameComposite(NameComposite nameComposite) {\r
+                               \r
+               if (misappliedNameGroupComposite == null) {     \r
+                       Composite groupComposite = nameComposite.getParent();\r
+                       Composite parentOfGroupComposite = groupComposite.getParent();\r
+                       misappliedNameGroupComposite = createGroupComposite(parentOfGroupComposite, null);\r
+                       \r
+                       nameComposite.setParent(misappliedNameGroupComposite);\r
+               }\r
+                               \r
                nameComposite.setDraggable(true);\r
                nameComposite.setIcon(NameComposite.MISAPPLIEDNAME_ICON);\r
                nameComposite.setFont(NameComposite.MISAPPLIEDNAME_FONT);\r
@@ -276,7 +298,8 @@ public class TaxonCompositeFactory {
                                \r
                                // Actions performed:\r
                                //      1) Change name composite to mis name composite\r
-                               //      2) Delete synonym, add mis name to taxon\r
+                               //      2) Delete synonym\r
+                               //      3) add mis name to taxon - this creates a new taxon that is stored on the nameComposite\r
                                // Objects used:\r
                                //      nameComposite\r
                                //      taxon\r
@@ -299,14 +322,8 @@ public class TaxonCompositeFactory {
                                        // Set composite data with new taxon\r
                                        nameComposite.setData(toTaxon);\r
                                }\r
-                               \r
-                               Composite groupComposite = nameComposite.getParent();\r
-                               Composite groupParentComposite = groupComposite.getParent();\r
-                               \r
-                               if (misappliedNameGroupComposite == null) {\r
-                                       misappliedNameGroupComposite = createGroupComposite(groupParentComposite, null);        \r
-                               }\r
-                               transformMisappliedNameComposite(nameComposite).setParent(misappliedNameGroupComposite);\r
+\r
+                               transformMisappliedNameComposite(nameComposite);\r
                        }                       \r
                });\r
 \r
@@ -316,7 +333,19 @@ public class TaxonCompositeFactory {
                menuItem2.addSelectionListener(new SelectionAdapter() {\r
                        @Override\r
                        public void widgetSelected(SelectionEvent e) {\r
-                               \r
+                               if (nameComposite.getData() instanceof Synonym) {\r
+                                       Synonym synonym = (Synonym) nameComposite.getData();\r
+                                       TaxonNameBase basionymName = synonym.getName();\r
+                                       \r
+                                       // TODO only use taxon if this is a homotypic synonym\r
+                                       TaxonNameBase taxonName = taxon.getName();\r
+                                       if (basionymName != null && taxonName != null) {\r
+                                               taxonName.addRelationshipFromName(basionymName, NameRelationshipType.BASIONYM(), null);\r
+                                               \r
+                                               // TODO change icon\r
+                                       }\r
+                               }\r
+                                       \r
                        }\r
                });\r
                \r
@@ -372,7 +401,6 @@ public class TaxonCompositeFactory {
                        public void handleSplitText(String text) {\r
                                TaxonNameParserBotanicalNameImpl parser = TaxonNameParserBotanicalNameImpl.NewInstance();\r
                                BotanicalName name = parser.parseFullReference(text, null);\r
-                               //BotanicalName.PARSED_NAME(text);\r
                                                                        \r
                                SynonymRelationship synonymRelation = taxon.addHeterotypicSynonymName(name);\r
                                Synonym synonym = synonymRelation.getSynonym();\r
@@ -400,6 +428,18 @@ public class TaxonCompositeFactory {
                        }\r
                });\r
                \r
+//             nameViewer.getTextWidget().addModifyListener(new ModifyListener() {\r
+//\r
+//                     @Override\r
+//                     public void modifyText(ModifyEvent e) {\r
+//                             logger.warn("modfiyng");\r
+//                             nameComposite.getParent().layout();\r
+//                             nameComposite.layout();\r
+//                             managedForm.getForm().reflow(false);\r
+//                     }                       \r
+//             });\r
+               createLineWrapSupport(nameViewer);\r
+               \r
                return nameViewer;\r
        }\r
        \r
@@ -424,6 +464,15 @@ public class TaxonCompositeFactory {
                        // TODO add warning that border support can't be added without a managed form \r
                }\r
        }\r
+\r
+\r
+       private void createLineWrapSupport(TextViewer viewer) {\r
+               if (managedForm != null) {\r
+                       LineWrapSupport lineWrapSupport = new LineWrapSupport(viewer, managedForm); \r
+               } else {\r
+                       // TODO add warning that border support can't be added without a managed form \r
+               }\r
+       }\r
        \r
        private void clearMenu(Menu menu) {\r
                for (MenuItem menuItem : menu.getItems()) {\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationsPropertyDescriptor.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/AnnotationsPropertyDescriptor.java
new file mode 100644 (file)
index 0000000..7b531c9
--- /dev/null
@@ -0,0 +1,68 @@
+/**\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.view.propertysheetsupport;\r
+\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.jface.viewers.DialogCellEditor;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+\r
+/**\r
+ * Property sheet descriptor that pops up a dialog window\r
+ *  returning a set.\r
+ *  \r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+abstract public class AnnotationsPropertyDescriptor extends PropertyDescriptor {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(AnnotationsPropertyDescriptor.class);\r
+       \r
+       private TaxonNameBase name;\r
+       \r
+       public AnnotationsPropertyDescriptor(Object id, String displayName, TaxonNameBase name) {\r
+               super(id, displayName);\r
+               this.name = name;\r
+       }\r
+\r
+    public CellEditor createPropertyEditor(Composite parent) {\r
+        CellEditor editor = new DialogCellEditor(parent) {\r
+\r
+               protected Dialog dialog;\r
+               \r
+                       @Override\r
+                       protected Object openDialogBox(\r
+                                       Control cellEditorWindow) {\r
+                       dialog = new AnnotationsDialog(cellEditorWindow.getShell(), name.getAnnotations());\r
+                       Object value = ((AnnotationsDialog) dialog).open();\r
+                               if (value instanceof Set) {\r
+                                       logger.warn("Dialog returned set with " + ((Set) value).size() + " elements.");\r
+                                       saveAnnotations((Set) value);\r
+                               }\r
+                               return null;\r
+                       }\r
+               \r
+        };\r
+        if (getValidator() != null) {\r
+                       editor.setValidator(getValidator());\r
+               }\r
+        return editor;\r
+    }\r
+        \r
+    abstract protected void saveAnnotations(Set set);  \r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CompletionProcessor.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/CompletionProcessor.java
new file mode 100644 (file)
index 0000000..ca5a6ae
--- /dev/null
@@ -0,0 +1,120 @@
+/**\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.view.propertysheetsupport;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.ITextViewer;\r
+import org.eclipse.jface.text.contentassist.CompletionProposal;\r
+import org.eclipse.jface.text.contentassist.ICompletionProposal;\r
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;\r
+import org.eclipse.jface.text.contentassist.IContextInformation;\r
+import org.eclipse.jface.text.contentassist.IContextInformationValidator;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+public class CompletionProcessor implements IContentAssistProcessor {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(CompletionProcessor.class);\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int)\r
+        */\r
+       @Override\r
+       public ICompletionProposal[] computeCompletionProposals(\r
+                       ITextViewer viewer, int documentOffset) {\r
+               String context = "Describe formatting / parsing of this rel. type.";\r
+//                     Image img = ResourceManager.getPluginImage(Activator.getDefault(), "icons/unknown.gif");\r
+//             ICompletionProposal[] result =\r
+//                     new ICompletionProposal[myProposals.length];\r
+//             for (int i = 0; i < myProposals.length; i++) {\r
+//                   IContextInformation contextInfo = \r
+//                              new ContextInformation(null, myProposals[i]+" Style");\r
+//                     result[i] = new CompletionProposal(myProposals[i],documentOffset, 0, \r
+//                                     myProposals[i].length(), ResourceManager.getPluginImage(Activator.getDefault(), myIcons[i]), \r
+//                                     myProposals[i], contextInfo, context);\r
+//\r
+//             }\r
+//             return result;\r
+               String searchText = viewer.getTextWidget().getText() + "%";\r
+               List<TaxonNameBase> names = TaxEditorPlugin.getDefault().getNameByName(searchText);\r
+               logger.warn(names.size() + " names");\r
+               List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();\r
+//             String[] test = new String[] {"suggestion 1", "suggestion 2", "suggestion 3"};\r
+               for (TaxonNameBase name : names) {\r
+                       String proposalText = name.getTitleCache();\r
+//             for (String proposalText : test) {\r
+                       proposals.add(new CompletionProposal(proposalText,\r
+                                       0,\r
+                                       searchText.length(),\r
+                                       proposalText.length(),\r
+                                       null,\r
+                                       proposalText,\r
+                                       null,\r
+                                       null\r
+                                       ));\r
+               }               \r
+               logger.warn(proposals.size() + " proposals.");\r
+               return proposals.toArray(new ICompletionProposal[proposals.size()]);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int)\r
+        */\r
+       @Override\r
+       public IContextInformation[] computeContextInformation(ITextViewer viewer,\r
+                       int offset) {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()\r
+        */\r
+       @Override\r
+       public char[] getCompletionProposalAutoActivationCharacters() {\r
+               return new char[] {'a','b','c','d','e','f','g','H'};\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()\r
+        */\r
+       @Override\r
+       public char[] getContextInformationAutoActivationCharacters() {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()\r
+        */\r
+       @Override\r
+       public IContextInformationValidator getContextInformationValidator() {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()\r
+        */\r
+       @Override\r
+       public String getErrorMessage() {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsDialog.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsDialog.java
new file mode 100644 (file)
index 0000000..2154427
--- /dev/null
@@ -0,0 +1,189 @@
+package eu.etaxonomy.taxeditor.view.propertysheetsupport;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.beans.BeansObservables;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
+import org.eclipse.core.databinding.observable.map.IObservableMap;\r
+import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
+import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;\r
+import org.eclipse.jface.text.Document;\r
+import org.eclipse.jface.text.source.SourceViewer;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.CCombo;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.layout.FillLayout;\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.Label;\r
+import org.eclipse.swt.widgets.List;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Table;\r
+import org.eclipse.swt.widgets.TableColumn;\r
+\r
+import eu.etaxonomy.cdm.model.common.Annotation;\r
+import eu.etaxonomy.cdm.model.name.NameRelationship;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+public class NameRelationsDialog extends Dialog {\r
+       private CCombo combo;\r
+       private List relationList;\r
+       private SourceViewer sourceViewer;\r
+       private Table table;\r
+       private static final Logger logger = Logger\r
+                       .getLogger(NameRelationsDialog.class);\r
+       protected Object result;\r
+       protected Shell shell;\r
+       \r
+       private WritableList list = new WritableList();\r
+\r
+       /**\r
+        * Create the dialog\r
+        * @param parent\r
+        * @param style\r
+        */\r
+       public NameRelationsDialog(Shell parent, int style) {\r
+               super(parent, style);\r
+       }\r
+\r
+       /**\r
+        * Create the dialog\r
+        * @param parent\r
+        */\r
+       public NameRelationsDialog(Shell parent) {\r
+               this(parent, SWT.NONE);\r
+       }\r
+\r
+       public NameRelationsDialog(Shell parent, Set<NameRelationship> nameRelationships) {\r
+               this(parent, SWT.NONE);\r
+               for (NameRelationship nameRelationship : nameRelationships) {\r
+                       list.add(nameRelationship);\r
+               }\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
+               shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);\r
+               shell.setLayout(new FillLayout());\r
+               shell.setSize(500, 375);\r
+               shell.setText("Name Relations");\r
+               \r
+               final Composite composite = new Composite(shell, SWT.NONE);\r
+               final GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 4;\r
+               composite.setLayout(gridLayout);\r
+\r
+               combo = new CCombo(composite, SWT.BORDER);\r
+               for (NameRelationshipType relationType : TaxEditorPlugin.getDefault().getNameRelationshipTypeVocabulary()) {\r
+                       combo.add(relationType.getLabel());\r
+               }\r
+\r
+//             sourceViewer = new Text(composite, SWT.BORDER);\r
+               sourceViewer = new SourceViewer(composite, null, SWT.BORDER);\r
+               sourceViewer.setDocument(new Document());\r
+               sourceViewer.configure(new SourceViewerConfig());\r
+               sourceViewer.getTextWidget().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));\r
+\r
+               final Button addButton = new Button(composite, SWT.NONE);\r
+               addButton.setLayoutData(new GridData());\r
+               addButton.setText("Add");\r
+               addButton.addMouseListener(new MouseAdapter() {\r
+                       @Override\r
+                       public void mouseDown(MouseEvent e) {\r
+//                             NameRelationship annotation = NameRelationship.NewInstance(sourceViewer.getTextWidget().getText(), null);\r
+//                             list.add(annotation);\r
+//                             sourceViewer.getTextWidget().setText("");\r
+                       }\r
+               });\r
+\r
+               final TableViewer tableViewer = new TableViewer(composite, SWT.BORDER);\r
+               table = tableViewer.getTable();\r
+               table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));\r
+               table.setLinesVisible(true);\r
+               table.setHeaderVisible(true);\r
+               \r
+               new TableColumn(table, SWT.NONE).setWidth(190);\r
+               new TableColumn(table, SWT.NONE).setWidth(100);\r
+               new TableColumn(table, SWT.NONE).setWidth(190);\r
+               \r
+               new Label(composite, SWT.NONE);\r
+               new Label(composite, SWT.NONE);\r
+\r
+               ObservableListContentProvider providerList = new ObservableListContentProvider();\r
+               tableViewer.setContentProvider(providerList);\r
+               \r
+               IObservableMap[] providerMaps = BeansObservables.observeMaps(\r
+                               providerList.getKnownElements(), NameRelationship.class, new String[]{"fromName", "toName", "type"});\r
+               tableViewer.setLabelProvider(new ObservableMapLabelProvider(providerMaps) {\r
+                       public String getColumnText(Object element, int columnIndex) {\r
+                               NameRelationship nameRelationship = (NameRelationship) element;\r
+                               String returnString = null;\r
+                               switch (columnIndex) {\r
+                                       case 0 :\r
+                                               String fromName = nameRelationship.getFromName().getTitleCache();\r
+                                               returnString = fromName;\r
+                                               break;\r
+                                       case 1 :\r
+                                               String relationshipType = nameRelationship.getType().getLabel();\r
+                                               returnString = " is " + relationshipType + " of ";\r
+                                               break;\r
+                                       case 2 :\r
+                                               String toName = nameRelationship.getToName().getTitleCache();\r
+                                               returnString = toName;\r
+                               } \r
+                               return returnString;\r
+                       }\r
+               });\r
+               tableViewer.setInput(list);\r
+\r
+               final Button cancelButton = new Button(composite, SWT.NONE);\r
+               cancelButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));\r
+               cancelButton.setText("Cancel");\r
+               cancelButton.addMouseListener(new MouseAdapter() {\r
+                       @Override\r
+                       public void mouseUp(MouseEvent e) {\r
+                               shell.dispose();\r
+                       }\r
+               });\r
+                       \r
+               final Button okButton = new Button(composite, SWT.NONE);\r
+               final GridData gd_okButton = new GridData();\r
+               okButton.setLayoutData(gd_okButton);\r
+               okButton.setText("OK");\r
+               okButton.addMouseListener(new MouseAdapter() {\r
+                       @Override\r
+                       public void mouseUp(MouseEvent e) {\r
+                               result = new HashSet(list);\r
+                               shell.dispose();\r
+                       }\r
+               });\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsPropertyDescriptor.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NameRelationsPropertyDescriptor.java
new file mode 100644 (file)
index 0000000..8b48591
--- /dev/null
@@ -0,0 +1,68 @@
+/**\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.view.propertysheetsupport;\r
+\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.viewers.CellEditor;\r
+import org.eclipse.jface.viewers.DialogCellEditor;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.ui.views.properties.PropertyDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+\r
+/**\r
+ * Property sheet descriptor that pops up a dialog window\r
+ *  returning a set.\r
+ *  \r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+abstract public class NameRelationsPropertyDescriptor extends PropertyDescriptor {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(NameRelationsPropertyDescriptor.class);\r
+       \r
+       private TaxonNameBase name;\r
+       \r
+       public NameRelationsPropertyDescriptor(Object id, String displayName, TaxonNameBase name) {\r
+               super(id, displayName);\r
+               this.name = name;\r
+       }\r
+\r
+    public CellEditor createPropertyEditor(Composite parent) {\r
+        CellEditor editor = new DialogCellEditor(parent) {\r
+\r
+               protected Dialog dialog;\r
+               \r
+                       @Override\r
+                       protected Object openDialogBox(\r
+                                       Control cellEditorWindow) {\r
+                       dialog = new NameRelationsDialog(cellEditorWindow.getShell(), name.getNameRelations());\r
+                       Object value = ((NameRelationsDialog) dialog).open();\r
+                               if (value instanceof Set) {\r
+                                       logger.warn("Dialog returned set with " + ((Set) value).size() + " elements.");\r
+                                       saveNameRelations((Set) value);\r
+                               }\r
+                               return null;\r
+                       }\r
+               \r
+        };\r
+        if (getValidator() != null) {\r
+                       editor.setValidator(getValidator());\r
+               }\r
+        return editor;\r
+    }\r
+        \r
+    abstract protected void saveNameRelations(Set set);        \r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NomStatusPropertySource.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/NomStatusPropertySource.java
new file mode 100644 (file)
index 0000000..53d3451
--- /dev/null
@@ -0,0 +1,90 @@
+/**\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.view.propertysheetsupport;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.05.2008\r
+ * @version 1.0\r
+ */\r
+public class NomStatusPropertySource extends CollectionPropertySource {\r
+       private static final Logger logger = Logger.\r
+                       getLogger(NomStatusPropertySource.class);\r
+\r
+       public NomStatusPropertySource(Collection collection) {\r
+               super(collection);\r
+       }\r
+\r
+       static OrderedTermVocabulary<NomenclaturalStatusType> nomStatusVocabulary = \r
+                       TaxEditorPlugin.getDefault().getNomStatusVocabulary();\r
+       static NomenclaturalStatusType[] nomStatusTypes = null;\r
+       static String[] P_NOMSTATUS_MENU = null;\r
+       private static void populateNomStatusTypes() {\r
+               \r
+               // Get terms from nom status vocabulary\r
+               List<NomenclaturalStatusType> nomStatusTypesList = new ArrayList<NomenclaturalStatusType>();\r
+               nomStatusTypesList.addAll(TaxEditorPlugin.getDefault().getNomStatusVocabulary().getTerms());\r
+               \r
+               // Populate nom status type menu labels \r
+               List<String> nomStatusTypesMenuList = new ArrayList<String>();\r
+               for (NomenclaturalStatusType nomStatusType : nomStatusTypesList) {\r
+                       nomStatusTypesMenuList.add(nomStatusType.getLabel());\r
+               }\r
+               \r
+               // Add an empty element for "nothing selected" in the rank drop-down \r
+               nomStatusTypesList.add(0, null);\r
+               nomStatusTypesMenuList.add(0, "");\r
+               \r
+               // Convert rank lists to array\r
+               nomStatusTypes = nomStatusTypesList.toArray(new NomenclaturalStatusType[nomStatusTypesList.size()]);\r
+               P_NOMSTATUS_MENU = nomStatusTypesMenuList.toArray(new String[nomStatusTypesMenuList.size()]);   \r
+       }               \r
+       \r
+\r
+       @Override\r
+       protected String getItemDisplayName(Object item) {\r
+               // No display names on individual nom statii\r
+               return "";\r
+       }\r
+\r
+       @Override\r
+       public Object getPropertyValue(Object id) {\r
+               if (id instanceof NomenclaturalStatus) {\r
+                       NomenclaturalStatus nomenclaturalStatus = (NomenclaturalStatus) id;\r
+                       NomenclaturalStatusType statusType = nomenclaturalStatus.getType(); \r
+                       if (statusType != null) {\r
+                               return statusType.getLabel();\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public void setPropertyValue(Object id, Object value) {\r
+               // Fields not editable in property sheet view   \r
+       }\r
+\r
+       @Override\r
+       public String toString() {\r
+               // "Nom. Status" header has no value\r
+               return "";\r
+       }\r
+}
\ No newline at end of file
index 75cfe19022b9450268c669941aec467eb87fb752..4503b458dd1e8a08e0f6d9941fe809ae4c167430 100644 (file)
@@ -19,11 +19,6 @@ import java.util.Set;
 import java.util.Vector;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.eclipse.jface.viewers.CellEditor;\r
-import org.eclipse.jface.viewers.DialogCellEditor;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Dialog;\r
 import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;\r
 import org.eclipse.ui.views.properties.IPropertyDescriptor;\r
 import org.eclipse.ui.views.properties.IPropertySource;\r
@@ -32,10 +27,11 @@ import org.eclipse.ui.views.properties.TextPropertyDescriptor;
 \r
 import eu.etaxonomy.cdm.model.common.Annotation;\r
 import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 \r
 /**\r
@@ -72,7 +68,7 @@ public class NonViralNamePropertySource implements IPropertySource {
        public static final String P_ID_MARKERS = "markers";\r
        public static final String P_ID_CREATED = "created";\r
        public static final String P_ID_CREATEDBY = "createdby";\r
-       public static final String P_ID_NOMENCLATURALCODE = "nomenclaturalcode";\r
+       public static final String P_ID_NOMENCLATURAL_CODE = "nomenclaturalcode";\r
        public static final String P_ID_NOMENCLATURAL_REF = "nomenclaturalref";\r
        public static final String P_ID_NOMENCLATURAL_MICROREF = "nomenclaturalmicroref";\r
        \r
@@ -98,13 +94,13 @@ public class NonViralNamePropertySource implements IPropertySource {
        public static final String P_MARKERS = "13:Markers";\r
        public static final String P_CREATED = "15:Created";\r
        public static final String P_CREATEDBY = "16:Created By";\r
-       public static final String P_NOMENCLATURALCODE = "02:Nomenclatural Code";\r
+       public static final String P_NOMENCLATURAL_CODE = "02:Nomenclatural Code";\r
        public static final String P_NOMENCLATURAL_REF = "09:Nomenclatural Reference";\r
        public static final String P_NOMENCLATURAL_MICROREF = "10:Nomenclatural Micro Reference";\r
        \r
        protected static final String[] TOP_LEVEL_PROPERTIES = new String[] {P_ID_PARSED, P_ID_RANK, P_ID_TITLECACHE,  \r
                        P_ID_ANNOTATIONS, P_ID_NOMSTATUS, P_ID_NAMERELATIONS, P_ID_UUID, P_ID_NOMENCLATURAL_REF,\r
-                       P_ID_TYPE, P_ID_CREATED, P_ID_CREATEDBY, P_ID_NOMENCLATURALCODE };      \r
+                       P_ID_TYPE, P_ID_CREATED, P_ID_CREATEDBY, P_ID_NOMENCLATURAL_CODE };     \r
        \r
        // ***********************************************************\r
        //              RANKS\r
@@ -138,30 +134,30 @@ public class NonViralNamePropertySource implements IPropertySource {
        // ***********************************************************\r
        //              NOMENCLATURAL STATUS\r
        // ***********************************************************\r
-//     static OrderedTermVocabulary<NomenclaturalStatusType> nomStatusVocabulary = \r
-//                     TaxEditorPlugin.getDefault().getNomStatusVocabulary();\r
-//     static NomenclaturalStatusType[] nomStatusTypes = null;\r
-//     static String[] P_NOMSTATUS_MENU = null;\r
-//     private static void populateNomStatusTypes() {\r
-//             \r
-//             // Get terms from nom status vocabulary\r
-//             List<NomenclaturalStatusType> nomStatusTypesList = new ArrayList<NomenclaturalStatusType>();\r
-//             nomStatusTypesList.addAll(TaxEditorPlugin.getDefault().getNomStatusVocabulary().getTerms());\r
-//             \r
-////           // Populate nom status type menu labels \r
-//             List<String> nomStatusTypesMenuList = new ArrayList<String>();\r
-//             for (NomenclaturalStatusType nomStatusType : nomStatusTypesList) {\r
-//                     nomStatusTypesMenuList.add(nomStatusType.getLabel());\r
-//             }\r
-//             \r
-//             // Add an empty element for "nothing selected" in the rank drop-down \r
-//             nomStatusTypesList.add(0, null);\r
-//             nomStatusTypesMenuList.add(0, "");\r
-//             \r
-//             // Convert rank lists to array\r
-//             nomStatusTypes = nomStatusTypesList.toArray(new NomenclaturalStatusType[nomStatusTypesList.size()]);\r
-//             P_NOMSTATUS_MENU = nomStatusTypesMenuList.toArray(new String[nomStatusTypesMenuList.size()]);   \r
-//     }       \r
+       static OrderedTermVocabulary<NomenclaturalStatusType> nomStatusVocabulary = \r
+                       TaxEditorPlugin.getDefault().getNomStatusVocabulary();\r
+       static NomenclaturalStatusType[] nomStatusTypes = null;\r
+       static String[] P_NOMSTATUS_MENU = null;\r
+       private static void populateNomStatusTypes() {\r
+               \r
+               // Get terms from nom status vocabulary\r
+               List<NomenclaturalStatusType> nomStatusTypesList = new ArrayList<NomenclaturalStatusType>();\r
+               nomStatusTypesList.addAll(TaxEditorPlugin.getDefault().getNomStatusVocabulary().getTerms());\r
+               \r
+//             // Populate nom status type menu labels \r
+               List<String> nomStatusTypesMenuList = new ArrayList<String>();\r
+               for (NomenclaturalStatusType nomStatusType : nomStatusTypesList) {\r
+                       nomStatusTypesMenuList.add(nomStatusType.getLabel());\r
+               }\r
+               \r
+               // Add an empty element for "nothing selected" in the rank drop-down \r
+               nomStatusTypesList.add(0, null);\r
+               nomStatusTypesMenuList.add(0, "");\r
+               \r
+               // Convert rank lists to array\r
+               nomStatusTypes = nomStatusTypesList.toArray(new NomenclaturalStatusType[nomStatusTypesList.size()]);\r
+               P_NOMSTATUS_MENU = nomStatusTypesMenuList.toArray(new String[nomStatusTypesMenuList.size()]);\r
+       }       \r
        \r
        // If this is a property with a parent, the parent's ID\r
        private String parentid;\r
@@ -232,42 +228,36 @@ public class NonViralNamePropertySource implements IPropertySource {
                }\r
                if (id.equals(P_ID_NAMERELATIONS)) {\r
                        descriptors.addElement(\r
-                                       new PropertyDescriptor(P_ID_NAMERELATIONS, P_NAMERELATIONS));\r
-               }\r
+                                       new NameRelationsPropertyDescriptor(P_ID_NAMERELATIONS, P_NAMERELATIONS, name) {\r
+                                               @Override\r
+                                               protected void saveNameRelations(Set set) {\r
+                                                       setPropertyValue(P_ID_NAMERELATIONS, set);\r
+                                               }\r
+                                       }\r
+                       );\r
+               };\r
+               \r
                if (id.equals(P_ID_TYPE)) {\r
                        descriptors.addElement(\r
                                        new PropertyDescriptor(P_ID_TYPE, P_TYPE));\r
                }\r
                if (id.equals(P_ID_ANNOTATIONS)) {\r
                        descriptors.addElement(\r
-                                       new PropertyDescriptor(P_ID_ANNOTATIONS, P_ANNOTATIONS) {\r
-                                           public CellEditor createPropertyEditor(Composite parent) {\r
-                                               CellEditor editor = new DialogCellEditor(parent) {\r
-\r
-                                                               @Override\r
-                                                               protected Object openDialogBox(\r
-                                                                               Control cellEditorWindow) {\r
-                                                               Dialog dialog = new AnnotationsDialog(cellEditorWindow.getShell(), name.getAnnotations());\r
-                                                               Object value = ((AnnotationsDialog) dialog).open();\r
-                                                                       if (value instanceof Set) {\r
-                                                                               logger.warn("Dialog returned set with " + ((Set) value).size() + " elements.");\r
-                                                                               setPropertyValue(P_ID_ANNOTATIONS, value);\r
-                                                                       }\r
-                                                                       return null;\r
-                                                               }\r
-                                                       \r
-                                               };\r
-                                               if (getValidator() != null) {\r
-                                                               editor.setValidator(getValidator());\r
-                                                       }\r
-                                               return editor;\r
-                                           }\r
-                                       });\r
-               }\r
+                                       new AnnotationsPropertyDescriptor(P_ID_ANNOTATIONS, P_ANNOTATIONS, name) {\r
+                                               @Override\r
+                                               protected void saveAnnotations(Set set) {\r
+                                                       setPropertyValue(P_ID_ANNOTATIONS, set);\r
+                                               }\r
+                                       }\r
+                       );\r
+               };\r
                if (id.equals(P_ID_NOMSTATUS)) {\r
+                       if (nomStatusTypes == null) {\r
+                               populateNomStatusTypes();\r
+                       }\r
                        descriptors.addElement(\r
-                                       new PropertyDescriptor(P_ID_NOMSTATUS, P_NOMSTATUS));\r
-               }\r
+                                       new ComboBoxPropertyDescriptor(P_ID_NOMSTATUS, P_NOMSTATUS, P_NOMSTATUS_MENU));\r
+               }               \r
                if (id.equals(P_ID_UUID)) {\r
                        descriptors.addElement(\r
                                        new PropertyDescriptor(P_ID_UUID, P_UUID));\r
@@ -288,9 +278,9 @@ public class NonViralNamePropertySource implements IPropertySource {
                        descriptors.addElement(\r
                                        new PropertyDescriptor(P_ID_CREATEDBY, P_CREATEDBY));\r
                }\r
-               if (id.equals(P_ID_NOMENCLATURALCODE)) {\r
+               if (id.equals(P_ID_NOMENCLATURAL_CODE)) {\r
                        descriptors.addElement(\r
-                                       new ComboBoxPropertyDescriptor(P_ID_NOMENCLATURALCODE, P_NOMENCLATURALCODE, P_NOMENCLATURALCODE_MENU));\r
+                                       new ComboBoxPropertyDescriptor(P_ID_NOMENCLATURAL_CODE, P_NOMENCLATURAL_CODE, P_NOMENCLATURALCODE_MENU));\r
                }\r
                if (id.equals(P_ID_NOMENCLATURAL_REF)) {\r
                        descriptors.addElement(\r
@@ -353,11 +343,13 @@ public class NonViralNamePropertySource implements IPropertySource {
        }\r
 \r
        @Override\r
-       public Object getPropertyValue(Object id) {     \r
+       public Object getPropertyValue(Object id) {\r
         if (id.equals(P_ID_PARSED)) \r
                        return name.getHasProblem() == true ? "problem" : "parsed" ;\r
                if (id.equals(P_ID_RANK)) {\r
-               if (this.name.getRank() == null) return 0;\r
+               if (this.name.getRank() == null) {\r
+                       return 0;\r
+               }\r
                Rank rank = this.name.getRank();\r
                for (int i = 0; i < ranks.length; i++) {\r
                        if (ranks[i] == null) continue;\r
@@ -401,7 +393,21 @@ public class NonViralNamePropertySource implements IPropertySource {
                        return new AnnotationPropertySource(name.getAnnotations());\r
         }\r
         if (id.equals(P_ID_NOMSTATUS)) {\r
-                       return new NomStatusPropertySource(name.getStatus());\r
+//                     return new NomStatusPropertySource(name.getStatus());\r
+//             if (this.name.getRank() == null) return 0;\r
+               Set<NomenclaturalStatus> nomStatusSet = this.name.getStatus();\r
+               \r
+               if (nomStatusSet == null || nomStatusSet.size() == 0) {\r
+                       return 0;\r
+               }\r
+               // TODO for now, only showing first nom status - change!\r
+               NomenclaturalStatus nomStatus = (NomenclaturalStatus) nomStatusSet.toArray()[0];\r
+               for (int i = 0; i < nomStatusTypes.length; i++) {\r
+                       if (nomStatusTypes[i] == null) continue;\r
+                       if (nomStatus.getType().getUuid().equals(nomStatusTypes[i].getUuid())) \r
+                               return i;\r
+               }\r
+               return 0;                       \r
         }\r
         if (id.equals(P_ID_NAMERELATIONS)) {\r
                        return new NameRelationsPropertySource(name, name.getNameRelations());\r
@@ -433,7 +439,7 @@ public class NonViralNamePropertySource implements IPropertySource {
                        return subEmptyForNull(name.getCreatedBy().generateTitle());\r
                }\r
         }\r
-        if (id.equals(P_ID_NOMENCLATURALCODE)) {\r
+        if (id.equals(P_ID_NOMENCLATURAL_CODE)) {\r
                // TODO put in logic "if BotanicalName / ZoologicalName ..."\r
                return 0;\r
         }\r
@@ -517,6 +523,12 @@ public class NonViralNamePropertySource implements IPropertySource {
         */\r
        @Override\r
        public void setPropertyValue(Object id, Object value) {\r
+               \r
+               // Since this is only called when the property value changes,\r
+               //      it is a reliable place to fire the name's property change\r
+               //      listener.\r
+               name.firePropertyChange((String) id, null, value);\r
+               \r
                // TODO every time property value is set, refire property sheet\r
                this.propertyChangeSupport.firePropertyChange(new PropertyChangeEvent(name, (String) id, null, value));\r
                if (id.equals(P_ID_RANK)) {\r
@@ -546,7 +558,6 @@ public class NonViralNamePropertySource implements IPropertySource {
                if (value instanceof Set) {\r
                        for (Object object: (Set) value) {\r
                                if (object instanceof Annotation && !annotations.contains(object)) {\r
-                                       logger.warn("Adding annotation");\r
                                        name.addAnnotation((Annotation) object);\r
                                }\r
                        }\r
@@ -556,12 +567,28 @@ public class NonViralNamePropertySource implements IPropertySource {
                // TODO set name relations\r
         }\r
         if (id.equals(P_ID_NOMSTATUS)) {\r
-               // TODO set nom status\r
+               NomenclaturalStatus nomStatus;\r
+                       int index = ((Integer) value).intValue();\r
+                       Set<NomenclaturalStatus> nomStatusSet = name.getStatus();               \r
+\r
+                       if (nomStatusSet.size() > 0) {\r
+                               nomStatus =     (NomenclaturalStatus) nomStatusSet.toArray()[0];\r
+                               \r
+                               if (index == 0) {\r
+                                       nomStatusSet.remove(nomStatus);\r
+                               } else {\r
+                                       nomStatus.setType(nomStatusTypes[index]);\r
+                               }\r
+                               \r
+                       } else {\r
+                               nomStatus = NomenclaturalStatus.NewInstance(nomStatusTypes[index]);\r
+                               name.addStatus(nomStatus);\r
+                       }\r
         }\r
         if (id.equals(P_ID_MARKERS)) {\r
                // TODO set markers\r
         }\r
-        if (id.equals(P_ID_NOMENCLATURALCODE)) {\r
+        if (id.equals(P_ID_NOMENCLATURAL_CODE)) {\r
                // TODO decide if this is editable at all, and if so, how to implement\r
         }\r
         if (id.equals(P_ID_NOMENCLATURAL_REF)) {\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/SourceViewerConfig.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/SourceViewerConfig.java
new file mode 100644 (file)
index 0000000..e2c0b7b
--- /dev/null
@@ -0,0 +1,72 @@
+/**\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.view.propertysheetsupport;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.text.IDocument;\r
+import org.eclipse.jface.text.contentassist.ContentAssistEvent;\r
+import org.eclipse.jface.text.contentassist.ContentAssistant;\r
+import org.eclipse.jface.text.contentassist.ICompletionListener;\r
+import org.eclipse.jface.text.contentassist.ICompletionProposal;\r
+import org.eclipse.jface.text.contentassist.IContentAssistant;\r
+import org.eclipse.jface.text.source.ISourceViewer;\r
+import org.eclipse.jface.text.source.SourceViewerConfiguration;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.graphics.RGB;\r
+import org.eclipse.swt.widgets.Display;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 19.05.2008\r
+ * @version 1.0\r
+ */\r
+public class SourceViewerConfig extends SourceViewerConfiguration {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(SourceViewerConfig.class);\r
+       \r
+       public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {\r
+\r
+               ContentAssistant assistant = new ContentAssistant();\r
+               assistant.setContentAssistProcessor(\r
+                       new CompletionProcessor(),\r
+                       IDocument.DEFAULT_CONTENT_TYPE);\r
+               assistant.enableAutoActivation(true);\r
+               assistant.setAutoActivationDelay(50);\r
+               assistant.setProposalPopupOrientation(\r
+                       IContentAssistant.PROPOSAL_OVERLAY);\r
+               assistant.setStatusLineVisible(true);\r
+//             assistant.setStatusMessage("Create a nomenclatural or taxonomic relationship");\r
+               assistant.setProposalSelectorBackground(\r
+                               new Color(Display.getCurrent(), new RGB(255, 255, 255)));\r
+               assistant.setInformationControlCreator(\r
+                               getInformationControlCreator(sourceViewer)); // this is what pops up in the yellow context box\r
+               assistant.addCompletionListener(new ICompletionListener() {\r
+\r
+                       @Override\r
+                       public void assistSessionEnded(ContentAssistEvent event) {\r
+                               // TODO Auto-generated method stub\r
+                       }\r
+\r
+                       @Override\r
+                       public void assistSessionStarted(ContentAssistEvent event) {\r
+                               // TODO Auto-generated method stub\r
+                       }\r
+\r
+                       @Override\r
+                       public void selectionChanged(ICompletionProposal proposal,\r
+                                       boolean smartToggle) {\r
+                               if (smartToggle) {\r
+                                       logger.warn("Inserting " + proposal.getDisplayString());\r
+                               }\r
+                       }\r
+               });\r
+               return assistant;\r
+       }\r
+}
\ No newline at end of file