I just started with Play and am trying to get some custom constraints on my model.
I have found that this works
@Constraints.Required
@Constraints.MaxLength(15)
@Constraints.MinLength(4)
@Constraints.Pattern(value = "^\\w\\s$")
public String username;
But now I want to add a custom constraint with an own implementation (for checking for uniqueness) So I tried this (it was auto-completed by my IDE so it does exist)
@Constraints.ValidateWith(Account.UniqueValidator.class)
public String username;
I found somewhere (have gone through a lot of links so can't find it anymore, that the class should extend Constraints.Validator
So that is what I did.
private class UniqueValidator extends Constraints.Validator<String>
{
@Override
public boolean isValid(String s) {
return Account.find.where().eq("username", s).findRowCount() == 0;
}
@Override
public F.Tuple<String, Object[]> getErrorMessageKey() {
return null;
}
}
However I don't know what to return in the getErrorMessageKey value, it is a required method to implement. I looked in the play source and I found "something" what looks like this. Namely the NotEmpty validator.
However when you look there you see it returns an Tuple, not an F.Tuple. When I change that in my code it complains that it is not an F.Tuple.
Tried to return
return Tuple("error.invalid", new Object[] {});
As done in the NotEmpty validator link above. But than it says that it needs "new" before Tuple, but that gives me an class with a bunch of required methods to implement. So I guess that is not really the way to go.
When I look at the documentation of play here I need to use the @CheckWith annotation, but when I choose that it says that it cannot find the @CheckWith annotation.
I am lost. :-)