1 package eu
.etaxonomy
.cdm
.api
.service
;
3 import java
.util
.Iterator
;
7 import org
.apache
.commons
.lang
.StringUtils
;
9 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTerm
;
10 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
11 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
12 import eu
.etaxonomy
.cdm
.model
.description
.State
;
13 import eu
.etaxonomy
.cdm
.model
.description
.StateData
;
14 import eu
.etaxonomy
.cdm
.model
.description
.TextData
;
16 public class MicroFormatCategoricalDescriptionBuilder
extends AbstractCategoricalDescriptionBuilder
{
18 private String spanEnd
= "</span>";
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
<DefinedTerm
> modifiers
= stateData
.getModifiers(); // the states and their according modifiers are simply written one after the other
28 for (Iterator
<DefinedTerm
> mod
= modifiers
.iterator() ; mod
.hasNext() ;){
29 DefinedTerm modifier
= mod
.next();
30 CategoricalDescription
.append(" " + spanClass("modifier") + modifier
.getPreferredRepresentation(languages
).getLabel() + spanEnd
);
32 CategoricalDescription
.append(" " + spanClass("state") + s
.getPreferredRepresentation(languages
).getLabel() + spanEnd
);
33 if (sd
.hasNext()) CategoricalDescription
.append(',');
35 language
= s
.getPreferredRepresentation(languages
).getLanguage(); // TODO What if there are different languages ?
39 language
= Language
.DEFAULT();
41 textData
.putText(language
, CategoricalDescription
.toString());
46 protected String
buildFeature(Feature feature
, boolean doItBetter
){
47 if (feature
==null || feature
.getLabel()==null) return "";
50 String betterString
= StringUtils
.substringBefore(feature
.getLabel(), "<");
51 return (spanClass("feature") + StringUtils
.removeEnd(betterString
, " ") + spanEnd
);
53 else return (spanClass("feature") + feature
.getLabel() + spanEnd
);
57 private String
spanClass(String classString
){
58 return("<span class=\""+classString
+"\">");