public static Parameter deriveTypedParameter()

in maestro-common/src/main/java/com/netflix/maestro/utils/ParamHelper.java [40:160]


  public static Parameter deriveTypedParameter(
      String name,
      String expression,
      Object evaluatedResult,
      TagList tags,
      ParamMode paramMode,
      Map<String, Object> paramMeta) {
    if (evaluatedResult instanceof String) {
      return StringParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    } else if (evaluatedResult instanceof Long) {
      return LongParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    } else if (evaluatedResult instanceof Double) {
      return DoubleParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    } else if (evaluatedResult instanceof Boolean) {
      return BooleanParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    } else if (evaluatedResult instanceof Map) {
      return MapParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    } else if (evaluatedResult instanceof List) {
      List<?> list = (List<?>) evaluatedResult;
      if (!list.isEmpty()) {
        Object item = list.getFirst();
        if (item instanceof String) {
          return StringArrayParameter.builder()
              .name(name)
              .expression(expression)
              .tags(tags)
              .mode(paramMode)
              .meta(paramMeta)
              .build();
        } else if (item instanceof Long) {
          return LongArrayParameter.builder()
              .name(name)
              .expression(expression)
              .tags(tags)
              .mode(paramMode)
              .meta(paramMeta)
              .build();
        } else if (item instanceof Double || item instanceof BigDecimal) {
          return DoubleArrayParameter.builder()
              .name(name)
              .expression(expression)
              .tags(tags)
              .mode(paramMode)
              .meta(paramMeta)
              .build();
        } else if (item instanceof Boolean) {
          return BooleanArrayParameter.builder()
              .name(name)
              .expression(expression)
              .tags(tags)
              .mode(paramMode)
              .meta(paramMeta)
              .build();
        }
      }
    } else if (evaluatedResult instanceof String[]) {
      return StringArrayParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    } else if (evaluatedResult instanceof long[]) {
      return LongArrayParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    } else if (evaluatedResult instanceof double[]) {
      return DoubleArrayParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    } else if (evaluatedResult instanceof boolean[]) {
      return BooleanArrayParameter.builder()
          .name(name)
          .expression(expression)
          .tags(tags)
          .mode(paramMode)
          .meta(paramMeta)
          .build();
    }
    throw new MaestroInternalError(
        "Param [%s] type [%s] is not supported.", name, evaluatedResult.getClass().getName());
  }