package com.ocpsoft.socialpm.gwt.client.local.view.component;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Observes;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.SpanElement;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.ocpsoft.socialpm.gwt.client.local.history.HistoryConstants;
import com.ocpsoft.socialpm.model.feed.IterationCreated;
import com.ocpsoft.socialpm.model.feed.IterationEvent;
import com.ocpsoft.socialpm.model.project.Project;
import com.ocpsoft.socialpm.model.project.iteration.Iteration;
@Dependent
public class IterationList extends Composite
{
interface IterationListBinder extends UiBinder<Widget, IterationList>
{
}
private static IterationListBinder binder = GWT.create(IterationListBinder.class);
@UiField
UnorderedList list;
@UiField
SpanElement iterationCount;
@UiField
NavLink manageIterations;
private Project project;
private List<Iteration> iterations;
public IterationList()
{
initWidget(binder.createAndBindUi(this));
manageIterations.setTargetHistoryToken(HistoryConstants.NEW_PROJECT());
}
public void setIterations(List<Iteration> iterations)
{
list.clear();
this.iterations = new ArrayList<Iteration>();
for (Iteration iter : iterations) {
addIteration(iter);
}
}
public List<Iteration> getIterations()
{
return iterations;
}
public void handleIterationCreated(@Observes IterationEvent event)
{
if (event instanceof IterationCreated)
{
if (this.project != null && this.project.equals(event.getProject()))
{
addIteration(event.getIteration());
}
}
}
private void addIteration(Iteration iter)
{
Div row = new Div();
row.setStyleName("row");
Div left = new Div();
left.setStyleName("span1 cols");
Div right = new Div();
right.setStyleName("span4 cols");
row.add(left);
row.add(right);
iterations.add(iter);
IterationLink link = new IterationLink(iter);
link.setWidth("100%");
link.addStyleName("label " + iter.getStatus().name());
link.addStyleDependentName("clickable");
left.add(link);
ProgressBar bar = new ProgressBar();
right.add(bar);
list.add(row);
int taskHoursCommitment = iter.getTaskHoursCommitment();
int percent = 0;
if (taskHoursCommitment == -1)
bar.setPercentComplete(8);
else
{
percent = (int) ((taskHoursCommitment - iter.getTaskHoursRemain())
/ (taskHoursCommitment + 0.0));
bar.setPercentComplete(percent <= 5 ? 5 : percent);
}
iterationCount.setInnerText(String.valueOf(iterations.size()));
Div progress = new Div(percent + "%");
progress.addStyleName("percent pull-right");
bar.setLabel(progress);
}
public void setProject(Project project)
{
this.project = project;
}
public NavLink getManageIterationsLink()
{
return manageIterations;
}
}