/******************************************************************************* * Copyright (c) 2012 Google, Inc. * 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: * Google, Inc. - initial API and implementation *******************************************************************************/ package com.windowtester.runtime.swt.internal.selector; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swt.widgets.Widget; import com.windowtester.runtime.swt.internal.selector.BasicWidgetSelector; import com.windowtester.runtime.swt.internal.selector.CanvasSelector; import com.windowtester.runtime.swt.internal.selector.ComboSelector; import com.windowtester.runtime.swt.internal.selector.ListSelector; import com.windowtester.runtime.swt.internal.selector.MenuItemSelector; import com.windowtester.runtime.swt.internal.selector.SWTWidgetSelectorAdapter; import com.windowtester.runtime.swt.internal.selector.StyledTextSelector; import com.windowtester.runtime.swt.internal.selector.TextSelector; import com.windowtester.runtime.swt.internal.selector.ToolItemSelector; import com.windowtester.runtime.swt.internal.selector.TreeItemSelector; import com.windowtester.internal.runtime.selector.WidgetSelectorService; /** * * A factory that produces the appropriate widget selection strategy based * on the class of the target widget. */ public class WidgetSelectorFactory { // private static final String WIDGET_SELECTOR_EXTENSION = "com.windowtester.swt.runtime.widgetSelector"; /** * Get the widget selector appropriate for this widget type. * @param w - the widget in question * @return an appropriate ISWTWidgetSelectorDelegate */ public static ISWTWidgetSelectorDelegate get(Widget w) { return get(w.getClass()); } /** * Get the widget selector appropriate for this widget class. * @param cls- the widget class in question * @return an appropriate ISWTWidgetSelectorDelegate */ private static ISWTWidgetSelectorDelegate get(Class cls) { ISWTWidgetSelectorDelegate registered = checkRegistry(cls); if (registered != null) return registered; if (cls == Canvas.class) return new CanvasSelector(); if (cls == Combo.class) return new ComboSelector(); if (cls == List.class) return new ListSelector(); if (cls == TreeItem.class) return new TreeItemSelector(); if (cls == Tree.class) return new TreeItemSelector(); if (cls == ToolItem.class) return new ToolItemSelector(); if (cls == Text.class) return new TextSelector(); if (cls == StyledText.class) return new StyledTextSelector(); if (cls == MenuItem.class) return new MenuItemSelector(); if (cls == CCombo.class) return new CComboSelector(); if (cls == TableItem.class) return new TableItemSelector(); //fall through return getBasic(); } // private static ISWTWidgetSelectorDelegate checkRegistry(Class cls) { // java.util.List selectors = new ArrayList(); // try { // selectors = getRegisteredSelectorPairs(selectors); // } catch (CoreException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // // for (Iterator iter = selectors.iterator(); iter.hasNext();) { // WidgetSelectorPair pair = (WidgetSelectorPair) iter.next(); // if (pair.widget == cls) // return pair.selector; // } // // return null; // } // private static java.util.List getRegisteredSelectorPairs(java.util.List selectors) throws CoreException { // IExtensionRegistry registry = Platform.getExtensionRegistry(); // if (registry == null) // return selectors; //not being run in Platform... // IExtensionPoint point = registry.getExtensionPoint(WIDGET_SELECTOR_EXTENSION); // if (point == null) // return selectors; // IExtension[] extensions = point.getExtensions(); // for (int i = 0; i < extensions.length; i++) // parseExtension(extensions[i], selectors); // return selectors; // } // // private static void parseExtension(IExtension extension, java.util.List pairs) throws CoreException { // IConfigurationElement[] elements = extension.getConfigurationElements(); // for (int i = 0; i < elements.length; i++) { // IConfigurationElement element = elements[i]; // Class widgetClass = (Class)element.createExecutableExtension("widgetClass"); // ISWTWidgetSelectorDelegate selector = (ISWTWidgetSelectorDelegate)element.createExecutableExtension("selectorDelegate"); // pairs.add(new WidgetSelectorPair(widgetClass, selector)); // } // // // } private static ISWTWidgetSelectorDelegate checkRegistry(Class cls) { com.windowtester.runtime.IWidgetSelectorDelegate delegate = WidgetSelectorService.getInstance().get(cls); if (delegate != null) return new SWTWidgetSelectorAdapter(delegate); return null; } /** * Get the default (basic) widget selector. * @return a default widget selector. */ public static ISWTWidgetSelectorDelegate getBasic() { return new BasicWidgetSelector(); } // static class WidgetSelectorPair { // public WidgetSelectorPair(Class cls, ISWTWidgetSelectorDelegate s) { // widget = cls; // selector = s; // } // Class widget; // ISWTWidgetSelectorDelegate selector; // } // }