{"action":"created","comment":{"url":"https://api.github.com/repos/ezScrum/ezScrum/pulls/comments/26821763","id":26821763,"diff_hunk":"@@ -4,239 +4,201 @@\n import java.util.ArrayList;\n import java.util.Date;\n \n-import ntut.csie.ezScrum.issue.core.IIssue;\n-import ntut.csie.ezScrum.issue.core.ITSEnum;\n-import ntut.csie.ezScrum.issue.internal.Issue;\n-import ntut.csie.ezScrum.issue.sql.service.core.Configuration;\n+import ntut.csie.ezScrum.dao.StoryDAO;\n import ntut.csie.ezScrum.issue.sql.service.internal.MantisService;\n-import ntut.csie.ezScrum.iteration.core.IStory;\n-import ntut.csie.ezScrum.iteration.core.ScrumEnum;\n-import ntut.csie.ezScrum.iteration.iternal.Story;\n+import ntut.csie.ezScrum.iteration.core.IReleasePlanDesc;\n+import ntut.csie.ezScrum.iteration.core.ISprintPlanDesc;\n import ntut.csie.ezScrum.pic.core.IUserSession;\n import ntut.csie.ezScrum.web.dataInfo.AttachFileInfo;\n import ntut.csie.ezScrum.web.dataInfo.StoryInfo;\n import ntut.csie.ezScrum.web.dataObject.AttachFileObject;\n-import ntut.csie.ezScrum.web.dataObject.HistoryObject;\n+import ntut.csie.ezScrum.web.dataObject.ProjectObject;\n+import ntut.csie.ezScrum.web.dataObject.SprintObject;\n+import ntut.csie.ezScrum.web.dataObject.StoryObject;\n import ntut.csie.ezScrum.web.dataObject.TagObject;\n+import ntut.csie.ezScrum.web.dataObject.TaskObject;\n+import ntut.csie.ezScrum.web.helper.ReleasePlanHelper;\n import ntut.csie.jcis.resource.core.IProject;\n \n public class ProductBacklogMapper {\n \tprivate IProject mProject;\n-\tprivate Configuration mConfig;\n-\tprivate IUserSession mUserSession;\n \tprivate MantisService mMantisService;\n \n \tpublic ProductBacklogMapper(IProject project, IUserSession userSession) {\n \t\tmProject = project;\n-\t\tmUserSession = userSession;\n-\t\tmConfig = new Configuration(mUserSession);\n-\t\tmMantisService = new MantisService(mConfig);\n \t}\n-\n-\tpublic ArrayList<IStory> getUnclosedIssues(String category)\n-\t\t\tthrows SQLException {\n-\t\tmMantisService.openConnect();\n-\t\tIIssue[] issues = mMantisService\n-\t\t\t\t.getIssues(mProject.getName(), category);\n-\t\tmMantisService.closeConnect();\n-\n-\t\tArrayList<IStory> list = new ArrayList<IStory>();\n-\t\tfor (IIssue issue : issues) {\n-\t\t\tif (ITSEnum.getStatus(issue.getStatus()) < ITSEnum.CLOSED_STATUS) {\n-\t\t\t\tlist.add(new Story(issue));\n+\t\n+\tpublic ArrayList<StoryObject> getUnclosedStories() {\n+\t\tProjectObject project = ProjectObject.get(mProject.getName());\n+\t\tArrayList<StoryObject> list = new ArrayList<StoryObject>();\n+\t\tArrayList<StoryObject> stories = StoryDAO.getInstance().getStoriesByProjectId(project.getId());\n+\t\tfor (StoryObject story : stories) {\n+\t\t\tif (story.getStatus() != StoryObject.STATUS_DONE) {\n+\t\t\t\tlist.add(story);\n \t\t\t}\n \t\t}\n \t\treturn list;\n \t}\n \n-\t// 回傳某種 category的issue\n-\tpublic IIssue[] getIssues(String category) throws SQLException {\n-\t\tmMantisService.openConnect();\n-\t\tIIssue[] issues = mMantisService.getIssues(mProject.getName(), category);\n-\t\tmMantisService.closeConnect();\n-\t\treturn issues;\n-\t}\n-\n-\tpublic void updateStoryRelation(long issueId, String releaseId,\n-\t\t\tString sprintId, String estimate, String importance, Date date) {\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.updateStoryRelationTable(issueId, mProject.getName(),\n-\t\t\t\treleaseId, sprintId, estimate, importance, date);\n-\t\tmMantisService.closeConnect();\n-\t}\n-\n-\t// get all stories\n-\tpublic ArrayList<IStory> getAllStoriesByProjectName() {\n-\t\tmMantisService.openConnect();\n-\t\tArrayList<IStory> issues = mMantisService.getStorys(mProject.getName());\n-\t\tmMantisService.closeConnect();\n-\t\treturn issues;\n+\tpublic void updateStoryRelation(long storyId, long sprintId, int estimate, int importance, Date date) {\n+\t\tStoryObject story = StoryObject.get(storyId);\n+\t\tstory.setSprintId(sprintId)\n+\t\t     .setEstimate(estimate)\n+\t\t     .setImportance(importance)\n+\t\t     .save(date.getTime());\n \t}\n \n \t// get all stories by release\n-\tpublic ArrayList<IStory> connectToGetStoryByRelease(String releaseId,\n-\t\t\tString sprintId) {\n-\n-\t\tmMantisService.openConnect();\n-\t\t// 找出 Category 為 Story\n-\t\tIIssue[] issues = mMantisService.getIssues(mProject.getName(),\n-\t\t\t\tScrumEnum.STORY_ISSUE_TYPE, releaseId, sprintId, null);\n+\tpublic ArrayList<StoryObject> getStoryByRelease(String releaseId, String sprintId) {\n+\t\tReleasePlanHelper releasePlanHelper = new ReleasePlanHelper(mProject);\n+\t\tIReleasePlanDesc releasePlan = releasePlanHelper.getReleasePlan(releaseId);\n+\t\t\n+\t\tArrayList<StoryObject> storie = new ArrayList<StoryObject>();\n \n-\t\tArrayList<IStory> list = new ArrayList<IStory>();\n-\t\tfor (IIssue issue : issues) {\n-\t\t\tlist.add(new Story(issue));\n+\t\tfor (ISprintPlanDesc sprint : releasePlan.getSprintDescList()) {\n+\t\t\tArrayList<StoryObject> storiesInSprint = StoryObject.getStoriesBySprintId(Long.parseLong(sprint.getID()));\n+\t\t\tfor (StoryObject story : storiesInSprint) {\n+\t\t\t\tstorie.add(story);\n+\t\t\t}\n \t\t}\n-\n-\t\tmMantisService.closeConnect();\n-\t\treturn list;\n+\t\treturn storie;\n \t}\n \n-\tpublic IIssue getIssue(long id) {\n-\t\tmMantisService.openConnect();\n-\t\tIIssue issue = mMantisService.getIssue(id);\n-\t\tmMantisService.closeConnect();\n-\t\treturn issue;\n+\tpublic StoryObject getStory(long id) {\n+\t\treturn StoryObject.get(id);\n \t}\n \t\n-\tpublic void updateIssueValue(IIssue newIssue, boolean addHistory) {\n-\t\tlong issueId = newIssue.getIssueID();\n-\t\tIIssue oldIssue = getIssue(issueId);\n-\t\t\n-\t\tif (addHistory) {\n-\t\t\tif (!newIssue.getSummary().equals(oldIssue.getSummary())) {\n-\t\t\t\taddHistory(issueId, newIssue.getIssueType(), HistoryObject.TYPE_NAME,\n-\t\t\t\t\t\toldIssue.getSummary(), newIssue.getSummary());\n-\t\t\t}\n-\t\t\tif (!newIssue.getValue().equals(oldIssue.getValue())) {\n-\t\t\t\taddHistory(issueId, newIssue.getIssueType(), HistoryObject.TYPE_VALUE,\n-\t\t\t\t\t\toldIssue.getValue(), newIssue.getValue());\n-\t\t\t}\n-\t\t\tif (!newIssue.getImportance().equals(oldIssue.getImportance())) {\n-\t\t\t\taddHistory(issueId, newIssue.getIssueType(), HistoryObject.TYPE_IMPORTANCE,\n-\t\t\t\t\t\toldIssue.getImportance(), newIssue.getImportance());\n-\t\t\t}\n-\t\t\tif (!newIssue.getEstimated().equals(oldIssue.getEstimated())) {\n-\t\t\t\taddHistory(issueId, newIssue.getIssueType(), HistoryObject.TYPE_ESTIMATE,\n-\t\t\t\t\t\toldIssue.getEstimated(), newIssue.getEstimated());\n-\t\t\t}\n-\t\t\tif (!newIssue.getHowToDemo().equals(oldIssue.getHowToDemo())) {\n-\t\t\t\taddHistory(issueId, newIssue.getIssueType(), HistoryObject.TYPE_HOWTODEMO,\n-\t\t\t\t\t\toldIssue.getHowToDemo(), newIssue.getHowToDemo());\n-\t\t\t}\n-\t\t\tif (!newIssue.getNotes().equals(oldIssue.getNotes())) {\n-\t\t\t\taddHistory(issueId, newIssue.getIssueType(), HistoryObject.TYPE_NOTE,\n-\t\t\t\t\t\toldIssue.getNotes(), newIssue.getNotes());\n-\t\t\t}\n+\tpublic void updateStory(StoryInfo storyInfo) {\n+\t\t// process story info tag String\n+\t\tArrayList<Long> tagIds = new ArrayList<Long>();\n+\t\tfor (String tagName : storyInfo.tags.split(\",\")) {\n+\t\t\tTagObject tag = TagObject.get(tagName);\n+\t\t\ttagIds.add(tag.getId());\n \t\t}\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.updateBugNote(newIssue);\n-\t\tmMantisService.closeConnect();\n-\t}\n-\n-\tpublic IIssue updateIssueValue(long issueId, String name, String value, String importance, String estimate, String howToDemo, String notes) {\n-\t\tIIssue issue = getIssue(issueId);\n \t\t\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.updateBugNote(issue);\n-\t\tmMantisService.closeConnect();\n+\t\tStoryObject story = StoryObject.get(storyInfo.id);\n+\t\tstory.setName(storyInfo.name)\n+\t         .setEstimate(storyInfo.estimate)\n+\t         .setImportance(storyInfo.importance)\n+\t         .setNotes(storyInfo.notes)\n+\t         .setHowToDemo(storyInfo.howToDemo)\n+\t         .setSprintId(storyInfo.sprintId)\n+\t         .setStatus(storyInfo.status)\n+\t         .setValue(storyInfo.value)\n+\t         .save();\n+\t\tstory.setTags(tagIds);\n+\t}\n+\n+\tpublic StoryObject addStory(StoryInfo storyInfo) {\n+\t\tProjectObject project = ProjectObject.get(mProject.getName());\n \t\t\n-\t\treturn getIssue(issueId);\n-\t}\n-\n-\tpublic IIssue addStory(StoryInfo storyInformation) {\n-\t\tmMantisService.openConnect();\n-\t\tIIssue story = new Issue();\n-\n-\t\tstory.setProjectID(mProject.getName());\n-\t\tstory.setSummary(storyInformation.getName());\n-\t\tstory.setDescription(storyInformation.getDescription());\n-\t\tstory.setCategory(ScrumEnum.STORY_ISSUE_TYPE);\n-\t\tlong storyId = mMantisService.newIssue(story);\n-\n-\t\tmMantisService.closeConnect();\n-\t\treturn getIssue(storyId);\n-\t}\n-\n-\t\n-\n-\tpublic void modifyName(long storyId, String name, Date modifyDate) {\n-\t\tIIssue task = getIssue(storyId);\n-\n-\t\tif (!task.getSummary().equals(name)) {\n-\t\t\tmMantisService.openConnect();\n-\t\t\tmMantisService.updateName(task, name, modifyDate);\n-\t\t\tmMantisService.closeConnect();\n+\t\t// process story info tag String\n+\t\tArrayList<Long> tagIds = new ArrayList<Long>();\n+\t\tfor(String tagName : storyInfo.tags.split(\",\")){\n+\t\t\tTagObject tag = TagObject.get(tagName);\n+\t\t\ttagIds.add(tag.getId());\n+\t\t}\n+\t\t\n+\t\tStoryObject story = new StoryObject(project.getId());\n+\t\tstory.setName(storyInfo.name)\n+\t\t     .setEstimate(storyInfo.estimate)\n+\t\t     .setImportance(storyInfo.importance)\n+\t\t     .setNotes(storyInfo.notes)\n+\t\t     .setHowToDemo(storyInfo.howToDemo)\n+\t\t     .setSprintId(storyInfo.sprintId)\n+\t\t     .setSprintId(storyInfo.sprintId)\n+\t\t     .setStatus(storyInfo.status)\n+\t\t     .setValue(storyInfo.value)\n+\t\t     .save();\n+\t\tstory.setTags(tagIds);\n+\t\treturn getStory(story.getId());\n+\t}\n+\n+\tpublic void modifyStoryName(long storyId, String name, Date modifyDate) {\n+\t\tStoryObject story = getStory(storyId);\n+\n+\t\tif ((story != null) && (!story.getName().equals(name))) {\n+\t\t\tstory.setName(name);\n+\t\t\tstory.save(modifyDate.getTime());\n \t\t}\n \t}\n \t\n \t// delete story 用\n-\tpublic void deleteStory(String storyId) {\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.deleteStory(storyId);\n-\t\tmMantisService.closeConnect();\n+\tpublic void deleteStory(long storyId) {\n+\t\tStoryObject story = StoryObject.get(storyId);\n+\t\tif(story != null){\n+\t\t\tstory.delete();\n+\t\t}\n \t}\n \n \tpublic void removeTask(long taskId, long parentId) {\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.removeRelationship(parentId, taskId, ITSEnum.PARENT_RELATIONSHIP);\n-\t\tmMantisService.closeConnect();\n+\t\tStoryObject story = StoryObject.get(parentId);\n+\t\tArrayList<TaskObject> tasks = story.getTasks();\n+\t\tfor(TaskObject taskObject : tasks){\n+\t\t\tif(taskObject.getId() == taskId){\n+\t\t\t\ttaskObject.setStoryId(TaskObject.NO_PARENT);\n+\t\t\t\ttaskObject.save();\n+\t\t\t}\n+\t\t}\n \t}\n \n \t// 新增自訂分類標籤\n \tpublic long addNewTag(String name) {\n-\t\tmMantisService.openConnect();\n-\t\tlong id = mMantisService.addNewTag(name, mProject.getName());\n-\t\tmMantisService.closeConnect();\n-\t\treturn id;\n+\t\tProjectObject project = ProjectObject.get(mProject.getName());\n+\t\tTagObject tag = new TagObject(name, project.getId());\n+\t\ttag.save();\n+\t\treturn tag.getId();\n \t}\n \n \t// 刪除自訂分類標籤\n \tpublic void deleteTag(long id) {\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.deleteTag(id, mProject.getName());\n-\t\tmMantisService.closeConnect();\n+\t\tTagObject tag = TagObject.get(id);\n+\t\tif(tag != null){\n+\t\t\ttag.delete();\n+\t\t}\n \t}\n \n \t// 取得自訂分類標籤列表\n-\tpublic ArrayList<TagObject> getTagList() {\n-\t\tmMantisService.openConnect();\n-\t\tArrayList<TagObject> tags = mMantisService.getTagList(mProject.getName());\n-\t\tmMantisService.closeConnect();\n+\tpublic ArrayList<TagObject> getTags() {\n+\t\tArrayList<TagObject> tags = TagObject.getTags();\n \t\treturn tags;\n \t}\n \n \t// 對Story設定自訂分類標籤\n-\tpublic void addStoryTag(String storyId, long tagId) {\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.addStoryTag(storyId, tagId);\n-\t\tmMantisService.closeConnect();\n+\tpublic void addStoryTag(long storyId, long tagId) {\n+\t\tStoryObject story = StoryObject.get(storyId);\n+\t\tif(story != null){\n+\t\t\tstory.addTag(tagId);\n+\t\t}\n \t}\n \n \t// 移除Story的自訂分類標籤\n-\tpublic void removeStoryTag(String storyId, long tagId) {\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.removeStoryTag(storyId, tagId);\n-\t\tmMantisService.closeConnect();\n+\tpublic void removeStoryTag(long storyId, long tagId) {\n+\t\tStoryObject story = StoryObject.get(storyId);\n+\t\tif(story != null){\n+\t\t\tstory.removeTag(tagId);\n+\t\t}\n \t}\n \n \tpublic void updateTag(long tagId, String tagName) {\n-\t\tmMantisService.openConnect();\n-\t\tmMantisService.updateTag(tagId, tagName, mProject.getName());\n-\t\tmMantisService.closeConnect();\n+\t\tTagObject tag = TagObject.get(tagId);\n+\t\tif(tag != null){\n+\t\t\ttag.setName(tagName);\n+\t\t\ttag.save();\n+\t\t}\n \t}\n \n \tpublic boolean isTagExist(String name) {","path":"java/ntut/csie/ezScrum/web/mapper/ProductBacklogMapper.java","position":343,"original_position":347,"commit_id":"ea163620b44423b364d701452388f5670e0bee3a","original_commit_id":"dde7ce78b9ce79cb143b74b76df804765359ff7d","user":{"login":"Jay-Liao","id":7368076,"avatar_url":"https://avatars.githubusercontent.com/u/7368076?v=3","gravatar_id":"","url":"https://api.github.com/users/Jay-Liao","html_url":"https://github.com/Jay-Liao","followers_url":"https://api.github.com/users/Jay-Liao/followers","following_url":"https://api.github.com/users/Jay-Liao/following{/other_user}","gists_url":"https://api.github.com/users/Jay-Liao/gists{/gist_id}","starred_url":"https://api.github.com/users/Jay-Liao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Jay-Liao/subscriptions","organizations_url":"https://api.github.com/users/Jay-Liao/orgs","repos_url":"https://api.github.com/users/Jay-Liao/repos","events_url":"https://api.github.com/users/Jay-Liao/events{/privacy}","received_events_url":"https://api.github.com/users/Jay-Liao/received_events","type":"User","site_admin":false},"body":"done","created_at":"2015-03-20T06:57:17Z","updated_at":"2015-03-20T06:57:17Z","html_url":"https://github.com/ezScrum/ezScrum/pull/83#discussion_r26821763","pull_request_url":"https://api.github.com/repos/ezScrum/ezScrum/pulls/83","_links":{"self":{"href":"https://api.github.com/repos/ezScrum/ezScrum/pulls/comments/26821763"},"html":{"href":"https://github.com/ezScrum/ezScrum/pull/83#discussion_r26821763"},"pull_request":{"href":"https://api.github.com/repos/ezScrum/ezScrum/pulls/83"}}},"pull_request":{"url":"https://api.github.com/repos/ezScrum/ezScrum/pulls/83","id":31586580,"html_url":"https://github.com/ezScrum/ezScrum/pull/83","diff_url":"https://github.com/ezScrum/ezScrum/pull/83.diff","patch_url":"https://github.com/ezScrum/ezScrum/pull/83.patch","issue_url":"https://api.github.com/repos/ezScrum/ezScrum/issues/83","number":83,"state":"open","locked":false,"title":"Story 7102 new productbacklogmapper","user":{"login":"ibmboy19","id":6712103,"avatar_url":"https://avatars.githubusercontent.com/u/6712103?v=3","gravatar_id":"","url":"https://api.github.com/users/ibmboy19","html_url":"https://github.com/ibmboy19","followers_url":"https://api.github.com/users/ibmboy19/followers","following_url":"https://api.github.com/users/ibmboy19/following{/other_user}","gists_url":"https://api.github.com/users/ibmboy19/gists{/gist_id}","starred_url":"https://api.github.com/users/ibmboy19/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ibmboy19/subscriptions","organizations_url":"https://api.github.com/users/ibmboy19/orgs","repos_url":"https://api.github.com/users/ibmboy19/repos","events_url":"https://api.github.com/users/ibmboy19/events{/privacy}","received_events_url":"https://api.github.com/users/ibmboy19/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-03-20T03:52:11Z","updated_at":"2015-03-20T06:57:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"49dc36d6dfd2797de97f8a84fbe7c61664668cbf","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ezScrum/ezScrum/pulls/83/commits","review_comments_url":"https://api.github.com/repos/ezScrum/ezScrum/pulls/83/comments","review_comment_url":"https://api.github.com/repos/ezScrum/ezScrum/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ezScrum/ezScrum/issues/83/comments","statuses_url":"https://api.github.com/repos/ezScrum/ezScrum/statuses/ea163620b44423b364d701452388f5670e0bee3a","head":{"label":"ezScrum:story_7102_new_productbacklogmapper","ref":"story_7102_new_productbacklogmapper","sha":"ea163620b44423b364d701452388f5670e0bee3a","user":{"login":"ezScrum","id":5744174,"avatar_url":"https://avatars.githubusercontent.com/u/5744174?v=3","gravatar_id":"","url":"https://api.github.com/users/ezScrum","html_url":"https://github.com/ezScrum","followers_url":"https://api.github.com/users/ezScrum/followers","following_url":"https://api.github.com/users/ezScrum/following{/other_user}","gists_url":"https://api.github.com/users/ezScrum/gists{/gist_id}","starred_url":"https://api.github.com/users/ezScrum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezScrum/subscriptions","organizations_url":"https://api.github.com/users/ezScrum/orgs","repos_url":"https://api.github.com/users/ezScrum/repos","events_url":"https://api.github.com/users/ezScrum/events{/privacy}","received_events_url":"https://api.github.com/users/ezScrum/received_events","type":"Organization","site_admin":false},"repo":{"id":13950021,"name":"ezScrum","full_name":"ezScrum/ezScrum","owner":{"login":"ezScrum","id":5744174,"avatar_url":"https://avatars.githubusercontent.com/u/5744174?v=3","gravatar_id":"","url":"https://api.github.com/users/ezScrum","html_url":"https://github.com/ezScrum","followers_url":"https://api.github.com/users/ezScrum/followers","following_url":"https://api.github.com/users/ezScrum/following{/other_user}","gists_url":"https://api.github.com/users/ezScrum/gists{/gist_id}","starred_url":"https://api.github.com/users/ezScrum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezScrum/subscriptions","organizations_url":"https://api.github.com/users/ezScrum/orgs","repos_url":"https://api.github.com/users/ezScrum/repos","events_url":"https://api.github.com/users/ezScrum/events{/privacy}","received_events_url":"https://api.github.com/users/ezScrum/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ezScrum/ezScrum","description":"An open source project for scrum","fork":false,"url":"https://api.github.com/repos/ezScrum/ezScrum","forks_url":"https://api.github.com/repos/ezScrum/ezScrum/forks","keys_url":"https://api.github.com/repos/ezScrum/ezScrum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ezScrum/ezScrum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ezScrum/ezScrum/teams","hooks_url":"https://api.github.com/repos/ezScrum/ezScrum/hooks","issue_events_url":"https://api.github.com/repos/ezScrum/ezScrum/issues/events{/number}","events_url":"https://api.github.com/repos/ezScrum/ezScrum/events","assignees_url":"https://api.github.com/repos/ezScrum/ezScrum/assignees{/user}","branches_url":"https://api.github.com/repos/ezScrum/ezScrum/branches{/branch}","tags_url":"https://api.github.com/repos/ezScrum/ezScrum/tags","blobs_url":"https://api.github.com/repos/ezScrum/ezScrum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ezScrum/ezScrum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ezScrum/ezScrum/git/refs{/sha}","trees_url":"https://api.github.com/repos/ezScrum/ezScrum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ezScrum/ezScrum/statuses/{sha}","languages_url":"https://api.github.com/repos/ezScrum/ezScrum/languages","stargazers_url":"https://api.github.com/repos/ezScrum/ezScrum/stargazers","contributors_url":"https://api.github.com/repos/ezScrum/ezScrum/contributors","subscribers_url":"https://api.github.com/repos/ezScrum/ezScrum/subscribers","subscription_url":"https://api.github.com/repos/ezScrum/ezScrum/subscription","commits_url":"https://api.github.com/repos/ezScrum/ezScrum/commits{/sha}","git_commits_url":"https://api.github.com/repos/ezScrum/ezScrum/git/commits{/sha}","comments_url":"https://api.github.com/repos/ezScrum/ezScrum/comments{/number}","issue_comment_url":"https://api.github.com/repos/ezScrum/ezScrum/issues/comments{/number}","contents_url":"https://api.github.com/repos/ezScrum/ezScrum/contents/{+path}","compare_url":"https://api.github.com/repos/ezScrum/ezScrum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ezScrum/ezScrum/merges","archive_url":"https://api.github.com/repos/ezScrum/ezScrum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ezScrum/ezScrum/downloads","issues_url":"https://api.github.com/repos/ezScrum/ezScrum/issues{/number}","pulls_url":"https://api.github.com/repos/ezScrum/ezScrum/pulls{/number}","milestones_url":"https://api.github.com/repos/ezScrum/ezScrum/milestones{/number}","notifications_url":"https://api.github.com/repos/ezScrum/ezScrum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ezScrum/ezScrum/labels{/name}","releases_url":"https://api.github.com/repos/ezScrum/ezScrum/releases{/id}","created_at":"2013-10-29T08:16:22Z","updated_at":"2015-02-27T08:47:00Z","pushed_at":"2015-03-20T06:53:43Z","git_url":"git://github.com/ezScrum/ezScrum.git","ssh_url":"git@github.com:ezScrum/ezScrum.git","clone_url":"https://github.com/ezScrum/ezScrum.git","svn_url":"https://github.com/ezScrum/ezScrum","homepage":"","size":107045,"stargazers_count":6,"watchers_count":6,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":16,"forks":3,"open_issues":16,"watchers":6,"default_branch":"master"}},"base":{"label":"ezScrum:story_7102_new","ref":"story_7102_new","sha":"446b27c027cddb12add5a46d384a0ca46ae44a39","user":{"login":"ezScrum","id":5744174,"avatar_url":"https://avatars.githubusercontent.com/u/5744174?v=3","gravatar_id":"","url":"https://api.github.com/users/ezScrum","html_url":"https://github.com/ezScrum","followers_url":"https://api.github.com/users/ezScrum/followers","following_url":"https://api.github.com/users/ezScrum/following{/other_user}","gists_url":"https://api.github.com/users/ezScrum/gists{/gist_id}","starred_url":"https://api.github.com/users/ezScrum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezScrum/subscriptions","organizations_url":"https://api.github.com/users/ezScrum/orgs","repos_url":"https://api.github.com/users/ezScrum/repos","events_url":"https://api.github.com/users/ezScrum/events{/privacy}","received_events_url":"https://api.github.com/users/ezScrum/received_events","type":"Organization","site_admin":false},"repo":{"id":13950021,"name":"ezScrum","full_name":"ezScrum/ezScrum","owner":{"login":"ezScrum","id":5744174,"avatar_url":"https://avatars.githubusercontent.com/u/5744174?v=3","gravatar_id":"","url":"https://api.github.com/users/ezScrum","html_url":"https://github.com/ezScrum","followers_url":"https://api.github.com/users/ezScrum/followers","following_url":"https://api.github.com/users/ezScrum/following{/other_user}","gists_url":"https://api.github.com/users/ezScrum/gists{/gist_id}","starred_url":"https://api.github.com/users/ezScrum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezScrum/subscriptions","organizations_url":"https://api.github.com/users/ezScrum/orgs","repos_url":"https://api.github.com/users/ezScrum/repos","events_url":"https://api.github.com/users/ezScrum/events{/privacy}","received_events_url":"https://api.github.com/users/ezScrum/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ezScrum/ezScrum","description":"An open source project for scrum","fork":false,"url":"https://api.github.com/repos/ezScrum/ezScrum","forks_url":"https://api.github.com/repos/ezScrum/ezScrum/forks","keys_url":"https://api.github.com/repos/ezScrum/ezScrum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ezScrum/ezScrum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ezScrum/ezScrum/teams","hooks_url":"https://api.github.com/repos/ezScrum/ezScrum/hooks","issue_events_url":"https://api.github.com/repos/ezScrum/ezScrum/issues/events{/number}","events_url":"https://api.github.com/repos/ezScrum/ezScrum/events","assignees_url":"https://api.github.com/repos/ezScrum/ezScrum/assignees{/user}","branches_url":"https://api.github.com/repos/ezScrum/ezScrum/branches{/branch}","tags_url":"https://api.github.com/repos/ezScrum/ezScrum/tags","blobs_url":"https://api.github.com/repos/ezScrum/ezScrum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ezScrum/ezScrum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ezScrum/ezScrum/git/refs{/sha}","trees_url":"https://api.github.com/repos/ezScrum/ezScrum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ezScrum/ezScrum/statuses/{sha}","languages_url":"https://api.github.com/repos/ezScrum/ezScrum/languages","stargazers_url":"https://api.github.com/repos/ezScrum/ezScrum/stargazers","contributors_url":"https://api.github.com/repos/ezScrum/ezScrum/contributors","subscribers_url":"https://api.github.com/repos/ezScrum/ezScrum/subscribers","subscription_url":"https://api.github.com/repos/ezScrum/ezScrum/subscription","commits_url":"https://api.github.com/repos/ezScrum/ezScrum/commits{/sha}","git_commits_url":"https://api.github.com/repos/ezScrum/ezScrum/git/commits{/sha}","comments_url":"https://api.github.com/repos/ezScrum/ezScrum/comments{/number}","issue_comment_url":"https://api.github.com/repos/ezScrum/ezScrum/issues/comments{/number}","contents_url":"https://api.github.com/repos/ezScrum/ezScrum/contents/{+path}","compare_url":"https://api.github.com/repos/ezScrum/ezScrum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ezScrum/ezScrum/merges","archive_url":"https://api.github.com/repos/ezScrum/ezScrum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ezScrum/ezScrum/downloads","issues_url":"https://api.github.com/repos/ezScrum/ezScrum/issues{/number}","pulls_url":"https://api.github.com/repos/ezScrum/ezScrum/pulls{/number}","milestones_url":"https://api.github.com/repos/ezScrum/ezScrum/milestones{/number}","notifications_url":"https://api.github.com/repos/ezScrum/ezScrum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ezScrum/ezScrum/labels{/name}","releases_url":"https://api.github.com/repos/ezScrum/ezScrum/releases{/id}","created_at":"2013-10-29T08:16:22Z","updated_at":"2015-02-27T08:47:00Z","pushed_at":"2015-03-20T06:53:43Z","git_url":"git://github.com/ezScrum/ezScrum.git","ssh_url":"git@github.com:ezScrum/ezScrum.git","clone_url":"https://github.com/ezScrum/ezScrum.git","svn_url":"https://github.com/ezScrum/ezScrum","homepage":"","size":107045,"stargazers_count":6,"watchers_count":6,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":16,"forks":3,"open_issues":16,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ezScrum/ezScrum/pulls/83"},"html":{"href":"https://github.com/ezScrum/ezScrum/pull/83"},"issue":{"href":"https://api.github.com/repos/ezScrum/ezScrum/issues/83"},"comments":{"href":"https://api.github.com/repos/ezScrum/ezScrum/issues/83/comments"},"review_comments":{"href":"https://api.github.com/repos/ezScrum/ezScrum/pulls/83/comments"},"review_comment":{"href":"https://api.github.com/repos/ezScrum/ezScrum/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ezScrum/ezScrum/pulls/83/commits"},"statuses":{"href":"https://api.github.com/repos/ezScrum/ezScrum/statuses/ea163620b44423b364d701452388f5670e0bee3a"}}}}