Merging small changes.
[pingpong.git] / Code / Projects / SmartPlugDetector / src / main / java / edu / uci / iotproject / comparison / PatternComparisonTask.java
1 package edu.uci.iotproject.comparison;
2
3 import edu.uci.iotproject.Conversation;
4 import edu.uci.iotproject.FlowPattern;
5
6 import java.util.concurrent.Callable;
7 import java.util.function.BiFunction;
8
9 /**
10  * A task that compares a given {@link Conversation} and {@link FlowPattern} using a provided comparison function.
11  * The task implements {@link Callable} and can hence be executed on a background thread.
12  *
13  * @author Janus Varmarken {@literal <jvarmark@uci.edu>}
14  * @author Rahmadi Trimananda {@literal <rtrimana@uci.edu>}
15  */
16 public class PatternComparisonTask<R extends AbstractPatternComparisonResult<?>> implements Callable<R> {
17
18     private final Conversation mConversation;
19     private final FlowPattern mFlowPattern;
20     private final BiFunction<Conversation, FlowPattern, R> mComparator;
21
22     /**
23      * Create a new {@code PatternComparisonTask}.
24      *
25      * @param conversation The conversation to compare against {@code pattern}.
26      * @param pattern The pattern to compare against {@code conversation}.
27      * @param comparisonFunction The function that compares {@code pattern} and {@code conversation}.
28      */
29     public PatternComparisonTask(Conversation conversation, FlowPattern pattern, BiFunction<Conversation, FlowPattern, R> comparisonFunction) {
30         this.mConversation = conversation;
31         this.mFlowPattern = pattern;
32         this.mComparator = comparisonFunction;
33     }
34
35     @Override
36     public R call() throws Exception {
37         return mComparator.apply(mConversation, mFlowPattern);
38     }
39
40 }