Mercurial > dive4elements > river
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 : |