Project

General

Profile

Download (2.98 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(77-77/103)