@StartBeforeEnd private static class MissingStartDate { @SuppressWarnings("unused") private Date end; }
@Override public boolean isValid(Object value, ConstraintValidatorContext context) { Class<?> type = value.getClass(); Field startField = getField(annotation.start(), type); Field endField = getField(annotation.end(), type); Date startValue = getValue(startField, value); if(startValue == null) { return true; } Date endValue = getValue(endField, value); if(endValue == null) { return true; } if(endValue.before(startValue)) { context.buildConstraintViolationWithTemplate("EndBeforeStart") .addNode(annotation.end()) .addConstraintViolation(); return false; } return true; }
@StartBeforeEnd private static class StartEndDate { @SuppressWarnings("unused") private Date start; @SuppressWarnings("unused") private Date end; }
@StartBeforeEnd(start = "startOther", end = "endOther") private static class StartEndOtherDate { @SuppressWarnings("unused") private Date startOther; @SuppressWarnings("unused") private Date endOther; } }
@StartBeforeEnd private static class MissingEndDate { @SuppressWarnings("unused") private Date start; }
@StartBeforeEnd private static class WrongType { @SuppressWarnings("unused") private String start; @SuppressWarnings("unused") private String end; }
@StartBeforeEnd @XmlRootElement(name = "conference", namespace = "urn:ced:conference") public class ConferenceRepresentation extends LinkableRepresentation<Conference> implements Identifiable {
@StartBeforeEnd @XmlRootElement(name = "session", namespace = "urn:ced:session") public class SessionRepresentation extends LinkableRepresentation<Session> implements Identifiable {