package org.openstack.atlas.api.mgmt.validation.validators;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.Cluster;
import org.openstack.atlas.api.validation.validators.ResourceValidator;
import org.openstack.atlas.api.validation.validators.ValidatorUtilities;
import org.openstack.atlas.api.validation.Validator;
import org.openstack.atlas.api.validation.ValidatorBuilder;
import org.openstack.atlas.api.validation.results.ValidatorResult;
import org.openstack.atlas.api.validation.verifiers.Verifier;
import org.openstack.atlas.api.validation.verifiers.VerifierResult;
import static org.openstack.atlas.api.validation.context.HttpRequestType.POST;
import static org.openstack.atlas.api.validation.context.HttpRequestType.PUT;
import static org.openstack.atlas.api.validation.ValidatorBuilder.build;
public class ClusterValidator implements ResourceValidator<Cluster> {
private final Validator<Cluster> validator;
public ClusterValidator() {
validator = build(new ValidatorBuilder<Cluster>(
Cluster.class) {
{
// ARED EXPECTATIONS
result(validationTarget().getName()).must().not().beEmptyOrNull().withMessage("Must provide a name.");
must().adhereTo(new Verifier<Cluster>() {
@Override
public VerifierResult verify(Cluster cluster) {
return new VerifierResult(cluster.getNumberOfHostMachines() == null && cluster.getNumberOfLoadBalancingConfigurations() == null && cluster.getNumberOfUniqueCustomers() == null && cluster.getUtilization() == null);
}
}).withMessage("Only the proper properties can be made into a request, please remove invalid elements.");
// POST EXPECTATIONS
result(validationTarget().getDataCenter()).must().not().beEmptyOrNull().forContext(POST).withMessage("Must provide a valid Data Center.");
result(validationTarget().getUsername()).must().not().beEmptyOrNull().forContext(POST).withMessage("Must provide a valid username.");
result(validationTarget().getPassword()).must().not().beEmptyOrNull().forContext(POST).withMessage("Must provide a valid password.");
result(validationTarget().getId()).must().not().exist().forContext(POST,PUT).withMessage("Must not include ID for this request.");
result(validationTarget().getDescription()).must().not().beEmptyOrNull().forContext(POST).withMessage("Must provide a description.");
result(validationTarget().getStatus()).must().not().beEmptyOrNull().forContext(POST).withMessage("Must provide a status.");
// PUT EXPECTATIONS
result(validationTarget().getDataCenter()).must().not().exist().forContext(PUT).withMessage("Data Center can not be updated in this request.");
}
});
}
@Override
public ValidatorResult validate(Cluster cluster, Object httpRequestType) {
ValidatorResult result = validator.validate(cluster, httpRequestType);
return ValidatorUtilities.removeEmptyMessages(result);
}
@Override
public Validator<Cluster> getValidator() {
return validator;
}
}