blob: 6a30b5d4b82d0da04b0454983e7b41cbf1d6cfe9 [file] [log] [blame]
package autotest.common.ui;
import autotest.common.JsonRpcProxy;
import autotest.common.Utils;
import autotest.common.CustomHistory.HistoryToken;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.TextBox;
import java.util.Map;
public abstract class DetailView extends TabView {
protected static final String NO_OBJECT = "";
protected JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy();
protected TextBox idInput = new TextBox();
protected Button idFetchButton = new Button("Go");
protected abstract String getNoObjectText();
protected abstract String getFetchControlsElementId();
protected abstract String getDataElementId();
protected abstract String getTitleElementId();
protected abstract String getObjectId();
protected abstract void setObjectId(String id); // throws IllegalArgumentException
protected abstract void fetchData();
@Override
public void initialize() {
super.initialize();
resetPage();
addWidget(idInput, getFetchControlsElementId());
addWidget(idFetchButton, getFetchControlsElementId());
idInput.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress (KeyPressEvent event) {
if (event.getCharCode() == (char) KeyCodes.KEY_ENTER)
fetchById(idInput.getText());
}
});
idFetchButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
fetchById(idInput.getText());
}
});
}
protected void showText(String text, String elementId) {
getElementById(elementId).setInnerText(text);
}
protected void showField(JSONObject object, String field, String elementId) {
String value = Utils.jsonToString(object.get(field));
showText(value, elementId);
}
public void resetPage() {
showText(getNoObjectText(), getTitleElementId());
Utils.setElementVisible(getDataElementId(), false);
}
public void updateObjectId(String id) {
try {
setObjectId(id);
}
catch (IllegalArgumentException exc) {
String error = "Invalid input: " + id;
NotifyManager.getInstance().showError(error);
return;
}
idInput.setText(id);
}
public void fetchById(String id) {
updateObjectId(id);
updateHistory();
refresh();
}
@Override
public void refresh() {
super.refresh();
if (!getObjectId().equals(NO_OBJECT))
fetchData();
}
protected void displayObjectData(String title) {
showText(title, getTitleElementId());
Utils.setElementVisible(getDataElementId(), true);
}
@Override
public HistoryToken getHistoryArguments() {
HistoryToken arguments = super.getHistoryArguments();
String objectId = getObjectId();
if (!objectId.equals(NO_OBJECT)) {
arguments.put("object_id", objectId);
}
return arguments;
}
@Override
public void handleHistoryArguments(Map<String, String> arguments) {
String objectId = arguments.get("object_id");
if (objectId == null) {
resetPage();
return;
}
try {
updateObjectId(objectId);
}
catch (IllegalArgumentException exc) {
return;
}
}
}