/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.openstack.atlas.api.mgmt.validation.validators;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.Hosts;
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 static org.openstack.atlas.api.mgmt.validation.contexts.HostContext.LOADBALANCER_PUT;
import static org.openstack.atlas.api.mgmt.validation.contexts.HostContext.PUT;
import static org.openstack.atlas.api.mgmt.validation.contexts.HostContext.POST;
import static org.openstack.atlas.api.validation.ValidatorBuilder.build;
public class HostsValidator implements ResourceValidator<Hosts> {
private final Validator<Hosts> validator;
public HostsValidator() {
validator = build(new ValidatorBuilder<Hosts>(Hosts.class) {
{
result(validationTarget().getHosts()).must().not().beEmptyOrNull().forContext(PUT).withMessage("Must provide at least one Host");
result(validationTarget().getHosts()).if_().exist().then().must().delegateTo(new HostValidator().getValidator(), PUT).forContext(PUT);
result(validationTarget().getHosts()).if_().exist().then().must().delegateTo(new HostValidator().getValidator(), POST).forContext(POST);
result(validationTarget().getHosts()).if_().exist().then().must().delegateTo(new HostValidator().getValidator(), LOADBALANCER_PUT).forContext(LOADBALANCER_PUT);
}
});
}
@Override
public ValidatorResult validate(Hosts hosts, Object ctx) {
ValidatorResult result = validator.validate(hosts, ctx);
return ValidatorUtilities.removeEmptyMessages(result);
}
@Override
public Validator<Hosts> getValidator() {
return validator;
}
}