code: public Map<String, Map<String, Map<String, Map<String, ?>>>> getAllValidationConstraints(String... types) {
  		Map<String, Map<String, Map<String, Map<String, ?>>>> allConstr = new LinkedHashMap<>();
  		if (types == null || types.length == 0) {
  			types = ParaObjectUtils.getAllTypes(this).values().toArray(new String[0]);
  		}
  		try {
  			for (String aType : types) {
  				Map<String, Map<String, Map<String, ?>>> vc = new LinkedHashMap<>();
  				// add all core constraints first
  				if (ValidationUtils.getCoreValidationConstraints().containsKey(aType)) {
  					vc.putAll(ValidationUtils.getCoreValidationConstraints().get(aType));
  				}
  				// also add the ones that are defined locally for this app
  				Map<String, Map<String, Map<String, ?>>> appConstraints = getValidationConstraints().get(aType);
  				if (appConstraints != null && !appConstraints.isEmpty()) {
  					vc.putAll(appConstraints);
  				}
  				if (!vc.isEmpty()) {
  					allConstr.put(aType, vc);
  				}
  			}
  		} catch (Exception ex) {
  			logger.error(null, ex);
  		}
  		return allConstr;
  	}
docs: Returns all validation constraints for a list of types.
  @param types a list of valid Para data types
  @return a map of validation constraints for given types