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
|
}
|