package scrum.client.project;
import ilarkesto.gwt.client.ADropdownViewEditWidget;
import ilarkesto.gwt.client.ButtonWidget;
import ilarkesto.gwt.client.ToolbarWidget;
import scrum.client.common.AScrumAction;
import scrum.client.common.AScrumWidget;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Widget;
public class RequirementEstimatedWorkWidget extends AScrumWidget {
private Requirement requirement;
private HorizontalPanel panel;
private EstimatedWorkWidget estimatedWork;
private ToolbarWidget toolbar;
public RequirementEstimatedWorkWidget(Requirement requirement) {
this.requirement = requirement;
}
@Override
protected Widget onInitialization() {
estimatedWork = new EstimatedWorkWidget();
toolbar = new ToolbarWidget();
panel = new HorizontalPanel();
panel.setStyleName("RequirementEstimatedWorkWidget");
panel.add(estimatedWork);
panel.add(toolbar);
return panel;
}
@Override
protected void onUpdate() {
estimatedWork.update();
toolbar.clear();
AScrumAction dirtAction = requirement.isDirty() ? new SetRequirementCleanAction(requirement)
: new SetRequirementDirtyAction(requirement);
if (dirtAction.isExecutable()) toolbar.add(new ButtonWidget(dirtAction));
StartRequirementEstimationVotingAction pokerAction = new StartRequirementEstimationVotingAction(requirement);
if (pokerAction.isExecutable()) toolbar.add(new ButtonWidget(pokerAction));
toolbar.update();
}
class EstimatedWorkWidget extends ADropdownViewEditWidget {
@Override
protected void onViewerUpdate() {
setViewerText(requirement.getEstimatedWorkWithUnit());
}
@Override
public boolean isEditable() {
if (requirement.isInCurrentSprint()) return false;
if (!getCurrentProject().isTeamMember(getCurrentUser())) return false;
return true;
}
@Override
protected void onEditorUpdate() {
setOptions(Requirement.WORK_ESTIMATION_VALUES);
String work = requirement.getEstimatedWorkAsString();
setSelectedOption(work == null ? "" : work.toString());
}
@Override
protected void onEditorSubmit() {
String value = getSelectedOption();
requirement.setEstimatedWork(value.length() == 0 ? null : Float.parseFloat(value));
}
}
}