private void extractValuesFromPrefix( String displayVar, Extraction extraction, JsonPathExtractionHint jpeHint) { if (extraction.getSchemaAsObject().getType() == Type.LIST || extraction.getSchemaAsObject().getType() == Type.SET) { throw new BatfishException("Prefix-based hints are incompatible with list or set types"); } for (Entry<String, JsonPathResultEntry> entry : _result.entrySet()) { if (!_displayValues.containsKey(entry.getKey())) { _displayValues.put(entry.getKey(), new HashMap<>()); } String prefixPart = entry.getValue().getPrefixPart(jpeHint.getIndex()); _displayValues.get(entry.getKey()).put(displayVar, new TextNode(prefixPart)); } }
varName, composition.getDictionary().get(varName), compositionName)); if (extractions.get(varName).getSchemaAsObject().getType() == Type.LIST || extractions.get(varName).getSchemaAsObject().getType() == Type.SET) { if (!_displayValues.get(resultKey).containsKey(varName)) { throw new BatfishException( String varName = pEntry.getValue(); JsonNode varNode = _displayValues.get(resultKey).get(varName); if (extractions.get(varName).getSchemaAsObject().getType() == Type.LIST || extractions.get(varName).getSchemaAsObject().getType() == Type.SET) { object.set(propertyName, varNode.get(index)); } else {
case FUNCOFSUFFIX: if (!extraction.getSchemaAsObject().isIntBased()) { throw new BatfishException( "schema must be INT(LIST) with funcofsuffix-based extraction hint"); ? new TextNode(resultEntry.getValue().getPrefixPart(jpeHint.getIndex())) : resultEntry.getValue().getSuffix(); confirmValueType(value, extraction.getSchemaAsObject().getBaseType()); extractedList.add(value); if (extraction.getSchemaAsObject().getType() == Type.LIST || extraction.getSchemaAsObject().getType() == Type.SET) { ArrayNode arrayNode = BatfishObjectMapper.mapper().valueToTree(extractedList); _displayValues.get(entry.getKey()).put(displayVar, arrayNode);
@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))); } }