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; }
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; }
@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))); } }