Sun Java System Portal Server 7.1 Developer's Guide

Customizing the Column Widths

The getWidths(int column) method throws ProviderException; it returns the column width for the column the width is requested for. By default, the column widths for left, right columns in layout 1 and layout 2 are defined as 30, 70 and for layout 3 they are defined as 25, 50, 25.

To customize the column widths, extend the JSPTableContainerProvider and override the getWidths(int column) method to return different widths.

ProcedureTo Develop the CustomJSPTableContainerProvider

  1. Extend the JSPTableContainerProvider and develop the CustomJSPTableContainerProvider class file.

    The CustomJSPTableContainerProvider class file in CustomJSPTableContainerProvider.java file overrides the getWidths() method in the JSPTableContainerProvider and returns 40 for left, and 60 for right columns, and 30, 40, 30 for layout 3 (changes are shown in bold).

    CustomJSPTableContainerProvider.java File


    package custom;
    
    import com.sun.portal.providers.containers.jsp.table.
    JSPTableContainerProvider;
    import com.sun.portal.providers.ProviderException;
    import com.sun.portal.providers.ProviderWidths;
    import com.sun.portal.providers.Provider;
    import com.sun.portal.providers.util.Layout;
    
    public class CustomJSPTableContainerProvider extends
    JSPTableContainerProvider {
        public int getWidths(int column) throws ProviderException {
            int centerWidth = -1;
            int rightWidth = -1;
            int leftWidth = -1;
            int layout = getLayout();
            switch (layout) {
                case Layout.LAYOUT_THIN_THICK:
                    leftWidth = 40;
                    rightWidth = 60;
                    break;
                case Layout.LAYOUT_THICK_THIN:
                    rightWidth = 40;
                    leftWidth = 60;
                    break;
                case Layout.LAYOUT_THIN_THICK_THIN:
                    rightWidth = 30;
                    centerWidth= 40;
                    leftWidth = 30;
                    break;
                default:
                    rightWidth = 40;
                    leftWidth = 60;
                    break;
            }
            switch( column ) {
                case LEFT:
                    return leftWidth;
                case RIGHT:
                    return rightWidth;
                case CENTER:
                    return centerWidth;
                default:
                    return -1;
            }
        }
    }
  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 CustomJSPTableContainerProvider.java file, enter:


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

    The display profile fragment for the CustomJSPTableContainerProvider’s provider is saved in CustomJSPTCProvider.xml file and the display profile fragment for the CustomTableContainerProvider’s channel is saved in CustomJSPTCChannel.xml file.

    CustomJSPTCProvider.xml File


    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <!DOCTYPE DisplayProfile SYSTEM "jar://resources/psdp.dtd">
    
    <Provider name="CustomJSPTableContainerProvider" class="
    custom.CustomJSPTableContainerProvider">
        <Properties>
            <String name="contentPage" value="toptable.jsp"/>
            <Integer name="timeout" value ="1800"/>
            <Integer name="layout" value="1"/>
            <Boolean name="showExceptions" value="false"/>
            <Boolean name="parallelChannelsInit" value="false"/>
            <String name="title" value="Table Container Provider"/>
            <String name="description" value="DESCRIPTION"/>
            <String name="refreshTime" value="0"/>
            <String name="width" value="thin"/>
            <String name="fontFace1" value="Sans-serif"/>
            <String name="Desktop-fontFace1" value="Sans-serif"/>
            <String name="productName" value="Sun Java System Portal Server"/>
            <String name="presetThemeChannel" value="JSPPresetThemeContainer"/>
            <String name="customThemeChannel" value="JSPCustomThemeContainer"/>
            <Boolean name="refreshParentContainerOnly" value="false" advanced="true"/>
            <Boolean name="isEditable" value="true"/>
            <String name="editType" value="edit_complete"/>
            <String name="editContainerName" value="JSPEditChannel"/>
            <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"/>
            <Collection name="categories">
                <String value="Personal Channels"/>
                <String value="Sample Channels"/>
                <String value="News Channels"/>
                <String value="Search Channels"/>
            </Collection>
            <Collection name="Personal Channels">
                <String value="UserInfo"/>
                <String value="MailCheck"/>
                <String value="Bookmark"/>
                <String value="App"/>
            </Collection>
            <Collection name="Sample Channels">
                <String value="SampleSimpleWebService"/>
                <String value="SampleJSP"/>
                <String value="SampleXML"/>
                <String value="SampleURLScraper"/>
            </Collection>
            <Collection name="News Channels">
                <String value="SampleRSS"/>
                <String value="Postit"/>
            </Collection>
            <Collection name="Search Channels">
                <String value="Search"/>
            </Collection>
            <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>

    CustomJSPTCChannel.xml File


    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <!DOCTYPE DisplayProfile SYSTEM "jar://resources/psdp.dtd">
    
    <Container name="CustomJSPTableContainerChannel" 
    provider="CustomJSPTableContainerProvider">
        <Properties>
            <String name="title" value="Front Table Container Channel"/>
            <String name="contentPage" value="toptable.jsp"/>
            <String name="description" value="This is a test for
    			front table containers" />
            <String name="Desktop-fontFace1" value="Sans-serif"/>
            <Collection name="categories">
                <String value="Personal Channels"/>
                <String value="Sample Channels"/>
                <String value="News Channels"/>
            </Collection>
            <Collection name="Personal Channels">
                <String value="UserInfo"/>
                <String value="MailCheck"/>
                <String value="Bookmark"/>
                <String value="App"/>
            </Collection>
            <Collection name="Sample Channels">
                <String value="SampleJSP"/>
                <String value="SampleXML"/>
            </Collection>
            <Collection name="News Channels">
                <String value="SampleRSS"/>
            </Collection>
            <Collection name="channelsRow" advanced="true">
                <String name="MailCheck" value="4"/>
                <String name="App" value="5"/>
                <String name="Bookmark" value="3"/>
                <String name="SampleRSS" value="2"/>
                <String name="SampleXML" value="2"/>
            </Collection>
            <Collection name="channelsIsRemovable" >
                <Boolean name="UserInfo" value="false"/>
            </Collection>
            <Collection name="amList">
                <String value="UserInfo"/>
                <String value="MailCheck"/>
                <String value="App"/>
                <String value="Bookmark"/>
            </Collection>
            <Collection name="pmList">
                <String value="MyFrontPageTabPanelContainer/
    				 Bookmark2"/>
                <String value="MailCheck"/>
                <String value="SampleXML"/>
                <String value="SampleRSS"/>
            </Collection>
        </Properties>
        <Available>
            <Reference value="UserInfo"/>
            <Reference value="MailCheck"/>
            <Reference value="App"/>
            <Reference value="Bookmark"/>
            <Reference value="MyFrontPageTabPanelContainer/
    			Bookmark2"/>
            <Reference value="SampleJSP"/>
            <Reference value="SampleRSS"/>
            <Reference value="SampleXML"/>
        </Available>
        <Selected>
            <Reference value="UserInfo"/>
            <Reference value="MailCheck"/>
            <Reference value="App"/>
            <Reference value="Bookmark"/>
            <Reference value="MyFrontPageTabPanelContainer/
    			Bookmark2"/>
            <Reference value="SampleJSP"/>
            <Reference value="SampleRSS"/>
            <Reference value="SampleXML"/>
        </Selected>
        <Channels>
        </Channels>
    </Container>
  4. Use the psadmin command to upload the display profile fragments for this provider.

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

  5. Create a new directory for the provider in PortalServer-DataDir/portals/portal-ID/desktop/desktoptype directory. The directory for the provider is typically named after the provider.

    For the sample CustomJSPTableContainerProvider, create a directory called CustomJSPTableContainerChannel in PortalServer-DataDir/portals/portal-ID/desktop/desktoptype directory.

  6. Develop and copy the JSP files for the provider in the newly created directory.

    For CustomJSPTableContainerProvider, copy files from PortalServer-DataDir/portals/portal-ID/desktop/default/JSPTableContainerProvider to the PortalServer-DataDir/portals/portal-ID/desktop/desktoptype/CustomJSPTableContainerChannel directory.

  7. 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 JSPTableContainerProvider.properties PortalServer-DataDir/portals/portal-ID/desktop/classes/CustomJSPTableContainerProvider.properties.

  8. Login to the Desktop and specify the URL in your browser to access CustomJSPTableContainerProvider.


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