01: // WebOnSwing - Web Application Framework
02: //Copyright (C) 2003 Fernando Damian Petrola
03: //
04: //This library is free software; you can redistribute it and/or
05: //modify it under the terms of the GNU Lesser General Public
06: //License as published by the Free Software Foundation; either
07: //version 2.1 of the License, or (at your option) any later version.
08: //
09: //This library is distributed in the hope that it will be useful,
10: //but WITHOUT ANY WARRANTY; without even the implied warranty of
11: //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12: //Lesser General Public License for more details.
13: //
14: //You should have received a copy of the GNU Lesser General Public
15: //License along with this library; if not, write to the Free Software
16: //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17:
18: package net.ar.webonswing.render;
19:
20: import java.util.*;
21:
22: import net.ar.webonswing.managers.cache.*;
23: import net.ar.webonswing.render.templates.*;
24: import net.ar.webonswing.visitor.*;
25: import net.ar.webonswing.wrapping.*;
26:
27: public class CachingComponentRenderer extends DefaultComponentRenderer {
28: protected String theKey;
29: protected String theWindowName;
30: protected ComponentCacheStateContainer theCacheManager = new ComponentCacheStateContainer();
31:
32: public CachingComponentRenderer(String aWindowName, String aKey) {
33: super ();
34: theWindowName = aWindowName;
35: theKey = aKey == null ? "" : aKey;
36: }
37:
38: public Visitable render(VisualComponent aComponent) {
39: if (theCacheManager.isCached(theWindowName, aComponent
40: .getName())) {
41: Object[] theState = theCacheManager.getCacheData(
42: theWindowName, aComponent.getName(), theKey);
43:
44: String theRendering;
45:
46: if (theState == null
47: || (theRendering = (String) theState[0]) == null) {
48: theRendering = new ContentRenderer(super
49: .render(aComponent)).getResult();
50:
51: List theProps = theRenderingContribManager
52: .getComponentProps(aComponent);
53: theProps.set(0, null);
54:
55: theCacheManager.setCacheData(theWindowName, aComponent
56: .getName(), theKey, new Object[] {
57: theRendering, theProps });
58: } else
59: theRenderingContribManager.setComponentProps(
60: aComponent, (List) theState[1]);
61:
62: return new TextContent(theRendering);
63: }
64:
65: return super .render(aComponent);
66: }
67:
68: public String getKey() {
69: return theKey;
70: }
71:
72: public void setKey(String aString) {
73: theKey = aString;
74: }
75:
76: }
|