package org.openstack.atlas.api.mgmt.validation.validators; 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.validators.ResourceValidator; import org.openstack.atlas.api.validation.validators.ValidatorUtilities; import org.openstack.atlas.api.validation.verifiers.MustBeNonNegativeInteger; import org.openstack.atlas.api.validation.verifiers.Verifier; import org.openstack.atlas.api.validation.verifiers.VerifierResult; import org.openstack.atlas.docs.loadbalancers.api.management.v1.Limit; import org.openstack.atlas.service.domain.entities.AccountLimitType; import static org.openstack.atlas.api.validation.ValidatorBuilder.build; import static org.openstack.atlas.api.validation.context.HttpRequestType.POST; import static org.openstack.atlas.api.validation.context.HttpRequestType.PUT; public class AccountLimitValidator implements ResourceValidator<Limit> { private final Validator<Limit> validator; public AccountLimitValidator() { validator = build(new ValidatorBuilder<Limit>(Limit.class) { { // POST EXPECTATIONS result(validationTarget().getName()).must().exist().forContext(POST).withMessage("Must provide a valid limit name."); result(validationTarget().getName()).must().adhereTo(new Verifier<String>() { @Override public VerifierResult verify(String obj) { VerifierResult result = new VerifierResult(false); for (AccountLimitType type : AccountLimitType.values()) { try { result = new VerifierResult(type.equals(AccountLimitType.valueOf(obj))); } catch (Exception e) { return result; } if (result.passed()) { break; } } return result; } }).forContext(POST).withMessage("Must provide a valid limit name."); result(validationTarget().getValue()).must().adhereTo(new MustBeNonNegativeInteger()).forContext(POST).withMessage("Must provide a valid limit value."); // PUT EXPECTATIONS //Who's gonna validate the name? result(validationTarget().getValue()).if_().exist().then().must().adhereTo(new MustBeNonNegativeInteger()).forContext(PUT).withMessage("Must provide a valid limit value."); } }); } @Override public ValidatorResult validate(Limit rateLimit, Object httpRequestType) { ValidatorResult result = validator.validate(rateLimit, httpRequestType); return ValidatorUtilities.removeEmptyMessages(result); } @Override public Validator<Limit> getValidator() { return validator; } }