Name editing now on a centralized managed form. Dragging and dropping, border drawing...
authorp.ciardelli <p.ciardelli@localhost>
Wed, 16 Apr 2008 14:19:40 +0000 (14:19 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Wed, 16 Apr 2008 14:19:40 +0000 (14:19 +0000)
12 files changed:
eclipseprojects/eu.etaxonomy.taxeditor/META-INF/MANIFEST.MF
eclipseprojects/eu.etaxonomy.taxeditor/plugin.xml
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Activator.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/ActionAddSynonymToTaxon.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/LeftPane.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/nameviewersupport/GroupComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameViewerVerifyListener.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/propertysheetsupport/BotanicalNamePropertySource.java

index 9a4b489f15b5e444e58c63b884733bd091265156..6db079defe57f8a6bd1d51e4f4c484c30020d422 100644 (file)
@@ -1,6 +1,6 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Editor Prototype 2
+Bundle-Name: EDIT Desktop Taxonomic Editor
 Bundle-SymbolicName: eu.etaxonomy.taxeditor;singleton:=true
 Bundle-Version: 1.0.0
 Bundle-Activator: eu.etaxonomy.taxeditor.Activator
@@ -13,7 +13,8 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.ui.forms,
  org.eclipse.core.resources,
  org.eclipse.ui.views,
- eu.etaxonomy.cdmLibrary
+ eu.etaxonomy.cdmLibrary,
+ org.eclipse.pde.source
 Eclipse-LazyStart: true
 Export-Package: com.swtdesigner,
  eu.etaxonomy.taxeditor,
index cde976140d9eae065305583291bc36ea64ffadf4..4823f74af967f9f223b47284de828348d26bce8c 100644 (file)
             class="eu.etaxonomy.taxeditor.view.NameEditorViewOld"\r
             icon="icons/edit_16x16.gif"\r
             id="eu.etaxonomy.taxeditor.view.nameeditorview"\r
-            name="New EditorPart">\r
+            name="Name Editor">\r
       </editor>\r
       <editor\r
             class="eu.etaxonomy.taxeditor.view.EmptyEditorView"\r
+            icon="icons/edit_16x16.gif"\r
             id="eu.etaxonomy.taxeditor.view.EmptyEditorView"\r
             name="New EditorPart">\r
       </editor>\r
-      <editor\r
-            class="eu.etaxonomy.taxeditor.view.Testeroo"\r
-            id="eu.etaxonomy.taxeditor.view.Testeroo"\r
-            name="New EditorPart">\r
-      </editor>\r
    </extension>\r
    <extension\r
          id="product"\r
index 0d31c6d9d23e32feb78f161e5759a628a8693838..95d5967c8668d1e303d7a662ca772130d2c0b8d8 100644 (file)
@@ -2,6 +2,7 @@ package eu.etaxonomy.taxeditor;
 \r
 import java.net.URL;\r
 import java.util.ResourceBundle;\r
+import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.core.databinding.observable.list.WritableList;\r
@@ -16,10 +17,13 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;\r
 \r
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
-import eu.etaxonomy.cdm.api.service.INameService;\r
+import eu.etaxonomy.cdm.database.CdmDataSource;\r
+import eu.etaxonomy.cdm.database.DataSourceNotFoundException;\r
+import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
 import eu.etaxonomy.cdm.model.agent.Person;\r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 \r
 /**\r
@@ -40,53 +44,74 @@ public class Activator extends AbstractUIPlugin {
         */\r
        public Activator() {\r
                final Logger logger = Logger.getLogger(Activator.class.getName());\r
+//             logger.error("Start");\r
                \r
-               logger.error("Start");\r
-//             CdmApplicationController.toDelete();\r
-//             HBM2DDL hbm2dll = CdmDataSource.HBM2DDL.CREATE;\r
-//             cdmApp = new CdmApplicationController(hbm2dll);\r
-               cdmApp = new CdmApplicationController();\r
-               INameService nameService = cdmApp.getNameService();\r
+               boolean initDatastore = false;\r
+               if (initDatastore)\r
+                       initDatastore();\r
+               else {\r
+                       DbSchemaValidation dbSchemaValidation = DbSchemaValidation.VALIDATE;\r
+//                     HBM2DDL hbm2dll = CdmDataSource.HBM2DDL.VALIDATE;\r
+                       try {\r
+                               cdmApp = CdmApplicationController.NewInstance(dbSchemaValidation);\r
+                       } catch (DataSourceNotFoundException e) {\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
+                       }\r
+               }\r
+               \r
+       }\r
+\r
+       void initDatastore() {\r
+               DbSchemaValidation dbSchemaValidation = DbSchemaValidation.CREATE;\r
+               try {\r
+                       cdmApp = CdmApplicationController.NewInstance(dbSchemaValidation);\r
+               } catch (DataSourceNotFoundException e) {\r
+                       // TODO Auto-generated catch block\r
+                       e.printStackTrace();\r
+               }\r
+//             cdmApp = new CdmApplicationController();\r
+//             INameService nameService = cdmApp.getNameService();\r
                \r
-//             BotanicalName botanicalName = new BotanicalName(Rank.GENUS());\r
-//             botanicalName.setTitleCache("Hieracium L.");\r
-////           botanicalName.setGenusOrUninomial("Hieracium");\r
+               BotanicalName botanicalName = new BotanicalName(Rank.GENUS());\r
+               botanicalName.setTitleCache("Hieracium L.");\r
+               botanicalName.setGenusOrUninomial("Hieracium");\r
 //             botanicalName.setUninomial("Hieracium");\r
-//             botanicalName.setCombinationAuthorTeam(new Person());\r
-//             botanicalName.getCombinationAuthorTeam().setTitleCache("L.");\r
-//             Taxon genusTaxon = new Taxon();\r
-//             genusTaxon.setName(botanicalName);\r
-//             genusTaxon.setSec(null);\r
-//                             \r
-//             BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
-//             botSpecies.setTitleCache("Hieracium asturianum Pau");\r
-////           botSpecies.setGenusOrUninomial("Hieracium");\r
+               botanicalName.setCombinationAuthorTeam(new Person());\r
+               botanicalName.getCombinationAuthorTeam().setTitleCache("L.");\r
+               Taxon genusTaxon = new Taxon();\r
+               genusTaxon.setName(botanicalName);\r
+               genusTaxon.setSec(null);\r
+                               \r
+               BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
+               botSpecies.setTitleCache("Hieracium asturianum Pau");\r
+               botSpecies.setGenusOrUninomial("Hieracium");\r
 //             botSpecies.setUninomial("Hieracium");\r
-//             botSpecies.setSpecificEpithet("asturianum");\r
-//             botSpecies.setCombinationAuthorTeam(new Person());\r
-//             botSpecies.getCombinationAuthorTeam().setTitleCache("Pau");\r
-//             Taxon childTaxon = new Taxon();\r
-//             childTaxon.setName(botSpecies);\r
-//             childTaxon.setSec(null);\r
-//             childTaxon.setTaxonomicParent(genusTaxon, null, null);\r
-//\r
-//             BotanicalName botSpecies2= new BotanicalName(Rank.SPECIES());\r
-//             botSpecies2.setTitleCache("Hieracium wolffii Zahn");\r
-////           botSpecies2.setGenusOrUninomial("Hieracium");\r
+               botSpecies.setSpecificEpithet("asturianum");\r
+               botSpecies.setCombinationAuthorTeam(new Person());\r
+               botSpecies.getCombinationAuthorTeam().setTitleCache("Pau");\r
+               Taxon childTaxon = new Taxon();\r
+               childTaxon.setName(botSpecies);\r
+               childTaxon.setSec(null);\r
+               childTaxon.setTaxonomicParent(genusTaxon, null, null);\r
+\r
+               BotanicalName botSpecies2= new BotanicalName(Rank.SPECIES());\r
+               botSpecies2.setTitleCache("Hieracium wolffii Zahn");\r
+               botSpecies2.setGenusOrUninomial("Hieracium");\r
 //             botSpecies2.setUninomial("Hieracium");\r
-//             botSpecies2.setSpecificEpithet("wolffii");\r
-//             botSpecies2.setCombinationAuthorTeam(new Person());\r
-//             botSpecies2.getCombinationAuthorTeam().setTitleCache("Zahn");\r
-//             Taxon childTaxon2 = new Taxon();\r
-//             childTaxon2.setName(botSpecies2);\r
-//             childTaxon2.setSec(null);\r
-//             childTaxon2.setTaxonomicParent(genusTaxon, null, null);\r
-//             \r
-//             cdmApp.getTaxonService().saveTaxon(genusTaxon);\r
-//             \r
+               botSpecies2.setSpecificEpithet("wolffii");\r
+               botSpecies2.setCombinationAuthorTeam(new Person());\r
+               botSpecies2.getCombinationAuthorTeam().setTitleCache("Zahn");\r
+               Taxon childTaxon2 = new Taxon();\r
+               childTaxon2.setName(botSpecies2);\r
+               childTaxon2.setSec(null);\r
+               childTaxon2.setTaxonomicParent(genusTaxon, null, null);\r
+               \r
+               cdmApp.getTaxonService().saveTaxon(genusTaxon);\r
+               \r
 //             System.exit(-1);                \r
        }\r
-\r
+       \r
        /*\r
         * (non-Javadoc)\r
         * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)\r
@@ -120,9 +145,6 @@ public class Activator extends AbstractUIPlugin {
        /**\r
         * All CDM services are called via the application controller\r
         */\r
-       \r
-//     HBM2DDL hbm2dll = CdmDataSource.HBM2DDL.VALIDATE;\r
-//     private CdmApplicationController cdmApp = new CdmApplicationController(hbm2dll);\r
        private CdmApplicationController cdmApp;\r
        \r
        public CdmApplicationController getCdmApp() {\r
@@ -144,7 +166,8 @@ public class Activator extends AbstractUIPlugin {
        public WritableList getObservableTaxonTreeList() {\r
                if (observableTaxonTreeList == null) {\r
                        observableTaxonTreeList = new WritableList();\r
-                       observableTaxonTreeList.addAll(cdmApp.getTaxonService().getRootTaxa(null));\r
+                       ReferenceBase sec = cdmApp.getReferenceService().getReferenceByUuid(UUID.fromString("f3593c18-a8d2-4e51-bdad-0befbf8fb2d1"));\r
+                       observableTaxonTreeList.addAll(cdmApp.getTaxonService().getRootTaxa(sec));\r
                }\r
                return observableTaxonTreeList;\r
        }\r
@@ -221,25 +244,13 @@ public class Activator extends AbstractUIPlugin {
        // Resource bundle.\r
        private ResourceBundle resourceBundle;\r
        private FormColors formColors;\r
-       public static final String IMG_FORM_BG = "formBg"; //$NON-NLS-1$\r
-       public static final String IMG_LARGE = "large"; //$NON-NLS-1$\r
-       public static final String IMG_HORIZONTAL = "horizontal"; //$NON-NLS-1$\r
-       public static final String IMG_VERTICAL = "vertical"; //$NON-NLS-1$\r
-       public static final String IMG_SAMPLE = "sample"; //$NON-NLS-1$\r
-       public static final String IMG_WIZBAN = "wizban"; //$NON-NLS-1$\r
-       public static final String IMG_LINKTO_HELP = "linkto_help"; //$NON-NLS-1$\r
-       public static final String IMG_HELP_TOPIC = "help_topic"; //$NON-NLS-1$\r
-       public static final String IMG_CLOSE = "close"; //$NON-NLS-1$   \r
+       public static final String HOMOTYPIC_SYN = "homotypic_syn";\r
+       public static final String HETEROTYPIC_SYN = "heterotypic_syn";\r
+       public static final String DB = "db";\r
        protected void initializeImageRegistry(ImageRegistry registry) {\r
-               registerImage(registry, IMG_FORM_BG, "form_banner.gif"); //$NON-NLS-1$\r
-               registerImage(registry, IMG_LARGE, "large_image.gif"); //$NON-NLS-1$\r
-               registerImage(registry, IMG_HORIZONTAL, "th_horizontal.gif"); //$NON-NLS-1$\r
-               registerImage(registry, IMG_VERTICAL, "th_vertical.gif"); //$NON-NLS-1$\r
-               registerImage(registry, IMG_SAMPLE, "sample.gif"); //$NON-NLS-1$\r
-               registerImage(registry, IMG_WIZBAN, "newprj_wiz.gif"); //$NON-NLS-1$\r
-               registerImage(registry, IMG_LINKTO_HELP, "linkto_help.gif"); //$NON-NLS-1$\r
-               registerImage(registry, IMG_HELP_TOPIC, "help_topic.gif"); //$NON-NLS-1$\r
-               registerImage(registry, IMG_CLOSE, "close_view.gif"); //$NON-NLS-1$\r
+               registerImage(registry, HOMOTYPIC_SYN, "homosyn_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, HETEROTYPIC_SYN, "heterosyn_no_bg.gif"); //$NON-NLS-1$\r
+               registerImage(registry, DB, "db.gif"); //$NON-NLS-1$\r
        }\r
        private void registerImage(ImageRegistry registry, String key,\r
                        String fileName) {\r
index da64b71ba478ecfc28c74b18b3307db49a774a3c..b2ab1ab62d924b0afa6ef0f76b7240bfb9fbd73b 100644 (file)
@@ -25,6 +25,7 @@ public class ActionAddSynonymToTaxon extends Action {
        }\r
 \r
        public ActionAddSynonymToTaxon(Taxon taxon, String synonymNameCache) {\r
+                               \r
                this.taxon = taxon;\r
                this.synonym = new Synonym();\r
                \r
@@ -43,7 +44,7 @@ public class ActionAddSynonymToTaxon extends Action {
        public void run() {\r
 //             taxon.addSynonym(synonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
 //             taxon.removeSynonymRelation(synonym.getSynonymRelations()[0]);\r
-                               \r
+               \r
                TesterooWritableSet.getInstance().add(synonym);\r
        }\r
 }
\ No newline at end of file
index cef8eda53e01cafff3d96d0a9e01537ef77244d6..788fe75e74eb488a609d7496e4b63a3439587d76 100644 (file)
@@ -36,7 +36,6 @@ import org.eclipse.ui.forms.widgets.ColumnLayout;
 import org.eclipse.ui.forms.widgets.FormToolkit;\r
 import org.eclipse.ui.forms.widgets.ScrolledForm;\r
 import org.eclipse.ui.forms.widgets.Section;\r
-import org.eclipse.ui.forms.widgets.SharedScrolledComposite;\r
 import org.eclipse.ui.part.ViewPart;\r
 \r
 import com.swtdesigner.ResourceManager;\r
index b5c99c219c923b261fe8be7e1a6ba03cc7df7ec5..e657625f8fb280e11c980a41d96f46c6cc079e79 100644 (file)
@@ -2,6 +2,7 @@ package eu.etaxonomy.taxeditor.view;
 \r
 import org.eclipse.core.databinding.observable.set.ISetChangeListener;\r
 import org.eclipse.core.databinding.observable.set.SetChangeEvent;\r
+import org.eclipse.core.runtime.IAdaptable;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.core.runtime.ListenerList;\r
 import org.eclipse.jface.viewers.ISelection;\r
@@ -9,32 +10,38 @@ import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ISelectionProvider;\r
 import org.eclipse.jface.viewers.SelectionChangedEvent;\r
 import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.jface.window.Window;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.dnd.DND;\r
 import org.eclipse.swt.dnd.DropTarget;\r
 import org.eclipse.swt.dnd.DropTargetAdapter;\r
 import org.eclipse.swt.dnd.DropTargetEvent;\r
 import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.events.DragDetectEvent;\r
+import org.eclipse.swt.events.DragDetectListener;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Listener;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorSite;\r
 import org.eclipse.ui.PartInitException;\r
 import org.eclipse.ui.forms.IManagedForm;\r
 import org.eclipse.ui.forms.ManagedForm;\r
-import org.eclipse.ui.forms.widgets.ColumnLayout;\r
 import org.eclipse.ui.forms.widgets.FormToolkit;\r
 import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
 import org.eclipse.ui.part.EditorPart;\r
 import org.eclipse.ui.views.properties.IPropertySheetPage;\r
 import org.eclipse.ui.views.properties.PropertySheetPage;\r
 \r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+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.controller.TaxonTransfer;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
@@ -42,7 +49,7 @@ import eu.etaxonomy.taxeditor.view.nameviewersupport.TesterooWritableSet;
 import eu.etaxonomy.taxeditor.view.propertysheetsupport.BotanicalNamePropertySource;\r
 import eu.etaxonomy.taxeditor.view.propertysheetsupport.CustomSortPropertySheetEntry;\r
 \r
-public class NameEditorView extends EditorPart {\r
+public class NameEditorView extends EditorPart implements IAdaptable {\r
 \r
        private IManagedForm managedForm;\r
        private Taxon taxon;\r
@@ -150,70 +157,27 @@ public class NameEditorView extends EditorPart {
        public void createPartControl(final Composite composite) {\r
                                \r
                // We use a ManagedForm to make drawing and removal of borders easier\r
-//             this.managedForm = new ManagedForm(composite) {\r
-//                     public ScrolledForm createScrolledForm(Composite parent) {\r
-//                             ScrolledForm form = new ScrolledForm(parent, SWT.V_SCROLL\r
-//                                             | SWT.H_SCROLL | orientation);\r
-//                             form.setExpandHorizontal(true);\r
-//                             form.setExpandVertical(true);\r
-//                             form.setBackground(colors.getBackground());\r
-//                             form.setForeground(colors.getColor(IFormColors.TITLE));\r
-//                             form.setFont(JFaceResources.getHeaderFont());\r
-//                             return form;\r
-//                     }\r
-//             };\r
-                               \r
                this.managedForm = new ManagedForm(composite);\r
                this.toolkit = managedForm.getToolkit();\r
                this.scrolledForm = managedForm.getForm();\r
-               this.scrolledForm.setExpandHorizontal(false);\r
                this.parent = scrolledForm.getBody();\r
                \r
-               parent = composite;\r
-               \r
-               ColumnLayout layout = new ColumnLayout();\r
-               layout.topMargin = 0;\r
-               layout.bottomMargin = 5;\r
-               layout.leftMargin = 10;\r
-               layout.rightMargin = 10;\r
-               layout.horizontalSpacing = 10;\r
-               layout.verticalSpacing = 10;\r
-               layout.maxNumColumns = 4;\r
-               layout.minNumColumns = 1;               \r
-               this.parent.setLayout(layout);\r
-               \r
-//             this.toolkit = new FormToolkit(composite.getDisplay());\r
-//             this.scrolledForm = new ScrolledForm(parent, SWT.V_SCROLL\r
-//                             | Window.getDefaultOrientation());\r
-//             this.managedForm = new ManagedForm(toolkit, scrolledForm);\r
-//             this.parent = scrolledForm.getBody();           \r
+//             parent = composite;\r
                                \r
-               parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-//             parent.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
-               \r
-//             GridLayout gridLayout = new GridLayout();\r
-//             gridLayout.verticalSpacing = 10;\r
-//             parent.setLayout(gridLayout);           \r
-               parent.setRedraw(true);\r
-                                               \r
-//             clickText = "Click here to start entering accepted name or enter its individual fields in the property sheet to the right";\r
-//             NameViewer_ acceptedNameViewer = new AcceptedNameViewer(taxon, bindingContext, freeTextComposite);\r
-//             acceptedNameViewer.setBindingContext(bindingContext);\r
-//             acceptedNameViewer.configure(new NameViewerConfig());\r
+               this.parent.setLayout(new TableWrapLayout());\r
                                \r
-               GroupComposite homoGroupComposite = new GroupComposite(parent);\r
-               homoGroupComposite.setTaxon(taxon);\r
-               homoGroupComposite.setNameEditorView(this);\r
-               \r
-               new NameComposite(homoGroupComposite, taxon).setNameEditorView(this);\r
+               parent.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));             \r
+               parent.setRedraw(true);\r
                        \r
+               createHomotypicalGroup(taxon);\r
+               \r
                // TODO replace this with real set of taxon's synonyms\r
                TesterooWritableSet.getInstance().addSetChangeListener\r
                (new ISetChangeListener() {\r
                        public void handleSetChange(SetChangeEvent event) {\r
                                for ( Object addition: event.diff.getAdditions()) {\r
                                        if (addition instanceof Synonym)\r
-                                               createHeterotypicalGroup((Synonym) addition);\r
+                                               createHomotypicalGroup((Synonym) addition);\r
                                }\r
                                parent.layout();\r
 //                             NameEditorView.this.managedForm.getForm().reflow(true);\r
@@ -229,29 +193,53 @@ public class NameEditorView extends EditorPart {
                target.addDropListener(new DropTargetAdapter() {\r
                        \r
                        public void drop(DropTargetEvent event) {\r
-                               Synonym synonym = (Synonym) event.data; \r
-                               createHeterotypicalGroup(synonym);\r
+                               Synonym synonym = (Synonym) event.data;\r
+                               createHomotypicalGroup(synonym);\r
                        }               \r
                });\r
        }\r
 \r
-       private void createHeterotypicalGroup(Synonym heterosyn) {\r
+       private void createHomotypicalGroup(TaxonBase taxonBase) {\r
+               GroupComposite homoGroupComposite = new GroupComposite(parent, toolkit);\r
+               homoGroupComposite.setTaxon(taxon);\r
                \r
-               GroupComposite heteroGroupComposite = new GroupComposite(parent);\r
-               heteroGroupComposite.setTaxon(taxon);\r
-               heteroGroupComposite.setNameEditorView(this);\r
+               NameComposite nameComposite;\r
+               if (taxonBase instanceof Taxon)\r
+                       nameComposite = new NameComposite(homoGroupComposite, (Taxon) taxonBase);\r
+               else\r
+                       nameComposite = new NameComposite(homoGroupComposite, (Synonym) taxonBase, taxon);\r
+\r
+               // Put newly created interface elements onto managed form\r
+               toolkit.adapt(homoGroupComposite);\r
+               toolkit.adapt(nameComposite);\r
+               toolkit.adapt(nameComposite.getTextWidget());           \r
                \r
-               NameComposite nameComposite = new NameComposite(heteroGroupComposite, heterosyn, taxon);\r
-               nameComposite.setNameEditorView(this);\r
-               nameComposite.setFocus();\r
-//             nameComposite.addListener(SWT.Selection, listener)\r
+               homoGroupComposite.addListener(SWT.FocusIn, new SelectionAndDrawBorderListener(parent));\r
+               homoGroupComposite.addListener(SWT.FocusOut, new SelectionAndDrawBorderListener(parent));\r
+               nameComposite.getTextWidget().addListener(SWT.FocusIn, new SelectionAndDrawBorderListener(nameComposite));\r
+               nameComposite.getTextWidget().addListener(SWT.FocusOut, new SelectionAndDrawBorderListener(nameComposite));\r
+               nameComposite.getTextWidget().addListener(SWT.Selection, new Listener() {\r
+                       @Override\r
+                       public void handleEvent(Event event) {\r
+                               setSelection((BotanicalName) event.data);\r
+                       }\r
+               });\r
+               // Redraw form with every change in case text area has, for instance, word wrapped\r
+               nameComposite.getTextWidget().addListener(SWT.Modify, new Listener() {\r
+                       @Override\r
+                       public void handleEvent(Event event) {\r
+                               scrolledForm.reflow(false);\r
+                       }\r
+               });\r
+                               \r
+               scrolledForm.reflow(true); // check whether this is necessary\r
+               \r
+               nameComposite.getTextWidget().setFocus();\r
+       }\r
                \r
-       }               \r
-       \r
        @Override\r
        public void setFocus() {\r
                // TODO Auto-generated method stub\r
-               \r
        }\r
 \r
        public IManagedForm getManagedForm() {\r
@@ -276,8 +264,31 @@ public class NameEditorView extends EditorPart {
        }\r
 \r
        public void setSelection(BotanicalName name) {\r
-               \r
                getSite().getSelectionProvider().setSelection\r
                                (new StructuredSelection(new BotanicalNamePropertySource(name)));;\r
        }\r
+       \r
+       class SelectionAndDrawBorderListener implements Listener {\r
+\r
+               private Composite parent;\r
+\r
+               SelectionAndDrawBorderListener(Composite parent) {\r
+                       super();\r
+                       this.parent = parent;\r
+               }\r
+               \r
+               @Override\r
+               public void handleEvent(Event event) {\r
+                       \r
+                       // To cut down on flickering, only draw border as necessary\r
+                       String border = (event.type == SWT.FocusIn ? FormToolkit.TEXT_BORDER : null);\r
+                       if (event.widget.getData(FormToolkit.KEY_DRAW_BORDER).equals(border)) \r
+                               return;\r
+                       \r
+                       event.widget.setData(FormToolkit.KEY_DRAW_BORDER, border);\r
+                       toolkit.paintBordersFor(parent);\r
+                       scrolledForm.reflow(false);\r
+//                     managedForm.reflow(false);\r
+               }                                       \r
+       }\r
 }
\ No newline at end of file
index ceb1ae24a3d952821974e8c56e1474475e3ff203..43d575f4e488936969998997e86e3320eb6deade 100644 (file)
@@ -87,6 +87,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(Activator.getDefault(), "icons/db.gif"));\r
+               lblDbImg.setImage(Activator.getDefault().getImageRegistry().get(Activator.DB));\r
 \r
                final Menu menu = new Menu(lblDbImg);\r
                lblDbImg.setMenu(menu);\r
index bea29b207557380d3230368d3bd9447803331294..114dc1acc6396e1b5344a9f2cdbe75c388165cfa 100644 (file)
@@ -20,7 +20,7 @@ import eu.etaxonomy.taxeditor.view.nameviewersupport.WarningAnnotation;
 \r
 \r
 /**\r
- * SourceViewer implementation called by NameEditorViewOld.\r
+ * SourceViewer implementation called by NameComposite.\r
  *  \r
  * @author p.ciardelli\r
  *\r
index 2a50d4283355ae286700a384d2171b40cb7fa34d..9aa77b849469d36826b06a8a5981ab7a1ccfd188 100644 (file)
@@ -6,42 +6,35 @@ import org.eclipse.swt.dnd.DropTarget;
 import org.eclipse.swt.dnd.DropTargetAdapter;\r
 import org.eclipse.swt.dnd.DropTargetEvent;\r
 import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Listener;\r
-import org.eclipse.ui.forms.IManagedForm;\r
 import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
 \r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
-import eu.etaxonomy.taxeditor.view.NameEditorView;\r
 \r
 public class GroupComposite extends Composite {\r
        \r
        Taxon taxon;\r
        HomotypicalGroup homotypicalGroup;\r
        boolean acceptedGroup;\r
-       private NameEditorView nameEditor;\r
-       private IManagedForm managedForm;\r
        \r
        public void setTaxon(Taxon taxon) {\r
                this.taxon = taxon;\r
        }\r
        \r
-       public GroupComposite(Composite parent) {\r
+       public GroupComposite(Composite parent, final FormToolkit toolkit) {\r
                super(parent, SWT.NONE);\r
                \r
+//             this.toolkit = toolkit;\r
+               \r
                // Graphic layout of composite\r
-               GridLayout gridLayout = new GridLayout();\r
-               gridLayout.verticalSpacing = 0;\r
-               gridLayout.marginHeight = 3;\r
-               this.setLayout(gridLayout);\r
-               this.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+               this.setLayout(new TableWrapLayout());\r
                this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
                                \r
                // Drop functionality\r
@@ -52,11 +45,11 @@ public class GroupComposite extends Composite {
                target.addDropListener(new DropTargetAdapter() {\r
                                                \r
                        public void dragEnter(DropTargetEvent event) {\r
-                               showBorder();\r
+                               GroupComposite.this.notifyListeners(SWT.FocusIn, null);\r
                        }\r
                        \r
                        public void dragLeave(DropTargetEvent event) {\r
-                               hideBorder();\r
+                               GroupComposite.this.notifyListeners(SWT.FocusOut, null);\r
                        }\r
                        \r
                        public void drop(DropTargetEvent event) {\r
@@ -68,41 +61,10 @@ public class GroupComposite extends Composite {
                                                        event.getSource()).getControl();\r
                                \r
                                NameComposite nameComposite = new NameComposite(\r
-                                               dropTargetComposite, synonym, taxon);\r
-                               nameComposite.setNameEditorView(dropTargetComposite.getNameEditorView());\r
-                               nameComposite.addListener(SWT.Selection, new Listener() {\r
-\r
-                                       @Override\r
-                                       public void handleEvent(Event event) {\r
-                                               System.out.println("yo");\r
-                                       }\r
-                                       \r
-                               });\r
-                               \r
+                                               dropTargetComposite, synonym, taxon);                           \r
                        }\r
                });\r
        }\r
-       \r
-       protected void hideBorder() {\r
-               if (!(managedForm == null)) {\r
-                       this.setData(FormToolkit.KEY_DRAW_BORDER, null);\r
-                       managedForm.getToolkit().paintBordersFor(nameEditor.getComposite());\r
-                       managedForm.getForm().reflow(true);\r
-               }\r
-       }\r
-\r
-       protected void showBorder() {\r
-               if (!(managedForm == null)) {\r
-                       \r
-                       // To cut down on flickering, only draw border as necessary\r
-                       if (this.getData(FormToolkit.KEY_DRAW_BORDER) == FormToolkit.TEXT_BORDER) return;\r
-                       \r
-                       this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
-                       managedForm.getToolkit().paintBordersFor(nameEditor.getComposite());\r
-                       managedForm.getForm().reflow(true);\r
-               }\r
-       }\r
-       \r
        public HomotypicalGroup getHomotypicalGroup() {\r
                return homotypicalGroup;\r
        }\r
@@ -118,13 +80,4 @@ public class GroupComposite extends Composite {
        public void setAcceptedGroup(boolean acceptedGroup) {\r
                this.acceptedGroup = acceptedGroup;\r
        }\r
-\r
-       public void setNameEditorView(NameEditorView nameEditorView) {\r
-               this.nameEditor = nameEditorView;\r
-               this.managedForm = nameEditorView.getManagedForm();\r
-       }\r
-       \r
-       public NameEditorView getNameEditorView() {\r
-               return nameEditor;\r
-       }       \r
 }\r
index 874a25025123e98f42a3f48b8aeb519c0bccd4cc..a69f37f9127ab0ffa03cacfcb076ca2a5bbf6b59 100644 (file)
@@ -8,29 +8,27 @@ import org.eclipse.swt.dnd.DragSource;
 import org.eclipse.swt.dnd.DragSourceEvent;\r
 import org.eclipse.swt.dnd.DragSourceListener;\r
 import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.events.FocusAdapter;\r
 import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.events.FocusListener;\r
 import org.eclipse.swt.events.ModifyEvent;\r
 import org.eclipse.swt.events.ModifyListener;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Event;\r
 import org.eclipse.swt.widgets.Label;\r
 import org.eclipse.swt.widgets.Menu;\r
 import org.eclipse.swt.widgets.MenuItem;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
+import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
 \r
 import com.swtdesigner.SWTResourceManager;\r
 \r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\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.taxeditor.Activator;\r
 import eu.etaxonomy.taxeditor.controller.TaxonTransfer;\r
-import eu.etaxonomy.taxeditor.view.NameEditorView;\r
 import eu.etaxonomy.taxeditor.view.NameViewer;\r
 \r
 public class NameComposite extends Composite {\r
@@ -129,83 +127,65 @@ public class NameComposite extends Composite {
        public void createNameComposite() {\r
 \r
                Assert.isNotNull(taxon);\r
-                               \r
-               // Graphic layout of composite\r
-               GridLayout gridLayout = new GridLayout();\r
-               gridLayout.verticalSpacing = 0;\r
-               gridLayout.marginWidth = 5;\r
-               gridLayout.marginHeight = 5;\r
-               gridLayout.horizontalSpacing = 5;\r
-               gridLayout.numColumns = (compositeType == ACCEPTED? 1: 2);\r
-               this.setLayout(gridLayout);\r
-               this.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+                                               \r
+               this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
+               TableWrapLayout layout = new TableWrapLayout();\r
+               layout.numColumns = (compositeType == ACCEPTED? 1: 2);\r
+               this.setLayout(layout);\r
+               \r
                this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-               if (compositeType != ACCEPTED) {\r
-//                     relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/heterosyn_no_bg.gif"));    \r
-                       relationLabel = new Label(this, SWT.NONE);\r
-                       relationLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));                                     \r
+               if (compositeType != ACCEPTED) {        \r
+                       relationLabel = new Label(this, SWT.NONE);                                      \r
                        relationLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
                        \r
                        if (this.compositeType == HOMOTYPIC_SYNONYM)\r
-                               relationLabel.setImage(SWTResourceManager.getImage(NameComposite.class, "homosyn_no_bg.gif"));\r
-//                             relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/homosyn_no_bg.gif"));\r
+                               relationLabel.setImage(Activator.getDefault().getImageRegistry().get(Activator.HOMOTYPIC_SYN));\r
                        else\r
-                               relationLabel.setImage(SWTResourceManager.getImage(NameComposite.class, "heterosyn_no_bg.gif"));\r
-//                             relationLabel.setImage(ResourceManager.getPluginImage(Activator.getDefault(), "icons/heterosyn_no_bg.gif"));\r
+                               relationLabel.setImage(Activator.getDefault().getImageRegistry().get(Activator.HETEROTYPIC_SYN));\r
                }\r
                nameViewer = new NameViewer(this);      \r
-               nameViewer.getTextWidget().setLayoutData(\r
-                               new GridData(SWT.FILL, SWT.CENTER, true, false));\r
-               nameViewer.getTextWidget().setFont(\r
+               StyledText nameWidget = nameViewer.getTextWidget();\r
+               \r
+               nameWidget.addFocusListener(new FocusListener() {\r
+                       @Override\r
+                       public void focusGained(FocusEvent e) {\r
+                               Event event = new Event();\r
+                               event.data = getName();\r
+                               e.widget.notifyListeners(SWT.Selection, event);\r
+                       }\r
+\r
+                       @Override\r
+                       public void focusLost(FocusEvent e) {}                  \r
+               });\r
+               \r
+               nameWidget.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));           \r
+               nameWidget.setFont(\r
                                SWTResourceManager.getFont("Georgia", \r
                                                (compositeType == ACCEPTED? 12 : 10), \r
                                                SWT.NONE));     \r
                \r
                // Add verify listener to check for line breaks\r
-               nameViewer.getTextWidget().addVerifyListener(\r
+               nameWidget.addVerifyListener(\r
                                new NameViewerVerifyListener(taxon));\r
                \r
                // Listen for changes to name\r
-               nameViewer.getTextWidget().addModifyListener(new ModifyListener () {\r
+               nameWidget.addModifyListener(new ModifyListener () {\r
                        public void modifyText(ModifyEvent e) {\r
                                if (initialized) {\r
                                        String text = ((StyledText) e.widget).getText();\r
                                        setName(BotanicalName.PARSED_NAME(text));\r
+                                       notifyListeners(SWT.Modify, null);\r
                                }\r
                        }\r
                });\r
-\r
-               // Listen for focus to send this name to the property sheet\r
-               nameViewer.getTextWidget().addFocusListener(new FocusAdapter () {\r
-                       public void focusGained(FocusEvent e) {\r
-                               showBorder();\r
-                               \r
-                               BotanicalName botSpecies = new BotanicalName(Rank.SPECIES());\r
-                               botSpecies.setTitleCache("Hieracium geranium Smith");\r
-                               botSpecies.setUninomial("Hieracium");\r
-                               botSpecies.setSpecificEpithet("geranium");\r
-                               \r
-                               nameEditor.setSelection((BotanicalName) getName());\r
-//                             sendEvent(null);\r
-//                             notifyListeners(SWT.Selection, new Event());\r
-                               // Fire \r
-//                             if (nameEditor != null) \r
-//                                     nameEditor.setPropertySheetNodes(getName());\r
-                       }\r
-                       \r
-                       public void focusLost(FocusEvent e) {\r
-                               hideBorder();\r
-                       }\r
-                       \r
-               });\r
                                                                \r
                // Put name into name viewer, show error if parsed incorrectly\r
-               nameViewer.getTextWidget().setText(getName().getTitleCache() == null ? "" : getName().getTitleCache());\r
+               nameWidget.setText(getName().getTitleCache() == null ? "" : getName().getTitleCache());\r
                nameViewer.setShowError(getName().getHasProblem());\r
                \r
                // Put cursor at end of name viewer\r
-               nameViewer.getTextWidget().setCaretOffset(\r
-                               nameViewer.getTextWidget().getText().length());\r
+               nameWidget.setCaretOffset(\r
+                               nameWidget.getText().length());\r
                \r
                // Set composite to initialized - any new input will now be parsed\r
                initialized = true;\r
@@ -230,7 +210,7 @@ public class NameComposite extends Composite {
                dragLabel.setTransfer(types);\r
                dragLabel.addDragListener(dragSourceListener);\r
        }\r
-               \r
+\r
        /**\r
         * Shared drag listener which destroys the NameComposite after the drag\r
         *  gesture is completed.\r
@@ -238,7 +218,8 @@ public class NameComposite extends Composite {
        DragSourceListener dragSourceListener = new DragSourceListener () {\r
                \r
                public void dragStart(DragSourceEvent event) {\r
-                       showBorder();\r
+//                     getTextWidget().notifyListeners(SWT.FocusIn, null);\r
+                       getTextWidget().setFocus();\r
                        event.doit = true;\r
                }\r
                public void dragSetData (DragSourceEvent event) {\r
@@ -246,7 +227,7 @@ public class NameComposite extends Composite {
                }\r
                public void dragFinished(DragSourceEvent event) {\r
                                                \r
-                       hideBorder();\r
+//                     getTextWidget().notifyListeners(SWT.FocusOut, null);\r
                        \r
                        if (event.detail == DND.DROP_MOVE) {\r
                                Composite parent = NameComposite.this.getParent();\r
@@ -266,43 +247,17 @@ public class NameComposite extends Composite {
                        }\r
                }\r
        };\r
-       private NameEditorView nameEditor;\r
-       private IManagedForm managedForm;\r
        \r
        public void setName(TaxonNameBase name) {               \r
                (compositeType == ACCEPTED? taxon : synonym).setName(name);\r
                nameViewer.setShowError(name.getHasProblem());\r
        }\r
        \r
-       protected void showBorder() {\r
-               if (managedForm != null) {\r
-                       nameViewer.getTextWidget().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
-                       managedForm.getToolkit().paintBordersFor(this);\r
-//                     this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
-//                     managedForm.getToolkit().paintBordersFor(this.getParent());\r
-                       managedForm.getForm().reflow(true);\r
-               }\r
-       }\r
-\r
-       protected void hideBorder() {\r
-               if (managedForm != null) {\r
-                       nameViewer.getTextWidget().setData(FormToolkit.KEY_DRAW_BORDER, null);\r
-                       managedForm.getToolkit().paintBordersFor(this);\r
-//                     this.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);\r
-//                     managedForm.getToolkit().paintBordersFor(this.getParent());\r
-                       managedForm.getForm().reflow(true);\r
-               }\r
-       }\r
        \r
        public TaxonNameBase getName() {\r
                return (compositeType == ACCEPTED? taxon : synonym).getName();                          \r
        }\r
 \r
-       public void setNameEditorView(NameEditorView nameEditorView) {\r
-               this.nameEditor = nameEditorView;\r
-               this.managedForm = nameEditorView.getManagedForm();\r
-       }\r
-       \r
        private void createTempMenu() {\r
                final Menu menu1 = new Menu(relationLabel);\r
                relationLabel.setMenu(menu1);\r
@@ -327,5 +282,7 @@ public class NameComposite extends Composite {
                turnhieraciumFuscoatrumMenuItem_4.setText("...");\r
        }\r
 \r
-       \r
+       public StyledText getTextWidget() {\r
+               return nameViewer.getTextWidget();\r
+       }\r
 }
\ No newline at end of file
index 6a2de8f823e29f2b6d1d6b264aa37fa012c92924..51b7f263785358a7e465f0096c2c0a898cfbe852 100644 (file)
@@ -32,7 +32,7 @@ public class NameViewerVerifyListener implements VerifyListener {
         * @see org.eclipse.swt.events.VerifyListener#verifyText(org.eclipse.swt.events.VerifyEvent)\r
         */\r
        public void verifyText(VerifyEvent e) {\r
-                               \r
+                                               \r
                String verifyText = e.text;\r
                \r
                StyledText styledText = (StyledText)e.widget;\r
index 20198fc13b3d152573f633f1e10939525b1c967c..c1a42f365b42765fd763e221e4640b60489e04e3 100644 (file)
@@ -9,6 +9,7 @@ import org.eclipse.ui.views.properties.PropertyDescriptor;
 import org.eclipse.ui.views.properties.TextPropertyDescriptor;\r
 \r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
 \r
 /**\r
  * Property source for Botanical Name entries.\r
@@ -34,7 +35,7 @@ public class BotanicalNamePropertySource implements IPropertySource {
        public static final String P_UNINOMIAL = "02:Uninomial";\r
        public static final String P_SPECIESEP = "03:Specific Epithet";\r
        \r
-       String[] ranks = new String[] {"", "Genus", "Species", "Subspecies"};\r
+       Rank[] ranks = new Rank[] {null, Rank.GENUS(), Rank.SPECIES(), Rank.SUBSPECIES()};\r
        BotanicalName botanicalName;\r
        private String parentid;\r
        \r
@@ -62,7 +63,7 @@ public class BotanicalNamePropertySource implements IPropertySource {
                                        new PropertyDescriptor(P_ID_PARSED, P_PARSED));\r
                if (id.equals(P_ID_RANK))\r
                        descriptors.addElement(\r
-                                       new ComboBoxPropertyDescriptor(P_ID_RANK, P_RANK, ranks));\r
+                                       new ComboBoxPropertyDescriptor(P_ID_RANK, P_RANK, new String[] {"", "Genus", "Species", "Subspecies"}));\r
                if (id.equals(P_ID_TITLECACHE))\r
                        descriptors.addElement(\r
                                        new PropertyDescriptor(P_ID_TITLECACHE, P_TITLECACHE));         \r
@@ -103,9 +104,11 @@ public class BotanicalNamePropertySource implements IPropertySource {
                        return botanicalName.getHasProblem() == true ? "problem" : "parsed" ;\r
                if (id.equals(P_ID_RANK)) {\r
                if (this.botanicalName.getRank() == null) return 0;\r
-               String rank = this.botanicalName.getRank().getLabel();\r
+//             String rank = this.botanicalName.getRank().getLabel();\r
+               Rank rank = this.botanicalName.getRank();\r
                for (int i = 0; i < ranks.length; i++) {\r
-                       if (rank.equals(ranks[i])) \r
+                       if (ranks[i] == null) continue;\r
+                       if (rank.getUuid().equals(ranks[i].getUuid())) \r
                                return i;\r
                }\r
                return 0;\r
@@ -115,7 +118,7 @@ public class BotanicalNamePropertySource implements IPropertySource {
                                P_ID_TITLECACHE,\r
                                new String[] {P_ID_UNINOMIAL, P_ID_SPECIESEP});\r
                if (id.equals(P_ID_UNINOMIAL))\r
-                       return botanicalName.getUninomial();\r
+                       return botanicalName.getGenusOrUninomial();\r
         if (id.equals(P_ID_SPECIESEP))\r
                        return botanicalName.getSpecificEpithet();\r
         return null;\r