package scrum.client.test;
import ilarkesto.core.scope.Scope;
import ilarkesto.gwt.client.ButtonWidget;
import ilarkesto.gwt.client.DateAndTime;
import ilarkesto.gwt.client.Gwt;
import ilarkesto.gwt.client.TableBuilder;
import java.util.Map;
import scrum.client.Dao;
import scrum.client.ScrumGwt;
import scrum.client.ScrumGwtApplication;
import scrum.client.collaboration.Comment;
import scrum.client.common.AScrumAction;
import scrum.client.common.AScrumWidget;
import scrum.client.core.ServiceCaller;
import scrum.client.issues.Issue;
import scrum.client.project.Requirement;
import scrum.client.sprint.Task;
import scrum.client.workspace.PagePanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
public class ScrumStatusWidget extends AScrumWidget {
private Dao dao;
private ServiceCaller serviceCaller;
private SimplePanel entityCountWrapper;
private SimplePanel stateInformationWrapper;
@Override
protected Widget onInitialization() {
dao = Scope.get().getComponent(Dao.class);
ScrumGwtApplication app = (ScrumGwtApplication) Scope.get().getComponent("app");
serviceCaller = Scope.get().getComponent(ServiceCaller.class);
entityCountWrapper = new SimplePanel();
stateInformationWrapper = new SimplePanel();
PagePanel page = new PagePanel();
page.addHeader("Entities");
page.addSection(entityCountWrapper);
page.addHeader("State information");
page.addSection(stateInformationWrapper);
if (!app.getApplicationInfo().isProductionStage()) {
page.addHeader("Generators");
page.addSection(createGenerators());
}
return page;
}
private Widget createGenerators() {
TableBuilder tb = new TableBuilder();
tb.setWidth(null);
tb.setCellPadding(5);
tb.addRow(new ButtonWidget(new GenerateRequirementsAction()));
tb.addRow(new ButtonWidget(new GenerateIssuesAction()));
tb.addRow(new ButtonWidget(new GenerateTasksAction()));
tb.addRow(new ButtonWidget(new GenerateCommentsAction()));
return tb.createTable();
}
@Override
protected void onUpdate() {
TableBuilder tb = new TableBuilder();
tb.setWidth(null);
tb.setCellSpacing(5);
for (Map.Entry<String, Integer> entry : dao.getEntityCounts().entrySet()) {
tb.addRow(Gwt.createFieldLabel(entry.getKey()), new Label(String.valueOf(entry.getValue())));
}
entityCountWrapper.setWidget(tb.createTable());
stateInformationWrapper.setWidget(createStateInformation());
super.onUpdate();
}
private Widget createStateInformation() {
TableBuilder tb = ScrumGwt.createFieldTable();
tb.addFieldRow("activeServiceCallCount", new Label(String.valueOf(serviceCaller.getActiveServiceCallCount())));
tb.addFieldRow("conversationNumber", new Label(String.valueOf(serviceCaller.getConversationNumber())));
tb.addFieldRow("entityIdBase", new Label(dao.getEntityIdBase()));
tb.addFieldRow("entityIdCounter", new Label(String.valueOf(dao.getEntityIdCounter())));
return tb.createTable();
}
class GenerateCommentsAction extends AScrumAction {
@Override
public String getLabel() {
return "Generate Comments";
}
@Override
protected void onExecute() {
DateAndTime time = DateAndTime.now();
Requirement req = getCurrentProject().getCurrentSprint().getRequirements().get(0);
for (int i = 0; i < COUNT; i++) {
Comment comment = new Comment(req, getCurrentUser(), time + " " + longText());
dao.createComment(comment);
}
}
}
class GenerateTasksAction extends AScrumAction {
@Override
public String getLabel() {
return "Generate Tasks";
}
@Override
protected void onExecute() {
DateAndTime time = DateAndTime.now();
Requirement req = getCurrentProject().getCurrentSprint().getRequirements().get(0);
for (int i = 0; i < COUNT; i++) {
Task task = new Task(req);
task.setLabel("Generated Task " + time + " - #" + i);
task.setDescription(longText());
dao.createTask(task);
}
}
}
class GenerateIssuesAction extends AScrumAction {
@Override
public String getLabel() {
return "Generate Issues";
}
@Override
protected void onExecute() {
DateAndTime time = DateAndTime.now();
for (int i = 0; i < COUNT; i++) {
Issue issue = new Issue(getCurrentProject());
issue.setLabel("Generated Issue " + time + " - #" + i);
issue.setDescription(longText());
dao.createIssue(issue);
}
}
}
class GenerateRequirementsAction extends AScrumAction {
@Override
public String getLabel() {
return "Generate Stories";
}
@Override
protected void onExecute() {
DateAndTime time = DateAndTime.now();
for (int i = 0; i < COUNT; i++) {
final Requirement req = new Requirement(getCurrentProject());
req.setLabel("Generated Story " + time + " - #" + i);
req.setDescription(longText());
req.setTestDescription(longText());
dao.createRequirement(req);
}
}
}
private static String longText() {
return text(10);
}
private static String text(int lines) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < lines; i++) {
sb
.append("This is stupid text. You should not waste your time to read it. There is nothing valuable to find.\n");
}
return sb.toString();
}
private static final int COUNT = 10;
}