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
.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
;
17 public class MicroFormatCategoricalDescriptionBuilder
extends AbstractCategoricalDescriptionBuilder
{
19 private final String spanEnd
= "</span>";
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();
33 language
= Language
.DEFAULT();
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
);
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
);
44 categoricalDescription
.append(" " + spanClass("state") + s
.getPreferredRepresentation(languages
).getLabel() + spanEnd
);
46 categoricalDescription
.append(',');
49 language
= s
.getPreferredRepresentation(languages
).getLanguage(); // TODO What if there are different languages ?
52 textData
.putText(language
, categoricalDescription
.toString());
57 protected String
buildFeature(Feature feature
, boolean doItBetter
){
58 if (feature
==null || feature
.getLabel()==null) {
62 String betterString
= StringUtils
.substringBefore(feature
.getLabel(), "<");
63 return (spanClass("feature") + StringUtils
.removeEnd(betterString
, " ") + spanEnd
);
65 return (spanClass("feature") + feature
.getLabel() + spanEnd
);
70 private String
spanClass(String classString
){
71 return("<span class=\""+classString
+"\">");