core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/extension/AbstractBrowserPortalPageLayer.java
changeset 1832 aaf2f7bc0609
parent 1831 3319dd953212
child 1849 40d70835dc4f
equal deleted inserted replaced
1831:3319dd953212 1832:aaf2f7bc0609
    22 import java.util.LinkedHashSet;
    22 import java.util.LinkedHashSet;
    23 import java.util.Set;
    23 import java.util.Set;
    24 
    24 
    25 import org.eclipse.jface.action.Action;
    25 import org.eclipse.jface.action.Action;
    26 import org.eclipse.jface.action.IAction;
    26 import org.eclipse.jface.action.IAction;
       
    27 import org.eclipse.jface.action.IStatusLineManager;
    27 import org.eclipse.jface.dialogs.Dialog;
    28 import org.eclipse.jface.dialogs.Dialog;
    28 import org.eclipse.jface.dialogs.IInputValidator;
    29 import org.eclipse.jface.dialogs.IInputValidator;
    29 import org.eclipse.jface.dialogs.InputDialog;
    30 import org.eclipse.jface.dialogs.InputDialog;
    30 import org.eclipse.swt.SWT;
    31 import org.eclipse.swt.SWT;
    31 import org.eclipse.swt.browser.Browser;
    32 import org.eclipse.swt.browser.Browser;
    32 import org.eclipse.swt.browser.LocationAdapter;
    33 import org.eclipse.swt.browser.LocationAdapter;
    33 import org.eclipse.swt.browser.LocationEvent;
    34 import org.eclipse.swt.browser.LocationEvent;
    34 import org.eclipse.swt.browser.OpenWindowListener;
    35 import org.eclipse.swt.browser.OpenWindowListener;
    35 import org.eclipse.swt.browser.ProgressAdapter;
    36 import org.eclipse.swt.browser.ProgressAdapter;
    36 import org.eclipse.swt.browser.ProgressEvent;
    37 import org.eclipse.swt.browser.ProgressEvent;
       
    38 import org.eclipse.swt.browser.StatusTextEvent;
       
    39 import org.eclipse.swt.browser.StatusTextListener;
    37 import org.eclipse.swt.browser.WindowEvent;
    40 import org.eclipse.swt.browser.WindowEvent;
    38 import org.eclipse.swt.layout.FillLayout;
    41 import org.eclipse.swt.layout.FillLayout;
    39 import org.eclipse.swt.widgets.Composite;
    42 import org.eclipse.swt.widgets.Composite;
    40 import org.eclipse.swt.widgets.Control;
    43 import org.eclipse.swt.widgets.Control;
    41 import org.eclipse.ui.IEditorPart;
    44 import org.eclipse.ui.IEditorPart;
    83 	                setLoading(event.current != event.total);
    86 	                setLoading(event.current != event.total);
    84 					NavigationActionBar.this.updater.updateAll();
    87 					NavigationActionBar.this.updater.updateAll();
    85 				}
    88 				}
    86 				@Override
    89 				@Override
    87 				public void completed(ProgressEvent event) {
    90 				public void completed(ProgressEvent event) {
       
    91 					getStatusLineManager().setMessage(null);
       
    92 					if (!failedConnect && !browserHasURL()) {
       
    93 						displayCannotFindServerPage();
       
    94 						Activator.logError("Could not display URL in browser: " + getURL().toExternalForm(), null);
       
    95 						failedConnect = true;
       
    96 					}
    88 					setLoading(false);
    97 					setLoading(false);
    89 					NavigationActionBar.this.updater.updateAll();
    98 					NavigationActionBar.this.updater.updateAll();
    90 				}
    99 				}
    91 			});
   100 			});
    92 			browser.addOpenWindowListener(new OpenWindowListener() {
   101 			browser.addOpenWindowListener(new OpenWindowListener() {
    93 				@Override
   102 				@Override
    94 				public void open(WindowEvent event) {
   103 				public void open(WindowEvent event) {
    95 					event.browser = browser;
   104 					event.browser = browser;
       
   105 				}
       
   106 			});
       
   107 			browser.addStatusTextListener(new StatusTextListener() {
       
   108 				@Override
       
   109 				public void changed(StatusTextEvent event) {
       
   110 					getStatusLineManager().setMessage(event.text);
    96 				}
   111 				}
    97 			});
   112 			});
    98 		}
   113 		}
    99 
   114 
   100 		@Override
   115 		@Override
   124 		public boolean isLoading() {
   139 		public boolean isLoading() {
   125 			return loading;
   140 			return loading;
   126 		}
   141 		}
   127 	}
   142 	}
   128 
   143 
       
   144 	protected static final String HTML_BODY_HEADER = "<html><head><title></title><style type=\"text/css\">div.item {font-family : sans-serif; font-size : 12px; margin-bottom : 16px;} div.itemBody {padding-top : 3px; padding-bottom : 3px;} div.itemInfo {background-color : #EEEEEE; color : #333333;} div.feedflare {display: none;} a.itemTitle {font-size : 12px; font-weight : bold;} a.markItemRead {font-size : 10px; color : #333333;}</style></head><body>"; //$NON-NLS-1$
       
   145 	protected static final String HTML_BODY_FOOTER = "</body></html>"; //$NON-NLS-1$
       
   146 
   129 	protected Browser browser;
   147 	protected Browser browser;
   130 	protected NavigationActionBar actionBar;
   148 	protected NavigationActionBar actionBar;
       
   149 	private IEditorPart part;
       
   150 	private boolean failedConnect;
   131 
   151 
   132 	@Override
   152 	@Override
   133 	public Control createControl(Composite parent, IEditorPart part) {
   153 	public Control createControl(Composite parent, IEditorPart part) {
       
   154 		this.part = part;
   134 		Composite composite = new Composite(parent, SWT.NONE);
   155 		Composite composite = new Composite(parent, SWT.NONE);
   135 		composite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
   156 		composite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
   136 		composite.setLayout(new FillLayout());
   157 		composite.setLayout(new FillLayout());
   137 		try {
   158 		try {
   138 			browser = new Browser(composite, SWT.MOZILLA);
   159 			browser = new Browser(composite, SWT.MOZILLA);
   165 			Activator.runInUIThreadWhenProxyDataSet(browser, new Runnable() {
   186 			Activator.runInUIThreadWhenProxyDataSet(browser, new Runnable() {
   166 				@Override
   187 				@Override
   167 				public void run() {
   188 				public void run() {
   168 					URL url = getURL();
   189 					URL url = getURL();
   169 					if (url != null) {
   190 					if (url != null) {
   170 						if (!browser.setUrl(url.toString())) {
   191 						browser.setUrl(url.toString());
   171 							browser.redraw();
       
   172 						}
       
   173 					}
   192 					}
   174 					actionBar.hookBrowser();
   193 					actionBar.hookBrowser();
   175 					actionBar.update();
   194 					actionBar.update();
   176 					browser.setFocus();
   195 					browser.setFocus();
   177 				}
   196 				}
   225 		
   244 		
   226 		a = new BrowserAction(Messages.AbstractBrowserPortalPage_RefreshLabel) {
   245 		a = new BrowserAction(Messages.AbstractBrowserPortalPage_RefreshLabel) {
   227 			@Override
   246 			@Override
   228 			public void run() {
   247 			public void run() {
   229 				if (browser != null) {
   248 				if (browser != null) {
   230 					browser.refresh();
   249 					if (failedConnect) {
       
   250 						URL url = getURL();
       
   251 						if (url != null) {
       
   252 							browser.setUrl(url.toString());
       
   253 							failedConnect = false;
       
   254 						}
       
   255 					}
       
   256 					else
       
   257 						browser.refresh();
   231 					actionBar.update();
   258 					actionBar.update();
   232 				}
   259 				}
   233 			}
   260 			}
   234 		};
   261 		};
   235 		actions.add(a);
   262 		actions.add(a);
   293 
   320 
   294 	protected boolean browserHasURL() {
   321 	protected boolean browserHasURL() {
   295 		String url = browser.getUrl();
   322 		String url = browser.getUrl();
   296 		return url.matches("^.*://.*"); //$NON-NLS-1$
   323 		return url.matches("^.*://.*"); //$NON-NLS-1$
   297 	}
   324 	}
       
   325 
       
   326 	protected void displayCannotFindServerPage() {
       
   327 		StringBuilder sb = new StringBuilder(HTML_BODY_HEADER);
       
   328 		// if we want, we can add html here for failed connect case
       
   329 		sb.append(HTML_BODY_FOOTER);
       
   330 		browser.setText(sb.toString());
       
   331 		browser.redraw();
       
   332 	}
       
   333 	
       
   334 	private IStatusLineManager getStatusLineManager() {
       
   335 		return part.getEditorSite().getActionBars().getStatusLineManager();
       
   336 	}
   298 }
   337 }