package scrum.client.issues; import ilarkesto.core.scope.Scope; import ilarkesto.gwt.client.ButtonWidget; import ilarkesto.gwt.client.Gwt; import java.util.List; import scrum.client.common.AScrumWidget; import scrum.client.common.BlockListSelectionManager; import scrum.client.common.BlockListWidget; import scrum.client.common.UserGuideWidget; import scrum.client.project.Project; import scrum.client.workspace.PagePanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; public class IssueManagementWidget extends AScrumWidget { private IssueManager issueManager; public BlockListWidget<Issue> openList; public BlockListWidget<Issue> bugList; public BlockListWidget<Issue> ideaList; public BlockListWidget<Issue> closedList; private BlockListSelectionManager selectionManager; private SimplePanel suspensionStatusButtonWrapper; @Override protected Widget onInitialization() { new RequestAcceptedIssuesServiceCall().execute(); issueManager = Scope.get().getComponent(IssueManager.class); selectionManager = new BlockListSelectionManager(); openList = new BlockListWidget<Issue>(IssueBlock.FACTORY); openList.setSelectionManager(selectionManager); openList.setAutoSorter(Issue.ISSUE_DATE_COMPARATOR); bugList = new BlockListWidget<Issue>(IssueBlock.FACTORY); bugList.setSelectionManager(selectionManager); bugList.setAutoSorter(Issue.SEVERITY_COMPARATOR); // bugList.setAutoSorter(getCurrentProject().getIssuesOrderComparator()); // bugList.setDndSorting(true); // bugList.setMoveObserver(new UrgentMoveObserver()); ideaList = new BlockListWidget<Issue>(IssueBlock.FACTORY); ideaList.setSelectionManager(selectionManager); ideaList.setAutoSorter(Issue.ACCEPT_DATE_COMPARATOR); closedList = new BlockListWidget<Issue>(IssueBlock.FACTORY); closedList.setSelectionManager(selectionManager); closedList.setAutoSorter(Issue.CLOSE_DATE_COMPARATOR); suspensionStatusButtonWrapper = new SimplePanel(); PagePanel inboxPage = new PagePanel(); inboxPage.addHeader("issue inbox (decision required)", new ButtonWidget(new CreateIssueAction()), suspensionStatusButtonWrapper); inboxPage.addSection(openList); PagePanel documentationPage = new PagePanel(); documentationPage.addSection(new UserGuideWidget(getLocalizer().views().issues(), getCurrentProject() .getIssues().size() < 15, getCurrentUser().getHideUserGuideIssuesModel())); return Gwt.createFlowPanel(inboxPage, Gwt.createSpacer(1, 10), PagePanel.createSimple("bugs (Team needs to fix this)", bugList), Gwt.createSpacer(1, 10), PagePanel.createSimple("ideas (Product owner needs to create stories)", ideaList), Gwt.createSpacer(1, 10), createClosedPage(), Gwt.createSpacer(1, 10), documentationPage); } private Widget createClosedPage() { PagePanel page = new PagePanel(); page.addHeader("closed issues (done or rejected)", new ButtonWidget(new RequestClosedIssuesAction())); page.addSection(closedList); return page; } @Override protected void onUpdate() { suspensionStatusButtonWrapper.setWidget(new ButtonWidget( issueManager.isSuspendedIssuesVisible() ? new HideSuspendedIssuesAction() : new ShowSuspendedIssuesAction())); Project project = getCurrentProject(); openList.setObjects(project.getOpenIssues(issueManager.isSuspendedIssuesVisible())); bugList.setObjects(project.getBugs()); ideaList.setObjects(project.getIdeas()); closedList.setObjects(project.getClosedIssues()); super.onUpdate(); } public boolean select(Issue issue) { update(); return selectionManager.select(issue); } class UrgentMoveObserver implements Runnable { public void run() { List<Issue> issues = bugList.getObjects(); getCurrentProject().updateUrgentIssuesOrder(issues); update(); } } }