/**
  * An alternative constructor that allows one to specify whether or not to show columns which are
  * entirely empty. If <code>omitEmptyFields</code> is true, the <code>emptyFields</code> set is
  * filled with the names of the empty fields. This is an expensive operation which requires
  * iteration over potentially all of the titles, so is performed here at construction.
  *
  * <p>Due to this processing, it is not possible to accept an iterator instead of a list, which
  * would be less memory intensive.
  *
  * @param titles the titles to be exported
  * @param ordering an ordering to impose on the fields of each title
  * @param omitEmptyFields whether to omit empty field columns from the output
  */
 public KbartExportFilter(
     List<KbartTitle> titles,
     ColumnOrdering ordering,
     boolean omitEmptyFields,
     boolean omitHeader,
     boolean excludeNoIdTitles,
     boolean showHealthRatings) {
   this.titles = titles;
   this.columnOrdering = ordering;
   this.omitEmptyFields = omitEmptyFields;
   this.omitHeaderRow = omitHeader;
   this.excludeNoIdTitles = excludeNoIdTitles;
   this.showHealthRatings = showHealthRatings;
   // Work out the list of empty fields if necessary
   this.emptyFields = omitEmptyFields ? findEmptyFields() : EnumSet.noneOf(Field.class);
   // Create a list of the visible (non-omitted) fields out of the supplied ordering
   this.visibleColumnOrdering =
       CustomColumnOrdering.copy(columnOrdering).removeFields(emptyFields);
   this.rangeFieldsIncludedInDisplay =
       !CollectionUtil.isDisjoint(visibleColumnOrdering.getFields(), rangeFields);
   this.idFieldsIncludedInDisplay =
       !CollectionUtil.isDisjoint(visibleColumnOrdering.getFields(), idFields);
 }
 public List<ReportColumn> getOrderedColumns() {
   return customColumnOrdering.getOrderedColumns();
 }
 public List<String> getOrderedLabels() {
   return customColumnOrdering.getOrderedLabels();
 }
 public List<Field> getOrderedFields() {
   return customColumnOrdering.getOrderedFields();
 }
 public EnumSet<Field> getFields() {
   return customColumnOrdering.getFields();
 }
 /**
  * Constructor for ordering based on aan array of Fields. This is the safest constructor as it
  * uses enums and therefore needs no checking.
  *
  * @param displayName
  * @param description
  * @param fieldOrder
  */
 PredefinedColumnOrdering(
     final String displayName, final String description, final Field[] fieldOrder) {
   this(displayName, description, CustomColumnOrdering.create(fieldOrder));
 }
 /**
  * Make a predefined ordering from a list of objects. This is a convenience method to make it
  * easier to specify predefined lists in this enum with mixed string/field columns.
  *
  * @param displayName the display name of the ordering
  * @param description a description for the ordering
  * @param columns a list of objects whose string representation will define the ordering
  * @throws
  *     org.lockss.exporter.kbart.KbartExportFilter.CustomColumnOrdering.CustomColumnOrderingException
  *     if there is a problem creating the internal ColumnOrdering
  */
 private PredefinedColumnOrdering(
     final String displayName, final String description, final Object... columns) {
   this(displayName, description, CustomColumnOrdering.createUnchecked(columns));
 }