- added support for term retrieval by TermVocabulary
authorPatric Plitzner <p.plitzner@bgbm.org>
Thu, 3 Jul 2014 12:32:59 +0000 (12:32 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Thu, 3 Jul 2014 12:32:59 +0000 (12:32 +0000)
 - adapted MediaSpecimen DetailsView

eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/TermStore.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/TermComboElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/occurrence/media/MediaSpecimenGeneralDetailElement.java

index 59e9865fe6f8bd04b847ed459cc93005e4ae36b1..d7f16fe55c0d3c1f5bf3cb358b274beb56eac9a4 100644 (file)
@@ -23,7 +23,7 @@ import org.eclipse.ui.IMemento;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.TermBase;
 import eu.etaxonomy.cdm.model.common.TermType;
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
 import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
 
@@ -56,6 +56,15 @@ public class TermManager extends ContextListenerAdapter{
            return getFilteredTerms(TermStore.getTerms(termType, null));
        }
 
+       /**
+        *
+        * @param clazz
+        * @return
+        */
+       public <T extends DefinedTermBase> List<T> getPreferredTerms(TermVocabulary<T> termVocabulary){
+           return getFilteredTerms(new ArrayList<T>(TermStore.getTerms(termVocabulary, null)));
+       }
+
        /**
         *
         * @param clazz
@@ -137,7 +146,7 @@ public class TermManager extends ContextListenerAdapter{
 
                String typeName = getTermClass(initialTerms);
                Collection<UUID> hiddenTermUuids = hiddenTermsMap.get(typeName);
-               
+
 
                if(hiddenTermUuids == null){
                        return initialTerms;
@@ -148,7 +157,7 @@ public class TermManager extends ContextListenerAdapter{
                                if(! hiddenTermUuids.contains(((TaxonRelationshipTypeInverseContainer) term).getType().getUuid())){
                                        T type = (T)((TaxonRelationshipTypeInverseContainer) term).getType();
                                        filteredTerms.add(type);
-                                       
+
                                }
                        }
                        if(! hiddenTermUuids.contains(term.getUuid())){
@@ -160,10 +169,10 @@ public class TermManager extends ContextListenerAdapter{
        }
 
        private <T extends DefinedTermBase> String getTermClass(Collection<T> initialTerms){
-          
+
                String result = null;
                if(!initialTerms.isEmpty()){
-                       
+
                        //TODO: there should be a more generic solution!!
                T entity = initialTerms.iterator().next();
                if (entity instanceof TaxonRelationshipTypeInverseContainer){
index 3db2afee30791caa4bcc6a7f23c1b70ab0a6c410..fe8016fc1f7a565f868798730d0b4db3e26cd607 100644 (file)
@@ -23,6 +23,7 @@ import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableExcepti
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.description.AbsenceTerm;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
@@ -65,6 +66,17 @@ public class TermStore {
         return getTermsFromService(termType, comparator);
        }
 
+       /**
+        * Returns an alphabetically sorted list of terms (anything that extends {@link DefinedTermBase}) of the given {@link TermType})
+        * currently available in the system.
+        *
+        * @param termType the term type
+        * @return an alphabetically sorted list of terms
+        */
+       public static <TERM extends DefinedTermBase> Set<TERM> getTerms(TermVocabulary<TERM> termVocabulary, Comparator<DefinedTermBase<?>> comparator){
+           return termVocabulary.getTerms();
+       }
+
        /**
         * Returns a list of terms of the given type currently available in the system.
         * If <code>filtered</code> is set to <code>true</code>, all terms for certain types will be
index 5e493dc4b5ec94ca5c14c1da779a34e03bfa1d98..8323e62dc7280fe880371324039e4c88611355f3 100644 (file)
@@ -22,6 +22,7 @@ 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.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.preference.Resources;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -67,107 +68,65 @@ 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);
-
-               //TODO try to remove generic T and avoid classes to be used
-               populateTerms((List<T>) getTermManager().getPreferredTerms(termType));
-
-               combo.addSelectionListener(this);
-               combo.addDisposeListener(this);
-               PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
-
-               if (selection != null) {
-                       setSelection(selection);
-               }
+               this(formFactory, parentElement, null, termType, null, labelString, selection, style);
        }
 
-       /**
-        * <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, Class<T> termClass, String labelString, T selection,
-                       int style) {
-               super(formFactory, parentElement);
+               ICdmFormElement parentElement, TermVocabulary<?> termVocabulary, String labelString, T selection,
+               int style) {
+           this(formFactory, parentElement, null, null, termVocabulary, labelString, selection, style);
+       }
 
-               this.termClass = termClass;
+    public TermComboElement(CdmFormFactory formFactory,
+            ICdmFormElement parentElement, Class<T> termClass, String labelString, T selection,
+            int style) {
+        this(formFactory, parentElement, termClass, null, null, labelString, selection, style);
+    }
 
-               if (labelString != null) {
-                       label = formFactory.createLabel(getLayoutComposite(), labelString);
-                       addControl(label);
-               }
+       private TermComboElement(CdmFormFactory formFactory,
+               ICdmFormElement parentElement, Class<T> termClass, TermType termType, TermVocabulary<?> termVocabulary, String labelString, T selection,
+               int style) {
+        super(formFactory, parentElement);
+
+        if(termClass!=null){
+            this.termClass = termClass;
+        }
+        else{
+            this.termClass =  (Class<T>) DefinedTerm.class;
+        }
 
-               // create combo
-               combo = new Combo(getLayoutComposite(), SWT.BORDER | SWT.READ_ONLY);
-               addControl(combo);
-               combo.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
-               combo.setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
+        if (labelString != null) {
+            label = formFactory.createLabel(getLayoutComposite(), labelString);
+            addControl(label);
+        }
 
-               populateTerms(getPreferredTerms());
+        // create combo
+        combo = new Combo(getLayoutComposite(), SWT.BORDER | SWT.READ_ONLY | style);
+        addControl(combo);
+        combo.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
+        combo.setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
 
-               combo.addSelectionListener(this);
-               combo.addDisposeListener(this);
-               PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
+        if(termType!=null){
+            //TODO try to remove generic T and avoid classes to be used
+            populateTerms((List<T>) getTermManager().getPreferredTerms(termType));
+        }
+        else if(termVocabulary!=null){
+            populateTerms((List<T>) getTermManager().getPreferredTerms(termVocabulary));
+        }
+        else if(this.termClass!=null){
+            populateTerms(getPreferredTerms());
+        }
 
-               if (selection != null) {
-                       setSelection(selection);
-               }
+        combo.addSelectionListener(this);
+        combo.addDisposeListener(this);
+        PreferencesUtil.getPreferenceStore().addPropertyChangeListener(this);
+
+        if (selection != null) {
+            setSelection(selection);
+        }
        }
 
        /**
index 81a07d5b19918fecce249d06c714b696b130b168..7c69824f8dd49102e463b1fefbb0169d2ef9b533 100644 (file)
@@ -60,6 +60,7 @@ import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.common.Marker;
 import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.common.TimePeriod;
 import eu.etaxonomy.cdm.model.common.User;
 import eu.etaxonomy.cdm.model.common.VersionableEntity;
@@ -900,6 +901,41 @@ public class CdmFormFactory extends FormToolkit {
                return element;
        }
 
+       /**
+        * <p>
+        * createTermComboElement
+        * </p>
+        *
+        * @param termComboType
+        *            a
+        *            {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.TermComboType}
+        *            object.
+        * @param parentElement
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+        *            object.
+        * @param labelString
+        *            a {@link java.lang.String} object.
+        * @param selection
+        *            a {@link eu.etaxonomy.cdm.model.common.DefinedTermBase}
+        *            object.
+        * @param style
+        *            a int.
+        * @return a {@link eu.etaxonomy.taxeditor.ui.combo.TermComboElement}
+        *         object.
+        */
+
+       public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
+               TermVocabulary<?> termVocabulary,
+               ICdmFormElement parentElement,
+               String labelString,
+               T selection,
+               int style) {
+           TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termVocabulary, labelString, selection, style);
+           adapt(element);
+           parentElement.addElement(element);
+           return element;
+       }
+
     /**
      * <p>
      * createEnumComboElement
index 5dd71f15a0230ee21283ebe1ad960528882b96dd..0af1cb17f268f035b26ad2917a0adf83ddb7bed8 100644 (file)
@@ -13,16 +13,19 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.joda.time.DateTime;
 
+import eu.etaxonomy.cdm.api.service.IVocabularyService;
 import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.OriginalSourceType;
-import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
+import eu.etaxonomy.cdm.model.common.VocabularyEnum;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.occurrence.Collection;
 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
 import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
@@ -32,7 +35,6 @@ import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
 import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.media.MediaRepresentationSection;
-import eu.etaxonomy.taxeditor.ui.section.supplemental.SourceSection;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 
 /**
@@ -42,6 +44,8 @@ import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
  */
 public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<MediaSpecimen> {
 
+    private final TermVocabulary mediaSpecimenVocabulary = CdmStore.getService(IVocabularyService.class).find(VocabularyEnum.MediaSpecimenKindOfUnit.getUuid());
+
     private TermComboElement<DefinedTerm> comboKindOfUnit;
     private LanguageStringWithLabelElement textTitleLanguageString;
     private EntitySelectionElement<AgentBase> selectionArtist;
@@ -74,7 +78,7 @@ public class MediaSpecimenGeneralDetailElement extends AbstractCdmDetailElement<
             formFactory.createLabel(formElement, "No media attached to this MediaSpecimen!");
         }
         else{
-            comboKindOfUnit = formFactory.createDefinedTermComboElement(TermType.KindOfUnit, formElement, "Kind of Media", entity.getKindOfUnit(), style);
+            comboKindOfUnit = formFactory.createDefinedTermComboElement(mediaSpecimenVocabulary, formElement, "Kind of Media", entity.getKindOfUnit(), style);
             textTitleLanguageString = formFactory.createLanguageStringWithLabelElement(formElement, "Motif", media.getTitle(), style);
             selectionArtist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), formElement, "Prepared by", media.getArtist(), EntitySelectionElement.ALL, style);