summaryrefslogtreecommitdiffstats
path: root/org/madore/damlengine/TodoWeblogSelectionElement.java
blob: df9c75e5a1175fdfc24e8854b1e86ad2d1d9ce6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package org.madore.damlengine;

import java.util.Map;
import java.util.HashMap;
import org.w3c.dom.*;

public final class TodoWeblogSelectionElement extends TodoDefaultElement {

    public enum Type {
	RECENT_COUNT,
	MONTH_YEAR,
	MONTH_MONTH,
	CATEGORY_NAME,
	CATEGORY_CODE;
    }

    public static class Factory extends TodoElement.Factory {
	final Type t;
	public Factory(Type t) {
	    super();
	    this.t = t;
	}
	@Override
	public TodoWeblogSelectionElement newItem(Element node,
						  Context ctx,
						  TodoItem caller) {
	    return new TodoWeblogSelectionElement(t, node, ctx, caller);
	}
    }

    final Type t;

    public TodoWeblogSelectionElement(Type t,
				      Element node,
				      Context ctx,
				      TodoItem caller) {
	super(node, ctx, caller);
	this.t = t;
    }

    protected final static Map<String,Map<String,String>> categoryNames;

    static {
	categoryNames = new HashMap<String,Map<String,String>>();
	categoryNames.put("en", new HashMap<String,String>());
	categoryNames.put("fr", new HashMap<String,String>());
	categoryNames.put("de", new HashMap<String,String>());
	categoryNames.put("ia", new HashMap<String,String>());
	categoryNames.get("en").put("glf", "Gratuitous Literary Fragments");
	categoryNames.get("fr").put("glf", "Fragments litt\u00e9raires gratuits");
	categoryNames.get("ia").put("glf", "Fragmentos litterari gratuite");
	categoryNames.get("en").put("math", "Mathematics");
	categoryNames.get("fr").put("math", "Math\u00e9matiques");
	categoryNames.get("en").put("phys", "Physics");
	categoryNames.get("fr").put("phys", "Physique");
	categoryNames.get("en").put("ego", "my life");
	categoryNames.get("fr").put("ego", "ma vie");
	categoryNames.get("en").put("html", "Web technologies");
	categoryNames.get("fr").put("html", "technologies Web");
	categoryNames.get("en").put("gay", "gay themes");
	categoryNames.get("fr").put("gay", "th\u00e8mes gay");
	categoryNames.get("en").put("relig", "Religion");
	categoryNames.get("fr").put("relig", "Religion");
	categoryNames.get("en").put("philo", "Philosophy");
	categoryNames.get("fr").put("philo", "Philosophie");
	categoryNames.get("en").put("polit", "Politics");
	categoryNames.get("fr").put("polit", "Politique");
	categoryNames.get("ia").put("polit", "Politica");
	categoryNames.get("en").put("lex", "Law");
	categoryNames.get("fr").put("lex", "Droit");
	categoryNames.get("en").put("lang", "Languages & Linguistics");
	categoryNames.get("fr").put("lang", "Langues & Linguistique");
	categoryNames.get("ia").put("lang", "Liguas & Linguistica");
	categoryNames.get("en").put("unicode", "Unicode");
	categoryNames.get("fr").put("unicode", "Unicode");
	categoryNames.get("en").put("cinema", "Films & Movies");
	categoryNames.get("fr").put("cinema", "Films & Cin\u00e9ma");
	categoryNames.get("de").put("cinema", "Film & Kino");
    }

    public static String categoryName(String code, String lang) {
	if ( categoryNames.get(lang) == null )
	    return code;
	String name = categoryNames.get(lang).get(code);
	if ( name == null )
	    return code;
	return name;
    }

    @Override
    public void handleNodeOnly() {
	if ( ctx.wsc == null )
	    throw new IllegalStateException("weblog-selection element encountered with no weblog selection state");
	// String lang = LangHelper.getLangRec(node);
	String str;
	switch ( t ) {
	case RECENT_COUNT:
	    if ( ! ( ctx.wsc instanceof Context.WeblogRecentSelectionContext ) )
		throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog recent selection state");
	    str = String.format("%d", ((Context.WeblogRecentSelectionContext)(ctx.wsc)).count );
	    break;
	case MONTH_YEAR:
	    if ( ! ( ctx.wsc instanceof Context.WeblogMonthSelectionContext ) )
		throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog month selection state");
	    str = ((Context.WeblogMonthSelectionContext)(ctx.wsc)).year;
	    break;
	case MONTH_MONTH:
	    if ( ! ( ctx.wsc instanceof Context.WeblogMonthSelectionContext ) )
		throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog month selection state");
	    str = ((Context.WeblogMonthSelectionContext)(ctx.wsc)).month;
	    break;
	case CATEGORY_CODE:
	    if ( ! ( ctx.wsc instanceof Context.WeblogCategorySelectionContext ) )
		throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog category selection state");
	    str = ((Context.WeblogCategorySelectionContext)(ctx.wsc)).code;
	    break;
	case CATEGORY_NAME:
	    if ( ! ( ctx.wsc instanceof Context.WeblogCategorySelectionContext ) )
		throw new IllegalStateException("weblog-selection-recent-count element encountered while not in weblog category selection state");
	    str = categoryName(((Context.WeblogCategorySelectionContext)(ctx.wsc)).code, LangHelper.getLangRec(node));
	    break;
	default:
	    throw new AssertionError("unknown type");
	}
	Node txt = ctx.doc.createTextNode(str);
	node.getParentNode().replaceChild(txt, node);
    }

}