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.DuplicateNodeVerifier;
import org.openstack.atlas.docs.loadbalancers.api.v1.Nodes;
import static org.openstack.atlas.api.validation.ValidatorBuilder.build;
import static org.openstack.atlas.api.validation.context.HttpRequestType.POST;
public class NodesValidator implements ResourceValidator<Nodes> {
private final Validator<Nodes> validator;
public NodesValidator() {
validator = build(new ValidatorBuilder<Nodes>(Nodes.class) {
{
// POST EXPECTATIONS
// result(validationTarget().getNodes()).if_().exist().then().must().cannotExceedSize(25).withMessage("Must not provide more than twenty five nodes per load balancer.");
result(validationTarget().getNodes()).if_().exist().then().must().delegateTo(new NodeValidator().getValidator(), POST).forContext(POST);
result(validationTarget().getNodes()).must().adhereTo(new DuplicateNodeVerifier()).forContext(POST).withMessage("Duplicate nodes detected. Please ensure that the ip address and port are unique for each node.");
}
});
}
@Override
public ValidatorResult validate(Nodes nodes, Object httpRequestType) {
ValidatorResult result = validator.validate(nodes, httpRequestType);
return ValidatorUtilities.removeEmptyMessages(result);
}
@Override
public Validator<Nodes> getValidator() {
return validator;
}
}