/* BindingListModelList.java
Purpose:
Description:
History:
Mon Jan 29 21:07:15 2007, Created by henrichen
Copyright (C) 2007 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.zkplus.databind;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.zkoss.lang.Objects;
import org.zkoss.zul.ListModelList;
/**
* <p>This is the {@link BindingListModel} as a {@link java.util.List} to be used with
* {@link org.zkoss.zul.Listbox}, {@link org.zkoss.zul.Grid},
* and {@link DataBinder}.
* Add or remove the contents of this model as a List would cause the associated Listbox or Grid to change accordingly.</p>
* <p>Make as public class since 3.0.5</p>
* <p>Support BindingListModelEx since 3.1</p>
*
* @author Henri Chen
* @see BindingListModel
* @see org.zkoss.zul.ListModel
* @see org.zkoss.zul.ListModelList
* @deprecated As of release 7.0.0, replace with new ZK binding.
*/
public class BindingListModelList<E> extends ListModelList<E> implements BindingListModelExt<E>, java.io.Serializable {
private static final long serialVersionUID = 200808191518L;
private boolean _distinct = true; //since 3.5; default to true
/**
* @since 3.1
*/
public BindingListModelList(List<E> list, boolean live, boolean distinct) {
super(list, live);
_distinct = distinct;
}
/**
* @since 3.0.5
*/
public BindingListModelList(List<E> list, boolean live) {
super(list, live);
}
public boolean isDistinct() {
return _distinct;
}
public int[] indexesOf(Object elm) {
if (isDistinct()) {
final int idx = indexOf(elm);
return idx < 0 ? new int[0] : new int[] { idx };
} else {
final List<Integer> indexes = new LinkedList<Integer>();
int j = 0;
for (final Iterator<E> it = _list.iterator(); it.hasNext(); ++j) {
if (Objects.equals(elm, it.next())) {
indexes.add(new Integer(j));
}
}
final int[] result = new int[indexes.size()];
j = 0;
for (final Iterator<Integer> it = indexes.iterator(); it.hasNext(); ++j) {
final int idx = it.next().intValue();
result[j] = idx;
}
return result;
}
}
}