diff options
Diffstat (limited to 'petascope/src/petascope/wcps/server/core/AxisIterator.java')
-rw-r--r-- | petascope/src/petascope/wcps/server/core/AxisIterator.java | 183 |
1 files changed, 91 insertions, 92 deletions
diff --git a/petascope/src/petascope/wcps/server/core/AxisIterator.java b/petascope/src/petascope/wcps/server/core/AxisIterator.java index 1076d86..8be19b6 100644 --- a/petascope/src/petascope/wcps/server/core/AxisIterator.java +++ b/petascope/src/petascope/wcps/server/core/AxisIterator.java @@ -14,99 +14,98 @@ * 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.math.BigInteger;
-import org.w3c.dom.*;
-
-public class AxisIterator implements IRasNode {
-
- private String var, varTranslation;
- private AxisName axis;
- private NumericScalarExpr hi, lo;
-
- public AxisIterator(Node node, XmlQuery xq, String newIteratorName) throws WCPSException, InvalidCrsException {
- while ((node != null) && node.getNodeName().equals("#text")) {
- node = node.getNextSibling();
- }
- System.err.println("Trying to parse AxisIterator ");
-
- while (node != null) {
- String nodeName = node.getNodeName();
-
- if (nodeName.equals("iteratorVar")) {
- var = node.getTextContent();
- // This variable will be referenced later on. Translate it.
- xq.addReferenceVariable(var, newIteratorName);
- varTranslation = xq.getReferenceVariableName(var);
- } else if (nodeName.equals("axis")) {
- axis = new AxisName(node, xq);
- } else {
- // Should contain the limits
- // TODO: Implement ImageCrsDomainMetadataType class
- if (lo == null) {
- lo = new NumericScalarExpr(node, xq);
- } else if (hi == null) {
- hi = new NumericScalarExpr(node, xq);
- } else {
- throw new WCPSException("Unknown node in AxisIterator: " + nodeName);
- }
- }
-
- node = node.getNextSibling();
- while ((node != null) && node.getNodeName().equals("#text")) {
- node = node.getNextSibling();
- }
- }
- }
-
- public String toRasQL() {
- String result = varTranslation + " in [" + lo.toRasQL() + ":" + hi.toRasQL() + "]";
- return result;
- }
-
- /** Sets a new name for the iterator variable, to be used in the rasql query**/
- public void setVariableTranslation(String newName) {
- varTranslation = newName;
- }
-
- /** Return the Higher bound for the axis iterator.
- * This only works for constant expressions.
- * TODO: implement arbitrary expressions.
- * @return BigInteger
- */
- public BigInteger getHigh() {
- return SDU.str2integer(hi.toRasQL()).get(0);
- }
-
- /** Return the Lower bound for the axis iterator.
- * This only works for constant expressions.
- * TODO: implement arbitrary expressions.
- * @return BIgInteger
- */
- public BigInteger getLow() {
- return SDU.str2integer(lo.toRasQL()).get(0);
- }
-
- /* Return the variable name used in this axis */
- public String getVar() {
- return var;
- }
-
- public String getAxisType() {
- return axis.toRasQL();
- }
-
- /* Returns the m-interval that this axis iterates over in a string form */
- public String getInterval() {
- return lo.toRasQL() + ":" + hi.toRasQL();
- }
-}
+package petascope.wcps.server.core; + +import petascope.exceptions.WCPSException; +import java.math.BigInteger; +import org.w3c.dom.*; +import petascope.exceptions.ExceptionCode; + +public class AxisIterator implements IRasNode { + + private String var, varTranslation; + private AxisName axis; + private NumericScalarExpr hi, lo; + + public AxisIterator(Node node, XmlQuery xq, String newIteratorName) throws WCPSException { + while ((node != null) && node.getNodeName().equals("#text")) { + node = node.getNextSibling(); + } + + while (node != null) { + String nodeName = node.getNodeName(); + + if (nodeName.equals("iteratorVar")) { + var = node.getTextContent(); + // This variable will be referenced later on. Translate it. + xq.addReferenceVariable(var, newIteratorName); + varTranslation = xq.getReferenceVariableName(var); + } else if (nodeName.equals("axis")) { + axis = new AxisName(node, xq); + } else { + // Should contain the limits + // TODO: Implement ImageCrsDomainMetadataType class + if (lo == null) { + lo = new NumericScalarExpr(node, xq); + } else if (hi == null) { + hi = new NumericScalarExpr(node, xq); + } else { + throw new WCPSException(ExceptionCode.UnsupportedCombination, + "Unknown node in AxisIterator: " + nodeName); + } + } + + node = node.getNextSibling(); + while ((node != null) && node.getNodeName().equals("#text")) { + node = node.getNextSibling(); + } + } + } + + public String toRasQL() { + String result = varTranslation + " in [" + lo.toRasQL() + ":" + hi.toRasQL() + "]"; + return result; + } + + /** Sets a new name for the iterator variable, to be used in the rasql query**/ + public void setVariableTranslation(String newName) { + varTranslation = newName; + } + + /** Return the Higher bound for the axis iterator. + * This only works for constant expressions. + * TODO: implement arbitrary expressions. + * @return BigInteger + */ + public BigInteger getHigh() { + return SDU.str2integer(hi.toRasQL()).get(0); + } + + /** Return the Lower bound for the axis iterator. + * This only works for constant expressions. + * TODO: implement arbitrary expressions. + * @return BIgInteger + */ + public BigInteger getLow() { + return SDU.str2integer(lo.toRasQL()).get(0); + } + + /* Return the variable name used in this axis */ + public String getVar() { + return var; + } + + public String getAxisType() { + return axis.toRasQL(); + } + + /* Returns the m-interval that this axis iterates over in a string form */ + public String getInterval() { + return lo.toRasQL() + ":" + hi.toRasQL(); + } +} |