package scrum.client.tasks; import ilarkesto.core.base.Str; import ilarkesto.gwt.client.ADropdownViewEditWidget; import ilarkesto.gwt.client.AFieldValueWidget; import ilarkesto.gwt.client.AIntegerViewEditWidget; import ilarkesto.gwt.client.Gwt; import ilarkesto.gwt.client.TableBuilder; import java.util.HashMap; import java.util.Map; import scrum.client.ScrumGwt; import scrum.client.common.AScrumWidget; import scrum.client.impediments.Impediment; import scrum.client.sprint.Task; import com.google.gwt.user.client.ui.Widget; public class TaskWidget extends AScrumWidget { private Task task; private boolean wideMode; public TaskWidget(Task task, boolean wideMode) { this.task = task; this.wideMode = wideMode; } @Override protected Widget onInitialization() { TableBuilder tb = ScrumGwt.createFieldTable(); tb.addFieldRow("Label", task.getLabelModel(), 3); tb.addFieldRow("Description", task.getDescriptionModel(), 3); tb.addField("Burned", new AIntegerViewEditWidget() { @Override protected void onIntegerViewerUpdate() { setViewerValue(task.getBurnedWork()); } @Override protected void onEditorUpdate() { setEditorValue(task.getBurnedWork()); } @Override protected void onEditorSubmit() { Integer value = getEditorValue(0); if (value == null) value = 0; int previous = task.getBurnedWork(); int diff = value - previous; task.setBurnedWork(value); task.adjustRemainingWork(diff); } @Override protected void onMinusClicked() { task.decrementBurnedWork(); task.adjustRemainingWork(-1); } @Override protected void onPlusClicked() { task.incrementBurnedWork(); task.adjustRemainingWork(1); } @Override public boolean isEditable() { return task.isEditable(); } }); tb.addFieldRow("Remaining", new TaskRemainingWorkWidget(task)); tb.addFieldRow("Owner", new AFieldValueWidget() { @Override protected void onUpdate() { setText(task.getOwner() == null ? null : task.getOwner().getName()); } }, 3); tb.addFieldRow("Impediment", new ADropdownViewEditWidget() { @Override protected void onViewerUpdate() { setViewerItem(task.getImpediment()); } @Override protected void onEditorUpdate() { Map<String, String> options = new HashMap<String, String>(); options.put("", ""); for (Impediment impediment : task.getProject().getOpenImpediments()) { options.put(impediment.getId(), impediment.getReferenceAndLabel()); } setOptions(options); Impediment impediment = task.getImpediment(); setSelectedOption(impediment == null ? "" : impediment.getId()); } @Override protected void onEditorSubmit() { String id = getSelectedOption(); task.setImpediment(Str.isBlank(id) ? null : getDao().getImpediment(id)); } @Override public boolean isEditable() { return task.isEditable(); } @Override public String getTooltip() { return "Impediment, which is blocking this task."; } }, 3); return wideMode ? TableBuilder.row(20, tb.createTable(), ScrumGwt.createEmoticonsAndComments(task)) : Gwt .createFlowPanel(tb.createTable(), ScrumGwt.createEmoticonsAndComments(task)); } }