package scrum.client.project; import ilarkesto.gwt.client.AFieldValueWidget; import ilarkesto.gwt.client.AMultiSelectionViewEditWidget; import ilarkesto.gwt.client.ButtonWidget; import ilarkesto.gwt.client.Gwt; import ilarkesto.gwt.client.TableBuilder; import scrum.client.ScrumGwt; import scrum.client.collaboration.CommentsWidget; import scrum.client.collaboration.EmoticonSelectorWidget; import scrum.client.common.AScrumWidget; import scrum.client.estimation.PlanningPokerWidget; import scrum.client.journal.ChangeHistoryWidget; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; public class RequirementWidget extends AScrumWidget { private Requirement requirement; private boolean showLabel; private boolean showSprint; private boolean showTaskWork; private boolean showComments; private boolean planningPoker; private boolean showChangeHistory; private boolean acceptReject; private boolean decidableOnInitialization; public RequirementWidget(Requirement requirement, boolean showLabel, boolean showSprint, boolean showTaskWork, boolean showComments, boolean planningPoker, boolean showChangeHistory, boolean acceptReject) { this.requirement = requirement; this.showLabel = showLabel; this.showSprint = showSprint; this.showTaskWork = showTaskWork; this.showComments = showComments; this.planningPoker = planningPoker; this.showChangeHistory = showChangeHistory; this.acceptReject = acceptReject; } @Override protected Widget onInitialization() { decidableOnInitialization = requirement.isDecidable(); TableBuilder left = ScrumGwt.createFieldTable(); if (showLabel) left.addFieldRow("Label", requirement.getLabelModel()); left.addFieldRow("Description", requirement.getDescriptionModel()); left.addFieldRow("Qualities", new AMultiSelectionViewEditWidget<Quality>() { @Override protected void onViewerUpdate() { setViewerItems(requirement.getQualitys()); } @Override protected void onEditorUpdate() { setEditorItems(requirement.getProject().getQualitys()); setEditorSelectedItems(requirement.getQualitys()); } @Override protected void onEditorSubmit() { requirement.setQualitys(getEditorSelectedItems()); } @Override public boolean isEditable() { return requirement.isEditable(); } }); left.addFieldRow("Test", requirement.getTestDescriptionModel()); left.addFieldRow("Estimated work", new RequirementEstimatedWorkWidget(requirement)); if (showTaskWork) { left.addFieldRow("Remainig Task Work", new AFieldValueWidget() { @Override protected void onUpdate() { setHours(requirement.getRemainingWork()); } }); } if (showSprint) left.addFieldRow("Sprint", new AFieldValueWidget() { @Override protected void onUpdate() { setText(requirement.getSprint()); } }); if (showChangeHistory) left.addRow(new ChangeHistoryWidget(requirement), 2); TableBuilder right = ScrumGwt.createFieldTable(); if (acceptReject && requirement.getProject().isProductOwner(getCurrentUser()) && requirement.isDecidable()) { right.addRow(createActionsPanelForCompletedRequirement(requirement), 2); } if (planningPoker) { right.addRow(new PlanningPokerWidget(requirement), 2); } right.addFieldRow("My emoticon", new EmoticonSelectorWidget(requirement)); if (showComments) { right.addRow(new CommentsWidget(requirement), 2); } return showComments || planningPoker || acceptReject ? TableBuilder.row(20, left.createTable(), right .createTable()) : left.createTable(); } @Override protected boolean isResetRequired() { return acceptReject && decidableOnInitialization != requirement.isDecidable(); } public static Widget createActionsPanelForCompletedRequirement(Requirement requirement) { TableBuilder tb = new TableBuilder(); tb.setWidth(null); tb.setColumnWidths("48%", "10", "48%"); tb.addRow(new Label("This story is completed. As Product Owner, you have to decide:"), 3); tb.addRow(Gwt.createSpacer(1, 10)); tb.add(new ButtonWidget(new CloseRequirementAction(requirement))); tb.add(Gwt.createSpacer(10, 1)); tb.add(new ButtonWidget(new RejectRequirementAction(requirement))); tb.nextRow(); tb.addRow(Gwt.createSpacer(1, 10)); tb.add(new Label("If this story is implemented sufficiently.")); tb.add(Gwt.createSpacer(10, 1)); tb.add(new Label("If this story is fixed insufficient. Please provide a comment in this case.")); return ScrumGwt.createActionsPanel(tb.createTable()); } }