From 56e134b75e5ff847a520f8ffe9985f92fface1f6 Mon Sep 17 00:00:00 2001 From: Michael Aspinwall Date: Mon, 15 Jun 2020 21:23:38 +0000 Subject: [PATCH] Add initial algorithm for calendar, most tests pass but working on 2 more --- .../src/main/java/com/google/sps/Event.java | 5 +- .../java/com/google/sps/FindMeetingQuery.java | 48 ++++++++++++++++++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/walkthroughs/week-5-tdd/project/src/main/java/com/google/sps/Event.java b/walkthroughs/week-5-tdd/project/src/main/java/com/google/sps/Event.java index 87b1194..4185d57 100644 --- a/walkthroughs/week-5-tdd/project/src/main/java/com/google/sps/Event.java +++ b/walkthroughs/week-5-tdd/project/src/main/java/com/google/sps/Event.java @@ -23,7 +23,7 @@ * Event is the container class for when a specific group of people are meeting and are therefore * busy. Events are considered read-only. */ -public final class Event { +public final class Event implements Comparable{ private final String title; private final TimeRange when; private final Set attendees = new HashSet<>(); @@ -75,6 +75,9 @@ public Set getAttendees() { // internal data. return Collections.unmodifiableSet(attendees); } + public int compareTo(Event eventB) { + return this.getWhen().start() - eventB.getWhen().start(); + } @Override public int hashCode() { diff --git a/walkthroughs/week-5-tdd/project/src/main/java/com/google/sps/FindMeetingQuery.java b/walkthroughs/week-5-tdd/project/src/main/java/com/google/sps/FindMeetingQuery.java index dadf069..88d49c8 100644 --- a/walkthroughs/week-5-tdd/project/src/main/java/com/google/sps/FindMeetingQuery.java +++ b/walkthroughs/week-5-tdd/project/src/main/java/com/google/sps/FindMeetingQuery.java @@ -14,10 +14,54 @@ package com.google.sps; -import java.util.Collection; +import java.util.*; public final class FindMeetingQuery { public Collection query(Collection events, MeetingRequest request) { - throw new UnsupportedOperationException("TODO: Implement this method."); + long duration = request.getDuration(); + ArrayList allEvents = new ArrayList(); + Set attendees = new HashSet(request.getAttendees()); + for (Event event : events) { + Set curAttendees = new HashSet(attendees); + curAttendees.retainAll(event.getAttendees()); + if (!(curAttendees.isEmpty())){ + allEvents.add(event); + } + } + Collections.sort(allEvents); + + ArrayList times = new ArrayList(); + int start = 0; + Boolean cont = false; + for (int i = 0; i < allEvents.size(); i++) { + TimeRange curTime = allEvents.get(i).getWhen(); + if (!cont) { + TimeRange curRange = TimeRange.fromStartEnd(start, curTime.start(), false); + if ((long) curRange.duration() >= request.getDuration()) { + times.add(curRange); + } + + } + if ((i != allEvents.size() - 1) && curTime.overlaps(allEvents.get(i+1).getWhen())) { + cont = true; + } else { + start = curTime.end(); + cont = false; + } + + if (i == allEvents.size() - 1) { + TimeRange curRange = TimeRange.fromStartEnd(start, 1440, false); + if ((long) curRange.duration() >= request.getDuration()) { + times.add(curRange); + } + + } + } + if (allEvents.size() == 0) { + times.add(TimeRange.fromStartEnd(0, 1440, false)); + } + return times; } + + }