package example3;

import java.io.IOException;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletConfig;
import javax.portlet.PortletContext;
import javax.portlet.PortletException;
import javax.portlet.PortletMode;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

/**
 * Demos Portlet Modes and use of PortletRequestDispacher.include()
 *  to include servlet, JSP or HTML files in the response.
 *
 */
public class HelloWorldModesAndIncludesPortlet extends GenericPortlet {
	
	private String _incView = "view.jsp";
	private String _incEdit = "edit.jsp";
	private String _incHelp = "help.jsp";

	private PortletContext _ctx = null;

	public void init()
          throws PortletException {
			//Use PortletContext to get a PortletRequestDispacher
			// to include jsp/servlet/HTML content and for logging
			_ctx = 	getPortletContext();

			//
			PortletConfig config = getPortletConfig();          	
			String tmp = config.getInitParameter("view_include");
			if (tmp != null) {
				_incView = tmp;
				log("View include: " + _incView);
			}
			tmp = config.getInitParameter("edit_include");
			if (tmp != null) {
				_incEdit = tmp;
				log("Edit include: " + _incEdit);
			}		
			tmp = config.getInitParameter("help_include");
			if (tmp != null) {
				_incHelp = tmp;
				log("Help include: " + _incHelp);
			}		

	}

	public void doView(RenderRequest request, RenderResponse response)
		throws IOException, PortletException {
		System.out.println("Context path: " + request.getContextPath());
		PortletRequestDispatcher rd = _ctx.getRequestDispatcher(_incView);
		rd.include(request, response);
	}

	public void doEdit(RenderRequest request, RenderResponse response)
		throws IOException, PortletException {

		PortletRequestDispatcher rd = _ctx.getRequestDispatcher(_incEdit);
		rd.include(request, response);
	}

	public void doHelp(RenderRequest request, RenderResponse response)
		throws IOException, PortletException {

		PortletRequestDispatcher rd = _ctx.getRequestDispatcher(_incHelp);
		rd.include(request, response);
	}

	public void processAction(ActionRequest request, ActionResponse response)
		throws IOException, PortletException {
			String param = request.getParameter("parameter");
			log("Parameter: " + param);
			if (param != null) {
				response.setRenderParameter("parameter", param);
			}
			
			response.setPortletMode(PortletMode.VIEW);
			     
	}


	protected void log(String msg) {
		_ctx.log(msg);
	}

	protected void log(String msg, Throwable e) {
		_ctx.log(msg, e);
	}
}