Source code for /src/java/com/coolshare/springapp/web/BambooAdminEditForm2Controller.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 org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.hibernate.Session;

import com.coolshare.springapp.bus.Bamboo;
import com.coolshare.springapp.bus.BambooManager;
import com.coolshare.springapp.bus.Source;
import com.coolshare.springapp.hibernate.HibernateUtil;
import com.coolshare.springapp.bus.Source;

public class BambooAdminEditForm2Controller extends ReflectFormController {

	/** Logger for this class and subclasses */
	protected final Log logger = LogFactory.getLog(getClass());

	private BambooManager bambooManager;

	/* (non-Javadoc)
	 * 
	 * You may notice that the parameter of this method is now a map instead of the Command object.
	 * This new customized onSubmit expose on the bean level info: the beanMap contains
	 * business beans instead of fields in original Command object. So you are ready to go -
	 * modify beans as need here and call the API of next tier without worry about value
	 * building
	 * 
	 * @see com.coolshare.springapp.web.ReflectFormController#onSubmit(java.util.Map)
	 */
	public ModelAndView onSubmit(Map beanMap) throws ServletException {
		Bamboo bamboo = (Bamboo) beanMap.get("Bamboo");
		Source source = (Source) beanMap.get("Source");
		bamboo.setSource(source.getId());
		
		getBambooManager().saveBamboo(bamboo);
		getBambooManager().saveSource(source);
		return new ModelAndView(new RedirectView(getSuccessView()));
	}

	/* (non-Javadoc)
	 * 
	 * This method could be further generalized by making use of "page config" file.
	 * Page config file contains info about what beans are involved on the page. So
	 * we can learn what bean we need to prepare for the form from the page config instead
	 * of hard coded the bean info in this method.
	 * 
	 * @see org.springframework.web.servlet.mvc.AbstractFormController#formBackingObject(javax.servlet.http.HttpServletRequest)
	 */
	protected Object formBackingObject(HttpServletRequest request)
			throws ServletException {
		String id = request.getParameter("id");
		BeanMapCommand form = new BeanMapCommand();
		Map beanMap = new HashMap();
		form.setBeanMap(beanMap);
		Bamboo bamboo = null;
		Source source = null;
		List sources = getBambooManager().getAllSource();
		if (id != null) {

			try {
				bamboo = getBambooManager().getBamboo(id);

				source = getBambooManager().getSource("" + bamboo.getSource());
			} catch (BambooNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SourceNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			bamboo = new Bamboo();
			source = new Source();
		}
		beanMap.put("Bamboo", new TileController("Bamboo", "Bamboo Data", bamboo));
		beanMap.put("Source", new TileController("Source", "Source Data", source));
		beanMap.put("Sources", sources);
		return form;
	}

	public BambooManager getBambooManager() {
		return bambooManager;
	}

	public void setBambooManager(BambooManager bambooManager) {
		this.bambooManager = bambooManager;
	}

	protected void initBinder(HttpServletRequest request,
			ServletRequestDataBinder binder) throws Exception {
		// binder.registerCustomEditor(Source.class, new SourceEditor(false));

	}

}