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