All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zkoss.bind.converter.sys.SelectboxSelectedItemConverter Maven / Gradle / Ivy

/* 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)model).addToSelection(val);
	  		return IGNORED_VALUE;
	  	}
	  	
	  	Set sels = ((Selectable)model).getSelection();
	  	if(sels!=null && sels.size()>0)
	  		((Selectable)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;
	}

}