private void onIssueChanged(GwtConversation conversation, Issue issue, Map properties) { User currentUser = conversation.getSession().getUser(); if (properties.containsKey("closeDate")) { if (issue.isClosed()) { issue.setCloseDate(Date.today()); postProjectEvent( conversation, currentUser.getName() + " closed " + issue.getReferenceAndLabel(), issue); subscriptionService.notifySubscribers( issue, "Issue closed", conversation.getProject(), null); } else { postProjectEvent( conversation, currentUser.getName() + " reopened " + issue.getReferenceAndLabel(), issue); subscriptionService.notifySubscribers( issue, "Issue reopened", conversation.getProject(), null); } } if (properties.containsKey("ownerId") && issue.isOwnerSet()) { if (!issue.isFixed()) { postProjectEvent( conversation, currentUser.getName() + " claimed " + issue.getReferenceAndLabel(), issue); } Release nextRelease = issue.getProject().getNextRelease(); if (nextRelease != null && issue.isFixReleasesEmpty()) { issue.setFixReleases(Collections.singleton(nextRelease)); } } if (properties.containsKey("fixDate")) { if (issue.isFixed()) { postProjectEvent( conversation, currentUser.getName() + " fixed " + issue.getReferenceAndLabel(), issue); } else { postProjectEvent( conversation, currentUser.getName() + " rejected fix for " + issue.getReferenceAndLabel(), issue); } } if (properties.containsKey("urgent")) { if (issue.isBug()) { Release currentRelease = issue.getProject().getCurrentRelease(); if (issue.isAffectedReleasesEmpty() && currentRelease != null) { issue.setAffectedReleases(Collections.singleton(currentRelease)); } } } if (properties.containsKey("acceptDate")) { if (issue.isIdea() || issue.isBug()) { postProjectEvent( conversation, currentUser.getName() + " accepted " + issue.getReferenceAndLabel(), issue); subscriptionService.notifySubscribers( issue, "Issue accepted", conversation.getProject(), null); } } issue.getProject().updateHomepage(issue, false); }