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]