diff --git a/portfolio/src/main/java/com/google/sps/storage/DatastoreCommentStorage.java b/portfolio/src/main/java/com/google/sps/storage/DatastoreCommentStorage.java index 56db35e..5fb712f 100644 --- a/portfolio/src/main/java/com/google/sps/storage/DatastoreCommentStorage.java +++ b/portfolio/src/main/java/com/google/sps/storage/DatastoreCommentStorage.java @@ -75,7 +75,7 @@ public static Comment entityToComment(Entity entity) { String name = (String) entity.getProperty(ENTITY_NAME_PARAM); String text = (String) entity.getProperty(ENTITY_TEXT_PARAM); long timePosted = (long) entity.getProperty(ENTITY_TIME_PARAM); - + return Comment.builder() .setName(name) .setText(text) diff --git a/walkthroughs/week-5-tdd/intro/src/main/java/com/google/sps/Greeter.java b/walkthroughs/week-5-tdd/intro/src/main/java/com/google/sps/Greeter.java index 0f7371a..0ccd35e 100644 --- a/walkthroughs/week-5-tdd/intro/src/main/java/com/google/sps/Greeter.java +++ b/walkthroughs/week-5-tdd/intro/src/main/java/com/google/sps/Greeter.java @@ -22,6 +22,6 @@ public class Greeter { * Returns a greeting for the given name. */ public String greet(String name) { - return "Hello " + name; + return "Hello " + name.trim(); } } diff --git a/walkthroughs/week-5-tdd/intro/src/test/java/com/google/sps/GreeterTest.java b/walkthroughs/week-5-tdd/intro/src/test/java/com/google/sps/GreeterTest.java index f0fe7bc..2519f1c 100644 --- a/walkthroughs/week-5-tdd/intro/src/test/java/com/google/sps/GreeterTest.java +++ b/walkthroughs/week-5-tdd/intro/src/test/java/com/google/sps/GreeterTest.java @@ -30,4 +30,14 @@ public void testGreeting() { Assert.assertEquals("Hello Ada", greeting); } + + @Test + public void testGreetingTrimsWhitespace() { + Greeter greeter = new Greeter(); + + String greeting = greeter.greet(" Ada "); + + // Whitespace should be trimmed + Assert.assertEquals("Hello Ada", greeting); + } } 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..405bba8 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 @@ -15,9 +15,67 @@ package com.google.sps; import java.util.Collection; +import java.util.Collections; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.Comparator; public final class FindMeetingQuery { public Collection query(Collection events, MeetingRequest request) { - throw new UnsupportedOperationException("TODO: Implement this method."); + //throw new UnsupportedOperationException("TODO: Implement this method."); + + // convert collection of events to list of events for sorting + List eventsArray = new ArrayList<>(events); + + // comparator to sort events by starting time + Comparator compareByEventStart = new Comparator() { + @Override + public int compare(Event a, Event b) { + return Long.compare(a.getWhen().start(), b.getWhen().start()); + } + }; + + Collections.sort(eventsArray, compareByEventStart); + + // collection of available meeting times + Collection openTimes = new ArrayList<>(); + + // initial available time: the entire day + int start = TimeRange.START_OF_DAY; + int end = TimeRange.END_OF_DAY; + + for (Event event: eventsArray) { + TimeRange tryTime = TimeRange.fromStartEnd(start, end, true); + + if (tryTime.overlaps(event.getWhen())) { + // get lists of event attendees + Collection requestedEventAttendees = request.getAttendees(); + Set scheduledEventAttendees = event.getAttendees(); + + for (String attendee: requestedEventAttendees) { + // check for overlapping attendees + if (scheduledEventAttendees.contains(attendee)) { + int newEnd = event.getWhen().start(); + + // see if meeting can be scheduled between start and conflicting event + if (newEnd - start >= request.getDuration()) { + openTimes.add(TimeRange.fromStartEnd(start, newEnd, false)); + } + + start = event.getWhen().end(); + break; + } + } + } + } + + // see if meeting can be scheduled from start to end of day + if (end - start >= request.getDuration()) { + openTimes.add(TimeRange.fromStartEnd(start, end, true)); + } + + return openTimes; + } }