01: package org.makumba.list.engine.valuecomputer;
02:
03: import javax.servlet.jsp.PageContext;
04:
05: import org.makumba.LogicException;
06: import org.makumba.analyser.AnalysableTag;
07: import org.makumba.analyser.PageCache;
08: import org.makumba.commons.MultipleKey;
09: import org.makumba.list.engine.QueryExecution;
10:
11: /**
12: * The manager of a nullableValueQuery
13: *
14: * @author Cristian Bogdan
15: */
16: class NullableValueComputer extends QueryValueComputer {
17:
18: static final String emptyQueryProps[] = new String[5];
19:
20: /**
21: * Makes a query that is identical to the parentQuery, but has expr as projection.
22: *
23: * @param analyzed
24: * the tag that is analyzed
25: * @param parentListKey
26: * the key of the parent list
27: * @param nullableExpr
28: * the nullable expression
29: * @param expr
30: * the expression we use as projection
31: * @param pageCache
32: * the page cache of the current page
33: */
34: NullableValueComputer(AnalysableTag analyzed,
35: MultipleKey parentListKey, String nullableExpr,
36: String expr, PageCache pageCache) {
37: makeQueryAtAnalysis(parentListKey, nullableExpr.trim(),
38: emptyQueryProps, expr, pageCache);
39: }
40:
41: /**
42: * Checks if the iterationGroupData is longer than 1, and throws an exception if so. Takes the first result (if any)
43: * otherwise.
44: *
45: * @param running
46: * the tag that is currently running
47: * @throws LogicException
48: */
49: @Override
50: public Object getValue(PageContext pageContext)
51: throws LogicException {
52: QueryExecution ex = runQuery(pageContext);
53: int n = ex.dataSize();
54: if (n > 1)
55: throw new RuntimeException(
56: "nullable query with more than one result ??? " + n);
57: if (n == 0)
58: return null;
59: return ex.currentListData().data[projectionIndex];
60: }
61: }
|