| Index: frontend/client/src/autotest/planner/triage/TriagePopup.java
|
| diff --git a/frontend/client/src/autotest/planner/triage/TriagePopup.java b/frontend/client/src/autotest/planner/triage/TriagePopup.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9e8559084c1420cdf56fa37d97a94271353c8ae3
|
| --- /dev/null
|
| +++ b/frontend/client/src/autotest/planner/triage/TriagePopup.java
|
| @@ -0,0 +1,152 @@
|
| +package autotest.planner.triage;
|
| +
|
| +import autotest.common.JsonRpcCallback;
|
| +import autotest.common.JsonRpcProxy;
|
| +import autotest.common.StaticDataRepository;
|
| +import autotest.common.ui.SimplifiedList;
|
| +
|
| +import com.google.gwt.event.dom.client.ClickEvent;
|
| +import com.google.gwt.event.dom.client.ClickHandler;
|
| +import com.google.gwt.event.dom.client.HasClickHandlers;
|
| +import com.google.gwt.event.logical.shared.CloseEvent;
|
| +import com.google.gwt.event.logical.shared.CloseHandler;
|
| +import com.google.gwt.event.logical.shared.HasCloseHandlers;
|
| +import com.google.gwt.json.client.JSONArray;
|
| +import com.google.gwt.json.client.JSONBoolean;
|
| +import com.google.gwt.json.client.JSONNumber;
|
| +import com.google.gwt.json.client.JSONObject;
|
| +import com.google.gwt.json.client.JSONString;
|
| +import com.google.gwt.json.client.JSONValue;
|
| +import com.google.gwt.user.client.ui.HasText;
|
| +import com.google.gwt.user.client.ui.HasValue;
|
| +import com.google.gwt.user.client.ui.PopupPanel;
|
| +
|
| +public class TriagePopup implements ClickHandler, CloseHandler<PopupPanel> {
|
| + public static interface Display extends HasCloseHandlers<PopupPanel> {
|
| + public HasClickHandlers getCloseButton();
|
| + public HasText getLabelsField();
|
| + public HasText getKeyvalsField();
|
| + public HasText getBugsField();
|
| + public HasText getReasonField();
|
| + public SimplifiedList getHostActionField();
|
| + public SimplifiedList getTestActionField();
|
| + public HasValue<Boolean> getInvalidateField();
|
| + public HasClickHandlers getApplyButton();
|
| + public void center();
|
| + public void hide();
|
| + }
|
| +
|
| + public static interface Listener {
|
| + public void onTriage(TriagePopup source);
|
| + }
|
| +
|
| + private Display display;
|
| + private Listener listener;
|
| + private int id;
|
| + private boolean triaged = false;
|
| +
|
| + public TriagePopup(Listener listener, int id) {
|
| + this.listener = listener;
|
| + this.id = id;
|
| + }
|
| +
|
| + public void bindDisplay(Display display) {
|
| + this.display = display;
|
| + display.addCloseHandler(this);
|
| + populateActionsFields();
|
| + setHandlers();
|
| + }
|
| +
|
| + public void render() {
|
| + display.center();
|
| + }
|
| +
|
| + public int getId() {
|
| + return id;
|
| + }
|
| +
|
| + private void populateActionsFields() {
|
| + populateList("host_actions", display.getHostActionField());
|
| + populateList("test_actions", display.getTestActionField());
|
| + }
|
| +
|
| + private void populateList(String staticDataKey, SimplifiedList list) {
|
| + JSONArray choices = StaticDataRepository.getRepository().getData(staticDataKey).isArray();
|
| + for (int i = 0; i < choices.size(); i++) {
|
| + String item = choices.get(i).isString().stringValue();
|
| + list.addItem(item, item);
|
| + }
|
| + }
|
| +
|
| + private void setHandlers() {
|
| + display.getCloseButton().addClickHandler(this);
|
| + display.getApplyButton().addClickHandler(this);
|
| + }
|
| +
|
| + @Override
|
| + public void onClick(ClickEvent event) {
|
| + if (event.getSource() == display.getCloseButton()) {
|
| + display.hide();
|
| + } else {
|
| + assert event.getSource() == display.getApplyButton();
|
| + JsonRpcProxy proxy = JsonRpcProxy.getProxy();
|
| +
|
| + JSONObject params = getParams();
|
| +
|
| + proxy.rpcCall("process_failure", params, new JsonRpcCallback() {
|
| + @Override
|
| + public void onSuccess(JSONValue result) {
|
| + triaged = true;
|
| + display.hide();
|
| + }
|
| + });
|
| + }
|
| + }
|
| +
|
| + private JSONObject getParams() {
|
| + JSONObject params = new JSONObject();
|
| + params.put("failure_id", new JSONNumber(id));
|
| + params.put("host_action", new JSONString(display.getHostActionField().getSelectedName()));
|
| + params.put("test_action", new JSONString(display.getTestActionField().getSelectedName()));
|
| +
|
| + if (!display.getLabelsField().getText().trim().equals("")) {
|
| + params.put("labels", parseCommaDelimited(display.getLabelsField().getText()));
|
| + }
|
| +
|
| + if (!display.getKeyvalsField().getText().trim().equals("")) {
|
| + JSONObject keyvals = new JSONObject();
|
| + for (String keyval : display.getKeyvalsField().getText().split("\n")) {
|
| + String split[] = keyval.split("=", 2);
|
| + keyvals.put(split[0].trim(), new JSONString(split[1].trim()));
|
| + }
|
| + params.put("keyvals", keyvals);
|
| + }
|
| +
|
| + if (!display.getBugsField().getText().trim().equals("")) {
|
| + params.put("bugs", parseCommaDelimited(display.getBugsField().getText()));
|
| + }
|
| +
|
| + if (!display.getReasonField().getText().trim().equals("")) {
|
| + params.put("reason", new JSONString(display.getReasonField().getText()));
|
| + }
|
| +
|
| + params.put("invalidate", JSONBoolean.getInstance(display.getInvalidateField().getValue()));
|
| +
|
| + return params;
|
| + }
|
| +
|
| + private JSONArray parseCommaDelimited(String line) {
|
| + JSONArray values = new JSONArray();
|
| + for (String value : line.split(",")) {
|
| + values.set(values.size(), new JSONString(value.trim()));
|
| + }
|
| + return values;
|
| + }
|
| +
|
| + @Override
|
| + public void onClose(CloseEvent<PopupPanel> event) {
|
| + if (triaged) {
|
| + listener.onTriage(this);
|
| + }
|
| + }
|
| +}
|
|
|