/*******************************************************************************
* Copyright (c) 2013 BREDEX GmbH.
* 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:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.rc.common.adapter;
import org.eclipse.jubula.rc.common.adaptable.IAdapterFactory;
import org.eclipse.jubula.rc.common.tester.adapter.interfaces.IComponent;
import org.eclipse.jubula.rc.javafx.tester.adapter.AccordionAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.ButtonBaseAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.CellAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.ChoiceBoxAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.ComboBoxAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.ContextMenuAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.DatePickerAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.IContainerAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.JavaFXComponentAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.LabeledAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.LabeledGraphicContainerAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.ListViewAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.MenuBarAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.MenuButtonAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.ScrollPaneAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.SliderAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.SplitPaneAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.TabPaneAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.TableAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.TextAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.TextComponentAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.TitledPaneAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.ToolBarAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.TreeTableViewAdapter;
import org.eclipse.jubula.rc.javafx.tester.adapter.TreeViewAdapter;
import javafx.scene.Node;
import javafx.scene.control.Accordion;
import javafx.scene.control.ButtonBase;
import javafx.scene.control.Cell;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.control.Labeled;
import javafx.scene.control.ListView;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuButton;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.Slider;
import javafx.scene.control.SplitPane;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableView;
import javafx.scene.control.TextInputControl;
import javafx.scene.control.TitledPane;
import javafx.scene.control.ToolBar;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.TreeView;
import javafx.scene.image.ImageView;
import javafx.scene.shape.Shape;
import javafx.scene.text.Text;
/**
* This is the adapter factory for all JavaFX components. It is creating the
* specific adapter for a JavaFX component.
*
* Since we are using adapter here, it is a adapter factory. But this must not
* be the case. It is only relevant that the object is implementing the specific
* interface.
*
* @author BREDEX GmbH
* @created 28.10.2013
*
*/
public class JavaFXAdapterFactory implements IAdapterFactory {
/**
* the supported classes
*/
private static final Class[] SUPPORTEDCLASSES = new Class[] {
MenuItem.class, MenuBar.class, TextInputControl.class,
TreeView.class, TableView.class, ContextMenu.class,
ImageView.class, Text.class, TitledPane.class, ListView.class,
ComboBox.class, TabPane.class, ChoiceBox.class, Accordion.class,
ScrollPane.class, SplitPane.class, ToolBar.class,
TreeTableView.class, MenuButton.class, Labeled.class, DatePicker.class,
Cell.class, Slider.class, Shape.class, Node.class
};
@Override
public Class[] getSupportedClasses() {
return SUPPORTEDCLASSES;
}
@Override
public Object getAdapter(Class targetAdapterClass, Object objectToAdapt) {
IComponent returnvalue = null;
if (targetAdapterClass.equals(IComponent.class)) {
returnvalue = getComponentAdapter(objectToAdapt);
}
if (returnvalue == null && targetAdapterClass.equals(
IContainerAdapter.class)) {
returnvalue = getContainerAdapter(objectToAdapt);
}
// FALLBACK! Leave at the end
if (returnvalue == null
&& targetAdapterClass.equals(IComponent.class)
&& objectToAdapt instanceof Node) {
return new JavaFXComponentAdapter<Node>(
(Node) objectToAdapt);
}
return returnvalue;
}
/**
* @param objectToAdapt the object to adapt
* @return the container adapter
*/
private IComponent getContainerAdapter(Object objectToAdapt) {
if (objectToAdapt instanceof TabPane) {
return new TabPaneAdapter((TabPane) objectToAdapt);
} else if (objectToAdapt instanceof TitledPane) {
return new TitledPaneAdapter((TitledPane) objectToAdapt);
} else if (objectToAdapt instanceof ScrollPane) {
return new ScrollPaneAdapter((ScrollPane) objectToAdapt);
} else if (objectToAdapt instanceof SplitPane) {
return new SplitPaneAdapter((SplitPane) objectToAdapt);
} else if (objectToAdapt instanceof ToolBar) {
return new ToolBarAdapter((ToolBar) objectToAdapt);
} else if (objectToAdapt instanceof Labeled) {
return new LabeledGraphicContainerAdapter<Labeled>(
(Labeled) objectToAdapt);
}
return null;
}
/**
* @param objectToAdapt the object to adapt
* @return the component adapter
*/
private IComponent getComponentAdapter(Object objectToAdapt) {
if (objectToAdapt instanceof MenuButton) {
return new MenuButtonAdapter((MenuButton) objectToAdapt);
} else if (objectToAdapt instanceof ButtonBase) {
return new ButtonBaseAdapter((ButtonBase) objectToAdapt);
} else if (objectToAdapt instanceof Label) {
return new LabeledAdapter<Label>((Label) objectToAdapt);
} else if (objectToAdapt instanceof Text) {
return new TextAdapter((Text) objectToAdapt);
} else if (objectToAdapt instanceof TextInputControl) {
return new TextComponentAdapter(
(TextInputControl) objectToAdapt);
} else if (objectToAdapt instanceof DatePicker) {
return new DatePickerAdapter(
(DatePicker) objectToAdapt);
} else if (objectToAdapt instanceof TreeView) {
return new TreeViewAdapter((TreeView<?>) objectToAdapt);
} else if (objectToAdapt instanceof TableView) {
return new TableAdapter((TableView<?>) objectToAdapt);
} else if (objectToAdapt instanceof ContextMenu) {
return new ContextMenuAdapter(
(ContextMenu) objectToAdapt);
} else if (objectToAdapt instanceof MenuBar) {
return new MenuBarAdapter((MenuBar) objectToAdapt);
} else if (objectToAdapt instanceof ImageView) {
return new JavaFXComponentAdapter<ImageView>(
(ImageView) objectToAdapt);
} else if (objectToAdapt instanceof TabPane) {
return new TabPaneAdapter((TabPane) objectToAdapt);
} else if (objectToAdapt instanceof TitledPane) {
return new LabeledAdapter<TitledPane>(
(TitledPane) objectToAdapt);
} else if (objectToAdapt instanceof ListView) {
return new ListViewAdapter<ListView<?>>(
(ListView<?>) objectToAdapt);
} else if (objectToAdapt instanceof ComboBox) {
return new ComboBoxAdapter<ComboBox<?>>(
(ComboBox<?>) objectToAdapt);
} else if (objectToAdapt instanceof ChoiceBox) {
return new ChoiceBoxAdapter(
(ChoiceBox<?>) objectToAdapt);
} else if (objectToAdapt instanceof Accordion) {
return new AccordionAdapter((Accordion) objectToAdapt);
} else if (objectToAdapt instanceof TreeTableView) {
return new TreeTableViewAdapter(
(TreeTableView<?>) objectToAdapt);
} else if (objectToAdapt instanceof Cell) {
return new CellAdapter((Cell<?>) objectToAdapt);
} else if (objectToAdapt instanceof SplitPane) {
return new SplitPaneAdapter((SplitPane) objectToAdapt);
} else if (objectToAdapt instanceof Slider) {
return new SliderAdapter((Slider) objectToAdapt);
} else if (objectToAdapt instanceof ToolBar) {
return new ToolBarAdapter((ToolBar) objectToAdapt);
} else if (objectToAdapt instanceof Shape) {
return new JavaFXComponentAdapter<Shape>((Shape) objectToAdapt);
}
return null;
}
}