Sun Java System Portal Server 7 Developer's Guide

Extending the JSPTabContainerProvider

This section includes a sample extension to the JSPTabContainerProvider class. In this example, a new method called getTabTopics() is added to the JSPTabContainerProvider. The getTabTopics() method returns only the predefined tabs from the list of available tabs. This method is then called from the makeNewTab.jsp so that the Make New Tab page of the customTabContainer will only display the Predefined tab topics instead of displaying all the available tabs (predefined and user created).

ProcedureTo Develop the CustomTabContainerProvider

Steps
  1. Extend the JSPTabContainerProvider and develop the CustomTabContainerProvider class file.

    The CustomTabContainerProvider class file includes a getTabTopics() method that returns only the predefined tabs from the list of available tabs.

    CustomTabContainerProvider.java File


    package custom;
    
    import com.sun.portal.providers.containers.jsp.tab.JSPTabContainerProvider;
    import com.sun.portal.providers.containers.jsp.tab.UnmodifiableTab;
    import com.sun.portal.providers.ProviderException;
    
    import java.util.List;
    import java.util.ArrayList;
    
    public class CustomTabContainerProvider extends JSPTabContainerProvider {
        public List getTabTopics() throws ProviderException {
            List<UnmodifiableTab> availtabs = new ArrayList<UnmodifiableTab>();
            List tabs = super.getAvailableTabs();
            for (int i=0; i < tabs.size(); i++) {
                UnmodifiableTab tab = (UnmodifiableTab)tabs.get(i);
                if (tab.isPredefined()) {
                    availtabs.add(tab);
                }
            }
            return availtabs;
        }
    }
  2. Compile the class and put it in the provider class base directory.

    The default directory for the class file is PortalServer-DataDir/portals/portal-ID/desktop/classes. That is, build the JAR and copy the JAR into the provider class base directory. Or, just copy the class as a file into the provider class base directory. To compile the CustomTabContainerProvider.java file, enter:


    javac -d PortalServer-DataDir/portals/portal-ID/desktop/classes -classpath PortalServer-base/sdk/desktop/desktopsdk.jar:AccessManager-base/lib/servlet.jar CustomTabContainerProvider.java
  3. Develop the display profile XML fragments for this provider and this provider’s channel.

    The display profile fragments for the CustomTabContainerProvider’s provider and channel are saved in CustomTabCProvider.xml and CustomTabCChannel.xml files respectively.

    CustomTabCProvider.xml File


    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <!DOCTYPE DisplayProfile SYSTEM "jar://resources/psdp.dtd">
    
    <Provider name="CustomTabContainerProvider" class="custom.CustomTabContainerProvider">
        <Properties>
            <String name="contentPage" value="tab.jsp"/>
            <Boolean name="showExceptions" value="false"/>
            <String name="title" value="*** Tab 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"/>
            <String name="presetThemeChannel" value="JSPPresetThemeContainer" advanced="true"/>
            <String name="customThemeChannel" value="JSPCustomThemeContainer" advanced="true"/>
            <Boolean name="isEditable" value="true" advanced="true"/>
            <String name="editType" value="edit_complete" advanced="true"/>
            <String name="editContainerName" value="JSPEditContainer" advanced="true"/>
    <Integer name="thin_popup_height" value="200"/>
            <Integer name="thin_popup_width" value="500"/>
            <Integer name="thick_popup_height" value="300"/>
            <Integer name="thick_popup_width" value="600"/>
            <Integer name="fullwidth_popup_height" value="500"/>
            <Integer name="fullwidth_popup_width" value="600"/>
            <Boolean name="defaultChannelIsMinimizable" value="true"/>
            <Boolean name="defaultChannelIsMinimized" value="false" advanced="true"/>
            <Boolean name="defaultChannelIsDetached" value="false" advanced="true"/>
            <Boolean name="defaultChannelIsDetachable" value="true"/>
            <Boolean name="defaultChannelIsRemovable" value="true"/>
            <Boolean name="defaultChannelHasFrame" value="true" advanced="true"/>
            <Boolean name="defaultChannelIsMovable" value="true"/>
            <Boolean name="defaultBorderlessChannel" value="false" advanced="true"/>
            <String name="defaultChannelColumn" value="1" advanced="true"/>
            <String name="defaultChannelRow" value="1" advanced="true"/>
            <Collection name="channelsIsMinimized" advanced="true"/>
            <Collection name="channelsIsDetached" advanced="true"/>
            <Collection name="channelsHasFrame" advanced="true"/>
            <Collection name="channelsIsMinimizable"/>
            <Collection name="channelsRow" advanced="true"/>
            <Collection name="channelsColumn" advanced="true"/>
            <Collection name="channelsIsMovable"/>
            <Collection name="channelsIsDetachable"/>
            <Collection name="channelsIsRemovable"/>
            <Collection name="borderlessChannels"/>
        </Properties>
    </Provider>

    CustomTabCChannel.xml File


    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <!DOCTYPE DisplayProfile SYSTEM "jar://resources/psdp.dtd">
    
    <Container name="CustomTabContainer" provider="CustomTabContainerProvider" merge="replace" lock="false" advanced="false">
        <Properties advanced="false" merge="fuse" lock="false" name="_properties" propagate="true">
            <String name="title" value="JSP Tab Container Channel" advanced="false"
    merge="replace" lock="false" propagate="true"/>
            <String name="description" value="This is a test for tab containers" advanced="false" merge="replace" lock="false" propagate="true"/>
            <String name="contentPage" value="tab.jsp" advanced="false" merge="replace" lock="false" propagate="true"/>
            <String name="editPage" value="tabedit.jsp" advanced="false" merge="replace" lock="false" propagate="true"/>
            <String name="startTab" value="MyFrontPageTabPanelContainer" advanced="false" merge="replace" lock="false" propagate="true"/>
            <Integer name="maxTabs" value="4" advanced="false" merge="replace" lock="false" propagate="true"/>
            <String name="makeTabProvider" value="JSPTabCustomTableContainerProvider" advanced="true" merge="replace" lock="false" propagate="true"/>
            <String name="makeTabChannel" value="JSPTabCustomTableContainer" advanced="true" merge="replace" lock="false" propagate="true"/>
            <Integer name="channelNumber" value="0" advanced="false" merge="replace" lock="false" propagate="true"/>
            <String name="contentChannel" value="JSPContentContainer" advanced="false" merge="replace" lock="false" propagate="true"/>
    
            <Collection name="TabProperties" advanced="false" merge="fuse" lock="false" propagate="true">
                <Collection name="MyFrontPageTabPanelContainer" advanced="false" merge="fuse" lock="false" propagate="true">
                    <String name="title" value="My Front Page" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <String name="desc" value="Your front page" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="removable" value="false" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="renamable" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="predefined" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                </Collection>
    
                <Collection name="SamplesTabPanelContainer" advanced="false" merge="fuse" lock="false" propagate="true">
                    <String name="title" value="Samples" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <String name="desc" value="Sampless Tab" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="removable" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="renamable" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="predefined" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                </Collection>
    
                <Collection name="JSPTabCustomTableContainer" advanced="false" merge="fuse" lock="false" propagate="true">
                    <String name="title" value="Make My Own Tab" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <String name="desc" value="Make from Scratch" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="removable" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="renamable" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="predefined" value="false" advanced="false" merge="replace" lock="false" propagate="true"/>
                </Collection>
    
                <Collection name="SearchTabPanelContainer" advanced="false" merge="fuse" lock="false" propagate="true">
                    <String name="title" value="Search" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <String name="desc" value="Search Tab" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="removable" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="renamable" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                    <Boolean name="predefined" value="true" advanced="false" merge="replace" lock="false" propagate="true"/>
                </Collection>
            </Collection>
        </Properties>
    
        <Available advanced="false" merge="fuse" lock="false">
            <Reference value="MyFrontPageTabPanelContainer" advanced="false" merge="replace" lock="false" propagate="true"/>
            <Reference value="SamplesTabPanelContainer" advanced="false" merge="replace" lock="false" propagate="true"/>
            <Reference value="SearchTabPanelContainer" advanced="false" merge="replace" lock="false" propagate="true"/>
        </Available>
    
        <Selected advanced="false" merge="fuse" lock="false">
            <Reference value="MyFrontPageTabPanelContainer" advanced="false" merge="replace" lock="false" propagate="true"/>
            <Reference value="SamplesTabPanelContainer" advanced="false" merge="replace" lock="false" propagate="true"/>
            <Reference value="SearchTabPanelContainer" advanced="false" merge="replace" lock="false" propagate="true"/>
        </Selected>
    
        <Channels>
        </Channels>
    
    </Container>
  4. Use the psadmin command to upload the display profile fragments for this provider.

    For CustomTabContainerProvider, use the psadmin add-display-profile subcommand to upload the CustomTabCProvider.xml and CustomTabCChannel.xml file fragments in the display profile. See the Sun Java System Portal Server 7 Command-Line Reference for more information on this subcommand.

  5. Create a new directory called CustomTabContainerProvider under PortalServer-DataDir/portals/portal-ID/desktop/desktoptype directory.

  6. Copy all the required JSP files from PortalServer-DataDir/portals/portal-ID/desktop/default/JSPTabContainerProvider to PortalServer-DataDir/portals/portal-ID/desktop/desktoptype/CustomTabContainerProvider directory.

  7. Modify the makeNewTab.jsp file in PortalServer-DataDir/portals/portal-ID/desktop/desktoptype/CustomTabContainerProvider to call getTabTopics().

    That is, replace the makeNewTab.jsp file with the makeNewTab.jsp file shown below.

    makeNewTab.jsp File


    <%--
    Copyright 2001 Sun Microsystems, Inc.  All rights reserved.
    PROPRIETARY/CONFIDENTIAL.  Use of this product is subject to license terms.
    --%>
    <%-- makeNewTab.jsp --%><%@ page import="custom.CustomTabContainerProvider" %>
    <table border=0 cellspacing=2 cellpadding=2 width="50%">
        <tr>
            <td align="right"><font face="<%=fontFace1%>" size="+0"><b>Tab Name:</b></font></td>
            <td><font face="<%=fontFace1%>" size="+0"><input type="text" name="JSPTabContainer.tabName" size="30"></font></td>
        </tr>
        <tr>
            <td align="right"><font face="<%=fontFace1%>" size="+0"><b>Tab Description:</b></font></td>
            <td><font face="<%=fontFace1%>" size="+0"><input type="text" name="JSPTabContainer.tabDesc" size="30"></font></td>
        </tr>
        <tr>
            <td align="right"><font face="<%=fontFace1%>" size="+0"><b>Tab Topics:</b></font></td>
            <td>
                <!-- start tab topic radios -->
                <table border="0" cellpadding="2" cellspacing="2">
                    <%
                        String checked = "";
                    %>
                    <tab:tabContainerProvider>
                    <%
                        CustomTabContainerProvider ctcp = (CustomTabContainerProvider)pageContext.getAttribute("JSPProvider");
                        List tabTopics = ctcp.getTabTopics();
                        for (int i=0; i < tabTopics.size(); i++) {
                            UnmodifiableTab tab = (UnmodifiableTab)tab.get(i);
                    %>
                    <TR>
                        <TD><INPUT TYPE="radio" NAME="JSPTabContainer.tabTopic" VALUE="<%=tab.getEncodedName%>" <%=checked%> ></TD>
                        <TD><FONT SIZE="-1" FACE="sans-serif"> <B> <%=tab.getDisplayname%> </B> <BR> <FONT SIZE="-1" FACE="sans-serif"> <%=tab.getDesc%> </FONT> </FONT> </TD>
                    </TR>
                    <%
                    }
                    %>
                    <%
                    checked = "CHECKED";
                    %>
                    <tab:getMakeTab id="makeTab"/>
                    <tab:obtainTab tab="$makeTab">
                    <%@ include file="makeTopic.jsp" %>
                    </tab:obtainTab>
                    </tab:tabContainerProvider>
                </table>
                <!-- end tab topic radios -->
                <input type="hidden" name="JSPTabContainer.make" value="make">
            </td>
        </tr>
    </table>
  8. Copy the resource file for the provider into PortalServer-DataDir/portals/portal-ID/desktop/classes directory.

    For example, for the CustomJSPTableContainerProvider:

    1. Change directories to PortalServer-DataDir/portals/portal-ID/desktop/classes directory.

    2. Type cp JSPTabContainerProvider.properties PortalServer-DataDir/portals/portal-ID/desktop/classes/CustomTabContainerProvider.properties.

  9. Access CustomTabContainerProvider from your browser. To access, log in to the desktop and type the following URL in your browser:


    http://hostname:port/portal-ID/dt?provider=CustomTabContainer