KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openlaszlo > iv > flash > cache > XMLCache


1 /*
2  * $Id: XMLCache.java,v 1.3 2002/03/22 04:55:07 skavish Exp $
3  *
4  * ==========================================================================
5  *
6  * The JGenerator Software License, Version 1.0
7  *
8  * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by Dmitry Skavish
24  * (skavish@usa.net, http://www.flashgap.com/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The name "The JGenerator" must not be used to endorse or promote
29  * products derived from this software without prior written permission.
30  * For written permission, please contact skavish@usa.net.
31  *
32  * 5. Products derived from this software may not be called "The JGenerator"
33  * nor may "The JGenerator" appear in their names without prior written
34  * permission of Dmitry Skavish.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
40  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  *
49  */

50
51 package org.openlaszlo.iv.flash.cache;
52
53 import org.openlaszlo.iv.flash.api.*;
54 import org.openlaszlo.iv.flash.util.*;
55 import org.openlaszlo.iv.flash.url.*;
56 import java.util.*;
57 import java.io.*;
58
59 import org.w3c.dom.Document JavaDoc;
60
61 /**
62  * Cache for parsed XML files
63  */

64 public class XMLCache extends GenericCache {
65
66     private static XMLCache instance = new XMLCache();
67
68     private XMLCache() {
69     }
70
71     public static XMLCache getInstance() {
72         return instance;
73     }
74
75     public static CacheSettings getSettings() {
76         return instance.getMySettings();
77     }
78
79     /**
80      * Get cached Document
81      *
82      * @param key cache key
83      */

84      public static Document JavaDoc getXMLDocument( IVUrl url ) {
85         return getXMLDocument( url.getName() );
86      }
87
88     /**
89      * Get cached Document
90      *
91      * @param key cache key
92      */

93      public static Document JavaDoc getXMLDocument( String JavaDoc key ) {
94         CacheItem item = instance.getItem( key );
95         if( item == null ) return null;
96         return (Document JavaDoc) item.getObject();
97      }
98
99     /**
100      * Add Document to cache
101      *
102      * @param url url of xml doc to cache
103      * @param doc xml document
104      */

105     public static void addXMLDocument( IVUrl url, Document JavaDoc doc ) {
106         // check whether we need to cache or not
107
long lifespan = getSettings().getDefaultExpire();
108         if( !getSettings().isForce() ) {
109             String JavaDoc gxcStr = url.getParameter( "gxc" );
110             if( gxcStr != null ) {
111                 if( !Util.toBool(gxcStr, false) ) return;
112                 String JavaDoc v = url.getParameter( "gxe" );
113                 if( v != null ) {
114                     lifespan = Util.toLong( v, -1L )*1000L;
115                 }
116             } else {
117                 return;
118             }
119         }
120         long now = System.currentTimeMillis();
121         if( lifespan <= 0 ) {
122             lifespan = Long.MAX_VALUE-now;
123         }
124         long expire = now + lifespan;
125         CacheItem item = new XMLCacheItem( url, doc, now, expire, getSettings().isCheckModifiedSince() );
126         instance.addItem( item );
127     }
128
129     protected boolean isModified( CacheItem item ) {
130         if( !getSettings().isCheckModifiedSince() ) return super.isModified( item );
131         XMLCacheItem it = (XMLCacheItem) item;
132         it.getUrl().refresh();
133         return it.lastModified() != it.getUrl().lastModified();
134     }
135
136     public static class XMLCacheItem extends CacheItem {
137         private long lastModified = 0;
138         private IVUrl url;
139
140         public XMLCacheItem( IVUrl url, Document JavaDoc doc, long cacheTime, long expireAfter, boolean isCheckModifiedSince ) {
141             super( url.getName(), doc, 1, cacheTime, expireAfter );
142             this.url = url;
143             if( isCheckModifiedSince ) {
144                 this.lastModified = url.lastModified();
145             }
146         }
147
148         public IVUrl getUrl() { return url; }
149         public long lastModified() { return lastModified; }
150     }
151
152 }
153
Popular Tags