private String[] getColumnNames(CsvDataAdapter csvDataAdapter) { String[] names = new String[csvDataAdapter.getColumnNames().size()]; for (int i = 0; i < names.length; ++i) { names[i] = "" + csvDataAdapter.getColumnNames().get(i); } return names; }
@Override public void contributeParameters(Map<String, Object> parameters) throws JRException { CsvDataAdapter csvDataAdapter = getCsvDataAdapter(); if (csvDataAdapter != null) { dataStream = DataFileUtils.instance(getJasperReportsContext()) .getDataStream(csvDataAdapter.getDataFile(), parameters); Locale locale = csvDataAdapter.getLocale(); TimeZone timeZone = csvDataAdapter.getTimeZone(); String datePattern = csvDataAdapter.getDatePattern(); String numberPattern = csvDataAdapter.getNumberPattern(); if (csvDataAdapter.isQueryExecuterMode()) { parameters.put(JRCsvQueryExecuterFactory.CSV_INPUT_STREAM, dataStream); if (csvDataAdapter.getEncoding() != null) { parameters.put(JRCsvQueryExecuterFactory.CSV_ENCODING, csvDataAdapter.getEncoding()); } if (locale != null) { parameters.put(JRCsvQueryExecuterFactory.CSV_LOCALE, locale); } if (timeZone != null) { parameters.put(JRCsvQueryExecuterFactory.CSV_TIMEZONE, timeZone); } if (datePattern != null && datePattern.length() > 0) { SimpleDateFormat sdf = null; if (locale == null) { sdf = new SimpleDateFormat(datePattern); } else { sdf = new SimpleDateFormat(datePattern, locale); } if (timeZone != null) { sdf.setTimeZone(timeZone); } parameters.put(JRCsvQueryExecuterFactory.CSV_DATE_FORMAT, sdf); } if (numberPattern != null && numberPattern.length() > 0) { DecimalFormat df = null; if (locale == null) { df = new DecimalFormat(numberPattern); } else { df = new DecimalFormat(numberPattern, DecimalFormatSymbols.getInstance(locale)); } parameters.put(JRCsvQueryExecuterFactory.CSV_NUMBER_FORMAT, df); } parameters.put( JRCsvQueryExecuterFactory.CSV_FIELD_DELIMITER, csvDataAdapter.getFieldDelimiter()); parameters.put( JRCsvQueryExecuterFactory.CSV_RECORD_DELIMITER, csvDataAdapter.getRecordDelimiter()); parameters.put( JRCsvQueryExecuterFactory.CSV_USE_FIRST_ROW_AS_HEADER, new Boolean(csvDataAdapter.isUseFirstRowAsHeader())); if (!csvDataAdapter.isUseFirstRowAsHeader()) { parameters.put( JRCsvQueryExecuterFactory.CSV_COLUMN_NAMES_ARRAY, getColumnNames(csvDataAdapter)); } } else { JRCsvDataSource ds = null; if (csvDataAdapter.getEncoding() == null) { ds = new JRCsvDataSource(dataStream); } else { try { ds = new JRCsvDataSource(dataStream, csvDataAdapter.getEncoding()); } catch (UnsupportedEncodingException e) { throw new JRException(e); } } if (locale != null) { ds.setLocale(locale); } if (timeZone != null) { ds.setTimeZone(timeZone); } if (datePattern != null && datePattern.length() > 0) { SimpleDateFormat sdf = null; if (locale == null) { sdf = new SimpleDateFormat(datePattern); } else { sdf = new SimpleDateFormat(datePattern, locale); } if (timeZone != null) { sdf.setTimeZone(timeZone); } ds.setDateFormat(sdf); } if (numberPattern != null && numberPattern.length() > 0) { DecimalFormat df = null; if (locale == null) { df = new DecimalFormat(numberPattern); } else { df = new DecimalFormat(numberPattern, DecimalFormatSymbols.getInstance(locale)); } ds.setNumberFormat(df); } ds.setFieldDelimiter(csvDataAdapter.getFieldDelimiter().charAt(0)); ds.setRecordDelimiter(csvDataAdapter.getRecordDelimiter()); ds.setUseFirstRowAsHeader(csvDataAdapter.isUseFirstRowAsHeader()); if (!csvDataAdapter.isUseFirstRowAsHeader()) { ds.setColumnNames(getColumnNames(csvDataAdapter)); } parameters.put(JRParameter.REPORT_DATA_SOURCE, ds); } } }