minor
[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.Language;
10 import eu.etaxonomy.cdm.model.description.Feature;
11 import eu.etaxonomy.cdm.model.description.Modifier;
12 import eu.etaxonomy.cdm.model.description.State;
13 import eu.etaxonomy.cdm.model.description.StateData;
14 import eu.etaxonomy.cdm.model.description.TextData;
15
16 public class MicroFormatCategoricalDescriptionBuilder extends AbstractCategoricalDescriptionBuilder{
17
18 private String spanEnd = "</span>";
19
20 protected TextData doBuild(List<StateData> states, List<Language> languages){
21 TextData textData = TextData.NewInstance();// TextData that will contain the description and the language corresponding
22 StringBuilder CategoricalDescription = new StringBuilder();
23 Language language = null;
24 for (Iterator<StateData> sd = states.iterator() ; sd.hasNext() ;){
25 StateData stateData = sd.next();
26 State s = stateData.getState();
27 Set<Modifier> modifiers = stateData.getModifiers(); // the states and their according modifiers are simply written one after the other
28 for (Iterator<Modifier> mod = modifiers.iterator() ; mod.hasNext() ;){
29 Modifier modifier = mod.next();
30 CategoricalDescription.append(" " + spanClass("modifier") + modifier.getPreferredRepresentation(languages).getLabel() + spanEnd);
31 }
32 CategoricalDescription.append(" " + spanClass("state") + s.getPreferredRepresentation(languages).getLabel() + spanEnd);
33 if (sd.hasNext()) CategoricalDescription.append(',');
34 if (language==null) {
35 language = s.getPreferredRepresentation(languages).getLanguage(); // TODO What if there are different languages ?
36 }
37 }
38 if (language==null) {
39 language = Language.DEFAULT();
40 }
41 textData.putText(language, CategoricalDescription.toString());
42
43 return textData;
44 }
45
46 protected String buildFeature(Feature feature, boolean doItBetter){
47 if (feature==null || feature.getLabel()==null) return "";
48 else {
49 if (doItBetter) {
50 String betterString = StringUtils.substringBefore(feature.getLabel(), "<");
51 return (spanClass("feature") + StringUtils.removeEnd(betterString, " ") + spanEnd);
52 }
53 else return (spanClass("feature") + feature.getLabel() + spanEnd);
54 }
55 }
56
57 private String spanClass(String classString){
58 return("<span class=\""+classString+"\">");
59 }
60 }