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();
}