taylor 2004/12/02 14:57:33
Modified: components/web-content/src/java/org/apache/jetspeed/portlet
WebContentPortlet.java
Log:
preliminary caching, need to improve this and make on a per portlet instance
or better yet use the portals caching
Revision Changes Path
1.5 +57 -20
jakarta-jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/WebContentPortlet.java
Index: WebContentPortlet.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/WebContentPortlet.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- WebContentPortlet.java 2 Dec 2004 08:23:32 -0000 1.4
+++ WebContentPortlet.java 2 Dec 2004 22:57:33 -0000 1.5
@@ -31,6 +31,8 @@
import org.apache.portals.bridges.velocity.GenericVelocityPortlet;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.jetspeed.rewriter.JetspeedRewriterController;
import org.apache.jetspeed.rewriter.RewriterController;
import org.apache.jetspeed.rewriter.RewriterException;
@@ -100,9 +102,6 @@
/** Default encoding */
public String defaultEncoding = "iso-8859-1";
- /* Internal Cache */
- private String lastURL = null;
-
/* SSO settings */
boolean isSSOEnabled = false;
@@ -111,6 +110,10 @@
RewriterController rewriteController = null;
+ /* Internal Cache */
+ private String lastURL = null; // TODO: can't keep this here and have
1..n portlets
+ private byte[] cache = null; // TODO: can't keep this here and have 1..n
portlets
+
public WebContentPortlet()
{
super();
@@ -159,7 +162,7 @@
{
String sessionObj = new String(webContentParameter);
actionRequest.getPortletSession().setAttribute(WebContentPortlet.SESSION_PARAMETER,
sessionObj,
- PortletSession.APPLICATION_SCOPE);
+ PortletSession.PORTLET_SCOPE);
}
}
@@ -171,12 +174,13 @@
{
// Find the source URL to execute
String sourceURL = null;
-
+ boolean useCache = false;
+
// Check if the source was defined in the session
try
{
sourceURL = (String)
request.getPortletSession().getAttribute(WebContentPortlet.SESSION_PARAMETER,
- PortletSession.APPLICATION_SCOPE);
+ PortletSession.PORTLET_SCOPE);
// TODO: This is just a kludge. Filtering of bad uRL's should be
// more sophisticated
@@ -192,14 +196,20 @@
{
// Use the cache
sourceURL = lastURL;
+ useCache = true;
}
-
+
if (sourceURL == null)
{
// Use the URL defined in the preferences
sourceURL = defaultViewSource;
}
+ if (lastURL != null && sourceURL.equals(lastURL))
+ {
+ useCache = true;
+ }
+
// If all above fails throw an error asking the user to define an
URL in
// edit mode
if (sourceURL == null)
@@ -231,12 +241,26 @@
// Set the content type
response.setContentType("text/html");
- // Draw the content
- byte[] content = doWebContent(request, sourceURL, response);
+ byte[] content;
+ if (useCache && cache != null)
+ {
+ System.out.println("USING CACHE");
+ content = cache;
+ }
+ else
+ {
+ // Draw the content
+ System.out.println("***NOT*** USING CACHE");
+
+ content = doWebContent(request, sourceURL, response);
+ cache = content;
+ }
+
+ // drain the stream to the portlet window
ByteArrayInputStream bais = new ByteArrayInputStream(content);
drain(bais, response.getPortletOutputStream());
bais.close();
-
+
// Done just save the last URL
lastURL = sourceURL;
@@ -257,27 +281,23 @@
// Initialization
Writer htmlWriter = null;
- // Rewriter
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
- Reader htmlReader = getReader(sourceAttr);
-
try
{
htmlWriter = new OutputStreamWriter(byteOutputStream,
this.defaultEncoding);
// Set the action URL in the rewriter
- ((WebContentRewriter)
rewriter).setActionURL(response.createActionURL());
+ ((WebContentRewriter)
rewriter).setActionURL(response.createActionURL());
URL baseURL = new URL(sourceAttr);
String baseurl = baseURL.getProtocol() + "://" +
baseURL.getHost();
- // TODO: Remove debug
- System.out.println("BaseURL: " + baseurl);
- ((WebContentRewriter) rewriter).setBaseURL(baseurl);
+ rewriter.setBaseUrl(baseurl);
- // drain(getReader(sourceAttr), byteOutputStream);
-
rewriter.rewrite(rewriteController.createParserAdaptor("text/html"),
getReader(sourceAttr), htmlWriter);
+
rewriter.rewrite(rewriteController.createParserAdaptor("text/html"),
getRemoteReader(sourceAttr), htmlWriter);
+ htmlWriter.flush();
+
}
catch (UnsupportedEncodingException ueex)
{
@@ -313,6 +333,7 @@
{
Class[] rewriterClasses = new Class[]
{ WebContentRewriter.class, WebContentRewriter.class};
+
Class[] adaptorClasses = new Class[]
{ SwingParserAdaptor.class, SaxParserAdaptor.class};
RewriterController rwc = new JetspeedRewriterController(contextPath
+ "conf/rewriter-rules-mapping.xml", Arrays
@@ -463,4 +484,20 @@
w.flush();
}
+ private Reader getRemoteReader(String uri) throws PortletException
+ {
+ try
+ {
+ HttpClient client = new HttpClient();
+ GetMethod get = new GetMethod(uri);
+ int status = client.executeMethod(get);
+ InputStream is = get.getResponseBodyAsStream();
+ return new InputStreamReader(is);
+ }
+ catch (IOException e)
+ {
+ throw new PortletException(e);
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]