fix #5702: filter for current name in name details view if select new name
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / name / NonViralNameDetailSection.java
index fbaac5d51eeebc31dc8b8ccd3f26871a93ea1fd5..8782002943f5f96008afb5d60278b8257e3289c2 100644 (file)
@@ -18,10 +18,18 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Control;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.name.NonViralName;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.NameSelectionDialog;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
@@ -30,8 +38,6 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.ITaxonBaseDetailSection;
 
 /**
- * <p>NonViralNameDetailSection class.</p>
- *
  * @author n.hoffmann
  * @created May 20, 2010
  * @version 1.0
@@ -40,6 +46,7 @@ public class NonViralNameDetailSection extends AbstractCdmDetailSection<NonViral
                implements ITaxonBaseDetailSection {
 
        private TaxonBase taxonBase;
+       boolean nameChoosable = false;
 
        /**
         * <p>Constructor for NonViralNameDetailSection.</p>
@@ -48,25 +55,52 @@ public class NonViralNameDetailSection extends AbstractCdmDetailSection<NonViral
         * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
         * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
         * @param selectionProvider a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
+        * @param nameChoosable if <code>true</code> adds a button to choose the displayed name
         * @param style a int.
         */
        public NonViralNameDetailSection(CdmFormFactory formFactory, ConversationHolder conversation,
-                       ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
+                       ICdmFormElement parentElement, ISelectionProvider selectionProvider, boolean nameChoosable, int style) {
                super(formFactory, conversation, parentElement, selectionProvider, style);
+               this.nameChoosable = nameChoosable;
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection#createToolbar()
-        */
        @Override
        protected Control createToolbar() {
-               ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
-
+               ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+
+               if(nameChoosable && !PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_SECTION)){
+                   //choose name
+                   Action chooseNameAction = new Action("Choose Name", IAction.AS_PUSH_BUTTON){
+                       @Override
+                       public void run() {
+                           TaxonNameBase taxonName = NameSelectionDialog.select(getShell(), getConversationHolder(), getEntity());
+                           if(taxonName!=null){
+                               if(taxonName.isInstanceOf(NonViralName.class)){
+                                   CdmStore.getService(ITaxonNodeService.class).list(TaxonNode.class, null, null, null, null);
+                                   NonViralName nonViralName = HibernateProxyHelper.deproxy(taxonName, NonViralName.class);
+                                   taxonBase.setName(nonViralName);
+                                   //                                  taxonBase.getTitleCache();
+                                   setEntity(nonViralName);
+                                   firePropertyChangeEvent(NonViralNameDetailSection.this);
+                               }
+                               else{
+                                   MessagingUtils.warningDialog("Invalid name", this, "The selected name can not be used for this taxon.");
+                               }
+                           }
+                       }
+                   };
+                   chooseNameAction.setToolTipText("Choose name for this taxon");
+                   chooseNameAction.setImageDescriptor(ImageResources.getImageDescriptor(ImageResources.BROWSE_ICON));
+
+                   toolBarManager.add(chooseNameAction);
+           }
+
+               //clone
                if(getEntity() != null && checkForMultipleNameUsages(getEntity())){
 
                        Action cloneAction = new Action("Clone", IAction.AS_PUSH_BUTTON){
-                               @Override
-                public void run() {
+                           @Override
+                           public void run() {
                                        boolean confirm = MessagingUtils.confirmDialog("Confirm cloning", "Do you really want to clone the name?");
 
                                        if(confirm){
@@ -75,7 +109,6 @@ public class NonViralNameDetailSection extends AbstractCdmDetailSection<NonViral
                                                setEntity(clonedName);
                                                taxonBase.setName(clonedName);
                                                taxonBase.generateTitle();
-//                                             EditorUtil.getActiveMultiPageTaxonEditor().r
                                                firePropertyChangeEvent(new CdmPropertyChangeEvent(NonViralNameDetailSection.this, null));
                                        }
 
@@ -91,26 +124,16 @@ public class NonViralNameDetailSection extends AbstractCdmDetailSection<NonViral
        }
 
 
-       /**
-        * @param nonViralName
-        *
-        */
        private boolean checkForMultipleNameUsages(NonViralName nonViralName) {
                return nonViralName.getTaxonBases().size() != 1;
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.section.AbstractCdmDetailSection#getHeading()
-        */
        /** {@inheritDoc} */
        @Override
        public String getHeading() {
                return "Name";
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.section.ITaxonDetailSection#setTaxon(eu.etaxonomy.cdm.model.taxon.TaxonBase)
-        */
        /** {@inheritDoc} */
        @Override
     public void setTaxonBase(TaxonBase taxon) {
@@ -119,32 +142,11 @@ public class NonViralNameDetailSection extends AbstractCdmDetailSection<NonViral
                setEntity(name);
        }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection#setSectionTitle()
-     */
-    @Override
-    protected void setSectionTitle() {
-        super.setSectionTitle();
-        String title = getText();
-        // we have to duplicate ampersands otherwise they are treated as
-        // mnenomic (see Label.setText() documentation)
-        // see also #4302
-        title = title.replace("&", "&&");
-        setText(title);
-    }
-
-
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.section.ITaxonDetailSection#getTaxon(eu.etaxonomy.cdm.model.taxon.TaxonBase)
-        */
        @Override
        public TaxonBase getTaxonBase() {
                return taxonBase;
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection#createCdmDetailElement(eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection, int)
-        */
        @Override
        protected AbstractCdmDetailElement<NonViralName> createCdmDetailElement(AbstractCdmDetailSection<NonViralName> parentElement, int style) {
            return formFactory.createNonViralNameDetailElement(parentElement);