code: public DataType<Currency> getType(String grp, Number idx, boolean ml, boolean mv, boolean req, String... params) {
          if( params == null || params.length < 1 ) {
              return new CurrencyAttribute(grp, idx, ml, mv, req);
          }
          else if( params.length == 1 && (params[0] == null || params[0].length() < 1 || params[0].equals("null")) ) {
              return new CurrencyAttribute(grp, idx, ml, mv, req);
          }
          else {
              return new CurrencyAttribute(grp, idx, ml, mv, req, params[0]);
          }
      }
docs: Provides a currency data type instance that supports the specified type rules.
  This data type allows for zero or one type parameters. If no type parameter is specified,
  then the data type will allow any currency value. If one is specified, it is expected
  to be a single, comma-delimited string in which each element is the code for an
  allowed currency. The code should return a valid currency when passed to
  {@link java.util.Currency#getInstance(java.lang.String)}.
  @param grp the group of the data type.
  @param idx the index of the data type.
  @param ml is the type multi-lingual?
  @param mv can this type support multiple values?
  @param req is a value required for this type?
  @param params the type parameters