further fixes for subareas #4220
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / DefaultCategoricalDescriptionBuilder.java
index f0f5e11e6ec59e8a66e8090250bd6002ba90dbaa..fa177827deb27abb689e02cb04d0a037cabd8981 100644 (file)
@@ -4,32 +4,41 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.description.Modifier;
 import eu.etaxonomy.cdm.model.description.State;
 import eu.etaxonomy.cdm.model.description.StateData;
 import eu.etaxonomy.cdm.model.description.TextData;
 
 public class DefaultCategoricalDescriptionBuilder extends AbstractCategoricalDescriptionBuilder{
        
-       protected TextData doBuild(List<StateData> states){
+       protected TextData doBuild(List<StateData> states, List<Language> languages){
                TextData textData = TextData.NewInstance();// TextData that will contain the description and the language corresponding
-               Language language = Language.DEFAULT();
-               
                StringBuilder CategoricalDescription = new StringBuilder();
-
+               Language language = null;
                for (Iterator<StateData> sd = states.iterator() ; sd.hasNext() ;){
                        StateData stateData = sd.next();
                        State s = stateData.getState();
-                       Set<Modifier> modifiers = stateData.getModifiers(); // the states and their according modifiers are simply written one after the other
-                       for (Iterator<Modifier> mod = modifiers.iterator() ; mod.hasNext() ;){
-                               Modifier modifier = mod.next();
-                               CategoricalDescription.append(" " + modifier.getPreferredRepresentation(language).getLabel());
+                       Set<DefinedTerm> modifiers = stateData.getModifiers(); // the states and their according modifiers are simply concatenated one after the other
+                       for (Iterator<DefinedTerm> mod = modifiers.iterator() ; mod.hasNext() ;){
+                               DefinedTerm modifier = mod.next();
+                               CategoricalDescription.append(" " + getRightText(modifier.getPreferredRepresentation(languages)));
+                       }
+                       if(s != null) {
+                               CategoricalDescription.append(" " + getRightText(s.getPreferredRepresentation(languages)));
+                               if (language==null) {
+                                       language = s.getPreferredRepresentation(languages).getLanguage();
+                               }
                        }
-                       CategoricalDescription.append(" " + s.getPreferredRepresentation(language).getLabel());
+                       if (sd.hasNext()) CategoricalDescription.append(separator);
+                       
                }
-               textData.putText(CategoricalDescription.toString(), language);
+               if (language==null) {
+                       language = Language.DEFAULT();
+               }
+               textData.putText(language, CategoricalDescription.toString());
                
                return textData;
        }
+
 }