/** Creates {@link MinorIssueConfig} from this bean */ public MinorIssueConfig toMinorIssueConfig() { return new MinorIssueConfig(minor, severity, url); } }
public IssueConfigBean(String majorIssue, MinorIssueConfig minorIssueConfig) { major = majorIssue; minor = minorIssueConfig.getMinor(); severity = minorIssueConfig.getSeverity(); url = minorIssueConfig.getUrl(); }
@VisibleForTesting boolean answerIssueConfigMatchesConfiguredIssues( MajorIssueConfig answerIssueConfig, Map<String, MajorIssueConfig> configuredMajorIssues) { MajorIssueConfig configuredMajorIssue = configuredMajorIssues.get(answerIssueConfig.getMajorIssue()); Map<String, MinorIssueConfig> answerMinorIssues = answerIssueConfig.getMinorIssueConfigsMap(); Map<String, MinorIssueConfig> configuredMinorIssues = configuredMajorIssue.getMinorIssueConfigsMap(); return Sets.intersection(answerMinorIssues.keySet(), configuredMinorIssues.keySet()).stream() .allMatch(minor -> answerMinorIssues.get(minor).equals(configuredMinorIssues.get(minor))); }
private MajorIssueConfig overlayMajorIssueConfig( MajorIssueConfig baseMajorIssueConfig, MajorIssueConfig networkMajorIssueConfig) { Map<String, MinorIssueConfig> networkMinorIssues = networkMajorIssueConfig.getMinorIssueConfigsMap(); ImmutableList.Builder<MinorIssueConfig> combinedMinorIssues = ImmutableList.builder(); // note there is no need to address minor issues not mentioned in base answer baseMajorIssueConfig .getMinorIssueConfigsMap() .forEach( (minorIssueType, baseMinorIssueConfig) -> { MinorIssueConfig networkMinorIssueConfig = networkMinorIssues.get(minorIssueType); if (networkMinorIssueConfig == null) { combinedMinorIssues.add(baseMinorIssueConfig); return; } Integer networkSeverity = networkMinorIssueConfig.getSeverity(); Integer severity = networkSeverity != null ? networkSeverity : baseMinorIssueConfig.getSeverity(); String networkUrl = networkMinorIssueConfig.getUrl(); String url = networkUrl != null && !networkUrl.isEmpty() ? networkUrl : baseMinorIssueConfig.getUrl(); combinedMinorIssues.add(new MinorIssueConfig(minorIssueType, severity, url)); }); return new MajorIssueConfig(baseMajorIssueConfig.getMajorIssue(), combinedMinorIssues.build()); }
@Test public void testConstructorMultipleMinorIssuesSameName() { String minor = "minor"; int finalSeverity = 2; assertThat( new MajorIssueConfig( "major", ImmutableList.of( new MinorIssueConfig(minor, 1, null), new MinorIssueConfig(minor, finalSeverity, null))) .getMinorIssueConfig(minor) .get() .getSeverity(), equalTo(finalSeverity)); }
new Issue( oldIssue.getExplanation(), minorConfig.getSeverity(), oldIssue.getType(), minorConfig.getUrl()); } else { newIssue = oldIssue;
public MajorIssueConfig(String majorIssue, List<MinorIssueConfig> minorIssueConfigs) { Map<String, MinorIssueConfig> minorIssueConfigsMap = new HashMap<>(); if (minorIssueConfigs != null) { minorIssueConfigs.forEach( minorIssueConfig -> minorIssueConfigsMap.put(minorIssueConfig.getMinor(), minorIssueConfig)); } _majorIssue = majorIssue; _minorIssueConfigs = ImmutableMap.copyOf(minorIssueConfigsMap); }
/** Returns a new MajorIssueConfig with the minorIssueConfig inserted. */ public MajorIssueConfig put(MinorIssueConfig minorIssueConfig) { Map<String, MinorIssueConfig> newMap = new HashMap<>(_minorIssueConfigs); newMap.put(minorIssueConfig.getMinor(), minorIssueConfig); return new MajorIssueConfig(_majorIssue, newMap); }
@JsonCreator private static @Nonnull MinorIssueConfig create( @JsonProperty(PROP_MINOR_ISSUE) @Nullable String minorIssue, @JsonProperty(PROP_SEVERITY) @Nullable Integer severity, @JsonProperty(PROP_URL) @Nullable String url) { return new MinorIssueConfig( requireNonNull(minorIssue, "'minorIssue' cannot be null"), severity, url); }
private void addIssue(String network, String major, String minor, int severity, String url) { Response response = getIssueSettingsTarget(network) .post( Entity.entity( new IssueConfigBean(major, new MinorIssueConfig(minor, severity, url)), MediaType.APPLICATION_JSON)); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); }
@VisibleForTesting static @Nonnull Map<String, MajorIssueConfig> computeMajorIssueConfigs(TableAnswerElement table) { Map<String, ImmutableList.Builder<MinorIssueConfig>> majorIssueConfigs = new HashMap<>(); // For every issue column of every row, extract the issue and use it to update the map table.getMetadata().getColumnMetadata().stream() .filter(c -> c.getSchema().equals(Schema.ISSUE)) .map(ColumnMetadata::getName) .flatMap( column -> table.getRowsList().stream() .filter(row -> row.hasNonNull(column)) .map(row -> row.getIssue(column))) .forEach( issue -> majorIssueConfigs .computeIfAbsent(issue.getType().getMajor(), m -> ImmutableList.builder()) .add( new MinorIssueConfig( issue.getType().getMinor(), issue.getSeverity(), issue.getUrl()))); return CommonUtil.toImmutableMap( majorIssueConfigs, Entry::getKey, // major issue type e -> new MajorIssueConfig(e.getKey(), e.getValue().build())); }
@Test public void testAnswerIssueConfigMatchesConfiguredIssuesDifferntMinorNoMatch() { String major = "major"; String minor = "minor"; MajorIssueConfig answerIssueConfig = new MajorIssueConfig(major, ImmutableMap.of(minor, new MinorIssueConfig(minor, 1, null))); Map<String, MajorIssueConfig> configuredMajorIssues = ImmutableMap.of( major, new MajorIssueConfig( major, ImmutableMap.of(minor, new MinorIssueConfig(minor, 2, null)))); assertThat( _manager.answerIssueConfigMatchesConfiguredIssues(answerIssueConfig, configuredMajorIssues), equalTo(false)); }
@Test public void testAnswerIssueConfigMatchesConfiguredIssuesMissingMinorMatches() { String major = "major"; String minor = "minor"; MajorIssueConfig answerIssueConfig = new MajorIssueConfig(major, ImmutableMap.of(minor, new MinorIssueConfig(minor, 1, null))); Map<String, MajorIssueConfig> configuredMajorIssues = ImmutableMap.of(major, new MajorIssueConfig(major, ImmutableMap.of())); assertThat( _manager.answerIssueConfigMatchesConfiguredIssues(answerIssueConfig, configuredMajorIssues), equalTo(true)); }
@Test public void testEquals() { IssueConfigBean group1Elem1 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", null, null)); IssueConfigBean group1Elem2 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", null, null)); IssueConfigBean group2Elem1 = new IssueConfigBean("major2", new MinorIssueConfig("minor1", null, null)); IssueConfigBean group3Elem1 = new IssueConfigBean("major1", new MinorIssueConfig("minor2", null, null)); IssueConfigBean group4Elem1 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", 0, null)); IssueConfigBean group5Elem1 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", null, "localhost")); new EqualsTester() .addEqualityGroup(group1Elem1, group1Elem2) .addEqualityGroup(group2Elem1) .addEqualityGroup(group3Elem1) .addEqualityGroup(group4Elem1) .addEqualityGroup(group5Elem1) .testEquals(); }
@Test public void testPut() { MajorIssueConfig majorConfig = new MajorIssueConfig("major", ImmutableList.of()); // add a minor config MinorIssueConfig minor1Config = new MinorIssueConfig("minor1", 100, "www.cnn.com"); majorConfig = majorConfig.put(minor1Config); assertThat(majorConfig, equalTo(new MajorIssueConfig("major", ImmutableList.of(minor1Config)))); // add another minor config MinorIssueConfig minor2Config = new MinorIssueConfig("minor2", 9, "www"); majorConfig = majorConfig.put(minor2Config); assertThat( majorConfig, equalTo(new MajorIssueConfig("major", ImmutableList.of(minor1Config, minor2Config)))); // add a minor config that overwrite the first one MinorIssueConfig minor1ConfigAgain = new MinorIssueConfig("minor1", 90, "www"); majorConfig = majorConfig.put(minor1ConfigAgain); assertThat( majorConfig, equalTo(new MajorIssueConfig("major", ImmutableList.of(minor2Config, minor1ConfigAgain)))); }
"major", ImmutableList.of( new MinorIssueConfig("minor1", 23, "www.cnn.com"), new MinorIssueConfig("minor2", 24, null)))));
@Test public void testGetIssueConfig() throws IOException { String network = "myNetwork"; String major = "major"; String minor = "minor"; Main.getWorkMgr().initNetwork(network, null); Response response = getIssueConfigTarget(network, major, minor).get(); assertThat(response.getStatus(), equalTo(NOT_FOUND.getStatusCode())); addIssue(network, major, minor, 100, "www.cnn"); response = getIssueConfigTarget(network, major, minor).get(); assertThat(response.getStatus(), equalTo(OK.getStatusCode())); assertThat( response.readEntity(IssueConfigBean.class), equalTo(new IssueConfigBean(major, new MinorIssueConfig(minor, 100, "www.cnn")))); } }
@Test public void testApplyRowIssuesConfigurationNoMatchMinorIssue() { String col = "col"; String major = "major"; String otherMinor = "otherMinor"; String minor = "minor"; Row oldRow = Row.of(col, new Issue("explanation", 5, new Issue.Type(major, minor))); Set<String> issueColumns = ImmutableSet.of(col); Map<String, MajorIssueConfig> issueConfigs = ImmutableMap.of( major, new MajorIssueConfig( major, ImmutableList.of(new MinorIssueConfig(otherMinor, 6, "example.com")))); assertThat( _manager.applyRowIssuesConfiguration(oldRow, issueColumns, issueConfigs), equalTo(oldRow)); }
@Test public void testApplyRowIssuesConfigurationNoMatchMajorIssue() { String col = "col"; String major = "major"; String otherMajor = "otherMajor"; String minor = "minor"; Row oldRow = Row.of(col, new Issue("explanation", 5, new Issue.Type(major, minor))); Set<String> issueColumns = ImmutableSet.of(col); Map<String, MajorIssueConfig> issueConfigs = ImmutableMap.of( otherMajor, new MajorIssueConfig( otherMajor, ImmutableList.of(new MinorIssueConfig(minor, 6, "example.com")))); assertThat( _manager.applyRowIssuesConfiguration(oldRow, issueColumns, issueConfigs), equalTo(oldRow)); }
@Test public void testNullableSeveritySerialization() throws JsonParseException, JsonMappingException, JsonProcessingException, IOException { IssueConfigBean bean0 = new IssueConfigBean("major1", new MinorIssueConfig("minor1", 0, null)); IssueConfigBean beanNull = new IssueConfigBean("major1", new MinorIssueConfig("minor1", null, null)); IssueConfigBean bean0Deserialized = BatfishObjectMapper.mapper() .readValue(BatfishObjectMapper.writeString(bean0), IssueConfigBean.class); IssueConfigBean beanNullDeserialized = BatfishObjectMapper.mapper() .readValue(BatfishObjectMapper.writeString(beanNull), IssueConfigBean.class); new EqualsTester() .addEqualityGroup(bean0, bean0Deserialized) .addEqualityGroup(beanNull, beanNullDeserialized) .testEquals(); } }