package scrum.client.issues;
import ilarkesto.core.scope.Scope;
import ilarkesto.gwt.client.TableBuilder;
import ilarkesto.gwt.client.ToolbarWidget;
import scrum.client.ScrumGwt;
import scrum.client.admin.User;
import scrum.client.common.AScrumAction;
import scrum.client.project.Project;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
public class ReplyToIssueDialog {
private Issue issue;
private DialogBox dialogBox;
private TextBox from;
private TextBox to;
private TextBox subject;
private TextArea text;
public ReplyToIssueDialog(Issue issue) {
super();
this.issue = issue;
}
public void showDialog() {
dialogBox = new DialogBox(true, true);
dialogBox.add(createForm());
dialogBox.center();
dialogBox.show();
}
private Widget createForm() {
Project project = issue.getProject();
String subjectText = project.getLabel() + " " + issue.getReference() + " " + issue.getLabel();
User user = Scope.get().getComponent(User.class);
String template = project.getIssueReplyTemplate();
template = fillTemplate(template, "${issue.reference}", issue.getReference());
template = fillTemplate(template, "${issuer.name}", issue.getIssuerName());
template = fillTemplate(template, "${issuer.email}", issue.getIssuerEmail());
template = fillTemplate(template, "${homepage.url}", project.getHomepageUrl());
template = fillTemplate(template, "${user.name}", user.getName());
template = fillTemplate(template, "${user.email}", user.getEmail());
from = ScrumGwt.createTextBox("issueReplyFrom", project.getSupportEmail(), 400);
to = ScrumGwt.createTextBox("issueReplyTo", issue.getIssuerEmail(), 400);
subject = ScrumGwt.createTextBox("issueReplySubject", subjectText, 400);
text = ScrumGwt.createTextArea("issueReplyText", template, 400, 400);
ToolbarWidget buttonbar = new ToolbarWidget();
buttonbar.addButton(new SendEmailAction());
buttonbar.addHyperlink(new CancelAction());
TableBuilder tb = ScrumGwt.createFieldTable();
tb.addFieldRow("From", from);
tb.addFieldRow("To", to);
tb.addFieldRow("Subject", subject);
tb.addFieldRow("Text", text);
tb.addRow(buttonbar, 2);
return tb.createTable();
}
private String fillTemplate(String template, String key, String value) {
if (template == null) return null;
if (value == null) value = "";
return template.replace(key, value);
}
class SendEmailAction extends AScrumAction {
@Override
public String getLabel() {
return "Send email";
}
@Override
protected void onExecute() {
new SendIssueReplyEmailServiceCall(issue.getId(), from.getText(), to.getText(), subject.getText(),
text.getText()).execute();
dialogBox.hide();
}
}
class CancelAction extends AScrumAction {
@Override
public String getLabel() {
return "Cancel";
}
@Override
protected void onExecute() {
dialogBox.hide();
}
}
}