package org.ovirt.engine.core.config.entity.helper;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.type.CollectionType;
import org.ovirt.engine.core.common.migration.ConvergenceConfig;
import org.ovirt.engine.core.common.migration.ConvergenceItem;
import org.ovirt.engine.core.common.migration.ConvergenceItemWithStallingLimit;
import org.ovirt.engine.core.common.migration.MigrationPolicy;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.config.entity.ConfigKey;
import org.ovirt.engine.core.utils.JsonHelper;
public class MigrationPoliciesValueHelper extends StringValueHelper {
@Override
public ValidationResult validate(ConfigKey key, String value) {
if (StringUtils.isEmpty(value)) {
return new ValidationResult(false, "The provided value can not be empty");
}
ObjectMapper mapper = new ObjectMapper();
CollectionType type = mapper.getTypeFactory().constructCollectionType(List.class, MigrationPolicy.class);
try {
mapper.readValue(value, type);
} catch (IOException e) {
return new ValidationResult(false,
String.format("The provided migration policy can not be parsed: '%s'. A valid format is: '%s'",
e.getMessage(), getExamplePolicy()));
}
return new ValidationResult(true);
}
String getExamplePolicy() {
ConvergenceConfig config = new ConvergenceConfig();
config.setInitialItems(Arrays.asList(new ConvergenceItem("setDowntime", 100)));
config.setConvergenceItems(Arrays.asList(new ConvergenceItemWithStallingLimit(1, "setDowntime", 200)));
config.setLastItems(Arrays.asList(new ConvergenceItem("abort")));
List<MigrationPolicy> policies = Arrays.asList(new MigrationPolicy(Guid.Empty, "name of the policy", "description", config));
try {
return JsonHelper.objectToJson(policies, false);
} catch (IOException e) {
// if this fails, than we really want to fail it with an exception
throw new RuntimeException(e);
}
}
}