ref #4302 Escape '&' in section titles
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / AbstractCdmDetailSection.java
index cf2a786c869a2fd781942d8c52231af1900b5fea..ddb8f0d8006d1950a8d2e40f67ecb565a5458cda 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
  * Copyright (C) 2007 EDIT
  * European Distributed Institute of Taxonomy
@@ -10,6 +9,9 @@
 
 package eu.etaxonomy.taxeditor.ui.section;
 
+import java.util.ArrayList;
+import java.util.Collection;
+
 import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.swt.SWT;
@@ -21,8 +23,13 @@ import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
@@ -36,11 +43,12 @@ import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
  *
  * @author n.hoffmann
  * @created Feb 26, 2010
- * @version 1.0
  */
-public abstract class AbstractCdmDetailSection<ENTITY> extends AbstractFormSection<ENTITY> implements IEnableableFormElement, IExpansionListener {
+public abstract class AbstractCdmDetailSection<ENTITY>
+                       extends AbstractFormSection<ENTITY>
+                       implements IEnableableFormElement, IExpansionListener {
 
-       protected ICdmDetailElement<ENTITY> detailElement;
+       protected AbstractCdmDetailElement<ENTITY> detailElement;
 
        public AbstractCdmDetailSection(CdmFormFactory formFactory,
                        ConversationHolder conversation, ICdmFormElement parentElement,
@@ -67,6 +75,11 @@ public abstract class AbstractCdmDetailSection<ENTITY> extends AbstractFormSecti
         }
        }
 
+       @Override
+       public void setText(String title) {
+           super.setText(StoreUtil.cleanTitleString(title));
+       }
+
        protected void createControlsByType(AbstractCdmDetailSection<ENTITY> formElement, Class<ENTITY> entityClass, int style) {
            TableWrapLayout layout = (TableWrapLayout) getLayoutComposite().getLayout();
            layout.topMargin = 10;
@@ -85,9 +98,9 @@ public abstract class AbstractCdmDetailSection<ENTITY> extends AbstractFormSecti
            createControlsByType(formElement, null, style);
        }
 
-       protected abstract ICdmDetailElement<ENTITY> createCdmDetailElement(AbstractCdmDetailSection<ENTITY> parentElement, int style);
+       protected abstract AbstractCdmDetailElement<ENTITY> createCdmDetailElement(AbstractCdmDetailSection<ENTITY> parentElement, int style);
 
-       protected ICdmDetailElement<ENTITY> createCdmDetailElementByType(AbstractCdmDetailSection<ENTITY> parentElement, Class<ENTITY> entityClass, int style){
+       protected AbstractCdmDetailElement<ENTITY> createCdmDetailElementByType(AbstractCdmDetailSection<ENTITY> parentElement, Class<ENTITY> entityClass, int style){
            return createCdmDetailElement(parentElement, style);
        }
 
@@ -119,20 +132,39 @@ public abstract class AbstractCdmDetailSection<ENTITY> extends AbstractFormSecti
        public void setEntity(ENTITY entity) {
                if (detailElement != null) {
                        detailElement.setEntity(entity);
+               Collection<Object> except = new ArrayList<Object>();
+               for(ICdmFormElement formElement:detailElement.getElements()){
+                   if(formElement instanceof IEnableableFormElement && !((IEnableableFormElement) formElement).isEnabled()){
+                       except.add(formElement);
+                   }
+               }
+                       detailElement.setEnabled(isEnabled(), except);
                }
                super.setEntity(entity);
                setSectionTitle();
                layout();
+
        }
 
        protected void setSectionTitle() {
                String title = "";
+               String label = "";
                if (getEntity() != null && (getEntity() instanceof IdentifiableEntity) && !(getEntity() instanceof SpecimenOrObservationBase)) {
-                       title = ": " + ((IdentifiableEntity) getEntity()).getTitleCache();
-                       // we have to duplicate ampersands otherwise they are treated as
-                       // mnenomic (see Label.setText() documentation)
-                       // see also #4302
-                       title = title.replace("&", "&&");
+                       if (getEntity() instanceof DefinedTermBase<?> ){
+                               label = ((DefinedTermBase<?>)getEntity()).getLabel(PreferencesUtil.getGlobalLanguage());
+                               if (label == null){
+                                       label = ((DefinedTermBase<?>)getEntity()).getLabel();
+                               }
+
+                       } else if (getEntity() instanceof TextData){
+                               label = ((TextData)getEntity()).getLanguageText(PreferencesUtil.getGlobalLanguage()).getText();
+                               if (label == null){
+                                       label = ((TextData)getEntity()).getLanguageText(Language.DEFAULT()).getText();
+                               }
+                       } else{
+                               label =((IdentifiableEntity) getEntity()).getTitleCache();
+                       }
+                       title = ": " + label;
                }
                this.setText(String.format("%s%s", getHeading(), title));
                setTextClient(createToolbar());
@@ -154,6 +186,7 @@ public abstract class AbstractCdmDetailSection<ENTITY> extends AbstractFormSecti
        @Override
     public void setIrrelevant(boolean irrelevant) {
                if (detailElement != null) {
+
                        detailElement.setIrrelevant(irrelevant);
                }
        }