blob: 564bb6814a7b2bedc0b071c9078b931c6cf71a5e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 IBM Corporation and Others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Hisashi MIYASHITA - initial API and implementation
*******************************************************************************/
package org.eclipse.actf.model.ui.editor.browser;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.actf.model.internal.ui.ModelUIPlugin;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.Platform;
/**
* Utility class to dispatch Web Browser event to registered
* {@link IWebBrowserACTFEventListener}
*/
public class WebBrowserEventUtil {
private static final String TAG_LISTENER = "listener";
// private static final String ATTR_ID = "id";
private static final String ATTR_CLASS = "class";
private static WebBrowserEventUtil[] cachedExtensions;
private static WebBrowserEventUtil[] getExtensions() {
if (cachedExtensions != null)
return cachedExtensions;
IExtension[] extensions = Platform.getExtensionRegistry()
.getExtensionPoint(ModelUIPlugin.PLUGIN_ID,
"webBrowserEventListener").getExtensions();
List<WebBrowserEventUtil> l = new ArrayList<WebBrowserEventUtil>();
for (int i = 0; i < extensions.length; i++) {
IConfigurationElement[] configElements = extensions[i]
.getConfigurationElements();
for (int j = 0; j < configElements.length; j++) {
WebBrowserEventUtil ex = parseExtension(configElements[j], l
.size());
if (ex != null)
l.add(ex);
}
}
cachedExtensions = (WebBrowserEventUtil[]) l
.toArray(new WebBrowserEventUtil[l.size()]);
return cachedExtensions;
}
private static WebBrowserEventUtil parseExtension(
IConfigurationElement configElement, int idx) {
if (!configElement.getName().equals(TAG_LISTENER))
return null;
try {
return new WebBrowserEventUtil(configElement, idx);
} catch (Exception e) {
}
return null;
}
/**
* Dispose all extensions.
*/
public static void disposeExtensions() {
if (cachedExtensions == null)
return;
for (int i = 0; i < cachedExtensions.length; i++) {
cachedExtensions[i].dispose();
}
cachedExtensions = null;
}
/**
* Dispatch navigate complete event
*
* @param iWebBrowser
* event source {@link IWebBrowserACTF}
* @param url
* target URL
*/
public static void navigateComplete(IWebBrowserACTF iWebBrowser, String url) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().navigateComplete(iWebBrowser, url);
}
}
/**
* DIspatch title change event
*
* @param iWebBrowser
* event source {@link IWebBrowserACTF}
* @param title
* new title
*/
public static void titleChange(IWebBrowserACTF iWebBrowser, String title) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().titleChange(iWebBrowser, title);
}
}
/**
* Dispatch progress change event
*
* @param iWebBrowser
* event source {@link IWebBrowserACTF}
* @param progress
* current progress
* @param progressMax
* goal value of progress
*/
public static void progressChange(IWebBrowserACTF iWebBrowser,
int progress, int progressMax) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().progressChange(iWebBrowser, progress,
progressMax);
}
}
/**
* Dispatch root document complete event
*
* @param iWebBrowser
* event source {@link IWebBrowserACTF}
*/
public static void rootDocumentComplete(IWebBrowserACTF iWebBrowser) {
WebBrowserEventUtil[] exs = getExtensions();
// System.out.println("myDocumentComplete");
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().rootDocumentComplete(iWebBrowser);
}
}
/**
* Dispatch get focus event
*
* @param iWebBrowser
* event source {@link IWebBrowserACTF}
*/
public static void getFocus(IWebBrowserACTF iWebBrowser) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().getFocus(iWebBrowser);
}
}
/**
* Dispatch browser disposed event
*
* @param iWebBrowser
* event source {@link IWebBrowserACTF}
* @param title
*/
public static void browserDisposed(IWebBrowserACTF iWebBrowser, String title) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().browserDisposed(iWebBrowser, title);
}
// System.out.println("close:"+iWebBrowser);
}
/**
* Dispatch before navigate event
*
* @param iWebBrowser
* event source {@link IWebBrowserACTF}
* @param url
* target URL
* @param targetFrameName
* target frame name, if available
* @param isInNavigation
* true, if the navigation is child of other navigation
*/
public static void beforeNavigate(IWebBrowserACTF iWebBrowser, String url,
String targetFrameName, boolean isInNavigation) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().beforeNavigate(iWebBrowser, url,
targetFrameName, isInNavigation);
}
}
/**
* Dispatch refresh event
*
* @param webBrowser
* event source {@link IWebBrowserACTF}
*/
public static void refreshStart(IWebBrowserACTF webBrowser) {
WebBrowserEventUtil[] exs = getExtensions();
// System.out.println("myRefresh");
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().refreshStart(webBrowser);
}
}
/**
* Dispatch refresh complete event
*
* @param webBrowser
* event source {@link IWebBrowserACTF}
*/
public static void refreshComplete(IWebBrowserACTF webBrowser) {
WebBrowserEventUtil[] exs = getExtensions();
// System.out.println("myRefreshComplete");
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().refreshComplete(webBrowser);
}
}
/**
* Dispatch navigate stop event
*
* @param webBrowser
* event source {@link IWebBrowserACTF}
*/
public static void navigateStop(IWebBrowserACTF webBrowser) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().navigateStop(webBrowser);
}
}
/**
* Dispatch event that is called when the address area of the browser gained
* the focus
*
* @param webBrowser
* event source {@link IWebBrowserACTF}
*/
public static void focusGainedOfAddressText(IWebBrowserACTF webBrowser) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().focusGainedOfAddressText(webBrowser);
}
}
/**
* Dispatch event that is called when the address area of the browser lost
* the focus
*
* @param webBrowser
* event source {@link IWebBrowserACTF}
*/
public static void focusLostOfAddressText(IWebBrowserACTF webBrowser) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().focusLostOfAddressText(webBrowser);
}
}
/**
* Dispatch event that is called when the new instance of
* {@link IWebBrowserACTF} was created
*
* @param webBrowser
* event source {@link IWebBrowserACTF}
*/
public static void newWindow(IWebBrowserACTF webBrowser) {
WebBrowserEventUtil[] exs = getExtensions();
if (exs == null)
return;
for (int i = 0; i < exs.length; i++) {
exs[i].getListener().newWindow(webBrowser);
}
}
private final IConfigurationElement configElement;
private IWebBrowserACTFEventListener listener;
private WebBrowserEventUtil(IConfigurationElement configElement, int idx) {
this.configElement = configElement;
}
private IWebBrowserACTFEventListener getListener() {
if (listener != null)
return listener;
try {
listener = (IWebBrowserACTFEventListener) configElement
.createExecutableExtension(ATTR_CLASS);
} catch (Exception e) {
}
return listener;
}
private void dispose() {
if (listener == null)
return;
listener.dispose();
listener = null;
}
}