rogerrut 2004/11/08 14:30:54 Modified: portals-bridges/perl/src/java/org/apache/portals/bridges/perl PerlPortlet.java PerlParameters.java Log: Cleanup and improvement of the PERL portlet --> Added navigation support for Form actions, hrefs to other perl scripts --> Normalized action handling for the portlet. -- >Moved some utility functions into the portals-bridges common package since the PHP portlet uses some of the same functionality Revision Changes Path 1.2 +52 -87 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.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PerlPortlet.java 3 Nov 2004 20:32:18 -0000 1.1 +++ PerlPortlet.java 8 Nov 2004 22:30:54 -0000 1.2 @@ -24,7 +24,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; -import java.util.Iterator; +import java.util.Enumeration; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; @@ -43,6 +43,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.portals.bridges.common.ScriptPostProcess; /** @@ -69,11 +70,8 @@ * DemoMode on or off */ public static final String PARAM_DEMO_MODE = "DemoMode"; - - - // Local variables - private final String ACTION_PARAMETER_PERL = "_PERL"; - + +// Local variables private String perlScript = "perl-demo.cgi"; private String scriptPath = "cgi-bin"; @@ -122,19 +120,23 @@ */ public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws PortletException, IOException { - String perlParameter = actionRequest.getParameter(ACTION_PARAMETER_PERL); - //System.out.println("Action parameter for perl " + perlParameter); + String perlParameter = actionRequest.getParameter(PerlParameters.ACTION_PARAMETER_PERL); + //TODO: Remove Debug + System.out.println("Action parameter for perl " + perlParameter); + /* * If the perlParameter is not empty create a PerlParameter object and attach it to the session */ if ( perlParameter != null && perlParameter.length() > 0) { + // Perl Parameter Object + PerlParameters cgi = new PerlParameters(); + // Separate the values before and after the Query Mark ? int ixQuery = perlParameter.indexOf('?'); if ( ixQuery != -1) { - PerlParameters cgi = new PerlParameters(); - cgi.setPerlScript(perlParameter.substring(0,ixQuery)); + cgi.setScriptName(perlParameter.substring(0,ixQuery)); String queryArguments = perlParameter.substring(ixQuery+1); System.out.println("ProcessRequest -- Script " + perlParameter.substring(0,ixQuery) + " Query string " + queryArguments); @@ -150,8 +152,33 @@ cgi.addQueryArgument(queryArguments); // Add the PerlParameters to the session - actionRequest.getPortletSession().setAttribute("SELECTED_VIEW", cgi, PortletSession.APPLICATION_SCOPE); + actionRequest.getPortletSession().setAttribute(PerlParameters.PERL_PARAMETER, cgi, PortletSession.APPLICATION_SCOPE); } + else + { + // No query string just the script name + cgi.setScriptName(perlParameter); + + // Get all the parameters from the request and add them as query arguments + Enumeration enum = actionRequest.getParameterNames(); + String name, value; + while (enum.hasMoreElements()) + { + name = (String)enum.nextElement(); + // PERL_PARAMETER already processed just ignore it + if (name.compareToIgnoreCase(PerlParameters.ACTION_PARAMETER_PERL) != 0) + { + value = actionRequest.getParameter(name); + + // TODO: Remove debug + System.out.println("Query: " + name + "=" + value ); + + cgi.addQueryArgument(name + "=" + value); + } + } + // Add the PerlParameters to the session + actionRequest.getPortletSession().setAttribute(PerlParameters.PERL_PARAMETER, cgi, PortletSession.APPLICATION_SCOPE); + } } } /** @@ -162,6 +189,9 @@ public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { + // TODO: Remove debug + System.out.println("Path info for request " + ((HttpServletRequest)((HttpServletRequestWrapper) request).getRequest()).getPathInfo()); + // Set the content type response.setContentType("text/html"); @@ -195,7 +225,7 @@ { try { - perlParam = (PerlParameters)request.getPortletSession().getAttribute("SELECTED_VIEW", PortletSession.APPLICATION_SCOPE); + perlParam = (PerlParameters)request.getPortletSession().getAttribute(PerlParameters.PERL_PARAMETER, PortletSession.APPLICATION_SCOPE); } catch (Exception e ) { @@ -205,21 +235,18 @@ if (perlParam != null) { query = perlParam.getQueryString(); - perlScript = perlParam.getPerlScript(); + perlScript = perlParam.getScriptName(); } } // Open the perl script and extract the perl executable path. It's the same way as apache HTTP executes PERL + String perlExecutable = null; + String pathTranslated = ((HttpServletRequest)((HttpServletRequestWrapper) request).getRequest()).getPathTranslated(); String contextPath = request.getContextPath(); contextPath = pathTranslated.substring(0, pathTranslated.indexOf("webapps") + 7) + contextPath + "/"; - - //String contextPath = ((JetspeedPortletContext)this.getPortletContext()).getServletContext().getRealPath( ((HttpServletRequestWrapper) request).getServletPath()); - String perlExecutable = null; - - //String rootContextPath = contextPath.substring(0, contextPath.lastIndexOf("container") ) ; contextPath += scriptPath; contextPath += "/"; @@ -228,8 +255,7 @@ // command to execute String command = null; - - + // Open the script and read the first line to get the executable !/usr/bin/perl OR !c:\bin\perl\perl.exe try { @@ -338,16 +364,15 @@ perlResult.close(); // Post Process for generated page - // Any HREFs should be extended with the ActionURL + // Any HREFs and Form actions should be extended with the ActionURL PortletURL actionURL = response.createActionURL(); - - String finalPage = processHREFS("<a", ">", "href=", "\'", page.toString(), actionURL); - finalPage = processHREFS("<A", ">", "HREF=", "\'", finalPage, actionURL); - finalPage = processHREFS("<AREA", ">", "href=", "\'", finalPage, actionURL); + ScriptPostProcess processor = new ScriptPostProcess(); + processor.setInitalPage(page); + processor.postProcessPage(actionURL, PerlParameters.ACTION_PARAMETER_PERL); + String finalPage = processor.getFinalizedPage(); // Write the page - //writer.println(page.toString()); writer.println(finalPage); } catch(IOException ioe) @@ -356,65 +381,5 @@ } } } - - private String processHREFS(String startTag, String endTag, String ref, String quote, String inputPage, PortletURL actionURL) - { - StringBuffer finalPage = new StringBuffer(); - String page = inputPage; - - int ixTagOpen, ixTagEnd, ixRefStart, ixRefEnd; - ref = ref + quote; - - // Start search - ixTagOpen = page.indexOf(startTag); - - try - { - while (ixTagOpen != -1 ) - { - finalPage.append(page.substring(0, ixTagOpen)); - page = page.substring(ixTagOpen); - - ixTagEnd = page.indexOf(endTag); - ixRefStart = page.indexOf(ref); - - //If reference start tag is after endTag it means that the Tag doesn't include any source links - // just continue... - if ( ixRefStart == -1 || ixRefStart > ixTagEnd ) - { - finalPage.append(page.substring(0, ixTagEnd)); - page = page.substring(ixTagEnd); - } - else - { - ixRefStart = ixRefStart + ref.length(); - finalPage.append(page.substring(0, ixRefStart)); - page = page.substring(ixRefStart); - ixRefEnd = page.indexOf(quote); - - // Extract the URL - String url = page.substring(0, ixRefEnd); - - // Prepend the Action URL - actionURL.setParameter(ACTION_PARAMETER_PERL, url); - - finalPage.append(actionURL.toString()).append(quote); - - //Remainder - page = page.substring(ixRefEnd+1); - } - - // Continue scan - ixTagOpen = page.indexOf(startTag); - } - - finalPage.append(page); - }catch(Exception e) - { - System.out.println("ERROR: Exception in processHREFS " + e.getMessage() ); - } - - return finalPage.toString(); - } } 1.2 +21 -41 jakarta-jetspeed-2/portals-bridges/perl/src/java/org/apache/portals/bridges/perl/PerlParameters.java Index: PerlParameters.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/portals-bridges/perl/src/java/org/apache/portals/bridges/perl/PerlParameters.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PerlParameters.java 3 Nov 2004 20:32:18 -0000 1.1 +++ PerlParameters.java 8 Nov 2004 22:30:54 -0000 1.2 @@ -15,6 +15,8 @@ */ package org.apache.portals.bridges.perl; +import org.apache.portals.bridges.common.ScriptRuntimeData; + /** * PerlParameters * Class holding information about the perl script to execute.This class is typically attached to a PortletAction (as an attribute). @@ -23,13 +25,28 @@ * @version $Id$ */ -public class PerlParameters { +public class PerlParameters extends ScriptRuntimeData{ + + /** + * Action Parameter for Perl requests + */ + public static final String ACTION_PARAMETER_PERL = "_PERL"; + + /** + * Session variable for Perl Parameters + */ + public static final String PERL_PARAMETER = "PerlParameter"; + private String requestMethod = "GET"; private String queryString = null; private String perlScript = null; private String displayMessage = null; - + // Constructor + public PerlParameters() { + setSessionParameterName(PERL_PARAMETER); + } + // Getters and setters public void setRequestMethod(String requestMethod) { @@ -41,41 +58,4 @@ return this.requestMethod; } - public void addQueryArgument(String query) - { - if (queryString == null) - { - queryString = query; - } - else - { - queryString += '&'; - queryString += query; - } - } - - public String getQueryString() - { - return this.queryString; - } - - public void setPerlScript(String script) - { - this.perlScript = script; - } - - public String getPerlScript() - { - return this.perlScript; - } - - public void setDisplayMessage(String msg) - { - this.displayMessage = msg; - } - - public String getDisplayMessage() - { - return this.displayMessage; - } -} +} \ No newline at end of file
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]