Esempio n. 1
0
  /** Decodes a colorizer from a style Rule. */
  public static Colorizer decode(Rule rule) {
    Colorizer.Builder cb = Colorizer.build();

    cb.mode(
        Colorizer.Mode.valueOf(
            rule.string(null, "raster-colorizer-default-mode", "linear").toUpperCase(Locale.ROOT)));
    cb.color(rule.color(null, "raster-colorizer-default-color", RGB.black));

    if (rule.has("raster-colorizer-stops")) {
      // TODO: make this routine more robust
      Mixed m = (Mixed) rule.get("raster-colorizer-stops");
      for (Expression expr : m.expressions()) {
        Function stop = (Function) expr;
        List<Expression> args = stop.args();
        Double value = Convert.toNumber(args.get(0).evaluate(null)).get().doubleValue();
        RGB color = RGB.convert(args.get(1).evaluate(null)).get();
        if (args.size() > 2) {
          Mode mode = Mode.valueOf(args.get(2).evaluate(null).toString().toUpperCase(Locale.ROOT));
          if (args.size() > 3) {
            double epsilon = Convert.toNumber(args.get(3).evaluate(null), Double.class).get();
            if (epsilon != 0d) {
              cb.stop(value, color, epsilon);
            } else {
              cb.stop(value, color, mode);
            }
          } else {
            cb.stop(value, color, mode);
          }
        } else {
          cb.stop(value, color);
        }
      }
    }

    return cb.colorizer();
  }