Example #1
0
  public String toCsv(Csv... records) {
    if (records != null && records.length > 0) {
      String[] header = records[0].getCsvHeader();
      StringWriter writer = new StringWriter();
      try (CSVPrinter printer = getCSVFormat().withHeader(header).print(writer)) {
        for (Csv record : records) {
          Object[] data = record.getCsvData();
          if (data == null || data.length == 0) {
            log.debug("Skipping null or empty record");
            continue;
          }

          for (Object column : data) {
            printer.print(objectToString(column));
          }
          printer.println();
        }
      } catch (IOException e) {
        log.error("Failed to generate CSV", e);
      }

      return writer.toString();
    }

    return null;
  }
  protected DefaultMapper(final Class<T> type, final CoercingConverter coercingConverter) {
    this.type = type;
    this.coercingConverter = coercingConverter;

    int higherIdx = -1;

    Class<?> current = type;
    while (current != Object.class) {
      for (final Field field : type.getDeclaredFields()) {
        final Csv csv = field.getAnnotation(Csv.class);
        if (csv != null) {
          final int pos = csv.index();
          final String name = csv.name();

          final boolean defaultName = Csv.DEFAULT_NAME.equals(name);

          // put each field a single time to avoid to set it twice even if position and name are
          // filled for header output
          if (pos >= 0) {
            if (fieldByPosition.put(pos, field) != null) {
              throw new IllegalArgumentException("multiple field for index " + pos + " in " + type);
            }
            if (!defaultName) {
              headers.put(pos, name);
            }
          } else if (!defaultName) {
            if (fieldByName.put(name, field) != null) {
              throw new IllegalArgumentException(
                  "multiple field for name '" + name + "' in " + type);
            }
          }
          if (pos > higherIdx) {
            higherIdx = pos;
          }

          if (!field.isAccessible()) {
            field.setAccessible(true);
          }
        }
      }
      current = current.getSuperclass();
    }

    maxIndex = higherIdx;
  }