@GET @Path("/hasvoted/{pollId}/{userId}") public String hasVoted(@PathParam("pollId") String pollid, @PathParam("userId") String userid) { try { NQQuestion poll = Services.vote.pollById(UUID.fromString(pollid)); NQPerson person = Services.social.getByID(userid); if (person == null) return "NoSuchPerson"; for (NQAnswerReceipt has : Services.vote.particpationsForPoll(pollid)) { if (has.voter.equals(userid)) return "true"; } return "false"; } catch (NoSuchPoll e1) { return e1.getClass().getSimpleName(); } }
@POST @Path("/vote") public String vote(String json) { // Todo take the vote intention and make two things System.out.println("About to register vote " + json); C2SVoteRequest o = g.fromJson(json, C2SVoteRequest.class); // get the poll see the type and deserliase based on that NQQuestion p; try { p = Services.vote.pollById(UUID.fromString(o.questionId)); switch (p.type) { case Preferential: System.out.println("VOTE PREF " + json); try { // got to interpret a list of set as a rankedvote. System.out.println("o.choice : " + o.choice); ListOfSetOfString lss = CustomGson.getIt().fromJson(o.choice, ListOfSetOfString.class); System.out.println("LSS " + lss); RankedVote<String> rv = RankedVote.fromListOfSet(lss); System.out.println("rv " + rv); o.choice = CustomGson.getIt().toJson(rv); Services.vote.registerVote(o); } catch (AlreadyVoted | NoToken e1) { return "AlreadyVoted"; } return "Preferential TODO"; case SingleChoice: System.out.println("VOTE SINGLE " + json); NQAnswerReceipt res; try { res = Services.vote.registerVote(o); System.out.println("VOTE SINGLE DONE " + json); return g.toJson(res); } catch (AlreadyVoted e) { System.out.println("VOTE SINGLE Arleardy voted " + json); return "AlreadyVoted"; } catch (NoToken e) { System.out.println("No Token voted " + json); return "NoToken"; } } return "TODO"; } catch (NoSuchPoll e1) { return e1.getClass().getSimpleName(); } }
@GET @Path("/results/{id}") public String results(@PathParam("id") String id) { NQQuestion p; try { p = Services.vote.pollById(UUID.fromString(id)); } catch (NoSuchPoll e) { return e.getClass().getSimpleName(); } switch (p.type) { case Preferential: { System.out.println("RESULTS PREF "); S2CPreferentialResult result = new S2CPreferentialResult(); // build a BallotBox NQResult res = Services.vote.resultsForPoll(id); BallotBox<String> bb = new BallotBox<String>(); for (String vote : res.result.keySet()) { RankedVote<String> ranked = CustomGson.getIt().fromJson(vote, RankedVote.class); bb.add(ranked, res.result.get(vote)); } result.edges = bb.computePairwise().triplets(); result.undisputedWinner = bb.undisputedWinners().size() > 0 ? bb.undisputedWinners().iterator().next() : null; // apply shulze result.shulze = RankedVote.fromListOfSet(new ShulzeOnBallotBox<String>(bb).results()); result.tideman = new TidemanOnBallotBox(bb).results(); result.instant = new InstantRunoffOnBallotBox(bb).results(); // apply Shulze method and get the result System.out.println("Tideman condensed ::: " + result.tideman.toCondense()); System.out.println("Shulze condensed ::: " + result.shulze.toCondense()); String json = g.toJson(result); // System.out.println("\n\n\n\n\n\n\n\n"+json); return json; } case SingleChoice: System.out.println("RESULTS SINGLE "); NQResult res = Services.vote.resultsForPoll(id); String json = g.toJson(res); System.out.println(" >> " + json); return json; default: return "TODO"; } }