/* SelectedListitemConverter.java
Purpose:
Description:
History:
Aug 17, 2011 6:10:20 PM, Created by henrichen
Copyright (C) 2011 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.bind.converter.sys;
import java.util.Set;
import org.zkoss.bind.BindContext;
import org.zkoss.bind.Converter;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.UiException;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.Selectbox;
import org.zkoss.zul.ext.Selectable;
/**
* Convert listbox selected listitem to bean and vice versa.
* @author henrichen
* @author dennis
* @since 6.0.0
*/
public class SelectboxSelectedItemConverter implements Converter, java.io.Serializable {
private static final long serialVersionUID = 201108171811L;
@SuppressWarnings("unchecked")
public Object coerceToUi(Object val, Component comp, BindContext ctx) {
Selectbox sbox = (Selectbox) comp;
final ListModel<?> model = sbox.getModel();
if (model == null) {
throw new UiException("no model in selectbox");
}
if (!(model instanceof Selectable)) {
throw new UiException("model doesn't implement Selectable");
}
if (val != null) {
((Selectable<Object>) model).addToSelection(val);
return IGNORED_VALUE;
}
Set<Object> sels = ((Selectable<Object>) model).getSelection();
if (sels != null && sels.size() > 0)
((Selectable<Object>) model).clearSelection();
return IGNORED_VALUE;
}
public Object coerceToBean(Object val, Component comp, BindContext ctx) {
//since there is always a model, we get the selected by item by model directly
if (val != null) {
Selectbox sbox = (Selectbox) comp;
final ListModel<?> model = sbox.getModel();
if (model == null) {
throw new UiException("no model in selectbox");
}
if (!(model instanceof Selectable)) {
throw new UiException("model doesn't implement Selectable");
}
Set<?> selection = ((Selectable<?>) model).getSelection();
if (selection == null || selection.size() == 0)
return null;
return selection.iterator().next();
}
return null;
}
}