Listing 1: portlet.xml file

<portlet>
	<description>Image Viewer Portlet</description>

	<portlet-name>ImageViewerPortlet</portlet-name>

	<display-name>Image Viewer Portlet</display-name>

	<portlet-class>com.thejavathinktank.portlets.ImageViewerPortlet</portlet-class>

	<init-param>
		<name>jspView</name>
		<value>/jsp/view.jsp</value>
	</init-param>
	<init-param>
		<name>jspEdit</name>
		<value>/jsp/edit.jsp</value>
	</init-param>
	<init-param>
		<name>bgColor</name>
		<value>white</value>
	</init-param>

	<supports>
		<mime-type>text/html</mime-type>
		<portlet-mode>VIEW</portlet-mode>
		<portlet-mode>EDIT</portlet-mode>
	</supports>

	<supported-locale>en</supported-locale>

	<portlet-info>
		<title>ImageViewer Portlet</title>
		<short-title>ImageViewer</short-title>
		<keywords>Images, Viewer</keywords>
	</portlet-info>
 </portlet>
 </portlet-app>


Listing 2: The ImageViewerPortlet Java class

package com.thejavathinktank.portlets.imageviewerportlet;

import javax.portlet.*;
import java.io.IOException;

public class ImageViewerPortlet extends GenericPortlet
{
    public void init() throws PortletException
    {
        System.out.println("Entered ImageViewerPortlet.init() method");
    }

    public void processAction(ActionRequest request, ActionResponse response)
            throws PortletException, java.io.IOException
    {
        PortletMode pm = request.getPortletMode();

        System.out.println("PortletMode = " + pm);

        if (pm.equals(PortletMode.VIEW))
        {
            System.out.print("Request Image file is: ");
            System.out.println(request.getParameter("filename"));
            response.setRenderParameters(request.getParameterMap());
        } else if (pm.equals(PortletMode.EDIT))
        {
            String bgColor = request.getParameter("bgColor");
            PortletSession ps = request.getPortletSession();
            ps.setAttribute("bgColor", bgColor);
            System.out.println("New color = " + bgColor);
        }
    }

    public void doView(RenderRequest request, RenderResponse response)
            throws PortletException, IOException
    {
        // Assign bg color if it doesn't exist
        PortletSession ps = request.getPortletSession();
        String bgColor = (String) ps.getAttribute("bgColor");
        if (bgColor == null)
        {
            bgColor = getPortletConfig().getInitParameter("bgColor");
            System.out.println("Setting default bg-color to " + bgColor);
            ps.setAttribute("bgColor", bgColor);
        }

        response.setContentType("text/html");

        String jspName = getPortletConfig().getInitParameter("jspView");

        PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
                jspName);

        rd.include(request, response);

    }

    public void doEdit(RenderRequest request, RenderResponse response)
            throws PortletException, IOException
    {
        response.setContentType("text/html");

        String jspName = getPortletConfig().getInitParameter("jspEdit");

        PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
                jspName);

        rd.include(request, response);
    }

}



Listing 3: The view.jsp file

<%@ page session="false" %>
<%@ page import="javax.portlet.*"%>
<%@ page import="java.util.*"%>
<%@ taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%>
<portlet:defineObjects/>

<%
	PortletURL url = renderResponse.createActionURL();
	String filename = (String)renderRequest.getParameter("filename");
	PortletSession ps = renderRequest.getPortletSession();
	String bgColor = (String)ps.getAttribute("bgColor");
%>
color = <%=bgColor%>
<form method="post" action="<%=url.toString()%>" style="background-color: <%=bgColor%>">
<p>Please enter the name of the image you wish to see</p>
<input type="text" id="filename" name="filename"/>
<br />
<button type="submit">Show Image</button>
</form>
<br />
<%
	filename = renderResponse.encodeURL(renderRequest.getContextPath())+"/images/"+filename;
%>
<img src="<%=filename%>"alt="Image will be displayed here">



Listing 4: The edit.jsp file

<%@ page session="false" %>
<%@ page import="javax.portlet.*"%>
<%@ page import="java.util.*"%>
<%@ taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%>
<portlet:defineObjects/>

<h1>
Edit Mode
</h1>
<br>
Please select a color for the background<br>
<%
	PortletURL url = renderResponse.createActionURL();
	PortletSession ps = renderRequest.getPortletSession();
	String bgColor = (String)ps.getAttribute("bgColor");
%>
<form method="post" action="<%=url.toString()%>">
	<input name="bgColor" type="radio" value="white" 
		  <%=bgColor.equals("white") ? "CHECKED" : ""%>/>White
	<input name="bgColor" type="radio" value="black"
		  <%=bgColor.equals("black") ? "CHECKED" : ""%>/>Black
	<input name="bgColor" type="radio" value="blue"
		  <%=bgColor.equals("blue") ? "CHECKED" : ""%>/>Blue
	<input name="bgColor" type="radio" value="red"
		   <%=bgColor.equals("red") ? "CHECKED" : ""%>/>Red
	<input name="bgColor" type="radio" value="green"
		   <%=bgColor.equals("green") ? "CHECKED" : ""%>/>Green
	<br/>
	<button type="submit">Change Color</button>
</form>
<br>
Current Portlet Mode: <%=renderRequest.getPortletMode()%><br>
Current Window State: <%=renderRequest.getWindowState()%><br>
<br>