Sun Java System Portal Server 7.1 Developer's Guide

ProcedureTo Develop the RouterContainerProvider

  1. Based on whether the container provider is template based or JSP based container provider, create a new class which extends ContainerProviderAdapter or JSPContainerProviderAdapter.

    The new custom container provider can directly extend the container classes. For example:


    public class CustomContainerProvider extends *** {
        // Implement the methods
    }

    See below for the sample RouterContainerProvider.java file:

    RouterContainerProvider.java File


    package com.sample.providers.containers.router;
    
    import java.util.List;
    import java.util.ArrayList;
    
    import java.net.URL;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.sun.portal.providers.containers.jsp.single.
    JSPSingleContainerProvider;
    import com.sun.portal.providers.ProviderException;
    
    public class RouterContainerProvider
    extends JSPSingleContainerProvider {
    
        public URL processEdit(HttpServletRequest req, 
    		HttpServletResponse res) throws ProviderException {
            String selectedDesktop = req.getParameter("desktop");
            setSelectedChannel(selectedDesktop);
            return null;
        }
    
        /**
        * Sets the selected channel name.
        *
        * @param the selected channel name <code>String</code>.
        *
        * @exception ProviderException if the selected channel 
    		cannot be set
        **/
        public void setSelectedChannel(String channel) throws 
    		ProviderException {
            List<String> selectedChannels = new ArrayList<String>();
            selectedChannels.add(channel);
            setSelectedChannels(selectedChannels);
        }
    }
  2. Compile the class file and put it in the provider class base directory.

    To compile the sample RouterContainerProvider, type:


    javac -d PortalServer-DataDir/portals/
    portal-ID/desktop/classes -classpath 
    PortalServer-base/sdk/desktop/desktopsdk.jar:
    AccessManager-base/lib/servlet.jar RouterContainerProvider.java
  3. Define the ContainerProvider provider and container channel XML fragments in the display profile and use the psadmin command to upload the display profile fragments for this provider.

    The sample RouterContainerProvider provider XML fragment is in the RCProvider.xml file.


    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <!DOCTYPE DisplayProfile SYSTEM "jar://resources/psdp.dtd">
    
    <Provider name="RouterContainerProvider" class="com.sample.
    providers.containers.router.RouterContainerProvider">
        <Properties>
            <String name="contentPage" value="router.jsp"/>
            <String name="editPage" value="routeredit.jsp"/>
            <String name="processPage" value=""/>
            <Boolean name="showExceptions" value="false"/>
    
            <String name="title" value="*** Router Container 
    			Provider ***"/>
            <String name="description" value="*** DESCRIPTION ***"/>
            <String name="refreshTime" value="" advanced="true"/>
            <String name="width" value="thin" advanced="true"/>
            <String name="fontFace1" value="Sans-serif"/>
            <String name="productName" value="Sun Java System Portal Server"/>
    
            <Boolean name="isEditable" value="true" advanced="true"/>
            <String name="editType" value="edit_complete" advanced="true"/>
            <String name="editContainerName" value="JSPEditContainer" 
    			advanced="true"/>
    
            <String name="presetThemeChannel" value="JSPPresetThemeContainer"
    			advanced="true"/>
            <String name="customThemeChannel" value="JSPCustomThemeContainer"
    			advanced="true"/>
        </Properties>
    
    </Provider>

    The sample RouterContainerProvider channel XML fragment is in the RCChannel.xml file.


    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <!DOCTYPE DisplayProfile SYSTEM "jar://resources/psdp.dtd">
    
            <Container name="JSPRouterContainer" 
    			provider="RouterContainerProvider" advanced="true">
                <Properties>
                    <String name="title" value="Router Container"/>
                    <String name="description" value="Router container"/>
                    <Boolean name="isEditable" value="true" advanced="true"/>
                    <String name="editType" value="edit_complete" 
    						advanced="true"/>
                    <String name="contentPage" value="router.jsp"/>
                </Properties>
    
                <Available>
                    <Reference value="JSPTabContainer"/>
                    <Reference value="JSPTableContainer"/>
                </Available>
    
                <Selected>
                    <Reference value="JSPTabContainer"/>
                </Selected>
    
                <Channels>
                </Channels>
            </Container>

    For RouterContainerProvider, use the psadmin add-display-profile sub command to upload the RCProvider.xml file and RCChannel.xml file fragments in to the display profile. See the Sun Java System Portal Server 7.1 Command Line Reference for more information on this sub command.

  4. Develop the templates or JSP files for the ContainerProvider.

    The sample RouterContainerProvider requires the following JSP files:

    router.jsp

    This file includes the logic for displaying the tab or the table Desktop based on the user’s selection. 


    <%-- router.jsp  --%>
    
    <%@ page import="com.sample.providers.containers.router.
    RouterContainerProvider"%>
    
    <%
    RouterContainerProvider rcp = (RouterContainerProvider)
    pageContext.getAttribute("JSPProvider");
    %>
    <%= rcp.getContainerProviderContext().getContent(request,
    response, null, rcp.getSelectedChannel())%>

    routeredit.jsp

    This file includes the logic for displaying the tab or the table Desktop based on the user’s selection. 


    <%-- routeredit.jsp  --%>
    
    <%@ page import="com.sample.providers.containers.router.
    RouterContainerProvider,
    com.sun.portal.providers.Provider,java.util.List,
    java.util.Map,java.util.ArrayList"
    %>
    
    <%@ page session="false" %>
    
    <%@ taglib uri="/tld/jx.tld" prefix="jx" %>
    <%@ taglib uri="/tld/desktop.tld" prefix="dt" %>
    <%@ taglib uri="/tld/desktopProviderContext.tld"
    prefix="dtpc" %>
    <%@ taglib uri="/tld/desktopContainerProviderContext.tld"
    prefix="dtcpc" %>
    <%@ taglib uri="/tld/desktopTheme.tld" prefix="dttheme" %>
    
    <%
    	RouterContainerProvider rcp = (RouterContainerProvider)
    	pageContext.getAttribute("JSPProvider");
    	String selectedChannel = rcp.getSelectedChannel();
    	pageContext.setAttribute( "rcp", rcp );
    %>
    
    <dt:obtainContainer container="$rcp">
    <dtpc:providerContext>
    
    	<dtpc:getStringProperty key="fontFace1" id="fontFace"/>
    	<jx:declare id="fontFace" type="java.lang.String"/>
    	<%
    		String fontFace1 = (String)pageContext.getAttribute
    		("fontFace1", PageContext.REQUEST_SCOPE);
    	%>
    <jsp:include page="header.jsp" flush="true"/>
    
    <form action="dt" name="routeredit_form" method=POST
    enctype="application/x-www-form-urlencoded">
    	<input type=HIDDEN name="action" size=-1 value="process">
    	<input type=HIDDEN name="provider" size=-1
    	value="JSPRouterContainer">
    
    	<dt:getAvailableChannels id="availableChannel"/>
    
    	<CENTER>
    	<table border=0 cellspacing=1 cellpadding=0 width="75%"
    	align="center">
    		<tr>
    			<td bgcolor="#666699"><b><font face="<%=fontFace%>"
    			color="#FFFFFF" size="+1">Please select a desktop for
    			your front page</b></font>
    			</td>
    		</tr>
    		<tr>
    			<td>&nbsp;</td>
    		</tr>
    		<tr>
    			<td align=center>
    				<SELECT NAME="desktop">
    				<jx:forEach var="channel" items="$availableChannel">
    				<dtcpc:obtainChannelFromContainer channel="$channel">
    				<jx:declare id="channel" type="java.lang.String"/>
    				<dt:getTitle id="title" scope="request"
    				silentException="true"/>
    				<%
    					String title = (String)pageContext.getAttribute
    					("title", PageContext.REQUEST_SCOPE);
    					String selected = "";
    					if (selectedChannel.equals(channel)) {
    					selected = "selected";
    					}
    				%>
    				<OPTION <%=selected%> VALUE="<%=channel%>">
    				<%=title%></OPTION>
    				</dtcpc:obtainChannelFromContainer>
    				</jx:forEach>
    				</SELECT>
    			</td>
    		</tr>
    	</table>
    	</CENTER>
    
    	<br>
    	<font size=+0 face="<%=fontFace1%>">
    		<input type=SUBMIT name="Submit" value="Finished"
    		CLASS="button">
    		<input type=BUTTON onClick="location=’<dtpc:getDesktopURL/>’
    		" value="Cancel" CLASS="button">
    	</font>
    	<br>
    	<p>
    </form>
    <br>
    
    <jsp:include page="menubar.jsp" flush="true"/>
    <%@ include file="footer.html" %>
    
    	</dtpc:providerContext>
    </dt:obtainContainer>

  5. Make a directory for the files in PortalServer-DataDir/portals/portal-ID/desktop/desktoptype directory and copy the files over to the newly created directory.

    For the sample RouterContainerProvider, type:


    mkdir PortalServer-DataDir/portals/portal-ID
    /desktop/desktoptype/JSPRouterContainer
    cp router.jsp PortalServer-DataDir/portals/portal-ID
    /desktop/desktoptype/JSPRouterContainer/
    cp routeredit.jsp PortalServer-DataDir/portals/portal-ID
    /desktop/desktoptype/JSPRouterContainer/

    The RouterContainerProvider also requires header.jsp to display the header on router edit page and menubar.jsp to display the menubar on the router edit page. Copy these files from PortalServer-DataDir/portals/portal-ID/desktop/default/JSPSingleContainerProvider directory.


    cp PortalServer-DataDir/portals/portal-ID
    /desktop/default/JSPSingleContainer/header.jsp PortalServer-DataDir/
    portals/portal-ID/desktop/desktoptype/
    JSPRouterContainer/
    cp PortalServer-DataDir/portals/portal-ID/
    desktop/default/JSPSingleContainer/menubar.jsp PortalServer-DataDir/
    portals/portal-ID/desktop/desktoptype/
    JSPRouterContainer/
  6. Modify the header.jsp file in:

    • The PortalServer-DataDir/portals/portal-ID/desktop/default/JSPTabContainer directory to add the text from tabheader.jsp file (as shown below).

      The HTML code to add a link to the edit page of the router container provider is shown (in bold) in the tabheader.jsp (see below) file. Add this HTML code to the header.jsp file.


      PortalServer-DataDir/portals/
      portal-ID/desktop/default/JSPTabContainer/
      header.jsp

      and


      PortalServer-DataDir/portals/
      portal-ID/desktop/default/
      JSPTableContainerProvider/header.jsp

      <%--
          Copyright 2001 Sun Microsystems, Inc.  All rights reserved.
          PROPRIETARY/CONFIDENTIAL.  Use of this product is subject
      		to license terms.
      --%>
      <%-- tabheader.jsp  --%>
      
      <HTML>
      	<CENTER>
      	<TABLE BORDER="0" CELLPADDING="03" CELLSPACING="0"
      	ALIGN="right" HEIGHT="29">
      	<TR>
      
      		<td><a href="dt?action=edit&provider=JSPRouterContainer"
      		onMouseOver="over(’banner_home’)" onMouseOut="out(’banner_home’)">
      		<img name="banner_home" src="<dt:scontent/>/images/blueBullet.gif"
      		width="13" height="9" border="0" alt=""></a></td>
      
      		<td><a href="dt?action=edit&provider=JSPRouterContainer"
      		onMouseOver="over(’banner_home’)" onMouseOut="out(’banner_home’)"
      		class="noUnderline"> <span class="banner-links">Desktop Preference
      		</span></a> </td>
      	</TR>
      	</TABLE>
      	<img src="<dt:scontent/>/desktop/images/nothing.gif" height="8"
      	width="0" border="0" alt=""><br>
      </HTML>
    • The PortalServer-DataDir/portals/portal-ID/desktop/default/JSPTableContainerProvider to add the text from tableheader.jsp file (as shown below).

      The HTML code to add a link to the edit page of the router container provider is shown (in bold) in the tableheader.jsp (see below) file.


      <%--
          Copyright 2001 Sun Microsystems, Inc.  All rights reserved.
          PROPRIETARY/CONFIDENTIAL.  Use of this product is
      		subject to license terms.
      --%>
      <%-- tableheader.jsp  --%>
      
      <HTML>
      	<CENTER>
      	<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">
      	<TR>
      		<td bgcolor="#CC0000" colspan="2"><img src="<dt:scontent/>
      		/images/spacer.gif" width="1" height="3" alt=""></td>
      	</TR>
      	<TR>
      
      		<td><a href="dt?action=edit&provider=JSPRouterContainer"
      		onMouseOver="over(’banner_home’)" onMouseOut="out(’banner_home’)">
      		<img name="banner_home" src="<dt:scontent/>/images/blueBullet.gif"
      		width="13" height="9" border="0" alt=""></a></td>
      
      		<td><a href="dt?action=edit&provider=JSPRouterContainer"
      		onMouseOver="over(’banner_home’)" onMouseOut="out(’banner_home’)"
      		class="noUnderline"> <span class="banner-links">Desktop Preference
      		</span></a> </td>
      	</TR>
      	</TABLE>
      	<img src="<dt:scontent/>/desktop/images/nothing.gif" height="8"
      	width="0" border="0" alt=""><br>
      </HTML>
  7. Open a browser and log in to the Portal Server administration console to change the default channel name to your ContainerProvider.

    The URL to access the administration console is http://hostname:port/psconsole. For the sample RouterContainerProvider, change the default channel name to JSPRouterContainer.

  8. Save the settings and log out of the administration console and log in as the default user into the portal Desktop.

  9. Select the Desktop Preference Link from the menubar.

    The sample RouterContainerProvider provides the page to select Tabbed or Table Desktop.