blob: 97138980bcb32c33a604fbccad01b57c94885fde [file] [log] [blame]
/*
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.netbeans.jemmy.operators;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.Hashtable;
import java.util.Vector;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.plaf.ListUI;
import org.netbeans.jemmy.ComponentChooser;
import org.netbeans.jemmy.ComponentSearcher;
import org.netbeans.jemmy.JemmyInputException;
import org.netbeans.jemmy.Outputable;
import org.netbeans.jemmy.QueueTool;
import org.netbeans.jemmy.TestOut;
import org.netbeans.jemmy.TimeoutExpiredException;
import org.netbeans.jemmy.drivers.DriverManager;
import org.netbeans.jemmy.drivers.MultiSelListDriver;
import org.netbeans.jemmy.util.EmptyVisualizer;
/**
* <BR><BR>Timeouts used: <BR>
* ComponentOperator.WaitComponentTimeout - time to wait component displayed
* <BR>
* ComponentOperator.WaitStateTimeout - time to wait for item, and for item to
* be selected <BR>
* JScrollBarOperator.OneScrollClickTimeout - time for one scroll click <BR>
* JScrollBarOperator.WholeScrollTimeout - time for the whole scrolling <BR>.
*
* @see org.netbeans.jemmy.Timeouts
*
* @author Alexandre Iline (alexandre.iline@oracle.com)
*
*/
public class JListOperator extends JComponentOperator
implements Outputable {
/**
* Identifier for a "item" properties.
*
* @see #getDump
*/
public static final String ITEM_PREFIX_DPROP = "Item";
/**
* Identifier for a "selected item" property.
*
* @see #getDump
*/
public static final String SELECTED_ITEM_PREFIX_DPROP = "SelectedItem";
private TestOut output;
private MultiSelListDriver driver;
/**
* Constructor.
*
* @param b a component
*/
public JListOperator(JList<?> b) {
super(b);
driver = DriverManager.getMultiSelListDriver(getClass());
}
/**
* Constructs a JListOperator object.
*
* @param cont a container
* @param chooser a component chooser specifying searching criteria.
* @param index an index between appropriate ones.
*/
public JListOperator(ContainerOperator<?> cont, ComponentChooser chooser, int index) {
this((JList) cont.
waitSubComponent(new JListFinder(chooser),
index));
copyEnvironment(cont);
}
/**
* Constructs a JListOperator object.
*
* @param cont a container
* @param chooser a component chooser specifying searching criteria.
*/
public JListOperator(ContainerOperator<?> cont, ComponentChooser chooser) {
this(cont, chooser, 0);
}
/**
* Constructor. Waits item text first. Uses cont's timeout and output for
* waiting and to init operator.
*
* @param cont a container
* @param text Text of item which is currently selected.
* @param itemIndex Item index.
* @param index Ordinal component index.
*
*/
public JListOperator(ContainerOperator<?> cont, String text, int itemIndex, int index) {
this((JList) waitComponent(cont,
new JListByItemFinder(text, itemIndex,
cont.getComparator()),
index));
copyEnvironment(cont);
}
/**
* Constructor. Waits component by selected item text first. Uses cont's
* timeout and output for waiting and to init operator.
*
* @param cont a container
* @param text Text of item which is currently selected.
* @param index Ordinal component index.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
*
*/
public JListOperator(ContainerOperator<?> cont, String text, int index) {
this(cont, text, -1, index);
}
/**
* Constructor. Waits component in container first. Uses cont's timeout and
* output for waiting and to init operator.
*
* @param cont a container
* @param text Text of item which is currently selected.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
*
*/
public JListOperator(ContainerOperator<?> cont, String text) {
this(cont, text, 0);
}
/**
* Constructor. Waits component in container first. Uses cont's timeout and
* output for waiting and to init operator.
*
* @param cont a container
* @param index Ordinal component index.
*
*/
public JListOperator(ContainerOperator<?> cont, int index) {
this((JList) waitComponent(cont,
new JListFinder(),
index));
copyEnvironment(cont);
}
/**
* Constructor. Waits component in container first. Uses cont's timeout and
* output for waiting and to init operator.
*
* @param cont a container
*
*/
public JListOperator(ContainerOperator<?> cont) {
this(cont, 0);
}
/**
* Searches JList in container.
*
* @param cont Container to search component in.
* @param chooser org.netbeans.jemmy.ComponentChooser implementation.
* @param index Ordinal component index.
* @return JList instance or null if component was not found.
*/
public static JList<?> findJList(Container cont, ComponentChooser chooser, int index) {
return (JList) findComponent(cont, new JListFinder(chooser), index);
}
/**
* Searches 0'th JList in container.
*
* @param cont Container to search component in.
* @param chooser org.netbeans.jemmy.ComponentChooser implementation.
* @return JList instance or null if component was not found.
*/
public static JList<?> findJList(Container cont, ComponentChooser chooser) {
return findJList(cont, chooser, 0);
}
/**
* Searches JList by item.
*
* @param cont Container to search component in.
* @param text Item text. If null, contents is not checked.
* @param ce Compare text exactly.
* @param ccs Compare text case sensitively.
* @param itemIndex Index of item to compare text. If -1, selected item is
* checked.
* @param index Ordinal component index.
* @return JList instance or null if component was not found.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
*/
public static JList<?> findJList(Container cont, String text, boolean ce, boolean ccs, int itemIndex, int index) {
return findJList(cont, new JListByItemFinder(text, itemIndex, new DefaultStringComparator(ce, ccs)), index);
}
/**
* Searches JList by item.
*
* @param cont Container to search component in.
* @param text Item text. If null, contents is not checked.
* @param ce Compare text exactly.
* @param ccs Compare text case sensitively.
* @param itemIndex Index of item to compare text. If -1, selected item is
* checked.
* @return JList instance or null if component was not found.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
*/
public static JList<?> findJList(Container cont, String text, boolean ce, boolean ccs, int itemIndex) {
return findJList(cont, text, ce, ccs, itemIndex, 0);
}
/**
* Waits JList in container.
*
* @param cont Container to search component in.
* @param chooser org.netbeans.jemmy.ComponentChooser implementation.
* @param index Ordinal component index.
* @return JList instance or null if component was not found.
*
*/
public static JList<?> waitJList(Container cont, ComponentChooser chooser, int index) {
return (JList) waitComponent(cont, new JListFinder(chooser), index);
}
/**
* Waits 0'th JList in container.
*
* @param cont Container to search component in.
* @param chooser org.netbeans.jemmy.ComponentChooser implementation.
* @return JList instance or null if component was not found.
*
*/
public static JList<?> waitJList(Container cont, ComponentChooser chooser) {
return waitJList(cont, chooser, 0);
}
/**
* Waits JList by item.
*
* @param cont Container to search component in.
* @param text Item text. If null, contents is not checked.
* @param ce Compare text exactly.
* @param ccs Compare text case sensitively.
* @param itemIndex Index of item to compare text. If -1, selected item is
* checked.
* @param index Ordinal component index.
* @return JList instance or null if component was not found.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
*
*/
public static JList<?> waitJList(Container cont, String text, boolean ce, boolean ccs, int itemIndex, int index) {
return waitJList(cont, new JListByItemFinder(text, itemIndex, new DefaultStringComparator(ce, ccs)), index);
}
/**
* Waits JList by item.
*
* @param cont Container to search component in.
* @param text Item text. If null, contents is not checked.
* @param ce Compare text exactly.
* @param ccs Compare text case sensitively.
* @param itemIndex Index of item to compare text. If -1, selected item is
* checked.
* @return JList instance or null if component was not found.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
*
*/
public static JList<?> waitJList(Container cont, String text, boolean ce, boolean ccs, int itemIndex) {
return waitJList(cont, text, ce, ccs, itemIndex, 0);
}
@Override
public void setOutput(TestOut output) {
super.setOutput(output.createErrorOutput());
this.output = output;
}
@Override
public TestOut getOutput() {
return output;
}
@Override
public void copyEnvironment(Operator anotherOperator) {
super.copyEnvironment(anotherOperator);
driver
= (MultiSelListDriver) DriverManager.
getDriver(DriverManager.MULTISELLIST_DRIVER_ID,
getClass(),
anotherOperator.getProperties());
}
/**
* Gets point to click on itemIndex'th item.
*
* @param itemIndex an index of an item to click.
* @return a Point in component's coordinate system.
*/
public Point getClickPoint(int itemIndex) {
Rectangle rect = getCellBounds(itemIndex, itemIndex);
return (new Point(rect.x + rect.width / 2,
rect.y + rect.height / 2));
}
/**
* Ask renderer for component to be displayed.
*
* @param itemIndex Item index.
* @param isSelected True if the specified cell was selected.
* @param cellHasFocus True if the specified cell has the focus.
* @return Component to be displayed.
*/
@SuppressWarnings(value = "unchecked")
public Component getRenderedComponent(int itemIndex, boolean isSelected, boolean cellHasFocus) {
return (((ListCellRenderer<Object>) getCellRenderer()).
getListCellRendererComponent((JList<Object>) getSource(),
getModel().getElementAt(itemIndex),
itemIndex,
isSelected,
cellHasFocus));
}
/**
* Ask renderer for component to be displayed. Uses
* isSelectedIndex(itemIndex) to determine whether item is selected.
* Supposes item do not have focus.
*
* @param itemIndex Item index.
* @return Component to be displayed.
*/
public Component getRenderedComponent(int itemIndex) {
return getRenderedComponent(itemIndex, isSelectedIndex(itemIndex), false);
}
/**
* Searches for index'th item good from chooser's point of view.
*
* @param chooser Item verifying object.
* @param index Ordinal item index.
* @return Item index or -1 if search was insuccessful.
*/
public int findItemIndex(ListItemChooser chooser, int index) {
ListModel<?> model = getModel();
int count = 0;
for (int i = 0; i < model.getSize(); i++) {
if (chooser.checkItem(this, i)) {
if (count == index) {
return i;
} else {
count++;
}
}
}
return -1;
}
/**
* Searches for an item good from chooser's point of view.
*
* @param chooser Item verifying object.
* @return Item index or -1 if serch was insuccessful.
* @see #findItemIndex(JListOperator.ListItemChooser, int)
* @see #findItemIndex(String, boolean, boolean)
*/
public int findItemIndex(ListItemChooser chooser) {
return findItemIndex(chooser, 0);
}
/**
* Searches for an item good from chooser's point of view.
*
* @param item a text pattern
* @param comparator a string comparision algorithm
* @param index Ordinal item index.
* @return Item index or -1 if serch was insuccessful.
* @see #findItemIndex(JListOperator.ListItemChooser, int)
* @see #findItemIndex(String, boolean, boolean)
*/
public int findItemIndex(String item, StringComparator comparator, int index) {
return findItemIndex(new BySubStringListItemChooser(item, comparator), index);
}
/**
* Searched for index'th item by text.
*
* @param item a text pattern
* @param ce Compare text exactly.
* @param cc Compare text case sensitively.
* @param index Ordinal item index.
* @return Item index or -1 if serch was insuccessful.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
* @deprecated Use findItemIndex(String, int) or findItemIndex(String,
* StringComparator, int)
*/
@Deprecated
public int findItemIndex(String item, boolean ce, boolean cc, int index) {
return findItemIndex(item, new DefaultStringComparator(ce, cc), index);
}
/**
* Searched for index'th item by text. Uses StringComparator assigned to
* this object.
*
* @param item a text pattern
* @param index Ordinal item index.
* @return Item index or -1 if search was insuccessful.
*/
public int findItemIndex(String item, int index) {
return findItemIndex(item, getComparator(), index);
}
/**
* Searches for an item good from chooser's point of view.
*
* @param item a text pattern
* @param comparator a string comparision algorithm
* @return Item index or -1 if serch was insuccessful.
* @see #findItemIndex(JListOperator.ListItemChooser, int)
* @see #findItemIndex(String, boolean, boolean)
*/
public int findItemIndex(String item, StringComparator comparator) {
return findItemIndex(item, comparator, 0);
}
/**
* Searched item by text.
*
* @param item a text pattern
* @param ce Compare text exactly.
* @param cc Compare text case sensitively.
* @return Item index or -1 if search was insuccessful.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
* @deprecated Use findItemIndex(String) or findItemIndex(String,
* StringComparator)
*/
@Deprecated
public int findItemIndex(String item, boolean ce, boolean cc) {
return findItemIndex(item, ce, cc, 0);
}
/**
* Searched for first item by text. Uses StringComparator assigned to this
* object.
*
* @param item a text pattern
* @return Item index or -1 if search was insuccessful.
* @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean)
*/
public int findItemIndex(String item) {
return findItemIndex(item, 0);
}
/**
* Searches for index'th item by rendered component.
*
* @param chooser Component verifying object.
* @param index Ordinal item index.
* @return Item index or -1 if serch was insuccessful.
* @see #getRenderedComponent(int, boolean, boolean)
*/
public int findItemIndex(ComponentChooser chooser, int index) {
return findItemIndex(new ByRenderedComponentListItemChooser(chooser), index);
}
/**
* Searches for an item by rendered component.
*
* @param chooser Component verifying object.
* @return Item index or -1 if serch was insuccessful.
* @see #getRenderedComponent(int, boolean, boolean)
*/
public int findItemIndex(ComponentChooser chooser) {
return findItemIndex(chooser, 0);
}
/**
* Clicks on item by item index.
*
* @param itemIndex Item index.
* @param clickCount count click.
* @return Click point or null if list does not contains itemIndex'th item.
* @throws NoSuchItemException
*/
public Object clickOnItem(final int itemIndex, final int clickCount) {
output.printLine("Click " + Integer.toString(clickCount)
+ " times on JList\n : " + toStringSource());
output.printGolden("Click " + Integer.toString(clickCount)
+ " times on JList");
checkIndex(itemIndex);
try {
scrollToItem(itemIndex);
} catch (TimeoutExpiredException e) {
output.printStackTrace(e);
}
if (((JList) getSource()).getModel().getSize() <= itemIndex) {
output.printErrLine("JList " + toStringSource() + " does not contain "
+ Integer.toString(itemIndex) + "'th item");
return null;
}
if (((JList) getSource()).getAutoscrolls()) {
((JList) getSource()).ensureIndexIsVisible(itemIndex);
}
return (getQueueTool().invokeSmoothly(new QueueTool.QueueAction<Object>("Path selecting") {
@Override
public Object launch() {
Rectangle rect = getCellBounds(itemIndex, itemIndex);
if (rect == null) {
output.printErrLine("Impossible to determine click point for "
+ Integer.toString(itemIndex) + "'th item");
return null;
}
Point point = new Point((int) (rect.getX() + rect.getWidth() / 2),
(int) (rect.getY() + rect.getHeight() / 2));
Object result = getModel().getElementAt(itemIndex);
clickMouse(point.x, point.y, clickCount);
return result;
}
}));
}
/**
* Finds item by item text, and do mouse click on it.
*
* @param item Item text.
* @param comparator a string comparision algorithm
* @param clickCount count click.
* @return Click point or null if list does not contains itemIndex'th item.
* @throws NoSuchItemException
*/
public Object clickOnItem(final String item, final StringComparator comparator, final int clickCount) {
scrollToItem(findItemIndex(item, comparator, 0));
return (getQueueTool().invokeSmoothly(new QueueTool.QueueAction<Object>("Path selecting") {
@Override
public Object launch() {
int index = findItemIndex(item, comparator, 0);
if (index != -1) {
return clickOnItem(index, clickCount);
} else {
throw (new NoSuchItemException(item));
}
}
}));
}
/**
* Finds item by item text, and do mouse click on it.
*
* @param item Item text.
* @param ce Compare exactly.
* @param cc Compare case sensitively.
* @param clickCount count click.
* @return Click point or null if list does not contains itemIndex'th item.
* @throws NoSuchItemException
* @deprecated Use clickOnItem(String, int) or clickOnItem(String,
* StringComparator, int)
*/
@Deprecated
public Object clickOnItem(String item, boolean ce, boolean cc, int clickCount) {
return clickOnItem(item, new DefaultStringComparator(ce, cc), clickCount);
}
/**
* Finds item by item text, and do mouse click on it. Uses StringComparator
* assigned to this object.
*
* @param item Item text.
* @param clickCount count click.
* @return Click point or null if list does not contains itemIndex'th item.
* @throws NoSuchItemException
*/
public Object clickOnItem(String item, int clickCount) {
return clickOnItem(item, getComparator(), clickCount);
}
/**
* Finds item by item text, and do simple mouse click on it. Uses
* StringComparator assigned to this object.
*
* @param item Item text.
* @param comparator a string comparision algorithm
* @return Click point or null if list does not contains itemIndex'th item.
* @throws NoSuchItemException
*/
public Object clickOnItem(String item, StringComparator comparator) {
return clickOnItem(item, comparator, 1);
}
/**
* Finds item by item text, and do simple mouse click on it.
*
* @param item Item text.
* @param ce Compare exactly.
* @param cc Compare case sensitively.
* @return Click point or null if list does not contains itemIndex'th item.
* @throws NoSuchItemException
* @deprecated Use clickOnItem(String) or clickOnItem(String,
* StringComparator)
*/
@Deprecated
public Object clickOnItem(String item, boolean ce, boolean cc) {
return clickOnItem(item, ce, cc, 1);
}
/**
* Finds item by item text, and do simple mouse click on it. Uses
* StringComparator assigned to this object.
*
* @param item Item text.
* @return Click point or null if list does not contains itemIndex'th item.
* @throws NoSuchItemException
*/
public Object clickOnItem(String item) {
return clickOnItem(item, 0);
}
/**
* Scrolls to an item if the list is on a JScrollPane component.
*
* @param itemIndex an item index.
* @see #scrollToItem(String, boolean, boolean)
*
* @throws NoSuchItemException
*/
public void scrollToItem(int itemIndex) {
output.printTrace("Scroll JList to " + Integer.toString(itemIndex) + "'th item\n : "
+ toStringSource());
output.printGolden("Scroll JList to " + Integer.toString(itemIndex) + "'th item");
checkIndex(itemIndex);
makeComponentVisible();
//try to find JScrollPane under.
JScrollPane scroll = (JScrollPane) getContainer(new JScrollPaneOperator.JScrollPaneFinder(ComponentSearcher.
getTrueChooser("JScrollPane")));
if (scroll == null) {
return;
}
JScrollPaneOperator scroller = new JScrollPaneOperator(scroll);
scroller.copyEnvironment(this);
scroller.setVisualizer(new EmptyVisualizer());
Rectangle rect = getCellBounds(itemIndex, itemIndex);
scroller.scrollToComponentRectangle(getSource(),
(int) rect.getX(),
(int) rect.getY(),
(int) rect.getWidth(),
(int) rect.getHeight());
}
/**
* Scrolls to an item if the list is on a JScrollPane component.
*
* @param item Item text
* @param comparator a string comparision algorithm
* @see #scrollToItem(String, boolean, boolean)
*
*/
public void scrollToItem(String item, StringComparator comparator) {
scrollToItem(findItemIndex(item, comparator));
}
/**
* Scrolls to an item if the list is on a JScrollPane component.
*
* @param item Item text
* @param ce Compare exactly.
* @param cc Compare case sensitively.
* @see #scrollToItem(String, boolean, boolean)
*
* @deprecated Use scrollToItem(String) or scrollToItem(String,
* StringComparator)
*/
@Deprecated
public void scrollToItem(String item, boolean ce, boolean cc) {
scrollToItem(findItemIndex(item, ce, cc));
}
/**
* Selects an item by index.
*
* @param index an item index.
*/
public void selectItem(int index) {
checkIndex(index);
driver.selectItem(this, index);
if (getVerification()) {
waitItemSelection(index, true);
}
}
/**
* Selects an item by text.
*
* @param item an item text.
*/
public void selectItem(final String item) {
scrollToItem(findItemIndex(item));
getQueueTool().invokeSmoothly(new QueueTool.QueueAction<Void>("Path selecting") {
@Override
public Void launch() {
driver.selectItem(JListOperator.this, findItemIndex(item));
return null;
}
});
}
/**
* Selects items by indices.
*
* @param indices item indices.
*/
public void selectItems(int[] indices) {
checkIndices(indices);
driver.selectItems(this, indices);
if (getVerification()) {
waitItemsSelection(indices, true);
}
}
/**
* Selects items by texts.
*
* @param items item texts.
*/
public void selectItem(String[] items) {
int[] indices = new int[items.length];
for (int i = 0; i < items.length; i++) {
indices[i] = findItemIndex(items[i]);
}
selectItems(indices);
}
/**
* Waits for items to be selected.
*
* @param itemIndices item indices to be selected
* @param selected Selected (true) or unselected (false).
*/
public void waitItemsSelection(final int[] itemIndices, final boolean selected) {
getOutput().printLine("Wait items to be "
+ (selected ? "" : "un") + "selected in component \n : "
+ toStringSource());
getOutput().printGolden("Wait items to be "
+ (selected ? "" : "un") + "selected");
waitState(new ComponentChooser() {
@Override
public boolean checkComponent(Component comp) {
int[] indices = getSelectedIndices();
for (int i = 0; i < indices.length; i++) {
if (indices[i] != itemIndices[i]) {
return false;
}
}
return true;
}
@Override
public String getDescription() {
return ("Item has been "
+ (selected ? "" : "un") + "selected");
}
@Override
public String toString() {
return "JListOperator.waitItemsSelection.ComponentChooser{description = " + getDescription() + '}';
}
});
}
/**
* Waits for item to be selected.
*
* @param itemIndex an item needs to be selected
* @param selected Selected (true) or unselected (false).
*/
public void waitItemSelection(final int itemIndex, final boolean selected) {
waitItemsSelection(new int[]{itemIndex}, selected);
}
/**
* Waits for item. Uses getComparator() comparator.
*
* @param item an item text
* @param itemIndex Index of item to check or -1 to check selected item.
*/
public void waitItem(String item, int itemIndex) {
getOutput().printLine("Wait \"" + item + "\" at the " + Integer.toString(itemIndex)
+ " position in component \n : "
+ toStringSource());
getOutput().printGolden("Wait \"" + item + "\" at the " + Integer.toString(itemIndex)
+ " position");
waitState(new JListByItemFinder(item, itemIndex, getComparator()));
}
/**
* Returns information about component.
*/
@Override
public Hashtable<String, Object> getDump() {
Hashtable<String, Object> result = super.getDump();
String[] items = new String[((JList) getSource()).getModel().getSize()];
for (int i = 0; i < ((JList) getSource()).getModel().getSize(); i++) {
items[i] = ((JList) getSource()).getModel().getElementAt(i).toString();
}
int[] selectedIndices = ((JList) getSource()).getSelectedIndices();
String[] selectedItems = new String[selectedIndices.length];
for (int i = 0; i < selectedIndices.length; i++) {
selectedItems[i] = items[selectedIndices[i]];
}
addToDump(result, ITEM_PREFIX_DPROP, items);
addToDump(result, SELECTED_ITEM_PREFIX_DPROP, selectedItems);
return result;
}
////////////////////////////////////////////////////////
//Mapping //
/**
* Maps {@code JList.addListSelectionListener(ListSelectionListener)}
* through queue
*/
public void addListSelectionListener(final ListSelectionListener listSelectionListener) {
runMapping(new MapVoidAction("addListSelectionListener") {
@Override
public void map() {
((JList) getSource()).addListSelectionListener(listSelectionListener);
}
});
}
/**
* Maps {@code JList.addSelectionInterval(int, int)} through queue
*/
public void addSelectionInterval(final int i, final int i1) {
runMapping(new MapVoidAction("addSelectionInterval") {
@Override
public void map() {
((JList) getSource()).addSelectionInterval(i, i1);
}
});
}
/**
* Maps {@code JList.clearSelection()} through queue
*/
public void clearSelection() {
runMapping(new MapVoidAction("clearSelection") {
@Override
public void map() {
((JList) getSource()).clearSelection();
}
});
}
/**
* Maps {@code JList.ensureIndexIsVisible(int)} through queue
*/
public void ensureIndexIsVisible(final int i) {
runMapping(new MapVoidAction("ensureIndexIsVisible") {
@Override
public void map() {
((JList) getSource()).ensureIndexIsVisible(i);
}
});
}
/**
* Maps {@code JList.getAnchorSelectionIndex()} through queue
*/
public int getAnchorSelectionIndex() {
return (runMapping(new MapIntegerAction("getAnchorSelectionIndex") {
@Override
public int map() {
return ((JList) getSource()).getAnchorSelectionIndex();
}
}));
}
/**
* Maps {@code JList.getCellBounds(int, int)} through queue
*/
public Rectangle getCellBounds(final int i, final int i1) {
return (runMapping(new MapAction<Rectangle>("getCellBounds") {
@Override
public Rectangle map() {
return ((JList) getSource()).getCellBounds(i, i1);
}
}));
}
/**
* Maps {@code JList.getCellRenderer()} through queue
*/
public ListCellRenderer<?> getCellRenderer() {
return (runMapping(new MapAction<ListCellRenderer<?>>("getCellRenderer") {
@Override
public ListCellRenderer<?> map() {
return ((JList) getSource()).getCellRenderer();
}
}));
}
/**
* Maps {@code JList.getFirstVisibleIndex()} through queue
*/
public int getFirstVisibleIndex() {
return (runMapping(new MapIntegerAction("getFirstVisibleIndex") {
@Override
public int map() {
return ((JList) getSource()).getFirstVisibleIndex();
}
}));
}
/**
* Maps {@code JList.getFixedCellHeight()} through queue
*/
public int getFixedCellHeight() {
return (runMapping(new MapIntegerAction("getFixedCellHeight") {
@Override
public int map() {
return ((JList) getSource()).getFixedCellHeight();
}
}));
}
/**
* Maps {@code JList.getFixedCellWidth()} through queue
*/
public int getFixedCellWidth() {
return (runMapping(new MapIntegerAction("getFixedCellWidth") {
@Override
public int map() {
return ((JList) getSource()).getFixedCellWidth();
}
}));
}
/**
* Maps {@code JList.getLastVisibleIndex()} through queue
*/
public int getLastVisibleIndex() {
return (runMapping(new MapIntegerAction("getLastVisibleIndex") {
@Override
public int map() {
return ((JList) getSource()).getLastVisibleIndex();
}
}));
}
/**
* Maps {@code JList.getLeadSelectionIndex()} through queue
*/
public int getLeadSelectionIndex() {
return (runMapping(new MapIntegerAction("getLeadSelectionIndex") {
@Override
public int map() {
return ((JList) getSource()).getLeadSelectionIndex();
}
}));
}
/**
* Maps {@code JList.getMaxSelectionIndex()} through queue
*/
public int getMaxSelectionIndex() {
return (runMapping(new MapIntegerAction("getMaxSelectionIndex") {
@Override
public int map() {
return ((JList) getSource()).getMaxSelectionIndex();
}
}));
}
/**
* Maps {@code JList.getMinSelectionIndex()} through queue
*/
public int getMinSelectionIndex() {
return (runMapping(new MapIntegerAction("getMinSelectionIndex") {
@Override
public int map() {
return ((JList) getSource()).getMinSelectionIndex();
}
}));
}
/**
* Maps {@code JList.getModel()} through queue
*/
public ListModel<?> getModel() {
return (runMapping(new MapAction<ListModel<?>>("getModel") {
@Override
public ListModel<?> map() {
return ((JList) getSource()).getModel();
}
}));
}
/**
* Maps {@code JList.getPreferredScrollableViewportSize()} through queue
*/
public Dimension getPreferredScrollableViewportSize() {
return (runMapping(new MapAction<Dimension>("getPreferredScrollableViewportSize") {
@Override
public Dimension map() {
return ((JList) getSource()).getPreferredScrollableViewportSize();
}
}));
}
/**
* Maps {@code JList.getPrototypeCellValue()} through queue
*/
public Object getPrototypeCellValue() {
return (runMapping(new MapAction<Object>("getPrototypeCellValue") {
@Override
public Object map() {
return ((JList) getSource()).getPrototypeCellValue();
}
}));
}
/**
* Maps {@code JList.getScrollableBlockIncrement(Rectangle, int, int)}
* through queue
*/
public int getScrollableBlockIncrement(final Rectangle rectangle, final int i, final int i1) {
return (runMapping(new MapIntegerAction("getScrollableBlockIncrement") {
@Override
public int map() {
return ((JList) getSource()).getScrollableBlockIncrement(rectangle, i, i1);
}
}));
}
/**
* Maps {@code JList.getScrollableTracksViewportHeight()} through queue
*/
public boolean getScrollableTracksViewportHeight() {
return (runMapping(new MapBooleanAction("getScrollableTracksViewportHeight") {
@Override
public boolean map() {
return ((JList) getSource()).getScrollableTracksViewportHeight();
}
}));
}
/**
* Maps {@code JList.getScrollableTracksViewportWidth()} through queue
*/
public boolean getScrollableTracksViewportWidth() {
return (runMapping(new MapBooleanAction("getScrollableTracksViewportWidth") {
@Override
public boolean map() {
return ((JList) getSource()).getScrollableTracksViewportWidth();
}
}));
}
/**
* Maps {@code JList.getScrollableUnitIncrement(Rectangle, int, int)}
* through queue
*/
public int getScrollableUnitIncrement(final Rectangle rectangle, final int i, final int i1) {
return (runMapping(new MapIntegerAction("getScrollableUnitIncrement") {
@Override
public int map() {
return ((JList) getSource()).getScrollableUnitIncrement(rectangle, i, i1);
}
}));
}
/**
* Maps {@code JList.getSelectedIndex()} through queue
*/
public int getSelectedIndex() {
return (runMapping(new MapIntegerAction("getSelectedIndex") {
@Override
public int map() {
return ((JList) getSource()).getSelectedIndex();
}
}));
}
/**
* Maps {@code JList.getSelectedIndices()} through queue
*/
public int[] getSelectedIndices() {
return ((int[]) runMapping(new MapAction<Object>("getSelectedIndices") {
@Override
public Object map() {
return ((JList) getSource()).getSelectedIndices();
}
}));
}
/**
* Maps {@code JList.getSelectedValue()} through queue
*/
public Object getSelectedValue() {
return (runMapping(new MapAction<Object>("getSelectedValue") {
@Override
public Object map() {
return ((JList) getSource()).getSelectedValue();
}
}));
}
/**
* Maps {@code JList.getSelectedValues()} through queue
*/
@Deprecated
public Object[] getSelectedValues() {
return ((Object[]) runMapping(new MapAction<Object>("getSelectedValues") {
@Override
public Object map() {
return ((JList) getSource()).getSelectedValues();
}
}));
}
/**
* Maps {@code JList.getSelectionBackground()} through queue
*/
public Color getSelectionBackground() {
return (runMapping(new MapAction<Color>("getSelectionBackground") {
@Override
public Color map() {
return ((JList) getSource()).getSelectionBackground();
}
}));
}
/**
* Maps {@code JList.getSelectionForeground()} through queue
*/
public Color getSelectionForeground() {
return (runMapping(new MapAction<Color>("getSelectionForeground") {
@Override
public Color map() {
return ((JList) getSource()).getSelectionForeground();
}
}));
}
/**
* Maps {@code JList.getSelectionMode()} through queue
*/
public int getSelectionMode() {
return (runMapping(new MapIntegerAction("getSelectionMode") {
@Override
public int map() {
return ((JList) getSource()).getSelectionMode();
}
}));
}
/**
* Maps {@code JList.getSelectionModel()} through queue
*/
public ListSelectionModel getSelectionModel() {
return (runMapping(new MapAction<ListSelectionModel>("getSelectionModel") {
@Override
public ListSelectionModel map() {
return ((JList) getSource()).getSelectionModel();
}
}));
}
/**
* Maps {@code JList.getUI()} through queue
*/
public ListUI getUI() {
return (runMapping(new MapAction<ListUI>("getUI") {
@Override
public ListUI map() {
return ((JList) getSource()).getUI();
}
}));
}
/**
* Maps {@code JList.getValueIsAdjusting()} through queue
*/
public boolean getValueIsAdjusting() {
return (runMapping(new MapBooleanAction("getValueIsAdjusting") {
@Override
public boolean map() {
return ((JList) getSource()).getValueIsAdjusting();
}
}));
}
/**
* Maps {@code JList.getVisibleRowCount()} through queue
*/
public int getVisibleRowCount() {
return (runMapping(new MapIntegerAction("getVisibleRowCount") {
@Override
public int map() {
return ((JList) getSource()).getVisibleRowCount();
}
}));
}
/**
* Maps {@code JList.indexToLocation(int)} through queue
*/
public Point indexToLocation(final int i) {
return (runMapping(new MapAction<Point>("indexToLocation") {
@Override
public Point map() {
return ((JList) getSource()).indexToLocation(i);
}
}));
}
/**
* Maps {@code JList.isSelectedIndex(int)} through queue
*/
public boolean isSelectedIndex(final int i) {
return (runMapping(new MapBooleanAction("isSelectedIndex") {
@Override
public boolean map() {
return ((JList) getSource()).isSelectedIndex(i);
}
}));
}
/**
* Maps {@code JList.isSelectionEmpty()} through queue
*/
public boolean isSelectionEmpty() {
return (runMapping(new MapBooleanAction("isSelectionEmpty") {
@Override
public boolean map() {
return ((JList) getSource()).isSelectionEmpty();
}
}));
}
/**
* Maps {@code JList.locationToIndex(Point)} through queue
*/
public int locationToIndex(final Point point) {
return (runMapping(new MapIntegerAction("locationToIndex") {
@Override
public int map() {
return ((JList) getSource()).locationToIndex(point);
}
}));
}
/**
* Maps
* {@code JList.removeListSelectionListener(ListSelectionListener)}
* through queue
*/
public void removeListSelectionListener(final ListSelectionListener listSelectionListener) {
runMapping(new MapVoidAction("removeListSelectionListener") {
@Override
public void map() {
((JList) getSource()).removeListSelectionListener(listSelectionListener);
}
});
}
/**
* Maps {@code JList.removeSelectionInterval(int, int)} through queue
*/
public void removeSelectionInterval(final int i, final int i1) {
runMapping(new MapVoidAction("removeSelectionInterval") {
@Override
public void map() {
((JList) getSource()).removeSelectionInterval(i, i1);
}
});
}
/**
* Maps {@code JList.setCellRenderer(ListCellRenderer)} through queue
*/
@SuppressWarnings(value = "unchecked")
public void setCellRenderer(final ListCellRenderer<?> listCellRenderer) {
runMapping(new MapVoidAction("setCellRenderer") {
@Override
public void map() {
((JList) getSource()).setCellRenderer(listCellRenderer);
}
});
}
/**
* Maps {@code JList.setFixedCellHeight(int)} through queue
*/
public void setFixedCellHeight(final int i) {
runMapping(new MapVoidAction("setFixedCellHeight") {
@Override
public void map() {
((JList) getSource()).setFixedCellHeight(i);
}
});
}
/**
* Maps {@code JList.setFixedCellWidth(int)} through queue
*/
public void setFixedCellWidth(final int i) {
runMapping(new MapVoidAction("setFixedCellWidth") {
@Override
public void map() {
((JList) getSource()).setFixedCellWidth(i);
}
});
}
/**
* Maps {@code JList.setListData(Vector)} through queue
*/
@SuppressWarnings(value = "unchecked")
public void setListData(final Vector<?> vector) {
runMapping(new MapVoidAction("setListData") {
@Override
public void map() {
((JList) getSource()).setListData(vector);
}
});
}
/**
* Maps {@code JList.setListData(Object[])} through queue
*/
@SuppressWarnings(value = "unchecked")
public void setListData(final Object[] object) {
runMapping(new MapVoidAction("setListData") {
@Override
public void map() {
((JList) getSource()).setListData(object);
}
});
}
/**
* Maps {@code JList.setModel(ListModel)} through queue
*/
@SuppressWarnings(value = "unchecked")
public void setModel(final ListModel<?> listModel) {
runMapping(new MapVoidAction("setModel") {
@Override
public void map() {
((JList) getSource()).setModel(listModel);
}
});
}
/**
* Maps {@code JList.setPrototypeCellValue(Object)} through queue
*/
@SuppressWarnings(value = "unchecked")
public void setPrototypeCellValue(final Object object) {
runMapping(new MapVoidAction("setPrototypeCellValue") {
@Override
public void map() {
((JList) getSource()).setPrototypeCellValue(object);
}
});
}
/**
* Maps {@code JList.setSelectedIndex(int)} through queue
*/
public void setSelectedIndex(final int i) {
runMapping(new MapVoidAction("setSelectedIndex") {
@Override
public void map() {
((JList) getSource()).setSelectedIndex(i);
}
});
}
/**
* Maps {@code JList.setSelectedIndices(int[])} through queue
*/
public void setSelectedIndices(final int[] i) {
runMapping(new MapVoidAction("setSelectedIndices") {
@Override
public void map() {
((JList) getSource()).setSelectedIndices(i);
}
});
}
/**
* Maps {@code JList.setSelectedValue(Object, boolean)} through queue
*/
public void setSelectedValue(final Object object, final boolean b) {
runMapping(new MapVoidAction("setSelectedValue") {
@Override
public void map() {
((JList) getSource()).setSelectedValue(object, b);
}
});
}
/**
* Maps {@code JList.setSelectionBackground(Color)} through queue
*/
public void setSelectionBackground(final Color color) {
runMapping(new MapVoidAction("setSelectionBackground") {
@Override
public void map() {
((JList) getSource()).setSelectionBackground(color);
}
});
}
/**
* Maps {@code JList.setSelectionForeground(Color)} through queue
*/
public void setSelectionForeground(final Color color) {
runMapping(new MapVoidAction("setSelectionForeground") {
@Override
public void map() {
((JList) getSource()).setSelectionForeground(color);
}
});
}
/**
* Maps {@code JList.setSelectionInterval(int, int)} through queue
*/
public void setSelectionInterval(final int i, final int i1) {
runMapping(new MapVoidAction("setSelectionInterval") {
@Override
public void map() {
((JList) getSource()).setSelectionInterval(i, i1);
}
});
}
/**
* Maps {@code JList.setSelectionMode(int)} through queue
*/
public void setSelectionMode(final int i) {
runMapping(new MapVoidAction("setSelectionMode") {
@Override
public void map() {
((JList) getSource()).setSelectionMode(i);
}
});
}
/**
* Maps {@code JList.setSelectionModel(ListSelectionModel)} through queue
*/
public void setSelectionModel(final ListSelectionModel listSelectionModel) {
runMapping(new MapVoidAction("setSelectionModel") {
@Override
public void map() {
((JList) getSource()).setSelectionModel(listSelectionModel);
}
});
}
/**
* Maps {@code JList.setUI(ListUI)} through queue
*/
public void setUI(final ListUI listUI) {
runMapping(new MapVoidAction("setUI") {
@Override
public void map() {
((JList) getSource()).setUI(listUI);
}
});
}
/**
* Maps {@code JList.setValueIsAdjusting(boolean)} through queue
*/
public void setValueIsAdjusting(final boolean b) {
runMapping(new MapVoidAction("setValueIsAdjusting") {
@Override
public void map() {
((JList) getSource()).setValueIsAdjusting(b);
}
});
}
/**
* Maps {@code JList.setVisibleRowCount(int)} through queue
*/
public void setVisibleRowCount(final int i) {
runMapping(new MapVoidAction("setVisibleRowCount") {
@Override
public void map() {
((JList) getSource()).setVisibleRowCount(i);
}
});
}
//End of mapping //
////////////////////////////////////////////////////////
private void checkIndex(int index) {
if (index < 0
|| index >= getModel().getSize()) {
throw (new NoSuchItemException(index));
}
}
private void checkIndices(int[] indices) {
for (int indice : indices) {
checkIndex(indice);
}
}
/**
* Iterface to choose list item.
*/
public interface ListItemChooser {
/**
* Should be true if item is good.
*
* @param oper Operator used to search item.
* @param index Index of an item be checked.
* @return true if the item fits the criteria
*/
public boolean checkItem(JListOperator oper, int index);
/**
* Item description.
*
* @return a description.
*/
public String getDescription();
}
/**
* Can be thrown during item selecting if list does not have item requested.
*/
public class NoSuchItemException extends JemmyInputException {
private static final long serialVersionUID = 42L;
/**
* Constructor.
*
* @param item an item's text
*/
public NoSuchItemException(String item) {
super("No such item as \"" + item + "\"", getSource());
}
/**
* Constructor.
*
* @param index an item's index
*/
public NoSuchItemException(int index) {
super("List does not contain " + index + "'th item", getSource());
}
}
private static class BySubStringListItemChooser implements ListItemChooser {
String subString;
StringComparator comparator;
public BySubStringListItemChooser(String subString, StringComparator comparator) {
this.subString = subString;
this.comparator = comparator;
}
@Override
public boolean checkItem(JListOperator oper, int index) {
return (comparator.equals(oper.getModel().getElementAt(index).toString(),
subString));
}
@Override
public String getDescription() {
return "Item containing \"" + subString + "\" string";
}
@Override
public String toString() {
return "BySubStringListItemChooser{" + "subString=" + subString + ", comparator=" + comparator + '}';
}
}
private static class ByRenderedComponentListItemChooser implements ListItemChooser {
ComponentChooser chooser;
public ByRenderedComponentListItemChooser(ComponentChooser chooser) {
this.chooser = chooser;
}
@Override
public boolean checkItem(JListOperator oper, int index) {
return chooser.checkComponent(oper.getRenderedComponent(index));
}
@Override
public String getDescription() {
return chooser.getDescription();
}
@Override
public String toString() {
return "ByRenderedComponentListItemChooser{" + "chooser=" + chooser + '}';
}
}
/**
* Allows to find component by an item.
*/
public static class JListByItemFinder implements ComponentChooser {
String label;
int itemIndex;
StringComparator comparator;
/**
* Constructs JListByItemFinder.
*
* @param lb a text pattern
* @param ii item index to check. If equal to -1, selected item is
* checked.
* @param comparator specifies string comparision algorithm.
*/
public JListByItemFinder(String lb, int ii, StringComparator comparator) {
label = lb;
itemIndex = ii;
this.comparator = comparator;
}
/**
* Constructs JListByItemFinder.
*
* @param lb a text pattern
* @param ii item index to check. If equal to -1, selected item is
* checked.
*/
public JListByItemFinder(String lb, int ii) {
this(lb, ii, Operator.getDefaultStringComparator());
}
@Override
public boolean checkComponent(Component comp) {
if (comp instanceof JList) {
if (label == null) {
return true;
}
if (((JList) comp).getModel().getSize() > itemIndex) {
int ii = itemIndex;
if (ii == -1) {
ii = ((JList) comp).getSelectedIndex();
if (ii == -1) {
return false;
}
}
return (comparator.equals(((JList) comp).getModel().getElementAt(ii).toString(),
label));
}
}
return false;
}
@Override
public String getDescription() {
return ("JList with text \"" + label + "\" in "
+ itemIndex + "'th item");
}
@Override
public String toString() {
return "JListByItemFinder{" + "label=" + label + ", itemIndex=" + itemIndex + ", comparator=" + comparator + '}';
}
}
/**
* Checks component type.
*/
public static class JListFinder extends Finder {
/**
* Constructs JListFinder.
*
* @param sf other searching criteria.
*/
public JListFinder(ComponentChooser sf) {
super(JList.class, sf);
}
/**
* Constructs JListFinder.
*/
public JListFinder() {
super(JList.class);
}
}
}