@Override
  public List<HtmlInput<?>> getInputs() throws DatabaseException {
    // delegate to the formscreen
    List<HtmlInput<?>> inputs = this.getFormScreen().getNewRecordForm().getInputs();

    // remove not-null constraints
    for (HtmlInput<?> i : inputs) i.setNillable(true);

    // add the file input for csv
    FileInput csvInput = new FileInput("__csvdata");
    csvInput.setLabel("CSV file");
    csvInput.setTooltip("choose here your data in comma-separated format.");
    csvInput.setDescription("Select your CSV file here.");
    inputs.add(csvInput);

    return inputs;
  }
  /** Calculates visible columns. Needed for downloads. */
  public List<String> getVisibleColumnNames() {
    // FIXME temporary fix because model not properly used
    // we should instead use getModel().getHiddenColumns().

    List<String> showColumns = new ArrayList<String>();
    try {
      HtmlForm f = getInputs(this.getEntityClass().newInstance(), false);

      for (HtmlInput<?> i : f.getInputs()) {
        if (!i.isHidden()) {
          // strip prefix = this.getEntityClass() + "_"
          String name = i.getName();
          name = name.substring(this.getEntityClass().getSimpleName().length() + 1);

          // then add _label using getSearchField() where needed
          showColumns.add(getSearchField(name));
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return showColumns;
  }