예제 #1
0
  public static List<Filter> parseExtendedOperators(
      Node node, org.opengis.filter.FilterFactory factory) {
    List<Filter> extOps = new ArrayList();

    // TODO: this doesn't actually handle the case of an extended operator that does not take
    // any arguments
    if (node.hasChild(Expression.class)) {
      // case of a single operator containing a single expression
      Node n = node.getChild(Expression.class);
      Name opName = new NameImpl(n.getComponent().getNamespace(), n.getComponent().getName());

      Filter extOp =
          lookupExtendedOperator(opName, Arrays.asList((Expression) n.getValue()), factory);
      if (extOp != null) {
        extOps.add(extOp);
      }
    } else if (node.hasChild(Map.class)) {
      List<Node> children = node.getChildren(Map.class);
      for (Node n : children) {
        Name opName = new NameImpl(n.getComponent().getNamespace(), n.getComponent().getName());
        Map map = (Map) n.getValue();

        List<Expression> expressions = new ArrayList();
        for (Object o : map.values()) {
          if (o instanceof Expression) {
            expressions.add((Expression) o);
          }
        }

        Filter extOp = lookupExtendedOperator(opName, expressions, factory);
        if (extOp != null) {
          extOps.add(extOp);
        }
      }
    }

    return extOps;
  }