From: Anjo K. <an...@us...> - 2006-10-19 20:42:54
|
Update of /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv28648/Sources/er/extensions Modified Files: ERXStyleSheet.java ERXExpiringCache.java Log Message: cache now has time in seconds, synchronized itself Index: ERXStyleSheet.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXStyleSheet.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ERXStyleSheet.java 19 Oct 2006 19:51:31 -0000 1.11 --- ERXStyleSheet.java 19 Oct 2006 20:42:51 -0000 1.12 *************** *** 18,26 **** /** ! * Simple stateless component used for adding a style sheet to a page. ! * @binding styleSheetName name of the style sheet ! * @binding styleSheetFrameworkName name of the framework for the style sheet ! * @binding styleSheetUrl url to the style sheet ! * @binding styleSheetKey key to cache the style sheet under */ //FIXME: cache should be cleared once in a while --- 18,29 ---- /** ! * Simple stateless component used for adding a style sheet to a page. You can either supply ! * a complete URL, a file and framework name or put something in the component content. ! * The content of the component is cached under a "key" ! * @binding filename name of the style sheet ! * @binding framework name of the framework for the style sheet ! * @binding href url to the style sheet ! * @binding key key to cache the style sheet under. Default is the ! * sessionID */ //FIXME: cache should be cleared once in a while *************** *** 39,43 **** } ! private static NSMutableDictionary cache = (NSMutableDictionary) ERXMutableDictionary.synchronizedDictionary(); public static class Sheet extends WODirectAction { --- 42,46 ---- } ! private static NSMutableDictionary cache = (NSMutableDictionary) new ERXExpiringCache(60); public static class Sheet extends WODirectAction { *************** *** 59,62 **** --- 62,66 ---- public String styleSheetUrl() { String url = (String) valueForBinding("styleSheetUrl"); + url = ( url == null ? (String) valueForBinding("href") : url); if(url == null) { String name = styleSheetName(); *************** *** 71,97 **** /** * Returns the style sheet framework name either resolved ! * via the binding <b>styleSheetFrameworkName</b>. * @return style sheet framework name */ public String styleSheetFrameworkName() { ! return (String)valueForBinding("styleSheetFrameworkName"); } /** * Returns the style sheet name either resolved ! * via the binding <b>styleSheetName</b>. * @return style sheet name */ public String styleSheetName() { ! return (String)valueForBinding("styleSheetName"); } ! /** ! * Returns the style sheet framework name either resolved ! * via the binding <b>styleSheetFrameworkName</b>. * @return style sheet framework name */ public String styleSheetKey() { ! return (String)valueForBinding("styleSheetKey"); } --- 75,109 ---- /** * Returns the style sheet framework name either resolved ! * via the binding <b>framework</b>. * @return style sheet framework name */ public String styleSheetFrameworkName() { ! String result = (String)valueForBinding("styleSheetFrameworkName"); ! result = (result == null ? (String) valueForBinding("framework") : result); ! return result; } /** * Returns the style sheet name either resolved ! * via the binding <b>filename</b>. * @return style sheet name */ public String styleSheetName() { ! String result = (String)valueForBinding("styleSheetName"); ! result = (result == null ? (String) valueForBinding("filename") : result); ! return result; } ! /** ! * Returns key under whic the stylesheet should be placed in the cache. ! * If no key is given, the session id is used. * @return style sheet framework name */ public String styleSheetKey() { ! String result = (String)valueForBinding("key"); ! if(result == null && !application().isCachingEnabled()) { ! result = context().session().sessionID(); ! } ! return result; } *************** *** 120,131 **** if(href == null) { String key = styleSheetKey(); ! if(key == null) { ! key = wocontext.session().sessionID(); ! } ! if(cache.objectForKey(key) == null) { WOResponse newresponse = new WOResponse(); super.appendToResponse(newresponse, wocontext); newresponse.setHeader("text/css", "content-type"); ! cache.setObjectForKey(newresponse, key); } href = wocontext.directActionURLForActionNamed(Sheet.class.getName() + "/" + key, null); --- 132,143 ---- if(href == null) { String key = styleSheetKey(); ! if(key ==null || cache.objectForKey(key) == null ! ) { WOResponse newresponse = new WOResponse(); super.appendToResponse(newresponse, wocontext); newresponse.setHeader("text/css", "content-type"); ! if(key != null) { ! cache.setObjectForKey(newresponse, key); ! } } href = wocontext.directActionURLForActionNamed(Sheet.class.getName() + "/" + key, null); Index: ERXExpiringCache.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXExpiringCache.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ERXExpiringCache.java 19 Oct 2006 20:30:33 -0000 1.1 --- ERXExpiringCache.java 19 Oct 2006 20:42:51 -0000 1.2 *************** *** 8,11 **** --- 8,12 ---- * */ + //FIXME: the last entry stays in the cache if it is not requested. public class ERXExpiringCache extends NSMutableDictionary { *************** *** 34,40 **** public ERXExpiringCache() { ! this(60 * 100L); } public ERXExpiringCache(long expiryTime) { _expiryTime = expiryTime; --- 35,44 ---- public ERXExpiringCache() { ! this(60); } + /** + * Time in seconds when an enytr expires. + */ public ERXExpiringCache(long expiryTime) { _expiryTime = expiryTime; *************** *** 45,58 **** } ! public void setObjectForKey(Object object, Object key) { Entry entry = new Entry(object); super.setObjectForKey(entry, key); } ! ! public Object objectForKey(Object key) { Entry entry = (Entry) super.objectForKey(key); ! Object o = entry.object(expiryTime()); ! if(o == null) { ! removeObjectForKey(key); } return o; --- 49,65 ---- } ! public synchronized void setObjectForKey(Object object, Object key) { Entry entry = new Entry(object); super.setObjectForKey(entry, key); } ! ! public synchronized Object objectForKey(Object key) { ! Object o = null; Entry entry = (Entry) super.objectForKey(key); ! if(entry != null) { ! o = entry.object(expiryTime()); ! if(o == null) { ! removeObjectForKey(key); ! } } return o; |