@Test public void allStrategyAccepts() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.ALL); chain.add(new TestSelector(true)); chain.add(new TestSelector(true)); chain.add(new TestSelector(true)); assertTrue(chain.accept(message)); }
/** * Pass the message through the selector chain. Whether the Message is * {@link #accept(Message) accepted} is based upon the tallied results of * the individual selectors' responses in accordance with this chain's * {@link VotingStrategy}. */ @Override public final boolean accept(Message<?> message) { int count = 0; int accepted = 0; for (MessageSelector next : this.selectors) { count++; if (next.accept(message)) { if (this.votingStrategy.equals(VotingStrategy.ANY)) { return true; } accepted++; } else if (this.votingStrategy.equals(VotingStrategy.ALL)) { return false; } } return this.decide(accepted, count); }
@Test public void selectorChain() { MessageSelector selector1 = (MessageSelector) context.getBean("selector1"); MessageSelector selector2 = (MessageSelector) context.getBean("selector2"); MessageSelectorChain chain = (MessageSelectorChain) context.getBean("selectorChain"); List<MessageSelector> selectors = this.getSelectors(chain); assertEquals(VotingStrategy.ALL, this.getStrategy(chain)); assertEquals(selector1, selectors.get(0)); assertEquals(selector2, selectors.get(1)); assertTrue(chain.accept(new GenericMessage<>("test"))); assertTrue(this.context.containsBean("pojoSelector")); }
/** * Pass the message through the selector chain. Whether the Message is * {@link #accept(Message) accepted} is based upon the tallied results of * the individual selectors' responses in accordance with this chain's * {@link VotingStrategy}. */ @Override public final boolean accept(Message<?> message) { int count = 0; int accepted = 0; for (MessageSelector next : this.selectors) { count++; if (next.accept(message)) { if (this.votingStrategy.equals(VotingStrategy.ANY)) { return true; } accepted++; } else if (this.votingStrategy.equals(VotingStrategy.ALL)) { return false; } } return this.decide(accepted, count); }
List<MessageSelector> selectorList4 = this.getSelectors(chain4); assertEquals(selector6, selectorList4.get(0)); assertTrue(chain1.accept(new GenericMessage<>("test1"))); assertTrue(chain2.accept(new GenericMessage<>("test2"))); assertTrue(chain3.accept(new GenericMessage<>("test3"))); assertTrue(chain4.accept(new GenericMessage<>("test4")));
@Test public void majorityStrategyWithOddNumberRejects() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.MAJORITY); chain.add(new TestSelector(false)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); assertFalse(chain.accept(message)); }
/** * Pass the message through the selector chain. Whether the Message is * {@link #accept(Message) accepted} is based upon the tallied results of * the individual selectors' responses in accordance with this chain's * {@link VotingStrategy}. */ public final boolean accept(Message<?> message) { int count = 0; int accepted = 0; for (MessageSelector next : this.selectors) { count++; if (next.accept(message)) { if (this.votingStrategy.equals(VotingStrategy.ANY)) { return true; } accepted++; } else if (this.votingStrategy.equals(VotingStrategy.ALL)) { return false; } } return this.decide(accepted, count); }
@Test public void anyStrategyRejects() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.ANY); chain.add(new TestSelector(false)); chain.add(new TestSelector(false)); chain.add(new TestSelector(false)); chain.add(new TestSelector(false)); assertFalse(chain.accept(message)); }
@Test public void majorityOrTieStrategyWithOddNumberRejects() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.MAJORITY_OR_TIE); chain.add(new TestSelector(false)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); assertFalse(chain.accept(message)); }
@Test public void majorityOrTieStrategyWithOddNumberAccepts() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.MAJORITY_OR_TIE); chain.add(new TestSelector(true)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); assertTrue(chain.accept(message)); }
@Test public void allStrategyRejects() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.ALL); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); chain.add(new TestSelector(true)); assertFalse(chain.accept(message)); }
@Test public void majorityStrategyWithOddNumberAccepts() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.MAJORITY); chain.add(new TestSelector(true)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); assertTrue(chain.accept(message)); }
@Test public void majorityOrTieStrategyWithEvenNumberRejects() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.MAJORITY_OR_TIE); chain.add(new TestSelector(false)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); chain.add(new TestSelector(false)); assertFalse(chain.accept(message)); }
@Test public void majorityStrategyWithEvenNumberAccepts() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.MAJORITY); chain.add(new TestSelector(true)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); chain.add(new TestSelector(true)); assertTrue(chain.accept(message)); }
@Test public void anyStrategyAccepts() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.ANY); chain.add(new TestSelector(false)); chain.add(new TestSelector(false)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); assertTrue(chain.accept(message)); }
@Test public void majorityOrTieStrategyWithEvenNumberAccepts() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.MAJORITY_OR_TIE); chain.add(new TestSelector(true)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); chain.add(new TestSelector(false)); assertTrue(chain.accept(message)); }
@Test public void majorityStrategyWithEvenNumberRejects() { MessageSelectorChain chain = new MessageSelectorChain(); chain.setVotingStrategy(MessageSelectorChain.VotingStrategy.MAJORITY); chain.add(new TestSelector(false)); chain.add(new TestSelector(true)); chain.add(new TestSelector(true)); chain.add(new TestSelector(false)); assertFalse(chain.accept(message)); }