public static ImmutableMap buildScalingPolicyMap()

in rackspace-autoscale/src/main/java/org/jclouds/rackspace/autoscale/v1/internal/ParseHelper.java [79:107]


   public static ImmutableMap<String, Object> buildScalingPolicyMap(CreateScalingPolicy scalingPolicy) {
      ImmutableMap.Builder<String, Object> scalingPolicyMapBuilder = ImmutableMap.builder();
      scalingPolicyMapBuilder.put("cooldown", scalingPolicy.getCooldown());
      scalingPolicyMapBuilder.put("type", scalingPolicy.getType().toString());
      scalingPolicyMapBuilder.put("name", scalingPolicy.getName());
      // A couple of different scaling policies are supported, such as percent or number based, or targeting specific numbers of instances
      String targetString = scalingPolicy.getTarget();
      Integer targetInt = Ints.tryParse(targetString);
      // Notes:
      // 1. Refactor when autoscale is complete and service is released to dry this code.
      // 2. Refactor to use simpler code for the number parsing. Polymorphism or a facade might work.
      // 3. Potentially remove or rework the enum code.
      Float targetFloat;
      if (targetInt != null) {
         scalingPolicyMapBuilder.put(scalingPolicy.getTargetType().toString(), targetInt);
      } else if ((targetFloat = Floats.tryParse(targetString)) != null) {
         scalingPolicyMapBuilder.put(scalingPolicy.getTargetType().toString(), targetFloat);
      } else {
         scalingPolicyMapBuilder.put(scalingPolicy.getTargetType().toString(), targetString);
      }

      if (scalingPolicy.getSchedulingType() != null
            && scalingPolicy.getType().equals(ScalingPolicyType.SCHEDULE)) {
         // Have to use getters to rebuild map
         scalingPolicyMapBuilder.put("args", ImmutableMap.of(scalingPolicy.getSchedulingType().toString(), scalingPolicy.getSchedulingString()));
      }

      return scalingPolicyMapBuilder.build();
   }