aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/edu/brown/cs/student/term/Main.java2
-rw-r--r--src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java26
-rw-r--r--src/main/java/edu/brown/cs/student/term/repl/commands/RankCommand.java48
3 files changed, 71 insertions, 5 deletions
diff --git a/src/main/java/edu/brown/cs/student/term/Main.java b/src/main/java/edu/brown/cs/student/term/Main.java
index 5c7497f..1c9b1f7 100644
--- a/src/main/java/edu/brown/cs/student/term/Main.java
+++ b/src/main/java/edu/brown/cs/student/term/Main.java
@@ -8,6 +8,7 @@ import edu.brown.cs.student.term.hub.SuspicionRanker;
import edu.brown.cs.student.term.repl.Command;
import edu.brown.cs.student.term.repl.REPL;
import edu.brown.cs.student.term.repl.commands.LoadCommand;
+import edu.brown.cs.student.term.repl.commands.RankCommand;
import edu.brown.cs.student.term.repl.commands.SetupCommand;
import edu.brown.cs.student.term.trade.Trade;
import joptsimple.OptionParser;
@@ -88,6 +89,7 @@ public final class Main {
HashMap<String, Command> commandHashMap = new HashMap<>();
commandHashMap.put("setup", new SetupCommand());
commandHashMap.put("load", new LoadCommand());
+ commandHashMap.put("rank", new RankCommand());
/** add commands to map here! */
REPL repl = new REPL(commandHashMap);
repl.runREPL();
diff --git a/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java b/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java
index 2b567c2..74628aa 100644
--- a/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java
+++ b/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java
@@ -15,23 +15,36 @@ public class SuspicionRanker {
this.querier = db;
}
- public <K, V extends Comparable<V>> V getMaxOfMap(Map<K, V> map) {
+ private <K, V extends Comparable<V>> V getMaxOfMap(Map<K, V> map) {
Map.Entry<K, V> maxEntry = Collections.max(map.entrySet(), Map.Entry.comparingByValue());
return maxEntry.getValue();
}
- public <K, V extends Comparable<V>> V getMinOfMap(Map<K, V> map) {
+ private <K, V extends Comparable<V>> V getMinOfMap(Map<K, V> map) {
Map.Entry<K, V> maxEntry = Collections.min(map.entrySet(), Map.Entry.comparingByValue());
return maxEntry.getValue();
}
+ private class SuspicionComparator implements Comparator<Holder> {
+ @Override
+ public int compare(Holder o1, Holder o2) {
+ if (o1.getSuspicionScore() > o2.getSuspicionScore()) {
+ return -1;
+ } else if (o1.getSuspicionScore() < o2.getSuspicionScore()) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ }
+
public List<Holder> getSuspicionScoreList(Instant start, Instant end) {
+ PriorityQueue<Holder> orderedSuspicion = new PriorityQueue<>(new SuspicionComparator());
List<Holder> suspicionList = new ArrayList<>();
try {
LinkMapper lm = new LinkMapper(querier);
HubSearch hub = new HubSearch(lm);
Map<Holder, Double> holderToHubScore = hub.runHubSearch(start, end);
- System.out.println(holderToHubScore);
ProfitCalculation pc = new ProfitCalculation(DatabaseQuerier.getConn(), "",
new Date(start.toEpochMilli()),
@@ -58,7 +71,6 @@ public class SuspicionRanker {
profitMax = 1;
}
-
double hubMax = getMaxOfMap(holderToHubScore);
for (Holder guy : holderToHubScore.keySet()) {
@@ -67,12 +79,16 @@ public class SuspicionRanker {
double normalizedHubScore = holderToHubScore.get(guy) / hubMax;
double suspicionScore = normalizedHubScore * 0.6 + normalizedProfitScore * 0.4;
guy.setSuspicionScore(suspicionScore);
- suspicionList.add(guy);
+ orderedSuspicion.add(guy);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("ERROR: Could not connect to database querier");
}
+ int size = orderedSuspicion.size();
+ for(int i = 0; i < size; i++){
+ suspicionList.add(orderedSuspicion.poll());
+ }
return suspicionList;
}
}
diff --git a/src/main/java/edu/brown/cs/student/term/repl/commands/RankCommand.java b/src/main/java/edu/brown/cs/student/term/repl/commands/RankCommand.java
new file mode 100644
index 0000000..2005f19
--- /dev/null
+++ b/src/main/java/edu/brown/cs/student/term/repl/commands/RankCommand.java
@@ -0,0 +1,48 @@
+package edu.brown.cs.student.term.repl.commands;
+
+import edu.brown.cs.student.term.DatabaseQuerier;
+import edu.brown.cs.student.term.hub.Holder;
+import edu.brown.cs.student.term.hub.SuspicionRanker;
+import edu.brown.cs.student.term.repl.Command;
+import org.json.JSONObject;
+
+import java.time.Instant;
+import java.util.List;
+
+public class RankCommand implements Command {
+
+ private String error;
+
+ @Override
+ public String run(String[] args) {
+
+ error = "";
+ if(args.length == 2){
+ try{
+ DatabaseQuerier dq = SetupCommand.getDq();
+ DatabaseQuerier db = SetupCommand.getDq();
+ SuspicionRanker ranker = new SuspicionRanker(db);
+
+ long startMilli = Long.parseLong(args[0]);
+ long endMilli = Long.parseLong(args[1]);
+ Instant start = Instant.ofEpochMilli(startMilli);
+ Instant end = Instant.ofEpochMilli(endMilli);
+ List<Holder> suspiciousHolders = ranker.getSuspicionScoreList(start, end);
+ for(Holder h: suspiciousHolders){
+ System.out.println(h.toString());
+ }
+ } catch (Exception e) {
+ error = "ERROR: Could not connect to database. Ensure this is a valid database.";
+ System.out.println(error);
+ return error;
+ }
+ } else {
+ error = "ERROR: Incorrect number of arguments for suspicion rank command:"
+ + " rank [start date in epoch milliseconds] [end date in epoch milliseconds]";
+ System.out.println(error);
+ return error;
+ }
+ return error;
+
+ }
+}