comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/StackFrames.java @ 998:b81626b10cb7

Datacage: Moved templating in a better suited package. flys-artifacts/trunk@2434 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 01 Aug 2011 08:31:09 +0000
parents
children 5cb84ceee2a0
comparison
equal deleted inserted replaced
997:4c82609824c8 998:b81626b10cb7
1 package de.intevation.flys.artifacts.datacage.templating;
2
3 import java.util.Map;
4 import java.util.List;
5 import java.util.HashMap;
6 import java.util.ArrayList;
7
8 import javax.xml.xpath.XPathVariableResolver;
9
10 import javax.xml.namespace.QName;
11
12 import org.apache.log4j.Logger;
13
14 public class StackFrames
15 implements XPathVariableResolver
16 {
17 private static Logger log = Logger.getLogger(StackFrames.class);
18
19 protected List<Map<String, Object>> frames;
20
21 public StackFrames() {
22 frames = new ArrayList<Map<String, Object>>();
23 }
24
25 public StackFrames(Map<String, Object> initialFrame) {
26 this();
27 if (initialFrame != null) {
28 frames.add(new HashMap<String, Object>(initialFrame));
29 }
30 }
31
32 public void enter() {
33 frames.add(new HashMap<String, Object>());
34 }
35
36 public void leave() {
37 frames.remove(frames.size()-1);
38 }
39
40 public void put(String key, Object value) {
41 int N = frames.size();
42 if (N > 0) {
43 frames.get(N-1).put(key, value);
44 }
45 }
46
47 public void put(String [] keys, Object [] values) {
48 Map<String, Object> top = frames.get(frames.size()-1);
49 for (int i = 0; i < keys.length; ++i) {
50 top.put(keys[i], values[i]);
51 }
52 }
53
54 public boolean containsKey(String key) {
55 for (int i = frames.size()-1; i >= 0; --i) {
56 if (frames.get(i).containsKey(key)) {
57 return true;
58 }
59 }
60 return false;
61 }
62
63 public Object get(String key) {
64 return get(key, null);
65 }
66
67 public Object get(String key, Object def) {
68
69 for (int i = frames.size()-1; i >= 0; --i) {
70 Map<String, Object> frame = frames.get(i);
71 if (frame.containsKey(key)) {
72 return frame.get(key);
73 }
74 }
75
76 return def;
77 }
78
79 @Override
80 public Object resolveVariable(QName variableName) {
81 if (log.isDebugEnabled()) {
82 log.debug("resolve var: " + variableName);
83 }
84 return get(variableName.getLocalPart());
85 }
86 }
87 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org