You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ro...@apache.org on 2004/12/23 00:58:45 UTC
cvs commit: jakarta-jetspeed-2/portals-bridges/perl/src/java/org/apache/portals/bridges/perl PerlPortlet.java
rogerrut 2004/12/22 15:58:45
Modified: portals-bridges/perl/src/java/org/apache/portals/bridges/perl
PerlPortlet.java
Log:
Added cache and state so that multiple perl portlets could be on the same page displaying different content
Revision Changes Path
1.3 +63 -34 jakarta-jetspeed-2/portals-bridges/perl/src/java/org/apache/portals/bridges/perl/PerlPortlet.java
Index: PerlPortlet.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/portals-bridges/perl/src/java/org/apache/portals/bridges/perl/PerlPortlet.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PerlPortlet.java 8 Nov 2004 22:30:54 -0000 1.2
+++ PerlPortlet.java 22 Dec 2004 23:58:45 -0000 1.3
@@ -1,4 +1,4 @@
-/*
+ /*
* Copyright 2000-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -70,11 +70,25 @@
* DemoMode on or off
*/
public static final String PARAM_DEMO_MODE = "DemoMode";
+
+ /**
+ * PARAM_APPLICATION
+ *
+ * ApplicationName identifies the caller so that the portlet only refreshes
+ * content that was supposed for the portlet.
+ * If the application name is undefined the portlet will process the request.
+ * If you have more than one perl-portlet for the same user/session all the portlets
+ * will be refreshed with the same content.
+ */
+ public static final String PARAM_APPLICATION = "Application";
// Local variables
private String perlScript = "perl-demo.cgi";
private String scriptPath = "cgi-bin";
+
+ private String applicationName = null;
+
// Switch that shows basic information about the perl script to run
private boolean bDemoMode = false;
@@ -84,6 +98,9 @@
// caching status -- cache the last query
private String lastQuery = null;
+ // Cache the last generated page
+ String lastPage = null;
+
public void init(PortletConfig config) throws PortletException
{
@@ -94,7 +111,8 @@
// throw an exception
scriptPath = config.getInitParameter(PARAM_SCRIPT_PATH);
perlScript = config.getInitParameter(PARAM_PERL_SCRIPT);
- String demoMode = config.getInitParameter(PARAM_DEMO_MODE);
+ String demoMode = config.getInitParameter(PARAM_DEMO_MODE);
+ applicationName = config.getInitParameter(PARAM_APPLICATION);
if (demoMode != null && demoMode.compareToIgnoreCase("on") == 0)
bDemoMode = true;
@@ -131,7 +149,8 @@
{
// Perl Parameter Object
PerlParameters cgi = new PerlParameters();
-
+ cgi.setApplicationName(this.applicationName);
+
// Separate the values before and after the Query Mark ?
int ixQuery = perlParameter.indexOf('?');
if ( ixQuery != -1)
@@ -206,38 +225,44 @@
PerlParameters perlParam = null;
/**
- * The Perl parameters are either passed by a session attribute (invoked through an action) or as a query string (invoked from the cgi itself).
- * The portlet checks first for the query (navigation inside the perl portlet) and then if a session attribute (SELECTED_VIEW) was defined.
+ * The Perl parameters are either passed by a session attribute (invoked from a different portlet) or as an action which is replaced
+ * with a session while processing actions..
*/
+
+ try
+ {
+ perlParam = (PerlParameters)request.getPortletSession().getAttribute(PerlParameters.PERL_PARAMETER, PortletSession.APPLICATION_SCOPE);
+ }
+ catch (Exception e )
+ {
+ perlParam = null;
+ }
- // Extract the Query string -- Request initiated from inside the CGI script. This allows navigation within the CGI
- String queryString = ((HttpServletRequest)((HttpServletRequestWrapper) request).getRequest()).getQueryString();
-
- if (queryString != null)
+ if (perlParam != null)
{
- query = queryString;
-
- // Find the perl script -- last argument
- String url = ((HttpServletRequest)((HttpServletRequestWrapper) request).getRequest()).getRequestURI();
- perlScript = url.substring(url.lastIndexOf('/')+1);
- }
- else
- {
- try
- {
- perlParam = (PerlParameters)request.getPortletSession().getAttribute(PerlParameters.PERL_PARAMETER, PortletSession.APPLICATION_SCOPE);
- }
- catch (Exception e )
- {
- perlParam = null;
- }
-
- if (perlParam != null)
- {
+ // Only use the values if the call is designated to this script
+ if (perlParam.getApplicationName().compareToIgnoreCase(this.applicationName) == 0)
+ {
query = perlParam.getQueryString();
perlScript = perlParam.getScriptName();
-
- }
+ }
+
+ if (this.applicationName == null ) // not yet initialized
+ {
+ this.applicationName = perlParam.getApplicationName();
+ }
+ else
+ {
+ // If the application name doesn't match just use the cached version and return
+ if ( lastPage != null // has run at least once
+ && this.applicationName != null // No filtering runs for any perl request
+ && perlParam.getApplicationName().compareToIgnoreCase(this.applicationName) != 0)
+ {
+ // Use cache
+ writer.println(this.lastPage);
+ return;
+ }
+ }
}
// Open the perl script and extract the perl executable path. It's the same way as apache HTTP executes PERL
@@ -248,9 +273,10 @@
contextPath = pathTranslated.substring(0, pathTranslated.indexOf("webapps") + 7) + contextPath + "/";
contextPath += scriptPath;
-
- contextPath += "/";
- String inputPath = contextPath;
+
+ // Build full path to scripts
+ if (perlScript.startsWith("/") == false )
+ contextPath += "/";
contextPath += perlScript;
// command to execute
@@ -374,6 +400,9 @@
// Write the page
writer.println(finalPage);
+
+ // Cache page
+ lastPage = new String(finalPage);
}
catch(IOException ioe)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org