You can use the strategy template .
Each condition can be modeled as a function that receives a message and session and can return an error:
Post -> PostContext -> Optional<String>
You can represent this using the interface:
@FunctionalInterface public interface ValidationCondition { Optional<String> validate(final Post post, final Session session); }
So for example:
public class CreatorValidation implements ValidationCondition { public Optional<String> validate(final Post post, final Session session) { if (post.getCreator().equals(session.getUser()) { return Optional.empty(); } return Optional.of("You should be owner of the post"); } }
Then you can save each check in a list:
final List<ValidationCondition> conditions = new ArrayList<>(); conditions.add(new CreatorValidation()); conditions.add(new ScoreValidation());
Using the list, validations can be applied in bulk:
final List<String> errors = new ArrayList<>(); for (final ValidationCondition condition : conditions) { final Optional<String> error = condition.validate(post, session); if (error.isPresent()) { errors.add(error.get()); } }
Using Java 8 lambdas, you can declare them inline:
final ValidationCondition condition = (post, session) -> { // Custom logic });
sdgfsdh
source share