Merge branch 'release/5.0.0'
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / MicroFormatCategoricalDescriptionBuilder.java
1 package eu.etaxonomy.cdm.api.service;
2
3 import java.util.Iterator;
4 import java.util.List;
5 import java.util.Set;
6
7 import org.apache.commons.lang.StringUtils;
8
9 import eu.etaxonomy.cdm.model.common.DefinedTerm;
10 import eu.etaxonomy.cdm.model.common.Language;
11 import eu.etaxonomy.cdm.model.common.LanguageString;
12 import eu.etaxonomy.cdm.model.description.Feature;
13 import eu.etaxonomy.cdm.model.description.State;
14 import eu.etaxonomy.cdm.model.description.StateData;
15 import eu.etaxonomy.cdm.model.description.TextData;
16
17 public class MicroFormatCategoricalDescriptionBuilder extends AbstractCategoricalDescriptionBuilder{
18
19 private final String spanEnd = "</span>";
20
21 @Override
22 protected TextData doBuild(List<StateData> states, List<Language> languages){
23 TextData textData = TextData.NewInstance();// TextData that will contain the description and the language corresponding
24 StringBuilder categoricalDescription = new StringBuilder();
25 Language language = null;
26 for (Iterator<StateData> sd = states.iterator() ; sd.hasNext() ;){
27 StateData stateData = sd.next();
28 State s = stateData.getState();
29 if(s != null && language==null) {
30 language = s.getPreferredRepresentation(languages).getLanguage();
31 }
32 if (language==null) {
33 language = Language.DEFAULT();
34 }
35 if(stateData.getModifyingText()!=null && stateData.getModifyingText().get(language)!=null){
36 LanguageString modyfingText = stateData.getModifyingText().get(language);
37 categoricalDescription.append(spanClass("modifier") + modyfingText.getText() + spanEnd);
38 }
39 Set<DefinedTerm> modifiers = stateData.getModifiers(); // the states and their according modifiers are simply written one after the other
40 for (Iterator<DefinedTerm> mod = modifiers.iterator() ; mod.hasNext() ;){
41 DefinedTerm modifier = mod.next();
42 categoricalDescription.append(" " + spanClass("modifier") + modifier.getPreferredRepresentation(languages).getLabel() + spanEnd);
43 }
44 categoricalDescription.append(" " + spanClass("state") + s.getPreferredRepresentation(languages).getLabel() + spanEnd);
45 if (sd.hasNext()) {
46 categoricalDescription.append(',');
47 }
48 if (language==null) {
49 language = s.getPreferredRepresentation(languages).getLanguage(); // TODO What if there are different languages ?
50 }
51 }
52 textData.putText(language, categoricalDescription.toString());
53
54 return textData;
55 }
56
57 protected String buildFeature(Feature feature, boolean doItBetter){
58 if (feature==null || feature.getLabel()==null) {
59 return "";
60 } else {
61 if (doItBetter) {
62 String betterString = StringUtils.substringBefore(feature.getLabel(), "<");
63 return (spanClass("feature") + StringUtils.removeEnd(betterString, " ") + spanEnd);
64 } else {
65 return (spanClass("feature") + feature.getLabel() + spanEnd);
66 }
67 }
68 }
69
70 private String spanClass(String classString){
71 return("<span class=\""+classString+"\">");
72 }
73 }