User can now choose in preferences which ranks to show in the TaxonName property...
authorp.ciardelli <p.ciardelli@localhost>
Fri, 19 Sep 2008 14:51:32 +0000 (14:51 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Fri, 19 Sep 2008 14:51:32 +0000 (14:51 +0000)
16 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/plugin.xml
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ITaxEditorConstants.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/UiUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/DeleteSynonymCompositeAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/DeleteElementCompositeAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorGroupComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorGroupedComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionElementComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionLabelComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/CdmUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/FeaturePreferences.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/NomenclaturalCodePreferences.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/RankMenuPreferences.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/name/NonViralNamePropertySource.java

index 557baa80569d934a2f3ecbe3403689a4a5fd6075..05522617155ca5eab9532165d7eb8c7e25cec9db 100644 (file)
@@ -501,6 +501,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/Des
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/FeaturePreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/InitializeDbPreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/NomenclaturalCodePreferences.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/RankMenuPreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/TaxonomicPreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AnnotationPropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/AnnotationsDialog.java -text
index 1fed9d46e827f4c450458a814a8b8f4d53e7a031..e0d9307a68b270e9d6c29b995ae082de33cc9c7c 100644 (file)
             id="eu.etaxonomy.taxeditor.preferences.feature"\r
             name="Preferred Features">\r
       </page>\r
+      <page\r
+            category="eu.etaxonomy.taxeditor.preferences.taxonomic"\r
+            class="eu.etaxonomy.taxeditor.preference.RankMenuPreferences"\r
+            id="eu.etaxonomy.taxeditor.preferences.ranks"\r
+            name="Preferred Ranks">\r
+      </page>\r
    </extension>\r
    <extension\r
          id="product1"\r
             name="%productName">\r
          <property\r
                name="windowImages"\r
-               value="eclipse.gif,eclipse32.gif,eclipse48.gif,eclipse.png,eclipse32.png">\r
+               value="icons/edit_16x16.gif">\r
          </property>\r
          <property\r
                name="aboutText"\r
                value="%productBlurb">\r
          </property>\r
-         <property\r
-               name="aboutImage"\r
-               value="eclipse_lg.gif">\r
-         </property>\r
          <property\r
                name="startupForegroundColor"\r
                value="C8D5EA">\r
                value="plugin_customization.ini">\r
          </property>\r
       </product>\r
+   </extension>\r
+   <extension\r
+         id="TaxEditorProduct"\r
+         point="org.eclipse.core.runtime.products">\r
+      <product\r
+            application="eu.etaxonomy.taxeditor.application"\r
+            name="%productName">\r
+         <property\r
+               name="windowImages"\r
+               value="icons/edit_16x16.gif,eclipse32.gif,eclipse48.gif,eclipse.png,eclipse32.png">\r
+         </property>\r
+         <property\r
+               name="aboutText"\r
+               value="%productBlurb">\r
+         </property>\r
+         <property\r
+               name="aboutImage"\r
+               value="eclipse_lg.gif">\r
+         </property>\r
+         <property\r
+               name="startupForegroundColor"\r
+               value="C8D5EA">\r
+         </property>\r
+         <property\r
+               name="startupProgressRect"\r
+               value="0,280,455,15">\r
+         </property>\r
+         <property\r
+               name="startupMessageRect"\r
+               value="7,220,441,20">\r
+         </property>\r
+         <property\r
+               name="preferenceCustomization"\r
+               value="plugin_customization.ini">\r
+         </property>\r
+      </product>\r
    </extension>
 </plugin>\r
index 952a748ba02c641bf69e151f19c910e14a48c112..3ee818335daeca8f18c20d9961be4189739d6c36 100644 (file)
@@ -90,5 +90,6 @@ public class ITaxEditorConstants {
                PREFERENCES\r
         ************************************************************************************** */\r
        public static final String FEATURE_PREFERENCE = "feature_preference";\r
+       public static final String RANK_PREFERENCE = "rank_preference";\r
        \r
 }\r
index a3900f0dc8c77e0ff872a35ef6240a8a0c90a4be..dd13aa7dcac7032bbdba88b8c2f4fdae34c42ad0 100644 (file)
@@ -16,7 +16,6 @@ import org.apache.log4j.Logger;
 import org.eclipse.core.commands.operations.IOperationHistory;\r
 import org.eclipse.core.commands.operations.IUndoContext;\r
 import org.eclipse.core.commands.operations.OperationHistoryFactory;\r
-import org.eclipse.core.runtime.Assert;\r
 import org.eclipse.jface.preference.IPreferenceStore;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Control;\r
@@ -39,6 +38,7 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.editor.CompositeBorderDecorator;\r
@@ -59,6 +59,7 @@ public class UiUtil {
        private static final Logger logger = Logger.getLogger(UiUtil.class);\r
 \r
        private static Set<Feature> preferredFeatureSet;\r
+       private static Set<Rank> preferredRankSet;\r
        \r
        public static IViewPart getPropertySheet() {\r
                for (IViewReference reference : getActivePage().getViewReferences()) {\r
@@ -286,10 +287,8 @@ public class UiUtil {
                if (preferredFeatureSet == null) {\r
                        \r
                        preferredFeatureSet = new HashSet<Feature>();   \r
-                       \r
-                       TermVocabulary<Feature> features = CdmUtil.getDescriptionService().\r
-                                       getDefaultFeatureVocabulary();\r
-                       for (Feature feature : features) {\r
+                                               \r
+                       for (Feature feature : CdmUtil.getFeatures()) {\r
                                \r
                                // If the feature is set to show, add it to preferredFeatureSet\r
                                if (getFeaturePreference(feature)) {\r
@@ -302,7 +301,7 @@ public class UiUtil {
        }\r
        \r
        /**\r
-        * True if <code>feature</code> is set to "show" in preferences.\r
+        * True if <code>Feature</code> is set to "show" in preferences.\r
         * \r
         * @param feature\r
         * @return\r
@@ -335,7 +334,7 @@ public class UiUtil {
        }\r
        \r
        /**\r
-        * Construct a unique key using feature's Uuid\r
+        * Construct a unique key using <code>Feature</code>'s <code>Uuid</code>\r
         * \r
         * @param feature\r
         * @return\r
@@ -346,6 +345,80 @@ public class UiUtil {
                                . concat(feature.getUuid().toString());\r
        }\r
 \r
+       /**\r
+        * Returns a <code>Set</code> of the <code>Rank</code>s that the user has chosen\r
+        * to have shown in preferences.\r
+        * </p>\r
+        * <p>\r
+        * <code>Rank</code>s are shown unless otherwise specified.\r
+        * </p>\r
+        * @return\r
+        */\r
+       public static Set<Rank> getPreferredRanks() {\r
+               \r
+               // Initialize preferredFeatureSet as necessary\r
+               if (preferredRankSet == null) {\r
+                       \r
+                       preferredRankSet = new HashSet<Rank>(); \r
+                                               \r
+                       for (Rank rank : CdmUtil.getRanks()) {\r
+                               \r
+                               // If the feature is set to show, add it to preferredFeatureSet\r
+                               if (getRankPreference(rank)) {\r
+                                       preferredRankSet.add(rank);\r
+                               }\r
+                       }\r
+                       \r
+               }\r
+               return preferredRankSet;\r
+       }       \r
+       \r
+       /**\r
+        * True if <code>Rank</code> is set to "show" in preferences.\r
+        * \r
+        * @param rank\r
+        * @return\r
+        */\r
+       public static boolean getRankPreference(Rank rank) {\r
+               \r
+               String preferenceKey = getPreferenceKey(rank);\r
+               \r
+               // If rank does not yet have a pref, set it to true\r
+               if (!getPrefStore().contains(preferenceKey)) {\r
+                       getPrefStore().setDefault(preferenceKey, true);\r
+               }\r
+               \r
+               return getPrefStore().getBoolean(preferenceKey);\r
+       }\r
+       \r
+       /**\r
+        * Set the show state of a <code>Rank</code> in the \r
+        * <code>PreferenceStore</code>.\r
+        * <p>\r
+        * Also sets <code>preferredRankSet</code> to null to force it be\r
+        * re-populated the next time {@link #getPreferredRanks()} is called.\r
+        * \r
+        * @param rank\r
+        * @param show\r
+        */     \r
+       public static void setRankPreference(Rank rank, boolean show) {\r
+               preferredRankSet = null;\r
+               getPrefStore().setValue(getPreferenceKey(rank), show);\r
+               \r
+       }\r
+       \r
+       /**\r
+        * Construct a unique key using <code>Rank</code>'s <code>Uuid</code>\r
+        * \r
+        * @param feature\r
+        * @return\r
+        */\r
+       private static String getPreferenceKey(Rank rank) {\r
+               return ITaxEditorConstants.RANK_PREFERENCE \r
+                               . concat(".")\r
+                               . concat(rank.getUuid().toString());\r
+       }       \r
+       \r
        /**\r
         * @return\r
         */\r
@@ -388,5 +461,4 @@ public class UiUtil {
                }\r
                return null;\r
        }\r
-\r
 }
\ No newline at end of file
index c407b0da4745bdbd6704507c82729912547e26d8..72583f8d7aea72b5d97a148f8b1976eb208d9716 100644 (file)
@@ -101,7 +101,6 @@ public class DeleteSynonymCompositeAction extends Action {
                                        if (event.getProperty().equals(\r
                                                        ITaxEditorConstants.SYNONYM)) {\r
                                                // Delete namecomposite\r
-                                               // TODO: put this in taxonFactory?\r
                                                composite.dispose();            \r
                                        }\r
                                }\r
index 85d55c48a4dd53c46df1d3f686977f5aa9bff1bc..4da2bd6b9728da35ccce5d24a8330b702ce43d14 100644 (file)
@@ -21,18 +21,14 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;\r
 import org.eclipse.jface.action.Action;\r
 import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
-import org.eclipse.jface.util.PropertyChangeEvent;\r
-import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.swt.widgets.Composite;\r
 \r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.actions.cdm.DeleteMisappliedNameFromTaxonAction;\r
-import eu.etaxonomy.taxeditor.editor.description.DescriptionElementComposite;\r
-import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -43,33 +39,46 @@ public class DeleteElementCompositeAction extends Action {
        private static final Logger logger = Logger\r
                        .getLogger(DeleteElementCompositeAction.class);\r
 \r
-       private static String text = "Delete description element from taxon";\r
+       private static String text = "Delete description element";\r
        private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
                        .getImageDescriptor(ITaxEditorConstants.ACTIVE_DELETE_ICON);\r
 \r
-       private DescriptionElementComposite composite;\r
        private IUndoableOperation operation;\r
        private DescriptionElementBase descriptionElement;\r
        private Taxon taxon;\r
 \r
+       private Composite elementComposite;\r
+       private Composite featureComposite;\r
+       private Composite descriptionComposite;\r
+       private DescriptionBase description;\r
+\r
        private DeleteElementCompositeAction() {\r
                super(text);\r
                setImageDescriptor(image);\r
        }\r
 \r
-       public DeleteElementCompositeAction(DescriptionElementComposite composite, \r
+       public DeleteElementCompositeAction(Composite elementComposite, \r
                        Taxon taxon) {\r
                this();\r
 \r
-               if (composite.getData() instanceof DescriptionElementBase) {\r
-                       this.descriptionElement = (DescriptionElementBase) composite.getData();\r
+               this.elementComposite = elementComposite;\r
+               \r
+               if (elementComposite.getData() instanceof DescriptionElementBase) {\r
+                       this.descriptionElement = (DescriptionElementBase) elementComposite.getData();\r
                } else {\r
                        throw new IllegalArgumentException(\r
-                                       "This action requires a composite with a DescriptionElementBase in its data field.");\r
+                                       "This action requires an elementComposite with a DescriptionElementBase in its data field.");\r
                }\r
-\r
                this.taxon = taxon;\r
-               this.composite = composite;\r
+               \r
+               featureComposite = elementComposite.getParent();\r
+               descriptionComposite = featureComposite.getParent();\r
+               if (descriptionComposite.getData() instanceof DescriptionBase) {\r
+                       this.description = (DescriptionBase) descriptionComposite.getData();\r
+               } else {\r
+                       throw new IllegalArgumentException(\r
+                                       "This action requires that the element composite's \"grandparent\" has a Description in its data field.");\r
+               }\r
 \r
                operation = new DeleteElementOperation();\r
        }\r
@@ -95,14 +104,17 @@ public class DeleteElementCompositeAction extends Action {
                @Override\r
                public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
                                throws ExecutionException {\r
-                       // Delete synonym from taxon\r
+                       \r
+                       // Delete element from description\r
+                       \r
+                       \r
 //                     Action action = new DeleteMisappliedNameFromTaxonAction(misappliedName, taxon);\r
 //                     action.addPropertyChangeListener(new IPropertyChangeListener() {\r
 //                             @Override\r
 //                             public void propertyChange(PropertyChangeEvent event) {\r
 //                                     if (event.getProperty().equals(\r
 //                                                     ITaxEditorConstants.MISAPPLIED_NAME)) {\r
-//                                             composite.dispose();            \r
+//                                             elementComposite.dispose();             \r
 //                                     }\r
 //                             }\r
 //                     });                     \r
index 1839e216f249eb15b53751e58ea09ef1cac4a911..0724801f598f1f249c13e00eb1e70f367d33284a 100644 (file)
 package eu.etaxonomy.taxeditor.editor;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.Assert;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.ui.forms.IManagedForm;\r
 \r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
 /** \r
- * Formats EditorGroupComposite with cosmetic and layout properties specific to the\r
+ * Formats <code>GroupComposite</code> with cosmetic and layout properties specific to the\r
  * Editor. This should be used to maintain a consistent look and feel for all Editor \r
- * freetext area group components, such as HomotypicalGroup.\r
+ * freetext area group components, such as <code>HomotypicalGroup</code>.\r
+ * <p>\r
+ * Its <code>IManagedForm</code> is required to have a <code>Taxon</code> in its \r
+ * own <code>getData()</code>.\r
+ * </p> \r
  * \r
  * @author p.ciardelli\r
  * @created 02.06.2008\r
@@ -25,7 +32,8 @@ import org.eclipse.ui.forms.IManagedForm;
 public class EditorGroupComposite extends GroupComposite {\r
        private static final Logger logger = Logger.getLogger(EditorGroupComposite.class);\r
        \r
-       IManagedForm managedForm;\r
+       private IManagedForm managedForm;\r
+       private Taxon taxon;\r
        \r
        public EditorGroupComposite(Composite parent, IManagedForm managedForm, Object data) {\r
                this(parent, managedForm);\r
@@ -38,6 +46,11 @@ public class EditorGroupComposite extends GroupComposite {
 \r
                this.managedForm = managedForm;\r
                \r
+               Object formData = managedForm.getForm().getBody().getData();\r
+               Assert.isTrue(formData instanceof Taxon, \r
+                               "Managed form must have a Taxon in its data field.");\r
+               taxon = (Taxon) formData;\r
+               \r
                createBorderSupport();\r
        }\r
 \r
@@ -48,4 +61,8 @@ public class EditorGroupComposite extends GroupComposite {
        public IManagedForm getManagedForm() {\r
                return managedForm;\r
        }\r
+       \r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
 }
\ No newline at end of file
index 72f98cbb3bfc8c4dea8a70f24402fbbee1e857d5..9a9a6418038465b59421fd91f317c9937c6cd62d 100644 (file)
@@ -23,6 +23,7 @@ import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.forms.widgets.TableWrapData;\r
 import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
 \r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 \r
 /** \r
  * Formats <code>GroupedComposite</code> with cosmetic and layout properties specific to the\r
@@ -30,10 +31,14 @@ import org.eclipse.ui.forms.widgets.TableWrapLayout;
  * freetext area components, such as DescriptionElementComposite.\r
  * <p>\r
  * Requires an <code>IManagedForm</code>, whose <code>input</code> is set to the contents\r
- * of <code>getData()</code> when the <code>EditorGroupedComposite</code> gets focus, i.e. to\r
+ * of {@link #getData()} when the <code>EditorGroupedComposite</code> gets focus, i.e. to\r
  * populate the property sheet with the data.\r
  * </p>\r
  * <p>\r
+ * The <code>IManagedForm</code> is also required to have a <code>Taxon</code> in its \r
+ * own <code>getData()</code>.\r
+ * </p> \r
+ * <p>\r
  * The <code>IManagedForm</code> can also used for drawing borders by calling the method \r
  * <code>createBorderSupport()</code>.\r
  * </p>\r
@@ -46,12 +51,10 @@ abstract public class EditorGroupedComposite extends GroupedComposite {
        \r
        protected TextViewer textViewer;\r
        protected TableWrapLayout layout;\r
-       \r
-       ISelectionWrapper selectionWrapper;\r
-       \r
+       private ISelectionWrapper selectionWrapper;\r
        private Label draggableLabel;\r
-\r
        protected IManagedForm managedForm;\r
+       private Taxon taxon;\r
        \r
        /**\r
         * @param parent\r
@@ -61,6 +64,11 @@ abstract public class EditorGroupedComposite extends GroupedComposite {
                super(parent);\r
                \r
                this.managedForm = managedForm;\r
+               \r
+               Object formData = managedForm.getForm().getBody().getData();\r
+               Assert.isTrue(formData instanceof Taxon, \r
+                               "Managed form must have a Taxon in its data field.");\r
+               taxon = (Taxon) formData;\r
        }\r
 \r
        /**\r
@@ -100,6 +108,10 @@ abstract public class EditorGroupedComposite extends GroupedComposite {
                setDraggableControl(draggableLabel);\r
        }\r
        \r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
+       \r
        /**\r
         * @return\r
         */\r
index f056604772dda5bb560e76691d07ae5e615f71d5..d014c10823d342984847929721284e1334053232 100644 (file)
@@ -22,12 +22,12 @@ import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.forms.widgets.TableWrapData;\r
 \r
 import eu.etaxonomy.cdm.model.common.Language;\r
-import eu.etaxonomy.cdm.model.common.LanguageString;\r
-import eu.etaxonomy.cdm.model.common.MultilanguageText;\r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.actions.ui.description.DeleteElementCompositeAction;\r
 import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
 import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
 import eu.etaxonomy.taxeditor.editor.LineWrapSupport;\r
@@ -120,7 +120,7 @@ public class DescriptionElementComposite extends EditorGroupedComposite {
                \r
                createMenu();\r
 \r
-//             managedForm.getForm().layout();\r
+               managedForm.getForm().getBody().layout();\r
        }\r
 \r
        /**\r
@@ -167,7 +167,6 @@ public class DescriptionElementComposite extends EditorGroupedComposite {
                                \r
                                setDirty(true);\r
                        }\r
-                       \r
                });\r
        }\r
 \r
index 17c05161d5e254e4ed695cc452e9b4d97ce326e9..bf33c57a6f2d4c1e8821d41d6680e5217752f006 100644 (file)
@@ -107,9 +107,10 @@ public class DescriptionLabelComposite extends EditorGroupedComposite {
                                }\r
                        }\r
                });\r
-               featuresMenu.add(new Action() {\r
-                       \r
-               });\r
+               \r
+               // Important: add an empty action. Otherwise, when the main menu sees that\r
+               //      there are no actions in the submenu, it will not be shown\r
+               featuresMenu.add(new Action() {});\r
 \r
                ContextMenu contextMenu = createContextMenu();\r
                contextMenu.addSubmenu(featuresMenu);\r
index bc9330e686310dc89802583d75da4a763aaf7003..4cc9d4963fb7d0a95d3c6cf120a57eb0c9a6eaf8 100644 (file)
@@ -24,7 +24,6 @@ import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 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.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
@@ -419,35 +418,6 @@ public class NameComposite extends EditorGroupedComposite {
                contextMenu.addAction(deleteMisappliedNameAction);\r
        }\r
 \r
-       /**\r
-        * The hierarchy of the DescriptionElementComposite should always be:\r
-        * <p>\r
-        * --------> DescriptionElementComposite.getData() -> Taxon or Synonym\r
-        * <p>\r
-        * --------> DescriptionElementComposite.getParent().getData() -> HomotypicalGroup or <br>\r
-        * -------->\r
-        * DescriptionElementComposite.getParent().getData(ITaxEditorConstants.MISAPPLIED_NAME) !=\r
-        * null\r
-        * <p>\r
-        * --------> DescriptionElementComposite.getParent().getParent().getData() -> Taxon\r
-        * <p>\r
-        * An error will be returned if this is not the case.\r
-        * \r
-        * @return\r
-        */\r
-       private Taxon getTaxon() {\r
-               Composite parent = getParent();\r
-               Composite grandParent = parent.getParent();\r
-               if (grandParent != null) {\r
-                       Object parentData = grandParent.getData();\r
-                       if (parentData instanceof Taxon) {\r
-                               return (Taxon) parentData;\r
-                       }\r
-               }\r
-               throw new IllegalArgumentException(\r
-                               "The parent of the DescriptionElementComposite's parent does not have a Taxon in its data field as required.");\r
-       }\r
-\r
        public boolean setParent(Composite parent) {\r
 \r
                if (super.setParent(parent)) {\r
index 1f15020d5d911b9252ce6254417950cc3cecefca..72fc43c6f0c7edbce7c3e1929e3882049d91acac 100644 (file)
@@ -11,12 +11,16 @@ package eu.etaxonomy.taxeditor.model;
 \r
 import java.util.HashSet;\r
 import java.util.Set;\r
+import java.util.SortedSet;\r
 \r
 import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
 import eu.etaxonomy.cdm.api.service.INameService;\r
 import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
+import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.NameRelationship;\r
 import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
@@ -47,7 +51,10 @@ import eu.etaxonomy.taxeditor.UiUtil;
 public class CdmUtil {\r
        private static final Logger logger = Logger.getLogger(CdmUtil.class);\r
 \r
-       static INonViralNameParser nonViralNameParser;\r
+       private static INonViralNameParser nonViralNameParser;\r
+       \r
+       private static TermVocabulary<Feature> features;\r
+       private static SortedSet<Rank> ranks;\r
 \r
        /**\r
         * Checks whether synonym's name is the basionym for ALL names \r
@@ -321,6 +328,22 @@ public class CdmUtil {
                return TaxEditorPlugin.getDefault().getDescriptionService();\r
        }\r
        \r
+       public static TermVocabulary<Feature> getFeatures() {\r
+               if (features == null) {\r
+                       features = CdmUtil.getDescriptionService().\r
+                                       getDefaultFeatureVocabulary();\r
+               }\r
+               return features;\r
+       }\r
+       \r
+       public static SortedSet<Rank> getRanks() {\r
+               if (ranks == null) {\r
+                       OrderedTermVocabulary<Rank> rankVocabulary = TaxEditorPlugin.getDefault().getRankVocabulary();\r
+                       ranks = rankVocabulary.getOrderedTerms(null);\r
+               }\r
+               return ranks;\r
+       }\r
+       \r
        /**\r
         * @param searchText\r
         * @param taxon\r
index dcde873a55c57ada02ef8f3068d1ea82f21d0be8..54edfcda7759fc5cfc7d3a422332de1a68366a12 100644 (file)
@@ -60,8 +60,8 @@ public class FeaturePreferences extends PreferencePage implements
                gridLayout.numColumns = 3;\r
                container.setLayout(gridLayout);\r
 \r
-               TermVocabulary<Feature> features = CdmUtil.getDescriptionService().\r
-                               getDefaultFeatureVocabulary();\r
+               TermVocabulary<Feature> features = CdmUtil.getFeatures();\r
+               \r
                for (Feature feature : features) {\r
                                                \r
                        Button button = new Button(container, SWT.CHECK);\r
index 0a0c2b712ac745407307e08ec61f7bd6e27e8ecd..e7b4eee9780f6cdaf56cd43fcaafb8c16e11fe63 100644 (file)
@@ -72,7 +72,12 @@ public class NomenclaturalCodePreferences extends PreferencePage implements
                        }\r
                });\r
                \r
-               setButton(getPreferenceStore().getString(ITaxEditorConstants.CODE_PREFERENCE));         \r
+               preferredCode = getPreferenceStore().getString(ITaxEditorConstants.CODE_PREFERENCE);\r
+               if (preferredCode == null) {\r
+                       getPreferenceStore().setValue(\r
+                                       ITaxEditorConstants.CODE_PREFERENCE, ITaxEditorConstants.DEFAULT_CODE_PREFERENCE);\r
+               }\r
+               setButton(preferredCode);               \r
                \r
                return container;\r
        }\r
@@ -89,8 +94,8 @@ public class NomenclaturalCodePreferences extends PreferencePage implements
        }\r
        \r
        public boolean performOk() {\r
-               TaxEditorPlugin.getDefault().getPreferenceStore().\r
-                               setValue(ITaxEditorConstants.CODE_PREFERENCE, preferredCode);\r
+               getPreferenceStore().setValue(\r
+                               ITaxEditorConstants.CODE_PREFERENCE, preferredCode);\r
                return true;\r
        }\r
        \r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/RankMenuPreferences.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/RankMenuPreferences.java
new file mode 100644 (file)
index 0000000..14dc5b7
--- /dev/null
@@ -0,0 +1,113 @@
+/**\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
+package eu.etaxonomy.taxeditor.preference;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.SortedSet;\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.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchPreferencePage;\r
+\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * Allows the user to choose which <code>Rank</code>s to display in the \r
+ * <code>PropertySheet</code> drop-down menu for <code>TaxonNameBase</code>.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 17.09.2008\r
+ * @version 1.0\r
+ */\r
+public class RankMenuPreferences extends PreferencePage implements\r
+               IWorkbenchPreferencePage {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(RankMenuPreferences.class);\r
+\r
+       public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.preferences.ranks";\r
+       \r
+       private Map<Rank, Button> rankButtons;\r
+\r
+       public RankMenuPreferences() {\r
+               super();\r
+               setDescription("Choose which ranks to display in the property sheet drop-down menu.");\r
+       }\r
+\r
+\r
+       /**\r
+        * Create contents of the preference page\r
+        * @param parent\r
+        */\r
+       @Override\r
+       public Control createContents(Composite parent) {\r
+\r
+               rankButtons = new HashMap<Rank, Button>();\r
+               \r
+               Composite container = new Composite(parent, SWT.NULL);\r
+               final GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 3;\r
+               container.setLayout(gridLayout);\r
+\r
+               SortedSet<Rank> ranks = CdmUtil.getRanks();\r
+               \r
+               for (Rank rank : ranks) {\r
+                                               \r
+                       Button button = new Button(container, SWT.CHECK);\r
+                       button.setText(rank.getLabel());\r
+                       rankButtons.put(rank, button);\r
+                       \r
+                       if (UiUtil.getRankPreference(rank)) {\r
+                               button.setSelection(true);\r
+                       }\r
+               }\r
+               \r
+               return container;\r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)\r
+        */\r
+       public void init(IWorkbench workbench) {\r
+               setPreferenceStore(UiUtil.getPrefStore());\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.preference.PreferencePage#performDefaults()\r
+        */\r
+       protected void performDefaults() {\r
+               \r
+               // Set all buttons to show feature\r
+               for (Button button : rankButtons.values()) {\r
+                       button.setSelection(true);\r
+               }\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.preference.PreferencePage#performOk()\r
+        */\r
+       public boolean performOk() {\r
+               \r
+               for (Rank rank : rankButtons.keySet()) {\r
+                       Button button = rankButtons.get(rank);\r
+                       UiUtil.setRankPreference(rank, button.getSelection());\r
+               }\r
+               \r
+               return true;\r
+       }\r
+}\r
index c666df28a6e90926fb8d840005fb85b3d0096614..e817777fdc0cce54f610761608f5da37707bcdb4 100644 (file)
@@ -25,7 +25,6 @@ import org.eclipse.ui.views.properties.PropertyDescriptor;
 import org.eclipse.ui.views.properties.TextPropertyDescriptor;\r
 \r
 import eu.etaxonomy.cdm.model.common.Annotation;\r
-import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
@@ -34,6 +33,7 @@ import eu.etaxonomy.cdm.model.name.Rank;
 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
 import eu.etaxonomy.taxeditor.propertysheet.AnnotationPropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.AnnotationsPropertyDescriptor;\r
 import eu.etaxonomy.taxeditor.propertysheet.MarkersPropertySource;\r
@@ -113,14 +113,14 @@ public class NonViralNamePropertySource implements IPropertySource {
        // ***********************************************************\r
        //              RANKS\r
        // ***********************************************************\r
-       static OrderedTermVocabulary<Rank> rankVocabulary = TaxEditorPlugin.getDefault().getRankVocabulary();\r
-       static Rank[] ranks = null;\r
-       static String[] P_RANK_MENU = null;\r
-       private static void populateRanks() {\r
+       Rank[] ranks = null;\r
+       String[] P_RANK_MENU = null;\r
+       private void populateRanks() {\r
                \r
                // Get terms from rank vocabulary\r
                List<Rank> ranksList = new ArrayList<Rank>();\r
-               ranksList.addAll(rankVocabulary.getOrderedTerms(null));\r
+               ranksList.addAll(UiUtil.getPreferredRanks());\r
+               \r
                // Populate ranks menu labels \r
                List<String> ranksMenuList = new ArrayList<String>();\r
                for (Rank rank : ranksList) {\r