Develop portlet using Light Portal framework(Draft)


Introduction

This document describes how to develop portlet and configure portlet using Light portal framewrok.

Steps

1 Create BookmarkPortlet java class.

public class BookmarkPortlet extends LightGenericPortlet {

    public void processAction (ActionRequest request, ActionResponse response)
    throws PortletException, java.io.IOException {
        String action = request.getParameter("action");
        if("add".equals(action)){
           String name = request.getParameter("name");
           String url = request.getParameter("url");   
           request.getPreferences().setValue(name,url);          
           request.getPreferences().store();
        }
        if("delete".equals(action)){
            String name = request.getParameter("bookmarkName");                       
            request.getPreferences().reset(name);
            request.getPreferences().store();           
        }
      }
     
     protected void doView (RenderRequest request, RenderResponse response)
       throws PortletException, java.io.IOException
     {
        List<PortletPreference> bookmarks = new ArrayList<PortletPreference>();
        Enumeration enumerator= request.getPreferences().getNames();
        while (enumerator.hasMoreElements()){
            String name = (String)enumerator.nextElement();
            bookmarks.add(new PortletPreference(name, request.getPreferences().getValue(name,"")));
        }       
        request.setAttribute("bookmarks", bookmarks);
        this.getPortletContext().getRequestDispatcher("/portlets/bookmark/bookmarkPortletView.jsp").include(request,response); 
               
     }   
     
     protected void doEdit (RenderRequest request, RenderResponse response)
       throws PortletException, java.io.IOException
     { 
        List<PortletPreference> bookmarks = new ArrayList<PortletPreference>();
        Enumeration enumerator= request.getPreferences().getNames();
        while (enumerator.hasMoreElements()){
            String name = (String)enumerator.nextElement();
            if(!request.getPreferences().isReadOnly(name))
                bookmarks.add(new PortletPreference(name, request.getPreferences().getValue(name,"")));
        }           
        request.setAttribute("bookmarks", bookmarks);
        this.getPortletContext().getRequestDispatcher("/portlets/bookmark/bookmarkPortletEdit.jsp").include(request,response);       
     }   
     
}

2 Create bookmarkPortletVew.jsp

<%@ include file="/common/taglibs.jsp"%>
<html>
<head>
</head>
<body>
<form>
<table border='0' cellpadding='0' cellspacing='0'>
<c:forEach var="bookmark" items="${requestScope.bookmarks}" >
<tr>
<td class='portlet-table-td-left'>
<a href='<c:out value="${bookmark.value}"/>' target='_blank'><c:out value="${bookmark.name}"/></a>
</td>
</tr>
</c:forEach>
</table>
</form>
</body>
</html>

3 Create bookmarkPortletEdit.jsp

<%@ include file="/common/taglibs.jsp"%>
<html>
<head>
</head>
<body>
<form action="<portlet:actionURL portletMode='EDIT'/>">
<table border='0' cellpadding='0' cellspacing='0'>
<tr>
<td class='portlet-table-td-left'>
URL:
</td>
<td class='portlet-table-td-left'>
<input type='text' name='url' class='portlet-form-input-field' size='24' />
</td>
</tr>
<tr>
<td class='portlet-table-td-left'>
Name:
</td>
<td class='portlet-table-td-left'>
<input type='text' name='name' class='portlet-form-input-field' size='24'/>
</td>
</tr>
<tr>
<td class='portlet-table-td-right' colspan ='2'>
<input type='submit' name='action' onClick="document.currentForm=this.form;document.pressed='add'" value='Add' class='portlet-form-button' />
</td>
</tr>
</table>
<table border='0' cellpadding='0' cellspacing='0'>
<tr>
<td class='portlet-table-td-left'>
<select name='bookmarkName' size='5' class='portlet-form-select'>
<c:forEach var="bookmark" items="${requestScope.bookmarks}" >
<option value='<c:out value="${bookmark.name}"/>'><c:out value="${bookmark.name}"/></option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td class='portlet-table-td-right'>
<input type='submit' name='action' onClick="document.currentForm=this.form;document.pressed='delete'" value='Delete' class='portlet-form-button' />
</td>
</tr>
</table>
</form>
</body>
</html>

4 Configure Bookmark Portlet in portlet.xml

<portlet>
        <description>BookmarkPortletDescription</description>
        <portlet-name>bookmarkPortlet</portlet-name>
        <display-name>Bookmark Portlet</display-name>              
        <portlet-class>org.light.portlets.bookmark.BookmarkPortlet</portlet-class>                      
        <expiration-cache>-1</expiration-cache>              
        <supports>
            <mime-type>text/html</mime-type>
            <portlet-mode>VIEW</portlet-mode>
            <portlet-mode>EDIT</portlet-mode>
            <portlet-mode>HELP</portlet-mode>
            <portlet-mode>CONFIG</portlet-mode>
        </supports>
        <supported-locale>en</supported-locale>       
        <supported-locale>fr</supported-locale>
        <resource-bundle>resourceBundle</resource-bundle>
        <portlet-info>
            <title>Bookmark Portlet</title>
            <short-title>Bookmark</short-title>
            <keywords>Bookmark</keywords>
        </portlet-info>
        <portlet-preferences>           
            <preference>
                <name>Java Sight</name>
                <value>http://www.javasight.com</value>
                <read-only>true</read-only>
            </preference>           
            <preference>
                <name>Java.net</name>
                <value>http://java.net</value>
            </preference>
            <preference>
                <name>Java World</name>
                <value>http://www.javaworld.com</value>
                <read-only>false</read-only>
            </preference>                  
        </portlet-preferences>      
    </portlet>

5 Add Bookmark Portlet into Light Portal framework

5.1 configure Bookmark Portlet in portlet-config.xml

<portlets>
     ......
    <portlet>
        <name>bookmarkPortlet</name>
        <path>/bookmarkPortlet.lp</path>
        <title>Bookmarks</title>
        <icon>/light/images/bookmark.gif</icon>
        <url/>
        <refreshMode>false</refreshMode>
        <editMode>true</editMode>
        <helpMode>false</helpMode>
        <configMode>true</configMode>
        <autoRefreshed>false</autoRefreshed>
        <periodTime>0</periodTime>
        <allowJS>false</allowJS>
        <pageRefreshed>false</pageRefreshed>
    </portlet>
    ......
</portlets>

5.1 configure Bookmark Portlet in portal-layout.xml

 If you want set Bookmark Portlet in the default page, configure Bookmark Portlet in portal-layout.xml under default user's main tab. If not, users cann add Bookmark portlet from "add content" function later.
<portalLayout>
     <portalUser user="default">
        <portalTab>
            <title>Main</title>
             ......
            <portlets>
                 <portlet>
                    <name>bookmarkPortlet</name>
                    <column>0</column>
                    <row>2</row>
                </portlet>
                ......
             </portlets>
         </portalTab>
      </portalUser>
      ......
</portalLayout>