/*******************************************************************************
* Copyright (c) 2014 Red Hat 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:
* Mickael Istria (Red Hat Inc.) - initial API and implementation
*******************************************************************************/
package org.eclipse.swtbot.generator.framework.rules.simple;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swtbot.generator.framework.GenerationSimpleRule;
import org.eclipse.swtbot.generator.framework.WidgetUtils;
public class SelectListItemRule extends GenerationSimpleRule {
private int index;
boolean useIndices = false;
private String[] selectedItems;
private int[] selectedIndices;
private org.eclipse.swt.widgets.List list;
@Override
public boolean appliesTo(Event event) {
return event.widget instanceof org.eclipse.swt.widgets.List
&& event.type == SWT.Selection;
}
@Override
public void initializeForEvent(Event event) {
this.list = (org.eclipse.swt.widgets.List)event.widget;
this.index = WidgetUtils.getIndex(this.list);
this.selectedIndices = this.list.getSelectionIndices();
this.selectedItems = this.list.getSelection();
for (String selectedItem : this.list.getSelection()) {
int nbOccurrences = 0;
for (String item : this.list.getItems()) {
if (item.equals(selectedItem)) {
nbOccurrences++;
}
}
if (nbOccurrences > 1) {
this.useIndices = true;
}
}
}
@Override
public List<String> getActions() {
List<String> actions = new ArrayList<String>();
StringBuilder code = new StringBuilder();
code.append("bot.list("); //$NON-NLS-1$
if (this.index != 0) {
code.append(this.index);
}
code.append(")"); //$NON-NLS-1$
code.append(".select("); //$NON-NLS-1$
if (this.useIndices) {
for (int i = 0; i < this.selectedIndices.length; i++) {
code.append(this.selectedIndices[i]);
if (i < this.selectedIndices.length - 1) {
code.append(", "); //$NON-NLS-1$
}
}
} else {
for (int i = 0; i < this.selectedItems.length; i++) {
code.append('"');
code.append(this.selectedItems[i]);
code.append('"');
if (i < this.selectedIndices.length - 1) {
code.append(", "); //$NON-NLS-1$
}
}
}
code.append(')');
actions.add(code.toString());
return actions;
}
@Override
public List<String> getImports() {
// TODO Auto-generated method stub
return null;
}
@Override
public org.eclipse.swt.widgets.List getWidget() {
return this.list;
}
}