package org.openstack.atlas.api.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.verifiers.DuplicateMetaVerifier; import org.openstack.atlas.docs.loadbalancers.api.v1.Metadata; import static org.openstack.atlas.api.validation.ValidatorBuilder.build; import static org.openstack.atlas.api.validation.context.HttpRequestType.POST; public class MetadataValidator implements ResourceValidator<Metadata> { private final Validator<Metadata> validator; public MetadataValidator() { validator = build(new ValidatorBuilder<Metadata>(Metadata.class) { { // POST EXPECTATIONS result(validationTarget().getMetas()).must().not().beEmptyOrNull().forContext(POST).withMessage("Must provide at least one metadata item"); result(validationTarget().getMetas()).if_().exist().then().must().cannotExceedSize(25).withMessage("Must not provide more than twenty five metadata items per load balancer."); result(validationTarget().getMetas()).if_().exist().then().must().delegateTo(new MetaValidator().getValidator(), POST).forContext(POST); result(validationTarget().getMetas()).must().adhereTo(new DuplicateMetaVerifier()).forContext(POST).withMessage("Duplicate keys detected. Please ensure that the key is unique for each metadata item."); } }); } @Override public ValidatorResult validate(Metadata metadata, Object context) { ValidatorResult result = validator.validate(metadata, context); return ValidatorUtilities.removeEmptyMessages(result); } @Override public Validator<Metadata> getValidator() { return validator; } }