1e3f6868dac3b4c4714637d12b93d97823011a35cshowardpackage autotest.common.ui; 2e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 305fb6997f37ad8f62142be3092fc10ddb36433fbshowardimport com.google.gwt.user.client.ui.Composite; 405fb6997f37ad8f62142be3092fc10ddb36433fbshowardimport com.google.gwt.user.client.ui.DisclosurePanel; 5fb0762ed9e6e20c987d0613ffdf4859d14bd720ashowardimport com.google.gwt.user.client.ui.HorizontalPanel; 6fb0762ed9e6e20c987d0613ffdf4859d14bd720ashowardimport com.google.gwt.user.client.ui.Image; 7e8819cdf80ca0e0602d22551a50f970aa68e108dmblighimport com.google.gwt.user.client.ui.Label; 8f77862cb4c75fb91ec06db14f9fe68aac5368e4bshowardimport com.google.gwt.user.client.ui.Panel; 9e8819cdf80ca0e0602d22551a50f970aa68e108dmblighimport com.google.gwt.user.client.ui.PopupPanel; 1005fb6997f37ad8f62142be3092fc10ddb36433fbshowardimport com.google.gwt.user.client.ui.RootPanel; 1105fb6997f37ad8f62142be3092fc10ddb36433fbshowardimport com.google.gwt.user.client.ui.TextArea; 12fb0762ed9e6e20c987d0613ffdf4859d14bd720ashowardimport com.google.gwt.user.client.ui.Widget; 13e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 14e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh/** 15e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * A singleton class to manage popup notifications, including error messages and 16e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * the "loading..." box. 17e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh */ 18e8819cdf80ca0e0602d22551a50f970aa68e108dmblighpublic class NotifyManager { 1901d6329ddd2b854a2531d432d6083a59c85f9358mbligh private static final String SPINNER_IMAGE = "spinner.gif"; 20fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward 21e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh // singleton 22e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public static final NotifyManager theInstance = new NotifyManager(); 23e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 246bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward static class NotifyBox { 25f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward private PopupPanel outerPanel; 26f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward private Panel innerPanel = new HorizontalPanel(); 27fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward private Label message = new Label(); 28e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 29e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public NotifyBox(boolean autoHide) { 30f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward outerPanel = new PopupPanel(autoHide); 31f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward outerPanel.setStyleName("notify"); 32f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward 33f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward innerPanel.setStyleName("notify-inner"); 34f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward outerPanel.add(innerPanel); 35e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 36e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 37e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public void addStyle(String style) { 38f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward innerPanel.addStyleName(style); 39e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 40e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 41e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public void hide() { 42f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward outerPanel.hide(); 43e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 44e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 45e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public void show() { 46f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward outerPanel.show(); 47f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward outerPanel.getElement().getStyle().setProperty("position", "fixed"); 48e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 49e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 50e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public void showMessage(String messageString) { 51e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh message.setText(messageString); 52fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward showWidget(message); 53fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward } 54fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward 55fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward public void showWidget(Widget widget) { 56f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward innerPanel.clear(); 57f77862cb4c75fb91ec06db14f9fe68aac5368e4bshoward innerPanel.add(widget); 58e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh show(); 59e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 60e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 61e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 626bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward static class ErrorLog extends Composite { 6305fb6997f37ad8f62142be3092fc10ddb36433fbshoward protected DisclosurePanel disclosurePanel = 6405fb6997f37ad8f62142be3092fc10ddb36433fbshoward new DisclosurePanel("Error log"); 6505fb6997f37ad8f62142be3092fc10ddb36433fbshoward protected TextArea errorTextArea = new TextArea(); 6605fb6997f37ad8f62142be3092fc10ddb36433fbshoward 6705fb6997f37ad8f62142be3092fc10ddb36433fbshoward public ErrorLog() { 6805fb6997f37ad8f62142be3092fc10ddb36433fbshoward errorTextArea.setCharacterWidth(120); 6905fb6997f37ad8f62142be3092fc10ddb36433fbshoward errorTextArea.setVisibleLines(30); 7005fb6997f37ad8f62142be3092fc10ddb36433fbshoward errorTextArea.setReadOnly(true); 7105fb6997f37ad8f62142be3092fc10ddb36433fbshoward disclosurePanel.add(errorTextArea); 7205fb6997f37ad8f62142be3092fc10ddb36433fbshoward initWidget(disclosurePanel); 7305fb6997f37ad8f62142be3092fc10ddb36433fbshoward } 7405fb6997f37ad8f62142be3092fc10ddb36433fbshoward 7505fb6997f37ad8f62142be3092fc10ddb36433fbshoward public void logError(String error) { 7605fb6997f37ad8f62142be3092fc10ddb36433fbshoward String errorText = errorTextArea.getText(); 7705fb6997f37ad8f62142be3092fc10ddb36433fbshoward if (!errorText.equals("")) 7805fb6997f37ad8f62142be3092fc10ddb36433fbshoward errorText += "\n------------------------------\n"; 7905fb6997f37ad8f62142be3092fc10ddb36433fbshoward errorText += error; 8005fb6997f37ad8f62142be3092fc10ddb36433fbshoward errorTextArea.setText(errorText); 8105fb6997f37ad8f62142be3092fc10ddb36433fbshoward } 8205fb6997f37ad8f62142be3092fc10ddb36433fbshoward } 8305fb6997f37ad8f62142be3092fc10ddb36433fbshoward 84e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh protected NotifyBox errorNotify = new NotifyBox(true); 85e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh protected NotifyBox messageNotify = new NotifyBox(true); 86e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh protected NotifyBox loadingNotify = new NotifyBox(false); 87fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward private HorizontalPanel loadingPanel = new HorizontalPanel(); 8805fb6997f37ad8f62142be3092fc10ddb36433fbshoward protected ErrorLog errorLog = new ErrorLog(); 89a62866be14da66b1d3f061837617eeea8a192aa7showard private int loadingCount = 0; 90e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 91e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh private NotifyManager() { 92e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh errorNotify.addStyle("error"); 93e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 94e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 95e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh /** 96e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * Should be called a page loading time. 97e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh */ 98e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public void initialize() { 99e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh errorNotify.hide(); 100e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh messageNotify.hide(); 10105fb6997f37ad8f62142be3092fc10ddb36433fbshoward 102fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward loadingPanel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE); 103fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward loadingPanel.setSpacing(3); 104fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward loadingPanel.add(new Image(SPINNER_IMAGE)); 105fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward loadingPanel.add(new Label("Loading...")); 106fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward loadingPanel.add(new Image(SPINNER_IMAGE)); 107fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward 10805fb6997f37ad8f62142be3092fc10ddb36433fbshoward RootPanel.get("error_log").add(errorLog); 10905fb6997f37ad8f62142be3092fc10ddb36433fbshoward errorLog.setVisible(false); 110e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 111e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 112e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public static NotifyManager getInstance() { 113e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh return theInstance; 114e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 115e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 116e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh /** 117e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * Show an error message. 118e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh */ 11905fb6997f37ad8f62142be3092fc10ddb36433fbshoward public void showError(String error, String logMessage) { 12005fb6997f37ad8f62142be3092fc10ddb36433fbshoward String errorLogText = error; 12105fb6997f37ad8f62142be3092fc10ddb36433fbshoward if (logMessage != null) 12205fb6997f37ad8f62142be3092fc10ddb36433fbshoward errorLogText += "\n" + logMessage; 123e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh errorNotify.showMessage(error); 124fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward log(errorLogText); 12505fb6997f37ad8f62142be3092fc10ddb36433fbshoward } 12605fb6997f37ad8f62142be3092fc10ddb36433fbshoward 12705fb6997f37ad8f62142be3092fc10ddb36433fbshoward public void showError(String error) { 12805fb6997f37ad8f62142be3092fc10ddb36433fbshoward showError(error, null); 129e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 1305e2c70db8586bcd4c47fe6e5173357539c84cc57showard 1315e2c70db8586bcd4c47fe6e5173357539c84cc57showard /** 1325e2c70db8586bcd4c47fe6e5173357539c84cc57showard * Log a message to the error log without showing any popup. 1335e2c70db8586bcd4c47fe6e5173357539c84cc57showard */ 1345e2c70db8586bcd4c47fe6e5173357539c84cc57showard public void log(String message) { 1355e2c70db8586bcd4c47fe6e5173357539c84cc57showard errorLog.logError(message); 1365e2c70db8586bcd4c47fe6e5173357539c84cc57showard errorLog.setVisible(true); 1375e2c70db8586bcd4c47fe6e5173357539c84cc57showard } 138e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 139e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh /** 140e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * Show a notification message. 141e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh */ 142e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public void showMessage(String message) { 143e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh messageNotify.showMessage(message); 144e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 145e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh 146e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh /** 147e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh * Set whether the loading box is displayed or not. 148e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh */ 149e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh public void setLoading(boolean visible) { 150a62866be14da66b1d3f061837617eeea8a192aa7showard if (visible) { 151a62866be14da66b1d3f061837617eeea8a192aa7showard if (loadingCount == 0) { 152fb0762ed9e6e20c987d0613ffdf4859d14bd720ashoward loadingNotify.showWidget(loadingPanel); 153a62866be14da66b1d3f061837617eeea8a192aa7showard } 154a62866be14da66b1d3f061837617eeea8a192aa7showard loadingCount++; 155a62866be14da66b1d3f061837617eeea8a192aa7showard } else { 156a62866be14da66b1d3f061837617eeea8a192aa7showard loadingCount--; 157a62866be14da66b1d3f061837617eeea8a192aa7showard if (loadingCount == 0) { 158a62866be14da66b1d3f061837617eeea8a192aa7showard loadingNotify.hide(); 159a62866be14da66b1d3f061837617eeea8a192aa7showard } 160a62866be14da66b1d3f061837617eeea8a192aa7showard } 161e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh } 162e8819cdf80ca0e0602d22551a50f970aa68e108dmbligh} 163