comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/StackFrames.java @ 5628:142ed3c62765

Handle NULL elements in datacage xml Patch provided by Sascha Teichmann
author Andre Heinecke <aheinecke@intevation.de>
date Wed, 10 Apr 2013 10:59:29 +0200
parents 2970046fcdca
children
comparison
equal deleted inserted replaced
5627:2d9eb188fa51 5628:142ed3c62765
20 */ 20 */
21 public class StackFrames 21 public class StackFrames
22 implements XPathVariableResolver 22 implements XPathVariableResolver
23 { 23 {
24 private static Logger log = Logger.getLogger(StackFrames.class); 24 private static Logger log = Logger.getLogger(StackFrames.class);
25
26 public static final Object NULL = new Object();
25 27
26 /** The frames (used like a stack). */ 28 /** The frames (used like a stack). */
27 protected List<Map<String, Object>> frames; 29 protected List<Map<String, Object>> frames;
28 30
29 public StackFrames() { 31 public StackFrames() {
113 } 115 }
114 116
115 return def; 117 return def;
116 } 118 }
117 119
120 public Object getNull(String key) {
121 return getNull(key, null);
122 }
123
124 public Object getNull(String key, Object def) {
125
126 key = key.toUpperCase();
127
128 for (int i = frames.size()-1; i >= 0; --i) {
129 Map<String, Object> frame = frames.get(i);
130 if (frame.containsKey(key)) {
131 Object value = frame.get(key);
132 return value != null ? value : NULL;
133 }
134 }
135
136 return def;
137 }
138
118 @Override 139 @Override
119 public Object resolveVariable(QName variableName) { 140 public Object resolveVariable(QName variableName) {
120 if (log.isDebugEnabled()) { 141 if (log.isDebugEnabled()) {
121 log.debug("resolve var: " + variableName); 142 log.debug("resolve var: " + variableName);
122 } 143 }
123 return get(variableName.getLocalPart()); 144
145 return getNull(variableName.getLocalPart());
124 } 146 }
125 147
126 public String dump() { 148 public String dump() {
127 StringBuilder sb = new StringBuilder("["); 149 StringBuilder sb = new StringBuilder("[");
128 Set<String> already = new HashSet<String>(); 150 Set<String> already = new HashSet<String>();

http://dive4elements.wald.intevation.org