diff options
Diffstat (limited to 'petascope/src/petascope/wcps/server/core/CondenseScalarExpr.java')
-rw-r--r-- | petascope/src/petascope/wcps/server/core/CondenseScalarExpr.java | 156 |
1 files changed, 77 insertions, 79 deletions
diff --git a/petascope/src/petascope/wcps/server/core/CondenseScalarExpr.java b/petascope/src/petascope/wcps/server/core/CondenseScalarExpr.java index 14c2c91..54e7ceb 100644 --- a/petascope/src/petascope/wcps/server/core/CondenseScalarExpr.java +++ b/petascope/src/petascope/wcps/server/core/CondenseScalarExpr.java @@ -14,86 +14,84 @@ * You should have received a copy of the GNU General Public License * along with rasdaman community. If not, see <http://www.gnu.org/licenses/>. * - * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / - rasdaman GmbH. + * Copyright 2003 - 2010 Peter Baumann / rasdaman GmbH. * * For more information please see <http://www.rasdaman.org> * or contact Peter Baumann via <baumann@rasdaman.com>. */ -package petascope.wcps.server.core;
-
-import petascope.wcps.server.exceptions.InvalidCrsException;
-import petascope.wcps.server.exceptions.WCPSException;
-import java.util.Vector;
-import org.w3c.dom.*;
-
-public class CondenseScalarExpr implements IRasNode {
-
- private CondenseOperation op;
- private Vector<AxisIterator> iterators;
- private IRasNode using;
- private IRasNode where;
- private String axisIteratorString;
- private String newIteratorName;
-
- public CondenseScalarExpr(Node node, XmlQuery xq) throws WCPSException, InvalidCrsException {
- if (node.getNodeName().equals("condense")) {
- node = node.getFirstChild();
- }
- while ((node != null) && node.getNodeName().equals("#text")) {
- node = node.getNextSibling();
- }
-
- iterators = new Vector();
- newIteratorName = xq.registerNewExpressionWithVariables();
- System.err.println("Parsing Condense Scalar Expression: " + node.getNodeName());
-
- while (node != null) {
- String name = node.getNodeName();
- if (op == null) {
- op = new CondenseOperation(node, xq);
- } else if (name.equals("iterator")) {
- AxisIterator it = new AxisIterator(node.getFirstChild(), xq, newIteratorName);
- iterators.add(it);
- } else if (name.equals("where")) {
- where = new BooleanScalarExpr(node.getFirstChild(), xq);
- } else {
- using = new CoverageExpr(node, xq);
- }
-
- node = node.getNextSibling();
- while ((node != null) && node.getNodeName().equals("#text")) {
- node = node.getNextSibling();
- }
- }
-
- buildAxisIteratorDomain();
- }
-
- public String toRasQL() {
- String result = "condense " + op.toRasQL() + " over ";
- result += axisIteratorString;
- if (where != null) {
- result += where.toRasQL();
- }
- result += " using " + using.toRasQL();
- return result;
- }
-
- /* Concatenates all the AxisIterators into one large multi-dimensional object,
- * that will be used to build to RasQL query */
- private void buildAxisIteratorDomain() {
- axisIteratorString = "";
- axisIteratorString += newIteratorName + " in [";
-
- for (int i = 0; i < iterators.size(); i++) {
- if (i > 0) {
- axisIteratorString += ", ";
- }
- AxisIterator ai = iterators.elementAt(i);
- axisIteratorString += ai.getInterval();
- }
-
- axisIteratorString += "]";
- }
-}
+package petascope.wcps.server.core; + +import petascope.exceptions.WCPSException; +import java.util.Vector; +import org.w3c.dom.*; + +public class CondenseScalarExpr implements IRasNode { + + private CondenseOperation op; + private Vector<AxisIterator> iterators; + private IRasNode using; + private IRasNode where; + private String axisIteratorString; + private String newIteratorName; + + public CondenseScalarExpr(Node node, XmlQuery xq) throws WCPSException { + if (node.getNodeName().equals("condense")) { + node = node.getFirstChild(); + } + while ((node != null) && node.getNodeName().equals("#text")) { + node = node.getNextSibling(); + } + + iterators = new Vector(); + newIteratorName = xq.registerNewExpressionWithVariables(); + System.err.println("Parsing Condense Scalar Expression: " + node.getNodeName()); + + while (node != null) { + String name = node.getNodeName(); + if (op == null) { + op = new CondenseOperation(node, xq); + } else if (name.equals("iterator")) { + AxisIterator it = new AxisIterator(node.getFirstChild(), xq, newIteratorName); + iterators.add(it); + } else if (name.equals("where")) { + where = new BooleanScalarExpr(node.getFirstChild(), xq); + } else { + using = new CoverageExpr(node, xq); + } + + node = node.getNextSibling(); + while ((node != null) && node.getNodeName().equals("#text")) { + node = node.getNextSibling(); + } + } + + buildAxisIteratorDomain(); + } + + public String toRasQL() { + String result = "condense " + op.toRasQL() + " over "; + result += axisIteratorString; + if (where != null) { + result += where.toRasQL(); + } + result += " using " + using.toRasQL(); + return result; + } + + /* Concatenates all the AxisIterators into one large multi-dimensional object, + * that will be used to build to RasQL query */ + private void buildAxisIteratorDomain() { + axisIteratorString = ""; + axisIteratorString += newIteratorName + " in ["; + + for (int i = 0; i < iterators.size(); i++) { + if (i > 0) { + axisIteratorString += ", "; + } + AxisIterator ai = iterators.elementAt(i); + axisIteratorString += ai.getInterval(); + } + + axisIteratorString += "]"; + } +} |