private DisplayHints getComposition(String displayVariable) { DisplayHints displayHints = new DisplayHints(); Map<String, Composition> compositions = new HashMap<>(); Composition composition = _displayHints.getCompositions().get(displayVariable); compositions.put(displayVariable, composition); displayHints.setCompositions(compositions); Map<String, Extraction> extractions = new HashMap<>(); for (String varName : composition.getDictionary().values()) { extractions.put(varName, _displayHints.getExtractions().get(varName)); } displayHints.setExtractions(extractions); return displayHints; }
@Deprecated public TableMetadata(List<ColumnMetadata> columnMetadata, @Nullable DisplayHints displayHints) { this(columnMetadata, displayHints != null ? displayHints.getTextDesc() : null); }
private DisplayHints getExtraction(String displayVariable) { DisplayHints displayHints = new DisplayHints(); Map<String, Extraction> extractions = new HashMap<>(); extractions.put(displayVariable, _displayHints.getExtractions().get(displayVariable)); displayHints.setExtractions(extractions); return displayHints; }
public Map<String, Map<String, JsonNode>> computeDisplayValues(DisplayHints displayHints) { _displayValues = new HashMap<>(); // reset anything we may have done in the past for (Entry<String, Extraction> entry : displayHints.getExtractions().entrySet()) { JsonPathExtractionHint jpeHint = null; try { jpeHint = JsonPathExtractionHint.fromExtractionHint(entry.getValue()); } catch (IOException e) { throw new BatfishException( "Could not extract JsonPathExtractionHint from ExtractionHint", e); } switch (jpeHint.getUse()) { case PREFIX: extractValuesFromPrefix(entry.getKey(), entry.getValue(), jpeHint); break; case FUNCOFSUFFIX: case PREFIXOFSUFFIX: case SUFFIXOFSUFFIX: extractValuesFromSuffix(entry.getKey(), entry.getValue(), jpeHint); break; default: throw new BatfishException("Unknown use type " + jpeHint.getUse()); } } if (displayHints.getCompositions() != null) { doCompositions(displayHints.getCompositions(), displayHints.getExtractions()); } return _displayValues; }
@Test public void testComputeColumnMaxNoRows() { String columnName = "col"; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), nullValue()); }
@Test public void displayHintsParsingTest() throws IOException { String text = CommonUtil.readResource("org/batfish/datamodel/questions/displayHintsTest.json"); DisplayHints displayHints = BatfishObjectMapper.mapper().readValue(text, DisplayHints.class); // here, we only test for ExtractionHint level concepts // tests that sit with jsonpath question validate if prefix/suffix filters are parsed correctly assertThat( displayHints.getTextDesc().equals("${mynode} has nothing on ${myinterface}"), equalTo(true)); Map<String, Extraction> extractions = displayHints.getExtractions(); assertThat(extractions.size(), equalTo(3)); Extraction hint0 = extractions.get("node1"); assertThat(hint0.getSchemaAsObject(), equalTo(Schema.STRING)); assertThat( hint0.getSchemaAsObject().getBaseType().getCanonicalName(), equalTo("java.lang.String")); assertThat(hint0.getMethod().containsKey("use"), equalTo(true)); Extraction hint1 = extractions.get("interfaces1"); assertThat(hint1.getSchemaAsObject(), equalTo(Schema.list(Schema.STRING))); Extraction hint2 = extractions.get("nodes1"); assertThat(hint2.getSchemaAsObject(), equalTo(Schema.list(Schema.INTEGER))); } }
nodeComp.setDictionary(ImmutableMap.of("name", "outlierNames")); return new DisplayHints( ImmutableMap.of("outliers", nodeComp), extractions.build(),
@Test public void testComputeMajorIssueTypesNoColumn() { String columnName = "col"; String value = "foo"; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.STRING, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); assertThat(AnswerMetadataUtil.computeMajorIssueConfigs(table), equalTo(ImmutableMap.of())); }
@Test public void testComputeColumnMaxNullInteger() { String columnName = "col"; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, null)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), nullValue()); }
public static TableMetadata createMetadata(Question question) { String textDesc = DEFAULT_TEXT_DESC; DisplayHints dhints = question.getDisplayHints(); if (dhints != null && dhints.getTextDesc() != null) { textDesc = dhints.getTextDesc(); } return new TableMetadata(COLUMN_METADATA, textDesc); }
@Test public void testComputeColumnMaxInvalidSchema() { String columnName = "col"; String value = "hello"; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.STRING, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), nullValue()); }
public static TableMetadata createMetadata(Question question) { String textDesc = DEFAULT_TEXT_DESC; DisplayHints dhints = question.getDisplayHints(); if (dhints != null && dhints.getTextDesc() != null) { textDesc = dhints.getTextDesc(); } return new TableMetadata(COLUMN_METADATA, textDesc); } }
@Test public void testComputeColumnMaxOneRowInteger() { String columnName = "col"; int value = 5; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), equalTo(value)); }
@JsonCreator private static TableMetadata jsonCreator( @Nullable @JsonProperty(PROP_COLUMN_METADATA) List<ColumnMetadata> columnMetadata, @Nullable @JsonProperty(PROP_DISPLAY_HINTS) DisplayHints displayHints, @Nullable @JsonProperty(PROP_TEXT_DESC) String textDesc) { return new TableMetadata( columnMetadata, textDesc == null && displayHints != null ? displayHints.getTextDesc() : textDesc); }
@Test public void testComputeMajorIssueTypesNone() { String columnName = "col"; TableMetadata tableMetadata = new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.ISSUE, "foobar")), new DisplayHints().getTextDesc()); TableAnswerElement table = new TableAnswerElement(tableMetadata) .addRow(Row.builder(tableMetadata.toColumnMap()).build()); assertThat(AnswerMetadataUtil.computeMajorIssueConfigs(table), equalTo(ImmutableMap.of())); }
/** * Creates a {@link TableMetadata} object from the question. * * @param question The question * @return The resulting {@link TableMetadata} object */ @VisibleForTesting static TableMetadata createTableMetadata(SwitchedVlanPropertiesQuestion question) { String textDesc = String.format("Properties of VLAN ${%s}.", COL_VLAN_ID); DisplayHints dhints = question.getDisplayHints(); if (dhints != null && dhints.getTextDesc() != null) { textDesc = dhints.getTextDesc(); } return new TableMetadata(createColumnMetadata(), textDesc); }
@Test public void testComputeColumnAggregations() { String columnName = "col"; int value = 5; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); List<ColumnAggregation> aggregations = ImmutableList.of(new ColumnAggregation(Aggregation.MAX, columnName)); assertThat( AnswerMetadataUtil.computeColumnAggregations(table, aggregations, _logger), equalTo(ImmutableMap.of(columnName, ImmutableMap.of(Aggregation.MAX, value)))); }
static TableMetadata createTableMetadata(@Nonnull NodePropertiesQuestion question) { String textDesc = String.format("Properties of node ${%s}.", COL_NODE); DisplayHints dhints = question.getDisplayHints(); if (dhints != null && dhints.getTextDesc() != null) { textDesc = dhints.getTextDesc(); } return new TableMetadata(createColumnMetadata(question.getProperties()), textDesc); }
@Test public void testComputeColumnMaxInvalidColumn() { String columnName = "col"; String invalidColumnName = "invalid"; int value = 5; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); _thrown.expect(IllegalArgumentException.class); AnswerMetadataUtil.computeColumnMax(table, invalidColumnName, _logger); }
/** * Creates a {@link TableMetadata} object from the question. * * @param question The question * @return The resulting {@link TableMetadata} object */ public static TableMetadata createMetadata(Question question) { List<ColumnMetadata> columnMetadata = COLUMN_METADATA.values().stream().collect(ImmutableList.toImmutableList()); String textDesc = String.format( "Filters {%s} contain an unreachable line: ${%s}", COL_SOURCES, COL_UNREACHABLE_LINE); DisplayHints dhints = question.getDisplayHints(); if (dhints != null && dhints.getTextDesc() != null) { textDesc = dhints.getTextDesc(); } return new TableMetadata(columnMetadata, textDesc); }