import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
+import java.util.List;
import java.util.NoSuchElementException;
import com.itmill.toolkit.data.Container;
*/
public Object nextItemId(Object itemId) {
if (filteredItemIds != null) {
- if (!filteredItemIds.contains(itemId)) {
+ if (itemId == null || !filteredItemIds.contains(itemId)) {
return null;
}
final Iterator i = filteredItemIds.iterator();
- if (itemId == null) {
- return null;
- }
while (i.hasNext() && !itemId.equals(i.next())) {
;
}
if (itemId == null) {
return -1;
}
- try {
- for (final Iterator i = filteredItemIds.iterator(); itemId
- .equals(i.next());) {
- index++;
+ final Iterator i = filteredItemIds.iterator();
+ while (i.hasNext()) {
+ Object id = i.next();
+ if (itemId.equals(id)) {
+ return index;
}
- return index;
- } catch (final NoSuchElementException e) {
- return -1;
+ index++;
}
+ return -1;
}
return itemIds.indexOf(itemId);
}
return null;
}
+ // TODO should add based on a filtered index!
// Adds the Item to container
itemIds.add(index, newItemId);
Hashtable t = new Hashtable();
public synchronized void sort(Object[] propertyId, boolean[] ascending) {
// Removes any non-sortable property ids
- final ArrayList ids = new ArrayList();
- final ArrayList orders = new ArrayList();
+ final List ids = new ArrayList();
+ final List<Boolean> orders = new ArrayList<Boolean>();
final Collection sortable = getSortableContainerPropertyIds();
for (int i = 0; i < propertyId.length; i++) {
if (sortable.contains(propertyId[i])) {
sortPropertyId = ids.toArray();
sortDirection = new boolean[orders.size()];
for (int i = 0; i < sortDirection.length; i++) {
- sortDirection[i] = ((Boolean) orders.get(i)).booleanValue();
+ sortDirection[i] = (orders.get(i)).booleanValue();
}
// Sort
--- /dev/null
+package com.itmill.toolkit.tests.containers;\r
+\r
+import com.itmill.toolkit.data.Item;\r
+import com.itmill.toolkit.data.util.IndexedContainer;\r
+import com.itmill.toolkit.terminal.Sizeable;\r
+import com.itmill.toolkit.tests.components.TestBase;\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.CheckBox;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.Table;\r
+import com.itmill.toolkit.ui.TextField;\r
+import com.itmill.toolkit.ui.VerticalLayout;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+\r
+public class IndexedContainerFilteringTest extends TestBase {\r
+\r
+ private Table table;\r
+ private IndexedContainer container;\r
+ private TextField filterString;\r
+ private TextField position;\r
+ private int nextToAdd = 1;\r
+ private Label nextLabel;\r
+\r
+ @Override\r
+ protected String getDescription() {\r
+ return "Adding items to a filtered IndexedContainer inserts the items at the wrong location.";\r
+ }\r
+\r
+ @Override\r
+ protected Integer getTicketNumber() {\r
+ return new Integer(2809);\r
+ }\r
+\r
+ @Override\r
+ protected void setup() {\r
+ table = new Table();\r
+ container = (IndexedContainer) table.getContainerDataSource();\r
+\r
+ table.setWidth(300, Sizeable.UNITS_PIXELS);\r
+ table.setSelectable(true);\r
+ table.setMultiSelect(false);\r
+ table.addContainerProperty("column1", String.class, "test");\r
+\r
+ for (int i = 0; i < 25; ++i) {\r
+ table.addItem(new Object[] { "Item " + i }, "Item " + i);\r
+ }\r
+\r
+ VerticalLayout vl = new VerticalLayout();\r
+\r
+ // activate & deactivate filtering\r
+ filterString = new TextField("Filter string:", "1");\r
+ vl.addComponent(filterString);\r
+\r
+ final CheckBox cb = new CheckBox("Filter", new Button.ClickListener() {\r
+ public void buttonClick(ClickEvent event) {\r
+ container.removeAllContainerFilters();\r
+ if (((CheckBox) event.getSource()).booleanValue()) {\r
+ container.addContainerFilter("column1", filterString\r
+ .getValue().toString(), false, false);\r
+ }\r
+ }\r
+ });\r
+ cb.setImmediate(true);\r
+ vl.addComponent(cb);\r
+\r
+ nextLabel = new Label();\r
+ nextLabel.setCaption("Next id: " + nextToAdd);\r
+ vl.addComponent(nextLabel);\r
+\r
+ // addItemAt(idx), addItemAfter(selection), addItem()\r
+\r
+ final Button addItemButton = new Button("addItem()",\r
+ new Button.ClickListener() {\r
+ public void buttonClick(ClickEvent event) {\r
+ Item item = container.addItem("addItem() " + nextToAdd);\r
+ if (item != null) {\r
+ item.getItemProperty("column1").setValue(\r
+ "addItem() " + nextToAdd);\r
+ }\r
+ nextToAdd++;\r
+ nextLabel.setCaption("Next id: " + nextToAdd);\r
+ }\r
+ });\r
+ addItemButton.setImmediate(true);\r
+ vl.addComponent(addItemButton);\r
+\r
+ final Button addItemAfterButton = new Button("addItemAfter()",\r
+ new Button.ClickListener() {\r
+ public void buttonClick(ClickEvent event) {\r
+ Object selection = table.getValue();\r
+ if (selection == null) {\r
+ return;\r
+ }\r
+ String id = "addItemAfter() " + nextToAdd;\r
+ Item item = container.addItemAfter(selection, id);\r
+ if (item != null) {\r
+ item.getItemProperty("column1").setValue(id);\r
+ table.setValue(id);\r
+ } else {\r
+ getMainWindow().showNotification(\r
+ "Adding item after " + selection\r
+ + " failed");\r
+ }\r
+ nextToAdd++;\r
+ nextLabel.setCaption("Next id: " + nextToAdd);\r
+ }\r
+ });\r
+ addItemAfterButton.setImmediate(true);\r
+ vl.addComponent(addItemAfterButton);\r
+\r
+ position = new TextField("Position:", "0");\r
+ vl.addComponent(position);\r
+\r
+ final Button addItemAtButton = new Button("addItemAt()",\r
+ new Button.ClickListener() {\r
+ public void buttonClick(ClickEvent event) {\r
+ int index = Integer.parseInt(position.getValue()\r
+ .toString());\r
+ String id = "addItemAt() " + nextToAdd;\r
+ Item item = container.addItemAt(index, id);\r
+ if (item != null) {\r
+ item.getItemProperty("column1").setValue(id);\r
+ table.setValue(id);\r
+ } else {\r
+ getMainWindow().showNotification(\r
+ "Adding item at index "\r
+ + position.getValue() + " failed");\r
+ }\r
+ nextToAdd++;\r
+ nextLabel.setCaption("Next id: " + nextToAdd);\r
+ }\r
+ });\r
+ addItemAtButton.setImmediate(true);\r
+ vl.addComponent(addItemAtButton);\r
+\r
+ getLayout().addComponent(table);\r
+ getLayout().addComponent(vl);\r
+ }\r
+}\r