@JsonCreator
public DisplayHints(
@JsonProperty(PROP_COMPOSITIONS) Map<String, Composition> compositions,
@JsonProperty(PROP_EXTRACTIONS) Map<String, Extraction> extractions,
@JsonProperty(PROP_TEXT_DESC) String textDesc) {
_compositions = firstNonNull(compositions, new HashMap<>());
_extractions = firstNonNull(extractions, new HashMap<>());
_textDesc = firstNonNull(textDesc, "");
Set<String> varsInEntities = new HashSet<>();
for (Entry<String, Composition> entry : _compositions.entrySet()) {
entry.getValue().validate(entry.getKey());
varsInEntities.addAll(entry.getValue().getVars());
}
for (Entry<String, Extraction> entry : _extractions.entrySet()) {
entry.getValue().validate(entry.getKey());
}
Set<String> varsInExtractionHints = _extractions.keySet();
SetView<String> missingExtractionVars = Sets.difference(varsInEntities, varsInExtractionHints);
if (!missingExtractionVars.isEmpty()) {
throw new BatfishException(
"entities refer to variables that are not in extraction hints: " + missingExtractionVars);
}
Set<String> commonNames = Sets.intersection(varsInExtractionHints, _compositions.keySet());
if (!commonNames.isEmpty()) {
throw new BatfishException(
"entities and extraction vars should not have common names: " + commonNames);
}
}