{"action":"created","comment":{"url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/comments/85658255","pull_request_review_id":6362413,"id":85658255,"diff_hunk":"@@ -0,0 +1,1430 @@\n+# A0139915W\n+###### \\java\\seedu\\savvytasker\\commons\\events\\ui\\TaskPanelSelectionChangedEvent.java\n+``` java\n+\n+/**\n+ * Represents a selection change in the Task List Panel\n+ */\n+public class TaskPanelSelectionChangedEvent extends BaseEvent {\n+\n+\n+    private final ReadOnlyTask newSelection;\n+\n+    public TaskPanelSelectionChangedEvent(ReadOnlyTask newSelection){\n+        this.newSelection = newSelection;\n+    }\n+\n+    @Override\n+    public String toString() {\n+        return this.getClass().getSimpleName();\n+    }\n+\n+    public ReadOnlyTask getNewSelection() {\n+        return newSelection;\n+    }\n+}\n+```\n+###### \\java\\seedu\\savvytasker\\commons\\util\\SmartDefaultDates.java\n+``` java\n+/**\n+ * Helper functions for handling dates.\n+ * @author A0139915W\n+ */\n+\n+public class SmartDefaultDates {\n+    \n+    private Date startDateTime;\n+    private Date endDateTime;\n+    private final Calendar calendar;\n+    private final Calendar today;\n+    \n+    /**\n+     * \n+     * @param startDateTime Starting date time\n+     * @param endDateTime Ending date time\n+     * @throws InvalidDateException If endDateTime is earlier than startDateTime\n+     */\n+    public SmartDefaultDates(InferredDate startDateTime, InferredDate endDateTime) {\n+        calendar = Calendar.getInstance();\n+        today = Calendar.getInstance();\n+        today.setTime(new Date());\n+        if (startDateTime == null && endDateTime == null) {\n+            // dates not being supplied, nothing to parse\n+        } else if (startDateTime == null && endDateTime != null) {\n+            // apply smart default for endDateTime only\n+            parseEnd(endDateTime);\n+        } else if (startDateTime != null && endDateTime == null) {\n+            // apply smart default for startDateTime only\n+            parseStart(startDateTime);\n+        } else {\n+            parseStartAndEnd(startDateTime, endDateTime);\n+        }\n+    }\n+    \n+    /**\n+     * Gets the smart default for end date\n+     * @param today the time now\n+     * @param endDateTime the end time to parse\n+     * @return\n+     */\n+    public Date getEnd(InferredDate endDateTime) {\n+        if (endDateTime == null) return null;\n+        calendar.setTime(endDateTime.getInferredDateTime());\n+        if (endDateTime.isDateInferred()) {\n+            // date not supplied\n+            // defaults to today\n+            calendar.set(Calendar.DATE, today.get(Calendar.DATE));\n+            calendar.set(Calendar.MONTH, today.get(Calendar.MONTH));\n+            calendar.set(Calendar.YEAR, today.get(Calendar.YEAR));\n+        } else if (endDateTime.isTimeInferred()) {\n+            // time not supplied\n+            // defaults to 2359\n+            calendar.set(Calendar.HOUR_OF_DAY, 23);\n+            calendar.set(Calendar.MINUTE, 59);\n+            calendar.set(Calendar.SECOND, 59);\n+        }\n+        return calendar.getTime();\n+    }\n+    \n+    /**\n+     * Sets the starting and ending date/time based on defaults for providing only\n+     * the end time\n+     * @param endDateTime end time supplied\n+     */\n+    private void parseEnd(InferredDate endDateTime) {\n+        assert endDateTime.getInferredDateTime() != null;\n+        Date start = new Date();\n+        this.endDateTime = getEnd(endDateTime);\n+        \n+        // Since only end date is supplied, the task is considered to start at 12am today\n+        calendar.setTime(start);\n+        calendar.set(Calendar.HOUR_OF_DAY, 0);\n+        calendar.set(Calendar.MINUTE, 0);\n+        calendar.set(Calendar.SECOND, 0);\n+        this.startDateTime = calendar.getTime();\n+    }\n+\n+    \n+    /**\n+     * Gets the smart default for start date\n+     * @param today the time now\n+     * @param startDateTime the start time to parse\n+     * @return\n+     */\n+    public Date getStart(InferredDate startDateTime) {\n+        if (startDateTime == null) return null;\n+        calendar.setTime(startDateTime.getInferredDateTime());\n+        if (startDateTime.isDateInferred()) {\n+            // date not supplied\n+            // defaults to today\n+            calendar.set(Calendar.DATE, today.get(Calendar.DATE));\n+            calendar.set(Calendar.MONTH, today.get(Calendar.MONTH));\n+            calendar.set(Calendar.YEAR, today.get(Calendar.YEAR));\n+        } else if (startDateTime.isTimeInferred()) {\n+            // time not supplied\n+            // defaults to 0000\n+            calendar.set(Calendar.HOUR_OF_DAY, 0);\n+            calendar.set(Calendar.MINUTE, 0);\n+            calendar.set(Calendar.SECOND, 0);\n+        }\n+        return calendar.getTime();\n+    }\n+\n+    \n+    /**\n+     * Sets the starting and ending date/time based on defaults for providing only\n+     * the start time\n+     * @param startDateTime start time supplied\n+     */\n+    private void parseStart(InferredDate startDateTime) {\n+        assert startDateTime.getInferredDateTime() != null;\n+        Date end = (Date)startDateTime.getInferredDateTime().clone();\n+        this.startDateTime = getStart(startDateTime);\n+        \n+        // Since only the start time is supplied, the task is considered to end today 2359 on the same day as start.\n+        calendar.setTime(end);\n+        calendar.set(Calendar.HOUR_OF_DAY, 23);\n+        calendar.set(Calendar.MINUTE, 59);\n+        calendar.set(Calendar.SECOND, 59);\n+        this.endDateTime = calendar.getTime();\n+    }\n+\n+    /**\n+     * Sets the starting and ending date/time based on defaults for providing both\n+     * start and end times\n+     * @param startDateTime start time supplied\n+     */\n+    private void parseStartAndEnd(InferredDate startDateTime, InferredDate endDateTime) {\n+        assert endDateTime.getInferredDateTime() != null;\n+        assert startDateTime.getInferredDateTime() != null;\n+        Date start = getStart(startDateTime);\n+        Date end = getEnd(endDateTime);\n+        this.startDateTime = start;\n+        this.endDateTime = end;\n+        if (this.startDateTime.compareTo(this.endDateTime) > 0) {\n+            calendar.setTime(this.endDateTime);\n+            calendar.add(Calendar.DATE, 7);\n+            this.endDateTime = calendar.getTime();\n+        }\n+    }\n+    \n+    public Date getStartDate() {\n+        return startDateTime;\n+    }\n+    \n+    public Date getEndDate() {\n+        return endDateTime;\n+    }\n+}\n+```\n+###### \\java\\seedu\\savvytasker\\commons\\util\\SmartDefaultDates.java\n+``` java\n+\n+```\n+###### \\java\\seedu\\savvytasker\\commons\\util\\StringUtil.java\n+``` java\n+    // reused original implementation of 'containsIgnoreCase' to find exact matches\n+    public static boolean containsExactIgnoreCase(String source, String query) {\n+        List<String> strings = Arrays.asList(source);\n+        return strings.stream().filter(s -> s.equalsIgnoreCase(query)).count() > 0;\n+    }\n+\n+    // reused original implementation of 'containsIgnoreCase' to find partial matches\n+    public static boolean containsPartialIgnoreCase(String source, String query) {\n+        if (source == null) return false;\n+        String[] split = source.toLowerCase().split(\"\\\\s+\");\n+        List<String> strings = Arrays.asList(split);\n+        return strings.stream().filter(s -> s.contains(query.toLowerCase())).count() > 0;\n+    }\n+```\n+###### \\java\\seedu\\savvytasker\\commons\\util\\StringUtil.java\n+``` java\n+    \n+    public static boolean containsIgnoreCase(String source, String query) {\n+        String[] split = source.toLowerCase().split(\"\\\\s+\");\n+        List<String> strings = Arrays.asList(split);\n+        return strings.stream().filter(s -> s.equals(query.toLowerCase())).count() > 0;\n+    }\n+\n+    /**\n+     * Returns a detailed message of the t, including the stack trace.\n+     */\n+    public static String getDetails(Throwable t){\n+        assert t != null;\n+        StringWriter sw = new StringWriter();\n+        t.printStackTrace(new PrintWriter(sw));\n+        return t.getMessage() + \"\\n\" + sw.toString();\n+    }\n+\n+    /**\n+     * Returns true if s represents an unsigned integer e.g. 1, 2, 3, ... <br>\n+     *   Will return false for null, empty string, \"-1\", \"0\", \"+1\", and \" 2 \" (untrimmed) \"3 0\" (contains whitespace).\n+     * @param s Should be trimmed.\n+     */\n+    public static boolean isUnsignedInteger(String s){\n+        return s != null && s.matches(\"^0*[1-9]\\\\d*$\");\n+    }\n+}\n+```\n+###### \\java\\seedu\\savvytasker\\logic\\commands\\AddCommand.java\n+``` java\n+    /**\n+     * Creates an add command.\n+     */\n+    public AddCommand(String taskName, InferredDate startDateTime, InferredDate endDateTime,\n+            String location, PriorityLevel priority, RecurrenceType recurringType, \n+            Integer numberOfRecurrence, String category, String description) {\n+        this.taskName = taskName;\n+        this.startDateTime = startDateTime;\n+        this.endDateTime = endDateTime;\n+        this.location = location;\n+        this.priority = priority;\n+        this.recurringType = recurringType;\n+        this.numberOfRecurrence = numberOfRecurrence;\n+        this.category = category;\n+        this.description = description;\n+    }\n+    \n+    private void createTask() {\n+        final boolean isArchived = false;   // all tasks are first added as active tasks\n+        final int taskId = 0;               // taskId to be assigned by ModelManager, leave as 0\n+        \n+        SmartDefaultDates sdd = new SmartDefaultDates(startDateTime, endDateTime);\n+        this.toAdd = new Task(taskId, taskName, sdd.getStartDate(), sdd.getEndDate(),\n+                location, priority, recurringType, numberOfRecurrence,\n+                category, description, isArchived);\n+    }\n+\n+    @Override\n+    public CommandResult execute() {\n+        assert model != null;\n+        createTask();\n+\n+        try {\n+            model.addTask(toAdd);\n+            return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd));\n+        } catch (DuplicateTaskException e) {\n+            return new CommandResult(MESSAGE_DUPLICATE_TASK);\n+        } catch (InvalidDateException ex) {\n+            return new CommandResult(MESSAGE_INVALID_START_END);\n+        }\n+\n+    }\n+```\n+###### \\java\\seedu\\savvytasker\\logic\\commands\\AddCommand.java\n+``` java\n+    \n+    /**\n+     * Checks if a command can perform undo operations\n+     * @return true if the command supports undo, false otherwise\n+     */\n+    @Override\n+    public boolean canUndo() {\n+        return true;\n+    }\n+\n+    /**\n+     * Redo the add command\n+     * @return true if the operation completed successfully, false otherwise\n+     */\n+    @Override\n+    public boolean redo() {\n+        execute();\n+        return false;\n+    }\n+    \n+    /**\n+     * Undo the add command\n+     * @return true if the operation completed successfully, false otherwise\n+     */\n+    @Override\n+    public boolean undo() {\n+        \n+        UnmodifiableObservableList<Task> lastShownList = model.getFilteredTaskListTask();\n+        \n+        for (int i = 0; i < lastShownList.size(); i++) {\n+            if (lastShownList.get(i) == toAdd){\n+                ReadOnlyTask taskToDelete = lastShownList.get(i);\n+                try {\n+                    model.deleteTask(taskToDelete);\n+                } catch (TaskNotFoundException e) {\n+                    e.printStackTrace();\n+                }\n+            }\n+        } \n+        return false;\n+    }\n+    \n+    /**\n+     * Check if command is an undo command\n+     * @return true if the command is an undo operation, false otherwise\n+     */\n+    @Override\n+    public boolean isUndo() {\n+        return false;\n+    }\n+    \n+    /**\n+     * Check if command is a redo command\n+     * @return true if the command is a redo operation, false otherwise\n+     */\n+    @Override\n+    public boolean isRedo(){\n+        return false;\n+    }\n+}\n+```\n+###### \\java\\seedu\\savvytasker\\logic\\commands\\DeleteCommand.java\n+``` java\n+    public DeleteCommand(int[] targetIndices) {\n+        this.targetIndices = targetIndices;\n+    }\n+\n+    @Override\n+    public CommandResult execute() {\n+\n+        UnmodifiableObservableList<ReadOnlyTask> lastShownList = model.getFilteredTaskList();\n+\n+        LinkedList<ReadOnlyTask> tasksToDelete = new LinkedList<ReadOnlyTask>();\n+        for(int targetIndex : this.targetIndices) {\n+            if (lastShownList.size() < targetIndex || targetIndex <= 0) {\n+                indicateAttemptToExecuteIncorrectCommand();\n+                return new CommandResult(Messages.MESSAGE_INVALID_TASK_DISPLAYED_INDEX);\n+            }\n+            tasksToDelete.add(lastShownList.get(targetIndex - 1));\n+        }\n+        \n+        original = new SavvyTasker(model.getSavvyTasker());\n+\n+        StringBuilder resultSb = new StringBuilder();\n+        try {\n+            for(ReadOnlyTask taskToDelete : tasksToDelete) {\n+                model.deleteTask(taskToDelete);\n+                //tasksToUndo.add((Task)taskToDelete);\n+                resultSb.append(String.format(MESSAGE_DELETE_TASK_SUCCESS, taskToDelete));\n+            }\n+        } catch (TaskNotFoundException pnfe) {\n+            assert false : \"The target task cannot be missing\";\n+        }\n+\n+        return new CommandResult(resultSb.toString());\n+    }\n+```\n+###### \\java\\seedu\\savvytasker\\logic\\commands\\DeleteCommand.java\n+``` java\n+    \n+    /**\n+     * Checks if a command can perform undo operations\n+     * @return true if the command supports undo, false otherwise\n+     */\n+    @Override\n+    public boolean canUndo() {\n+        return true;\n+    }\n+\n+    /**\n+     * Redo the delete command\n+     * @return true if the operation completed successfully, false otherwise\n+     */\n+    @Override\n+    public boolean redo() {\n+        execute();\n+        \n+        /*\n+         * METHOD 2\n+        UnmodifiableObservableList<Task> lastShownList = model.getFilteredTaskListTask();","path":"collated/main/A0139915W.md","position":null,"original_position":395,"commit_id":"e41dde8b2cf04bdbbbdafc6217eb4481b98a3dce","original_commit_id":"e760248025068665f471bb8d962d7b868b4cc8e0","user":{"login":"nishantbudhdev","id":956015,"avatar_url":"https://avatars.githubusercontent.com/u/956015?v=3","gravatar_id":"","url":"https://api.github.com/users/nishantbudhdev","html_url":"https://github.com/nishantbudhdev","followers_url":"https://api.github.com/users/nishantbudhdev/followers","following_url":"https://api.github.com/users/nishantbudhdev/following{/other_user}","gists_url":"https://api.github.com/users/nishantbudhdev/gists{/gist_id}","starred_url":"https://api.github.com/users/nishantbudhdev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nishantbudhdev/subscriptions","organizations_url":"https://api.github.com/users/nishantbudhdev/orgs","repos_url":"https://api.github.com/users/nishantbudhdev/repos","events_url":"https://api.github.com/users/nishantbudhdev/events{/privacy}","received_events_url":"https://api.github.com/users/nishantbudhdev/received_events","type":"User","site_admin":false},"body":"Since we are using revision control, remove dead code. ","created_at":"2016-10-30T11:46:41Z","updated_at":"2016-10-30T12:03:35Z","html_url":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4/pull/109#discussion_r85658255","pull_request_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/109","_links":{"self":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/comments/85658255"},"html":{"href":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4/pull/109#discussion_r85658255"},"pull_request":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/109"}}},"pull_request":{"url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/109","id":88445178,"html_url":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4/pull/109","diff_url":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4/pull/109.diff","patch_url":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4/pull/109.patch","issue_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/issues/109","number":109,"state":"open","locked":false,"title":"[T7][T14-C2]","user":{"login":"qhng","id":21073502,"avatar_url":"https://avatars.githubusercontent.com/u/21073502?v=3","gravatar_id":"","url":"https://api.github.com/users/qhng","html_url":"https://github.com/qhng","followers_url":"https://api.github.com/users/qhng/followers","following_url":"https://api.github.com/users/qhng/following{/other_user}","gists_url":"https://api.github.com/users/qhng/gists{/gist_id}","starred_url":"https://api.github.com/users/qhng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qhng/subscriptions","organizations_url":"https://api.github.com/users/qhng/orgs","repos_url":"https://api.github.com/users/qhng/repos","events_url":"https://api.github.com/users/qhng/events{/privacy}","received_events_url":"https://api.github.com/users/qhng/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-10-07T14:09:50Z","updated_at":"2016-10-30T12:03:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6cdb432b669ba0b4f673037d89a989aec94df8c4","assignee":{"login":"nishantbudhdev","id":956015,"avatar_url":"https://avatars.githubusercontent.com/u/956015?v=3","gravatar_id":"","url":"https://api.github.com/users/nishantbudhdev","html_url":"https://github.com/nishantbudhdev","followers_url":"https://api.github.com/users/nishantbudhdev/followers","following_url":"https://api.github.com/users/nishantbudhdev/following{/other_user}","gists_url":"https://api.github.com/users/nishantbudhdev/gists{/gist_id}","starred_url":"https://api.github.com/users/nishantbudhdev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nishantbudhdev/subscriptions","organizations_url":"https://api.github.com/users/nishantbudhdev/orgs","repos_url":"https://api.github.com/users/nishantbudhdev/repos","events_url":"https://api.github.com/users/nishantbudhdev/events{/privacy}","received_events_url":"https://api.github.com/users/nishantbudhdev/received_events","type":"User","site_admin":false},"assignees":[{"login":"nishantbudhdev","id":956015,"avatar_url":"https://avatars.githubusercontent.com/u/956015?v=3","gravatar_id":"","url":"https://api.github.com/users/nishantbudhdev","html_url":"https://github.com/nishantbudhdev","followers_url":"https://api.github.com/users/nishantbudhdev/followers","following_url":"https://api.github.com/users/nishantbudhdev/following{/other_user}","gists_url":"https://api.github.com/users/nishantbudhdev/gists{/gist_id}","starred_url":"https://api.github.com/users/nishantbudhdev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nishantbudhdev/subscriptions","organizations_url":"https://api.github.com/users/nishantbudhdev/orgs","repos_url":"https://api.github.com/users/nishantbudhdev/repos","events_url":"https://api.github.com/users/nishantbudhdev/events{/privacy}","received_events_url":"https://api.github.com/users/nishantbudhdev/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/109/commits","review_comments_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/109/comments","review_comment_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/issues/109/comments","statuses_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/statuses/e41dde8b2cf04bdbbbdafc6217eb4481b98a3dce","head":{"label":"CS2103AUG2016-T14-C2:master","ref":"master","sha":"e41dde8b2cf04bdbbbdafc6217eb4481b98a3dce","user":{"login":"CS2103AUG2016-T14-C2","id":22448014,"avatar_url":"https://avatars.githubusercontent.com/u/22448014?v=3","gravatar_id":"","url":"https://api.github.com/users/CS2103AUG2016-T14-C2","html_url":"https://github.com/CS2103AUG2016-T14-C2","followers_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/followers","following_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/following{/other_user}","gists_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/gists{/gist_id}","starred_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/subscriptions","organizations_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/orgs","repos_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/repos","events_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/events{/privacy}","received_events_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/received_events","type":"Organization","site_admin":false},"repo":{"id":70027137,"name":"main","full_name":"CS2103AUG2016-T14-C2/main","owner":{"login":"CS2103AUG2016-T14-C2","id":22448014,"avatar_url":"https://avatars.githubusercontent.com/u/22448014?v=3","gravatar_id":"","url":"https://api.github.com/users/CS2103AUG2016-T14-C2","html_url":"https://github.com/CS2103AUG2016-T14-C2","followers_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/followers","following_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/following{/other_user}","gists_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/gists{/gist_id}","starred_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/subscriptions","organizations_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/orgs","repos_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/repos","events_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/events{/privacy}","received_events_url":"https://api.github.com/users/CS2103AUG2016-T14-C2/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/CS2103AUG2016-T14-C2/main","description":"Address Book sample application (Level 4)","fork":true,"url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main","forks_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/forks","keys_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/keys{/key_id}","collaborators_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/teams","hooks_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/hooks","issue_events_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/issues/events{/number}","events_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/events","assignees_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/assignees{/user}","branches_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/branches{/branch}","tags_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/tags","blobs_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/git/refs{/sha}","trees_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/git/trees{/sha}","statuses_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/statuses/{sha}","languages_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/languages","stargazers_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/stargazers","contributors_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/contributors","subscribers_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/subscribers","subscription_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/subscription","commits_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/commits{/sha}","git_commits_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/git/commits{/sha}","comments_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/comments{/number}","issue_comment_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/issues/comments{/number}","contents_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/contents/{+path}","compare_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/compare/{base}...{head}","merges_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/merges","archive_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/downloads","issues_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/issues{/number}","pulls_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/pulls{/number}","milestones_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/milestones{/number}","notifications_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/labels{/name}","releases_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/releases{/id}","deployments_url":"https://api.github.com/repos/CS2103AUG2016-T14-C2/main/deployments","created_at":"2016-10-05T03:27:44Z","updated_at":"2016-10-26T06:14:37Z","pushed_at":"2016-10-30T11:57:41Z","git_url":"git://github.com/CS2103AUG2016-T14-C2/main.git","ssh_url":"git@github.com:CS2103AUG2016-T14-C2/main.git","clone_url":"https://github.com/CS2103AUG2016-T14-C2/main.git","svn_url":"https://github.com/CS2103AUG2016-T14-C2/main","homepage":null,"size":4023,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":10,"forks":0,"open_issues":10,"watchers":0,"default_branch":"master"}},"base":{"label":"nus-cs2103-AY1617S1:master","ref":"master","sha":"386c3c108ff4a554d43a8ad38b8be6d56f6d9fcc","user":{"login":"nus-cs2103-AY1617S1","id":20475842,"avatar_url":"https://avatars.githubusercontent.com/u/20475842?v=3","gravatar_id":"","url":"https://api.github.com/users/nus-cs2103-AY1617S1","html_url":"https://github.com/nus-cs2103-AY1617S1","followers_url":"https://api.github.com/users/nus-cs2103-AY1617S1/followers","following_url":"https://api.github.com/users/nus-cs2103-AY1617S1/following{/other_user}","gists_url":"https://api.github.com/users/nus-cs2103-AY1617S1/gists{/gist_id}","starred_url":"https://api.github.com/users/nus-cs2103-AY1617S1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nus-cs2103-AY1617S1/subscriptions","organizations_url":"https://api.github.com/users/nus-cs2103-AY1617S1/orgs","repos_url":"https://api.github.com/users/nus-cs2103-AY1617S1/repos","events_url":"https://api.github.com/users/nus-cs2103-AY1617S1/events{/privacy}","received_events_url":"https://api.github.com/users/nus-cs2103-AY1617S1/received_events","type":"Organization","site_admin":false},"repo":{"id":69563984,"name":"addressbook-level4","full_name":"nus-cs2103-AY1617S1/addressbook-level4","owner":{"login":"nus-cs2103-AY1617S1","id":20475842,"avatar_url":"https://avatars.githubusercontent.com/u/20475842?v=3","gravatar_id":"","url":"https://api.github.com/users/nus-cs2103-AY1617S1","html_url":"https://github.com/nus-cs2103-AY1617S1","followers_url":"https://api.github.com/users/nus-cs2103-AY1617S1/followers","following_url":"https://api.github.com/users/nus-cs2103-AY1617S1/following{/other_user}","gists_url":"https://api.github.com/users/nus-cs2103-AY1617S1/gists{/gist_id}","starred_url":"https://api.github.com/users/nus-cs2103-AY1617S1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nus-cs2103-AY1617S1/subscriptions","organizations_url":"https://api.github.com/users/nus-cs2103-AY1617S1/orgs","repos_url":"https://api.github.com/users/nus-cs2103-AY1617S1/repos","events_url":"https://api.github.com/users/nus-cs2103-AY1617S1/events{/privacy}","received_events_url":"https://api.github.com/users/nus-cs2103-AY1617S1/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4","description":"Address Book sample application (Level 4)","fork":true,"url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4","forks_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/forks","keys_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/teams","hooks_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/hooks","issue_events_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/issues/events{/number}","events_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/events","assignees_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/assignees{/user}","branches_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/branches{/branch}","tags_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/tags","blobs_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/git/refs{/sha}","trees_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/statuses/{sha}","languages_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/languages","stargazers_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/stargazers","contributors_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/contributors","subscribers_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/subscribers","subscription_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/subscription","commits_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/commits{/sha}","git_commits_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/git/commits{/sha}","comments_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/comments{/number}","issue_comment_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/issues/comments{/number}","contents_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/contents/{+path}","compare_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/merges","archive_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/downloads","issues_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/issues{/number}","pulls_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls{/number}","milestones_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/milestones{/number}","notifications_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/labels{/name}","releases_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/releases{/id}","deployments_url":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/deployments","created_at":"2016-09-29T12:08:54Z","updated_at":"2016-10-10T14:55:25Z","pushed_at":"2016-10-30T11:47:46Z","git_url":"git://github.com/nus-cs2103-AY1617S1/addressbook-level4.git","ssh_url":"git@github.com:nus-cs2103-AY1617S1/addressbook-level4.git","clone_url":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4.git","svn_url":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4","homepage":null,"size":240285,"stargazers_count":3,"watchers_count":3,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":118,"mirror_url":null,"open_issues_count":52,"forks":118,"open_issues":52,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/109"},"html":{"href":"https://github.com/nus-cs2103-AY1617S1/addressbook-level4/pull/109"},"issue":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/issues/109"},"comments":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/issues/109/comments"},"review_comments":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/109/comments"},"review_comment":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/pulls/109/commits"},"statuses":{"href":"https://api.github.com/repos/nus-cs2103-AY1617S1/addressbook-level4/statuses/e41dde8b2cf04bdbbbdafc6217eb4481b98a3dce"}}}}
{"actor":{"display_login":"nishantbudhdev"}}