DetailView.java revision a5e4d84c9616b0a987e904d3b1d1d3fd9ca1be86
1package autotest.common.ui;
2
3import autotest.common.JsonRpcProxy;
4import autotest.common.Utils;
5import autotest.common.CustomHistory.HistoryToken;
6
7import com.google.gwt.event.dom.client.ClickEvent;
8import com.google.gwt.event.dom.client.ClickHandler;
9import com.google.gwt.json.client.JSONObject;
10import com.google.gwt.user.client.ui.Button;
11import com.google.gwt.user.client.ui.KeyboardListener;
12import com.google.gwt.user.client.ui.TextBox;
13import com.google.gwt.user.client.ui.Widget;
14
15import java.util.Map;
16
17
18
19public abstract class DetailView extends TabView {
20    protected static final String NO_OBJECT = "";
21
22    protected JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy();
23    protected TextBox idInput = new TextBox();
24    protected Button idFetchButton = new Button("Go");
25
26    protected abstract String getNoObjectText();
27    protected abstract String getFetchControlsElementId();
28    protected abstract String getDataElementId();
29    protected abstract String getTitleElementId();
30    protected abstract String getObjectId();
31    protected abstract void setObjectId(String id); // throws IllegalArgumentException
32    protected abstract void fetchData();
33
34    @Override
35    public void initialize() {
36        super.initialize();
37        resetPage();
38
39        addWidget(idInput, getFetchControlsElementId());
40        addWidget(idFetchButton, getFetchControlsElementId());
41
42        idInput.addKeyboardListener(new KeyboardListener() {
43            public void onKeyPress(Widget sender, char keyCode, int modifiers) {
44                if (keyCode == (char) KEY_ENTER)
45                    fetchById(idInput.getText());
46            }
47
48            public void onKeyDown(Widget sender, char keyCode, int modifiers) {}
49            public void onKeyUp(Widget sender, char keyCode, int modifiers) {}
50        });
51        idFetchButton.addClickHandler(new ClickHandler() {
52            public void onClick(ClickEvent event) {
53                fetchById(idInput.getText());
54            }
55        });
56    }
57
58    protected void showText(String text, String elementId) {
59        getElementById(elementId).setInnerText(text);
60    }
61
62    protected void showField(JSONObject object, String field, String elementId) {
63        String value = Utils.jsonToString(object.get(field));
64        showText(value, elementId);
65    }
66
67    public void resetPage() {
68        showText(getNoObjectText(), getTitleElementId());
69        Utils.setElementVisible(getDataElementId(), false);
70    }
71
72    public void updateObjectId(String id) {
73        try {
74            setObjectId(id);
75        }
76        catch (IllegalArgumentException exc) {
77            String error = "Invalid input: " + id;
78            NotifyManager.getInstance().showError(error);
79            return;
80        }
81        idInput.setText(id);
82    }
83
84    public void fetchById(String id) {
85        updateObjectId(id);
86        updateHistory();
87        refresh();
88    }
89
90    @Override
91    public void refresh() {
92        super.refresh();
93        if (!getObjectId().equals(NO_OBJECT))
94            fetchData();
95    }
96
97    protected void displayObjectData(String title) {
98        showText(title, getTitleElementId());
99        Utils.setElementVisible(getDataElementId(), true);
100    }
101
102    @Override
103    public HistoryToken getHistoryArguments() {
104        HistoryToken arguments = super.getHistoryArguments();
105        String objectId = getObjectId();
106        if (!objectId.equals(NO_OBJECT)) {
107            arguments.put("object_id", objectId);
108        }
109        return arguments;
110    }
111
112    @Override
113    public void handleHistoryArguments(Map<String, String> arguments) {
114        String objectId = arguments.get("object_id");
115        if (objectId == null) {
116            resetPage();
117            return;
118        }
119
120        try {
121            updateObjectId(objectId);
122        }
123        catch (IllegalArgumentException exc) {
124            return;
125        }
126    }
127}
128