private static Subtype checkSubtype(Type type, String subtypeName, String valueName)
     throws Exception {
   Subtype subtype = FieldValueDefinition.getEnum(Subtype.class, subtypeName);
   if (null == subtype) {
     throw new Exception("Subtype \"" + subtypeName + "\" not supported");
   }
   if (!type.isValidSubtype(subtype)) {
     throw new Exception(
         "Subtype \"" + subtypeName + "\" not supported " + "for type " + type.toString());
   }
   return subtype;
 }
  private static void checkProperty(String typeName, String subtypeName, String valueName)
      throws Exception {
    Type type = FieldValueDefinition.getEnum(Type.class, typeName);
    if (null == type) {
      throw new Exception("Type \"" + typeName + "\" not supported");
    }

    switch (type) {
      case TEXT:
        checkString(subtypeName, valueName);
        break;
      case NUMERIC:
        checkNumeric(subtypeName, valueName);
        break;
      case DATE:
        checkDate(subtypeName, valueName);
        break;
    }
  }
 private static Mode checkValue(Type type, Subtype subtype, String valueName, boolean variation)
     throws Exception {
   Mode value = FieldValueDefinition.getEnum(Mode.class, valueName);
   if (null == value) {
     throw new Exception(
         (variation ? "Variation" : "Value") + " \"" + valueName + "\" not supported");
   }
   if (!variation && !subtype.isValidInitialMode(value)
       || variation && !subtype.isValidVariationMode(value)) {
     throw new Exception(
         (variation ? "Variation" : "Value")
             + " \""
             + valueName
             + "\" not supported "
             + "for subtype "
             + subtype.toString()
             + " and type "
             + type.toString());
   }
   return value;
 }