/**
  * Checks cardinality and creates an appropriate exception if out of bounds. The usage code is
  * needed because if min cardinality is > 0, the min # of reps is only required if the usage code
  * is 'R' (see HL7 v2.5 section 2.12.6.4).
  *
  * @param reps the number of reps
  * @param usage usage info
  * @return exceptions
  */
 protected List<ValidationException> testCardinality(int reps, UsageInfo usage) {
   List<ValidationException> violations = new ArrayList<>();
   profileViolatedWhen(
       reps < usage.min && usage.required(),
       violations,
       LESS_THAN_MINIMUM_CARDINALITY,
       usage.name,
       usage.min,
       reps);
   profileViolatedWhen(
       usage.max > 0 && reps > usage.max,
       violations,
       MORE_THAN_MAXIMUM_CARDINALITY,
       usage.name,
       usage.max,
       reps);
   profileViolatedWhen(
       reps > 0 && usage.disallowed(), violations, NOT_SUPPORTED_ELEMENT_PRESENT, usage.name);
   return violations;
 }
 /**
  * Tests an element against the corresponding usage code. The element is required in its encoded
  * form.
  *
  * @param encoded the pipe-encoded message element
  * @param usage the usage code (e.g. "CE")
  */
 protected void testUsage(List<ValidationException> exList, String encoded, UsageInfo usage) {
   if (usage.required()) {
     profileViolatedWhen(encoded.isEmpty(), exList, REQUIRED_ELEMENT_MISSING, usage.name);
   } else if (usage.disallowed()) {
     profileViolatedWhen(!encoded.isEmpty(), exList, NOT_SUPPORTED_ELEMENT_PRESENT, usage.name);
   } else if (usage.nullContext()) {
     profileViolatedWhen(!encoded.isEmpty(), exList, NO_ELEMENTS_AFTER_NULL, usage.name);
   }
   /*
   else if (usage.equalsIgnoreCase("RE")) {
       // can't test anything
   } else if (usage.equalsIgnoreCase("O")) {
       // can't test anything
   } else if (usage.equalsIgnoreCase("C")) {
       // can't test anything yet -- wait for condition syntax in v2.6
   } else if (usage.equalsIgnoreCase("CE")) {
       // can't test anything
   } else if (usage.equalsIgnoreCase("B")) {
       // can't test anything
   }
   */
 }