diff --git a/src/com/exedio/cope/console/CharacterNulCop.java b/src/com/exedio/cope/console/CharacterNulCop.java index 7492ab6e..5dac93f0 100644 --- a/src/com/exedio/cope/console/CharacterNulCop.java +++ b/src/com/exedio/cope/console/CharacterNulCop.java @@ -83,12 +83,6 @@ List getItems() return result; } - @Override - int getNumberOfFilterableColumns() - { - return 1; - } - @Override List> columns() { @@ -97,7 +91,7 @@ List> columns() private static final List> COLUMNS = List.of( column("Field", StringField::getID), - column("CharSet", (out, field) -> + columnNonFilterable("CharSet", (out, field) -> { final CharSet charSet = field.getCharSet(); if(charSet!=null) diff --git a/src/com/exedio/cope/console/FeatureFieldCop.java b/src/com/exedio/cope/console/FeatureFieldCop.java index 70e8b902..e3a45dc2 100644 --- a/src/com/exedio/cope/console/FeatureFieldCop.java +++ b/src/com/exedio/cope/console/FeatureFieldCop.java @@ -105,7 +105,7 @@ List>> columns() private static final List>> COLUMNS = List.of( column("Type", field -> field.getType().getID()), column("Name", field -> field.getName()), - column("Values", (out, field) -> writeValueLong(out, field.getValues().toString())) + columnNonFilterable("Values", (out, field) -> writeValueLong(out, field.getValues().toString())) ); @Override diff --git a/src/com/exedio/cope/console/HashConstraintCop.java b/src/com/exedio/cope/console/HashConstraintCop.java index 45a615c4..579daa5d 100644 --- a/src/com/exedio/cope/console/HashConstraintCop.java +++ b/src/com/exedio/cope/console/HashConstraintCop.java @@ -84,12 +84,6 @@ List getItems() return result; } - @Override - int getNumberOfFilterableColumns() - { - return 1; - } - @Override List> columns() { @@ -109,13 +103,13 @@ List> columns() if(pattern instanceof Media) out.writeRaw(""); }), - column("Content Type", (out, constraint) -> + columnNonFilterable("Content Type", (out, constraint) -> { final Pattern pattern = constraint.getData().getPattern(); if(pattern instanceof Media) out.write(((Media)pattern).getContentTypeDescription().replaceAll(",", ", ")); }), - column("Hash", (out, constraint) -> + columnNonFilterable("Hash", (out, constraint) -> { final String algorithm = constraint.getAlgorithm(); out.write(algorithm); @@ -124,7 +118,7 @@ List> columns() model.isConnected() && !model.getSupportedDataHashAlgorithms().contains(algorithm)); }), - column("SQL", (out, constraint) -> + columnNonFilterable("SQL", (out, constraint) -> { final Query query = getQuery(constraint); if(!query.getType().getModel().isConnected()) diff --git a/src/com/exedio/cope/console/MediaTestableCop.java b/src/com/exedio/cope/console/MediaTestableCop.java index b161af0e..2f2ac1fd 100644 --- a/src/com/exedio/cope/console/MediaTestableCop.java +++ b/src/com/exedio/cope/console/MediaTestableCop.java @@ -71,12 +71,6 @@ List getItems() return result; } - @Override - int getNumberOfFilterableColumns() - { - return 3; - } - @Override List> columns() { diff --git a/src/com/exedio/cope/console/MediaTypeCop.java b/src/com/exedio/cope/console/MediaTypeCop.java index 53c2fb7d..277efc57 100644 --- a/src/com/exedio/cope/console/MediaTypeCop.java +++ b/src/com/exedio/cope/console/MediaTypeCop.java @@ -101,8 +101,8 @@ List> columns() out.write(media.getName()); out.writeRaw(""); }), - column("Content Type", media -> media.getContentTypeDescription().replaceAll(",", ", ")), - column("Query", (out, media) -> + columnNonFilterable("Content Type", media -> media.getContentTypeDescription().replaceAll(",", ", ")), + columnNonFilterable("Query", (out, media) -> { final Condition c = media.bodyMismatchesContentTypeIfSupported(); if(c!=Condition.FALSE) diff --git a/src/com/exedio/cope/console/MinLengthStringFieldCop.java b/src/com/exedio/cope/console/MinLengthStringFieldCop.java index 3a95fb85..12c09aaf 100644 --- a/src/com/exedio/cope/console/MinLengthStringFieldCop.java +++ b/src/com/exedio/cope/console/MinLengthStringFieldCop.java @@ -62,12 +62,6 @@ List getItems() return result; } - @Override - int getNumberOfFilterableColumns() - { - return 1; - } - @Override List> columns() { @@ -76,7 +70,7 @@ List> columns() private static final List> COLUMNS = List.of( column("Field", StringField::toString), - column("Min Length", field -> Format.formatAndHide(0, field.getMinimumLength())) + columnNonFilterable("Min Length", field -> Format.formatAndHide(0, field.getMinimumLength())) ); @Override diff --git a/src/com/exedio/cope/console/SequenceCop.java b/src/com/exedio/cope/console/SequenceCop.java index 0882051b..767fbed2 100644 --- a/src/com/exedio/cope/console/SequenceCop.java +++ b/src/com/exedio/cope/console/SequenceCop.java @@ -96,12 +96,12 @@ List> columns() private static final List> COLUMNS = List.of( column("Type", info -> info.getFeature().getType().getID()), column("Name", info -> info.getFeature().getName()), - column("Start", info -> format(info.getStartL())), - column("Min", info -> format(info.getMinimumL())), - column("Max", info -> format(info.getMaximumL())), - column("Count", info -> format(info.getCountL())), - column("First", (out, info) -> { if(info.isKnown()) out.write(format(info.getFirstL())); }), - column("Last", (out, info) -> { if(info.isKnown()) out.write(format(info.getLastL())); }) + columnNonFilterable("Start", info -> format(info.getStartL())), + columnNonFilterable("Min", info -> format(info.getMinimumL())), + columnNonFilterable("Max", info -> format(info.getMaximumL())), + columnNonFilterable("Count", info -> format(info.getCountL())), + columnNonFilterable("First", (out, info) -> { if(info.isKnown()) out.write(format(info.getFirstL())); }), + columnNonFilterable("Last", (out, info) -> { if(info.isKnown()) out.write(format(info.getLastL())); }) ); @Override diff --git a/src/com/exedio/cope/console/Test.jspm b/src/com/exedio/cope/console/Test.jspm index 10308f71..439d581b 100644 --- a/src/com/exedio/cope/console/Test.jspm +++ b/src/com/exedio/cope/console/Test.jspm @@ -288,7 +288,7 @@ final class Test_Jspm %> <%=column.heading%> - <%if (i + <%if (column.filterable) { %> <%}%> <% diff --git a/src/com/exedio/cope/console/TestCop.java b/src/com/exedio/cope/console/TestCop.java index 3b5fc2d8..c93abf59 100644 --- a/src/com/exedio/cope/console/TestCop.java +++ b/src/com/exedio/cope/console/TestCop.java @@ -449,11 +449,6 @@ String getNoItemsMessage() return "There are no "+name+" in this model."; } - int getNumberOfFilterableColumns() - { - return 2; - } - final String getViolationSqlIfConnected(final I item) { try @@ -479,23 +474,43 @@ String getViolationSql(final I item) static final Column column(final String heading, final Function cell) { - return new Column<>(heading, (out, field) -> out.write(cell.apply(field))); + return new Column<>(heading, toConsumer(cell), true); + } + + // TODO + // I'd rather want to have a modifier method Column#nonFilterable, + // but this causes compiler errors I don't understand. + static final Column columnNonFilterable(final String heading, final Function cell) + { + return new Column<>(heading, toConsumer(cell), false); + } + + private static BiConsumer toConsumer(final Function cell) + { + return (out, field) -> out.write(cell.apply(field)); } static final Column column(final String heading, final BiConsumer cell) { - return new Column<>(heading, cell); + return new Column<>(heading, cell, true); + } + + static final Column columnNonFilterable(final String heading, final BiConsumer cell) + { + return new Column<>(heading, cell, false); } protected static final class Column { final String heading; final BiConsumer cell; + final boolean filterable; - Column(final String heading, final BiConsumer cell) + Column(final String heading, final BiConsumer cell, final boolean filterable) { this.heading = requireNonNull(heading); this.cell = requireNonNull(cell); + this.filterable = filterable; } } diff --git a/src/com/exedio/cope/console/TypeFieldCop.java b/src/com/exedio/cope/console/TypeFieldCop.java index 4773915f..4a7c1d2f 100644 --- a/src/com/exedio/cope/console/TypeFieldCop.java +++ b/src/com/exedio/cope/console/TypeFieldCop.java @@ -105,7 +105,7 @@ List>> columns() private static final List>> COLUMNS = List.of( column("Type", field -> field.getType().getID()), column("Name", field -> field.getName()), - column("Values", (out, field) -> writeValueLong(out, field.getValues().toString())) + columnNonFilterable("Values", (out, field) -> writeValueLong(out, field.getValues().toString())) ); @Override diff --git a/src/com/exedio/cope/console/UnsupportedCheckConstraintByTableCop.java b/src/com/exedio/cope/console/UnsupportedCheckConstraintByTableCop.java index 64898535..26cd6c7e 100644 --- a/src/com/exedio/cope/console/UnsupportedCheckConstraintByTableCop.java +++ b/src/com/exedio/cope/console/UnsupportedCheckConstraintByTableCop.java @@ -106,12 +106,6 @@ List getItems() return result; } - @Override - int getNumberOfFilterableColumns() - { - return 1; - } - UnsupportedConstraintCop toTable(final Table table) { return new UnsupportedConstraintCop(args, testArgs, table.getName()); @@ -122,7 +116,7 @@ List> columns() { return List.of( column("Table", (out, table) -> UnsupportedCheckConstraintByTable_Jspm.writeTableValue(this, out, table)), - column("Condition", (out, table) -> + columnNonFilterable("Condition", (out, table) -> { final StringBuilder bf = new StringBuilder(); appendSQL(table, bf); diff --git a/src/com/exedio/cope/console/UnsupportedConstraintCop.java b/src/com/exedio/cope/console/UnsupportedConstraintCop.java index a05664bb..00862bcb 100644 --- a/src/com/exedio/cope/console/UnsupportedConstraintCop.java +++ b/src/com/exedio/cope/console/UnsupportedConstraintCop.java @@ -120,7 +120,7 @@ List> columns() private static final List> COLUMNS = List.of( column("Table", constraint -> constraint.getTable().getName()), column("Name", constraint -> constraint.getName()), - column("Condition", (out, constraint) -> writeValueLong(out, constraint.getRequiredCondition())) + columnNonFilterable("Condition", (out, constraint) -> writeValueLong(out, constraint.getRequiredCondition())) ); @Override