merged campanula branch to trunk. Main features are: BioCase Query via Imports, Deriv...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / combo / TermComboElement.java
index 8c5fba40a769d5fac4e06072e863664a1fb79516..f05cbe1c497ca468f04b11402df608d77165402e 100644 (file)
@@ -19,16 +19,18 @@ import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Listener;
 
+import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.TermType;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.preference.Resources;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.store.TermManager;
+import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
-import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
 import eu.etaxonomy.taxeditor.ui.element.ISelectable;
 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
@@ -65,6 +67,56 @@ public class TermComboElement<T extends DefinedTermBase>
 
        private List<T> customPreferredTerms;
 
+       /**
+        * <p>
+        * Constructor for AbstractTermComboElement.
+        * </p>
+        * 
+        * @param parentElement
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+        *            object.
+        * @param style
+        *            a int.
+        * @param formFactory
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+        *            object.
+        * @param labelString
+        *            a {@link java.lang.String} object.
+        * @param selection
+        *            a T object.
+        * @param visibleItems
+        *            a int.
+        * @param <T>
+        *            a T object.
+        */
+       public TermComboElement(CdmFormFactory formFactory,
+                       ICdmFormElement parentElement, TermType termType, String labelString, T selection,
+                       int style) {
+               super(formFactory, parentElement);
+               
+               this.termClass =  (Class<T>) DefinedTerm.class;
+               
+               if (labelString != null) {
+                       label = formFactory.createLabel(getLayoutComposite(), labelString);
+                       addControl(label);
+               }
+
+               // create combo
+               combo = new Combo(getLayoutComposite(), SWT.BORDER | SWT.READ_ONLY);
+               addControl(combo);
+               combo.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
+               combo.setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
+
+               populateTerms(filterDefinedTermByTermType(getPreferredTerms(), termType));
+
+               combo.addSelectionListener(this);
+               combo.addDisposeListener(this);
+               PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
+
+               if (selection != null) {
+                       setSelection(selection);
+               }
+       }
 
        /**
         * <p>
@@ -139,6 +191,8 @@ public class TermComboElement<T extends DefinedTermBase>
        public void setSelection(T selection) {                 
                this.selection = selection;
                
+               this.selection = selection;
+               
                Listener[] listeners = combo.getListeners(SWT.Selection);
 
                for (Listener listener : listeners) {
@@ -189,14 +243,14 @@ public class TermComboElement<T extends DefinedTermBase>
                        if (label == null) {
                                if (term.getTitleCache() != null) {
                                        label = term.getTitleCache();
-                                       StoreUtil.error(getClass(),
-                                                       "Term does not have a representation: " + term
-                                                                       + ", " + term.getUuid(), null);
+                                       StoreUtil.warn(getClass(),
+                                                       "Term does not have a default language representation: " + label
+                                                                       + ", " + term.getUuid());
                                } else {
                                        label = "Unknown";
-                                       StoreUtil.error(getClass(),
+                                       StoreUtil.warn(getClass(),
                                                        "Representation Label and TitleCache empty for term: "
-                                                                       + term + ", " + term.getUuid(), null);
+                                                                       + term + ", " + term.getUuid());
                                }
 
                        }
@@ -221,9 +275,7 @@ public class TermComboElement<T extends DefinedTermBase>
 
        /*
         * (non-Javadoc)
-        * 
-        * @see
-        * eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)
+        * @see eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)
         */
        /** {@inheritDoc} */
        public void setEnabled(boolean enabled) {
@@ -253,7 +305,11 @@ public class TermComboElement<T extends DefinedTermBase>
         * @return a {@link java.lang.String} object.
         */
        protected String getLabel(T term) {
-               return term.getLabel(CdmStore.getDefaultLanguage());
+               if (term == null){
+                       return "";
+               }else{
+                       return term.getLabel(CdmStore.getDefaultLanguage());
+               }
        }
 
        /**
@@ -390,4 +446,14 @@ public class TermComboElement<T extends DefinedTermBase>
                customPreferredTerms = terms;
                populateTerms(customPreferredTerms);
        }
+       
+       private List<T> filterDefinedTermByTermType(List<T> terms, TermType termType) {
+               List<T> definedTerms = new ArrayList<T>();
+               for(T term : terms){
+                       if(term.getTermType().equals(termType)) {
+                               definedTerms.add(term);
+                       }
+               }               
+               return definedTerms;
+       }
 }