Source code for /src/java/com/coolshare/springapp/web/TileController.java

// =====================================================================//
// Author: Mark Qian <markqian@hotmail.com>                             //
// WWW: http://www.coolshare.com/                                       //
// Copyright (c) 2006, Mark Qian                                        //
//                                                                      //
// You must contact Mark Qian to get a permission of use                //
// in case you want to make any use of the codes except viewing it     //
// on Mark's site.                                                      //
//======================================================================//
package com.coolshare.springapp.web;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.text.FieldView;

import com.coolshare.springapp.Constant;

/**
 * A "Tile" concept is introduced here. A Tile represents a physical piece of
 * screen and appear as a micro MVC:
 * 
 * Model - the bean linked by field modeClassName field in TileController
 *  
 * View - the jsp linked by field viewName field in TileInfo
 * 
 * Controller - TileController.
 * 
 * @author mqian
 * 
 */
public class TileController {
	private String name;

	private Object model;

	private String displayName;

	private Map valueMap = new HashMap();

	private TileInfo tileInfo;

	public TileController(String name, String displayName, Object model) {
		this.name = name;
		this.model = model;
		this.displayName = displayName;
		setTileInfo((TileInfo) Constant.BEAN_MAP.get(name));
		setValueMap();
	}

	private void setValueMap() {
		List fields = tileInfo.getDisplayFields();
		if (fields != null) {
			for (int i = 0; i < fields.size(); i++) {
				FieldInfo fieldInfo = (FieldInfo) fields.get(i);
				valueMap
						.put(fieldInfo.getName(), getField(fieldInfo.getName()));
			}
		}
		fields = tileInfo.getHiddenFields();
		if (fields != null) {
			for (int i = 0; i < fields.size(); i++) {
				FieldInfo fieldInfo = (FieldInfo) fields.get(i);
				valueMap
						.put(fieldInfo.getName(), getField(fieldInfo.getName()));
			}
		}
	}

	public String getField(String fieldName) {
		Method method;
		try {
			method = model.getClass().getMethod(
					"get" + fieldName.substring(0, 1).toUpperCase()
							+ fieldName.substring(1), new Class[] {});
			return "" + method.invoke(model, new Object[] {});
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "";
	}

	public Object getModel() {
		return model;
	}

	public void setModel(Object model) {
		this.model = model;
	}

	public TileInfo getTileInfo() {
		return tileInfo;
	}

	public void setTileInfo(TileInfo tileInfo) {
		this.tileInfo = tileInfo;
	}

	public String getDisplayName() {
		return displayName;
	}

	public void setDisplayName(String displayName) {
		this.displayName = displayName;
	}

	public Map getValueMap() {
		return valueMap;
	}

	public void setValueMap(Map valueMap) {
		this.valueMap = valueMap;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}