Hi Michael,
A more interesting use case that remains unsupported, of which the
previous is kind
of a specialization is: I have a startDate and an endDate and there is no simple way to
express that endDate must be greater or equal than startDate. That would apply to
any Comparable, by the way
It's an interesting request, but I'm not sure whether it pulls its
weight. We'd probably end up with something looking like that:
@Compare(
member1 = "dateOfEntry",
comparison = ComparisonType.LESS_THAN,
member2 = "dateOfCancelation"
)
public class Customer {
public LocalDateTime dateOfEntry;
public LocalDateTime dateOfCancelation;
}
I find it doesn't read overly well. It feels a bit too much like
"programming in annotations" to me. It also raises the question how to
retrieve the values for member1 and member2, getter or field?
But there are simple ways for implementing your requirement. Using
@AssertTrue, you can do it by writing actual, safe Java code:
public class Customer {
public LocalDateTime dateOfEntry;
public LocalDateTime dateOfCancelation;
@AssertTrue
public boolean isEntryAndCancelationDatesConsistent() {
return dateOfEntry.compareTo( dateOfCancelation ) < 0;
}
}
An alternative is the RI's @ScriptAssert. It even discusses your very
example in the docs:
@ScriptAssert(lang = "jexl", script = "_.startDate <
_.endDate",
alias = "_")
public class CalendarEvent {
private Date startDate;
private Date endDate;
//...
}
Would either approach help to address your requirements?
--Gunnar