acc

/**
 * Copyright (c) HIDGroup All rights reserved.
 * created by arwen at 2011
 */
package com.hid.action.base;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.zkoss.zk.ui.Component;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Textbox;

import com.hid.exception.UIException;
import com.hid.util.ReflectUtil;
import com.thinkway.framework.po.BasePO;

/**
 * DataBinder
 */
public class DataBinder {

	private Map<String, DataBinderEntry> com2DataMap = new HashMap<String, DataBinderEntry>();

	public void add(Component com, String dbKey, Class dataClazz) {

		if (com.getId() == null) {
			throw new UIException("binding component have no id value");
		}
		com2DataMap.put(com.getId(), new DataBinderEntry(com.getId(), com, dbKey, dataClazz));

	}

	public List<Component> getComponents() {
		Set<String> keyset = com2DataMap.keySet();
		List<Component> coms = new ArrayList();
		for (String key : keyset) {
			DataBinderEntry entry = com2DataMap.get(key);
			coms.add(entry.getComponent());
		}
       return coms;
	}

	public DataBinderEntry getDataBinderEntry(String uiKey) {
		return com2DataMap.get(uiKey);
	}

	public void loadData2Component(BasePO po) throws Exception {
		Set<String> keyset = com2DataMap.keySet();
		for (String key : keyset) {
			DataBinderEntry entry = com2DataMap.get(key);
			Component com = entry.getComponent();

			String dbKey = entry.getDbKey();

			Object data = ReflectUtil.invokeGetter(po, dbKey);

			if (com instanceof Textbox) {
				((Textbox) com).setValue((String)data);
			} else if (com instanceof Intbox) {
				((Intbox) com).setValue((Integer)data);
			} else if (com instanceof Doublebox) {
				((Doublebox) com).setValue((Double)data);
			} else if (com instanceof Datebox) {
				((Datebox) com).setValue((Date)data);
			} else if (com instanceof Combobox) {
				if (data == null) {
					((Combobox)com).setSelectedIndex(-1);
				} else {
					List<Comboitem> items = ((Combobox)com).getItems();
					String v = (String)data;
					for (Comboitem item : items) {
						if (item.getValue().equal(v)) {
							((Combobox)com).setSelectedItem(item);
						}
					}
				}
			}
		}
	}
	
	public void storeCompoent2Data(BasePO po) throws Exception{
		Set<String> keyset = com2DataMap.keySet();
		for (String key : keyset) {
			DataBinderEntry entry = com2DataMap.get(key);
			Component com = entry.getComponent();
			String dbKey = entry.getDbKey();
			Class dataClazz = entry.getDataClazz();
			if (com instanceof Textbox) {
				String value = ((Textbox) com).getValue();
				ReflectUtil.invokeSetter(po, dbKey, dataClazz, value);
			} else if (com instanceof Intbox) {
				int value = ((Intbox)com).intValue();
				ReflectUtil.invokeSetter(po, dbKey, dataClazz, value);
			} else if (com instanceof Doublebox) {
				double value = ((Doublebox)com).doubleValue();
				ReflectUtil.invokeSetter(po, dbKey, dataClazz, value);
			} else if (com instanceof Datebox) {
				Date value = ((Datebox)com).getValue();
				ReflectUtil.invokeSetter(po, dbKey, dataClazz, value);
			} else if (com instanceof Combobox) {
				Comboitem item = ((Combobox)com).getSelectedItem();
				String value = null;
				if (item != null) {
					value = item.getValue();
				}
				ReflectUtil.invokeSetter(po, dbKey, dataClazz, value);
			}
			

		}
	}
	
	
	
}

猜你喜欢

转载自arwenchen.iteye.com/blog/1189937
acc