Sun Java System Portal Server 7.1 Developer's Guide

ProcedureTo create a custom filter by extending the PropertiesFilter class

  1. Create the Java class, which will implement the filter.

    The class file for the sample DateLaterThanPropertiesFilter is shown here:


    package com.acme.filters;
    
    import java.util.Iterator;
    import java.util.Date;
    import java.text.DateFormat;
    import java.text.ParseException;
    
    import com.sun.portal.providers.context.PropertiesFilter;
    import com.sun.portal.providers.context.PropertiesFilterException;
    import com.sun.portal.providers.context.ProviderContext;
    public class DateLaterThanPropertiesFilter extends PropertiesFilter {
    
        private static final DateFormat dateFormat = 
    		DateFormat.getDateInstance(DateFormat.SHORT);
        private Date date = null;
    
        public DateLaterThanPropertiesFilter() {
            super();
        }
    
        protected void init(String value, boolean required)
    		throws PropertiesFilterException {
            super.init(value, required);
            try {
                date = dateFormat.parse(value);
            } catch (ParseException pe) {
            throw new PropertiesFilterException("DateLaterThanPropertiesFilter:
    			 ", pe);
            }
        }
    
        public String getCondition() {
            return "dateLaterThan";
        }
    
        public boolean match(String condition, String value) throws
    		PropertiesFilterException {
            if (!condition.equals("dateLaterThan")) {
                return false;
            }
            Date cdate = null;
            try {
                cdate = dateFormat.parse(value);
            } catch (ParseException pe) {
                throw new PropertiesFilterException
    				("DateLaterThanPropertiesFilter.match(): ", pe);
            }
            return cdate.after(date);
        }
    }
  2. Compile the class file.

    To compile the DateLaterThanPropertiesFilter.java file, type:


    javac -d /var/opt/SUNWportal/portals/portal-ID
    /desktop/classes -classpath PortalServer-base/sdk/desktop/desktopsdk.jar:
    AccessManager-base/lib/servlet.jar DateLaterThanPropertiesFilter.java
  3. Create the provider display profile XML fragment for the conditional properties.

    The sample display profile XML fragment for the DateLaterThanPropertiesFilter is here:


    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <!DOCTYPE DisplayProfile SYSTEM "jar://resources/psdp.dtd">
    <Properties>
    	<String name="foo" value="bar">
    	<ConditionalProperties condition="locale" value="en">
    		<String name="foo" value="bar"/>
    		<ConditionalProperties condition="dateLaterThan" value="03/03/2003">
    			<ConditionalProperties condition="client" value="nokia">
    				<String name="foo" value="en 03/03/2003 nokia">
    			</ConditionalProperties>
    		</ConditionalProperties>
    			<ConditionalProperties condition="client" value="nokia">
    				<String name="foo" value="en nokia">
            </ConditionalProperties>
    	</ConditionalProperties>
    </Properties>
  4. Load the display profile using the psadmin modify-display-profile sub command.

    See the Sun Java System Portal Server 7.1 Command Line Reference for more information on this sub command. Alternatively, you can also use the administration console to add and/or modify display profile. See the Portal Server administration console online help for more information.

  5. Implement the code to access the filter in your custom provider class file where you wish to implement this filter.

    For example, in your provider, you can access the sample DateLaterThanPropertiesFilter by doing one of the following:

    • The following Provider implementation for DateLaterThanPropertiesFilter will return “en 03/03/2003 nokia”


      List pflist = new List();
      pflist.add(getProviderContext().getLocalePropertiesFilter( "en", true));
      String filter = "com.acme.filters.DateLaterThanPropertiesFilter" ;
      pflist.add(getProviderContext().getPropertiesFilter( filter, "02/02/2003", true));
      pflist.add(getProviderContext().getClientPropertiesFilter( "nokia", true));
      getStringProperty(getName(), "foo", pflist);
    • The following Provider implementation for DateLaterThanPropertiesFilter will return “en nokia”


      List pflist = new List();
      pflist.add(getProviderContext().getLocalePropertiesFilter( "en", true));
      String filter = "com.acme.filters.DateLaterThanPropertiesFilter" ;
      pflist.add(getProviderContext().getPropertiesFilter
      ( filter, "04/04/2003", false)); // this filter is optional
      pflist.add(getProviderContext().getClientPropertiesFilter( "nokia", true));
      getStringProperty(getName(), "foo", pflist);