raphael     01/05/29 15:55:14

  Modified:    src/java/org/apache/jetspeed/portal/controllers
                        CardPortletController.java
  Log:
  extend VelocityPortletControl to replace all existing HTML ECS controls
  (including PanedPortletControl)
  
  Revision  Changes    Path
  1.15      +122 -50   
jakarta-jetspeed/src/java/org/apache/jetspeed/portal/controllers/CardPortletController.java
  
  Index: CardPortletController.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/portal/controllers/CardPortletController.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- CardPortletController.java        2001/04/26 11:13:00     1.14
  +++ CardPortletController.java        2001/05/29 22:55:12     1.15
  @@ -81,47 +81,68 @@
   or with an invalid value, use the first portlet (position 0)</li>
   </p>
   @author <a href="mailto:[EMAIL PROTECTED]";>Rapha�l Luta</a>
  -@version $Id: CardPortletController.java,v 1.14 2001/04/26 11:13:00 ingo Exp $
  +@version $Id: CardPortletController.java,v 1.15 2001/05/29 22:55:12 raphael Exp $
   */
  -public class CardPortletController extends AbstractPortletController {
  +public class CardPortletController extends AbstractPortletController
  +{
   
       public static final String DEFAULT_PARAMETER = "card";
   
       /**
       */
  -    public ConcreteElement getContent(RunData rundata) {
  +    public ConcreteElement getContent(RunData rundata)
  +    {
   
           ElementContainer base = new ElementContainer();
   
           PortletSet myPortlets = this.getPortlets();
           PortletControllerConfig conf = getConfig();
  -        //FIXME: handling of rundata?
  -        //String pane = conf.getParameters().getString( getParameterName() , 
getCard() );
  -        String pane = rundata.getParameters().getString( getParameterName() , 
getCard() );
  +
  +        String pane = rundata.getParameters().getString( getParameterName() );
  +        
  +        if (pane == null)
  +        {
  +            // the parameter is undefined, search for sticky value in session
  +            pane = (String)rundata.getSession().getAttribute( getParameterName() );
  +            
  +            if (pane == null)
  +            {
  +                // use default
  +                pane = getCard();
  +            }
  +        }
  +
           boolean searchTitle = false;
           int paneNum = 0;
           
  -        try {
  +        try
  +        {
               paneNum = Integer.parseInt( pane );
  -        } catch (Exception e) {
  +        } 
  +        catch (Exception e)
  +        {
               paneNum = 0;
               searchTitle = true;
           }
           
  -        if ( ( paneNum >= myPortlets.size() ) || ( paneNum <0 ) ) {
  +        if ( ( paneNum >= myPortlets.size() ) || ( paneNum <0 ) )
  +        {
               paneNum = 0;
           }
   
           boolean found = false;
           
           // first search in the child titles 
  -        if ( searchTitle == true ) {
  +        if ( searchTitle == true )
  +        {
               Enumeration en = myPortlets.getPortlets();
  -            while ( en.hasMoreElements() && ( ! found ) ) {
  +            while ( en.hasMoreElements() && ( ! found ) )
  +            {
                   Portlet p = (Portlet)en.nextElement();
  -                if ( p.getTitle().equals(pane) ) {
  +                if ( p.getTitle().equals(pane) )
  +                {
                       base.addElement( p.getContent( rundata ) );
  -                    setCard( p.getTitle() );
  +                    pane = p.getTitle();
                       found=true;
                   }
               }
  @@ -129,101 +150,152 @@
   
           // then in the explicit position field
           Enumeration en = myPortlets.getPortlets();
  -        while ( en.hasMoreElements() && ( ! found ) ) {
  +        while ( en.hasMoreElements() && ( ! found ) )
  +        {
               Portlet p = (Portlet)en.nextElement();
  -            if ( p.getPortletConfig().getPosition() == paneNum ) {
  +            if ( p.getPortletConfig().getPosition() == paneNum )
  +            {
                   base.addElement( p.getContent( rundata ) );
  -                setCard( String.valueOf( paneNum ) );
  +                pane = String.valueOf( paneNum );
                   found=true;
               }
           }
   
           // then in the implicit position
  -        if (!found) {
  +        if (!found)
  +        {
               base.addElement( myPortlets.getPortletAt(paneNum).getContent( rundata ) 
);
  -            setCard( String.valueOf( paneNum ) );
  +            pane = String.valueOf( paneNum );
           }
           
  +        // save the selected pane is session and parameters
  +        setCard( pane );
  +        rundata.getSession().setAttribute(getParameterName(), pane);
  +        
           return base;
   
       }
       
       /**
  -    Builds the link to access to a given pane.
  -    */
  -    public boolean isSelected( Portlet p ) {
  -
  +     * Test whether the selected portlet is considered selected for the current
  +     * request.
  +     *
  +     * @param p the Portlet to check
  +     * @param rundata the RunData for the request
  +     * @return true if the portlet is selected, false otherwise
  +     */
  +    public boolean isSelected( Portlet p, RunData rundata )
  +    {
  +        // we don't manage the portlet
           if (p.getPortletConfig().getPortletSet() != getPortlets() ) return false;
  +        
  +        String pane = rundata.getParameters().getString( getParameterName() );
  +        
  +        if (pane == null)
  +        {
  +            // the parameter is undefined, search for sticky value in session
  +            pane = (String)rundata.getSession().getAttribute( getParameterName() );
  +            
  +            if (pane == null)
  +            {
  +                // use default
  +                pane = getCard();
  +            }
  +        }
  +            
  +        boolean searchTitle = false;
  +
  +        int paneNum = 0;
           
  -        int paneNum = -1;
  +        //should we test based on name/title or position
  +        try
  +        {
  +            paneNum = Integer.parseInt( pane );
  +        } catch (Exception e) {
  +            paneNum = 0;
  +            searchTitle = true;
  +        }
           
  -        try {
  -            paneNum = Integer.parseInt( getCard() );
  -        } catch ( Throwable t ) {}
  -        
  -        if ( paneNum >=0 ) {
  -            if ( ( p.getPortletConfig().getPosition() == paneNum ) 
  -                 || ( getPortlets().getPortletAt( paneNum ) == p ) )
  +        // first search in the child titles...
  +        if ( searchTitle == true )
  +        {
  +            return ( p.getName().equals(pane) || p.getTitle().equals(pane) );
  +        }
  +        else        
  +        {
  +            // ...then explicit position parameters...
  +            if ( p.getPortletConfig().getPosition() == paneNum )
  +            {
                   return true;
  -            else
  -                return false;
  -        } else {
  -            if ( p.getTitle().equals( getCard() ) ) return true;
  +            }
           }
   
  -        return false;
  +        // ...finally test implicit position  
  +        
  +        // sanity check: the position sought should be positive and lower than set 
size
  +        if ( ( paneNum >= getPortlets().size() ) || ( paneNum <0 ) )
  +        {
  +            return false;
  +        }
  +
  +        return ( getPortlets().getPortletAt( paneNum ) == p );
       }
   
       /**
       Builds the link to access to a given pane.
       */
  -    public A getPortletLink( Portlet p, RunData rundata ) {
  +    public DynamicURI getPortletURI( Portlet p, RunData rundata )
  +    {
   
  -        // if we don't manage this portlet, return an empty anchor 
  -        if (p.getPortletConfig().getPortletSet() != getPortlets() ) {
  -            return new A();
  +        // if we don't manage this portlet, return null 
  +        if (p.getPortletConfig().getPortletSet() != getPortlets() )
  +        {
  +            return null;
           }
           
           String title = p.getTitle();
           
           DynamicURI uri = new DynamicURI( rundata );
  -        uri.addQueryData( rundata.getParameters() );
           uri.removePathInfo( getParameterName() );
           uri.removeQueryData( getParameterName() );
   
  -        if ( MetaData.DEFAULT_TITLE.equals( title ) ) {
  +        if ( MetaData.DEFAULT_TITLE.equals( title ) )
  +        {
               uri.addPathInfo( getParameterName(), p.getPortletConfig().getPosition() 
);
  -        } else {
  +        } 
  +        else
  +        {
               uri.addPathInfo( getParameterName(), title );
           }
   
  -        if ( isSelected( p ) ) return new A();
  -        
  -        return new A( uri.toString() );
  +        return uri;
       }
   
       /**
       */
  -    public void setParameterName( String name ) {
  +    public void setParameterName( String name )
  +    {
           getConfig().setInitParameter( "parameter", name );
       }
       
       /**
       */
  -    public String getParameterName() {
  +    public String getParameterName()
  +    {
           return getConfig().getInitParameter( "parameter", DEFAULT_PARAMETER );
       }
       
       /**
       */
  -    public void setCard( String card ) {
  +    public void setCard( String card )
  +    {
           getConfig().setInitParameter( "defaultcard", card );
       }
       
       /**
       */
  -    public String getCard() {
  +    public String getCard()
  +    {
           return getConfig().getInitParameter( "defaultcard", "0" );
       }
  -
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to