package org.openstack.atlas.api.mgmt.validation.validators; import org.openstack.atlas.docs.loadbalancers.api.management.v1.VirtualIps; 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.VirtualIpContext.POST; import static org.openstack.atlas.api.mgmt.validation.contexts.VirtualIpContext.VIPS_POST; import static org.openstack.atlas.api.validation.ValidatorBuilder.build; public class VirtualIpsValidator implements ResourceValidator<VirtualIps> { private final Validator<VirtualIps> validator; public VirtualIpsValidator() { validator = build(new ValidatorBuilder<VirtualIps>(VirtualIps.class) { { // SHARED EXPECTATIONS result(validationTarget().getVirtualIps()).must().exist().withMessage("Must provide a virtual IP."); //POST EXPECTATATIONS result(validationTarget().getVirtualIps()).if_().exist().then().must().haveSizeOfAtLeast(1).forContext(POST).withMessage("Must provide at least one virtual IP."); result(validationTarget().getVirtualIps()).must().delegateTo(new VirtualIpValidator().getValidator(), POST).forContext(POST); //VIPS_POST EXPECTATIONS result(validationTarget().getVirtualIps()).if_().exist().then().must().haveSizeOfExactly(1).forContext(VIPS_POST).withMessage("Must provide one and only one virtual IP."); result(validationTarget().getVirtualIps()).must().delegateTo(new VirtualIpValidator().getValidator(), VIPS_POST).forContext(VIPS_POST); } }); } @Override public ValidatorResult validate(VirtualIps vips, Object requestType) { ValidatorResult result = validator.validate(vips, requestType); return ValidatorUtilities.removeEmptyMessages(result); } @Override public Validator<VirtualIps> getValidator() { return validator; } }