Update of /cvsroot/j-wings/wings/src/org/wings/externalizer
In directory sc8-pr-cvs1:/tmp/cvs-serv7255/externalizer
Modified Files:
AbstractExternalizeManager.java
Log Message:
o fix bug with session Encoding (thanx to Hans Näther)
Index: AbstractExternalizeManager.java
===================================================================
RCS file: /cvsroot/j-wings/wings/src/org/wings/externalizer/AbstractExternalizeManager.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** AbstractExternalizeManager.java 14 Jul 2003 10:29:42 -0000 1.10
--- AbstractExternalizeManager.java 16 Jan 2004 11:35:46 -0000 1.11
***************
*** 15,56 ****
package org.wings.externalizer;
import java.io.IOException;
- import java.io.OutputStream;
- import java.util.Map;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Collections;
import java.util.Collection;
import java.util.Date;
! import java.util.logging.*;
!
! import javax.servlet.http.HttpServletResponse;
! import javax.servlet.ServletOutputStream;
!
! import org.wings.RequestURL;
! import org.wings.util.StringUtil;
! import org.wings.io.Device;
/**
! *
*
* @author <a href="mailto:haaf@... Haaf</a>
* @version $Revision$
*/
! public abstract class AbstractExternalizeManager
! {
protected static Logger logger = Logger.getLogger("org.wings.externalizer");
/**
* The identifier generated, if the {@link ExternalizeManager} did not find
! * an apropriate {@link Externalizer}.
*/
public static final String NOT_FOUND_IDENTIFIER = "0";
!
/*---------------------------------------------------------------
* The externalized ID is just a counter start starts with zero. This
* happens with each start of the server, and thus generates the same
! * ID if we restart the application (especially, if we are in the
* development phase). Since we externalize the resource with a long
* caching timeout, the browser might not refetch a resource externalized
--- 15,52 ----
package org.wings.externalizer;
+ import org.wings.io.Device;
+ import org.wings.util.StringUtil;
+
+ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collection;
+ import java.util.Collections;
import java.util.Date;
! import java.util.HashMap;
! import java.util.Iterator;
! import java.util.Map;
! import java.util.logging.Level;
! import java.util.logging.Logger;
/**
! *
*
* @author <a href="mailto:haaf@... Haaf</a>
* @version $Revision$
*/
! public abstract class AbstractExternalizeManager {
protected static Logger logger = Logger.getLogger("org.wings.externalizer");
/**
* The identifier generated, if the {@link ExternalizeManager} did not find
! * an apropriate {@link Externalizer}.
*/
public static final String NOT_FOUND_IDENTIFIER = "0";
!
/*---------------------------------------------------------------
* The externalized ID is just a counter start starts with zero. This
* happens with each start of the server, and thus generates the same
! * ID if we restart the application (especially, if we are in the
* development phase). Since we externalize the resource with a long
* caching timeout, the browser might not refetch a resource externalized
***************
*** 58,62 ****
* it already.
* Thus, we need a unique prefix for each externalized resource, that
! * changes with each start of the server.
* These static variables create a new ID every UNIQUE_TIMESLICE, which
* means, that, if we use a 2-character prefix, can offer the browser
--- 54,58 ----
* it already.
* Thus, we need a unique prefix for each externalized resource, that
! * changes with each start of the server.
* These static variables create a new ID every UNIQUE_TIMESLICE, which
* means, that, if we use a 2-character prefix, can offer the browser
***************
*** 74,78 ****
*/
public final long FINAL_EXPIRES =
! (StringUtil.MAX_RADIX*StringUtil.MAX_RADIX - 1) * UNIQUE_TIMESLICE;
/**
--- 70,74 ----
*/
public final long FINAL_EXPIRES =
! (StringUtil.MAX_RADIX * StringUtil.MAX_RADIX - 1) * UNIQUE_TIMESLICE;
/**
***************
*** 80,84 ****
*/
protected final long PREFIX_TIMESLICE =
! ((System.currentTimeMillis()/1000)%FINAL_EXPIRES)/UNIQUE_TIMESLICE;
/**
--- 76,80 ----
*/
protected final long PREFIX_TIMESLICE =
! ((System.currentTimeMillis() / 1000) % FINAL_EXPIRES) / UNIQUE_TIMESLICE;
/**
***************
*** 100,104 ****
* for an externalized object with the request flag on, the externalized
* object is removed from the {@link ExternalizeManager} after one request
! * of the object.
*/
public static final int REQUEST = 1;
--- 96,100 ----
* for an externalized object with the request flag on, the externalized
* object is removed from the {@link ExternalizeManager} after one request
! * of the object.
*/
public static final int REQUEST = 1;
***************
*** 108,112 ****
* object only available to requests within the session which created the
* object. The object is not accessible anymore after the session is
! * destroyed (it is garbage collected after the session is garbage
* collected)
*/
--- 104,108 ----
* object only available to requests within the session which created the
* object. The object is not accessible anymore after the session is
! * destroyed (it is garbage collected after the session is garbage
* collected)
*/
***************
*** 127,131 ****
/**
* To search for an already externalized object. This performs way better
! * than search in the value set of the
* identifier-{@link ExternalizedResource} map.
*/
--- 123,127 ----
/**
* To search for an already externalized object. This performs way better
! * than search in the value set of the
* identifier-{@link ExternalizedResource} map.
*/
***************
*** 135,139 ****
* To support Session local externalizing, the {@link ExternalizeManager}
* needs to encode the session identifier of the servlet container in the
! * URL of the externalized object. This is set in the constructor
* and should work (I hope so) with all servlet containers.
*/
--- 131,135 ----
* To support Session local externalizing, the {@link ExternalizeManager}
* needs to encode the session identifier of the servlet container in the
! * URL of the externalized object. This is set in the constructor
* and should work (I hope so) with all servlet containers.
*/
***************
*** 147,151 ****
logger.info("use prefix " + PREFIX_TIMESLICE_STRING);
! reverseExternalized = Collections.synchronizedMap( new HashMap() );
}
--- 143,147 ----
logger.info("use prefix " + PREFIX_TIMESLICE_STRING);
! reverseExternalized = Collections.synchronizedMap(new HashMap());
}
***************
*** 169,173 ****
return PREFIX_TIMESLICE_STRING;
}
!
/**
*
--- 165,169 ----
return PREFIX_TIMESLICE_STRING;
}
!
/**
*
***************
*** 178,190 ****
/**
! * store the {@link ExternalizedResource} in a map.
! * The {@link ExternalizedResource} should later on accessible by the
* identifier {@link #getExternalizedResource}, {@link #removeExternalizedResource}
*/
protected abstract void storeExternalizedResource(String identifier,
! ExternalizedResource extInfo);
/**
! * get the {@link ExternalizedResource} by identifier.
* @return null, if not found!!
*/
--- 174,186 ----
/**
! * store the {@link ExternalizedResource} in a map.
! * The {@link ExternalizedResource} should later on accessible by the
* identifier {@link #getExternalizedResource}, {@link #removeExternalizedResource}
*/
protected abstract void storeExternalizedResource(String identifier,
! ExternalizedResource extInfo);
/**
! * get the {@link ExternalizedResource} by identifier.
* @return null, if not found!!
*/
***************
*** 192,196 ****
/**
! * removes the {@link ExternalizedResource} by identifier.
*/
protected abstract void removeExternalizedResource(String identifier);
--- 188,192 ----
/**
! * removes the {@link ExternalizedResource} by identifier.
*/
protected abstract void removeExternalizedResource(String identifier);
***************
*** 198,208 ****
/**
* externalizes (make a java object available for a browser) an object with
! * the given {@link Externalizer}. The object is externalized in the
* {@link #SESSION} scope.
*
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer)
! {
return externalize(obj, externalizer, SESSION);
}
--- 194,203 ----
/**
* externalizes (make a java object available for a browser) an object with
! * the given {@link Externalizer}. The object is externalized in the
* {@link #SESSION} scope.
*
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer) {
return externalize(obj, externalizer, SESSION);
}
***************
*** 212,222 ****
* the given {@link Externalizer}. If the given headers are !=null the
* headers overwrite the headers from the {@link Externalizer}.
! * The object is externalized in the
* {@link #SESSION} scope.
*
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer, Collection headers)
! {
return externalize(obj, externalizer, headers, SESSION);
}
--- 207,216 ----
* the given {@link Externalizer}. If the given headers are !=null the
* headers overwrite the headers from the {@link Externalizer}.
! * The object is externalized in the
* {@link #SESSION} scope.
*
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer, Collection headers) {
return externalize(obj, externalizer, headers, SESSION);
}
***************
*** 235,241 ****
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer, int flags)
! {
! if ( obj == null || externalizer == null )
throw new IllegalStateException("no externalizer");
--- 229,234 ----
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer, int flags) {
! if (obj == null || externalizer == null)
throw new IllegalStateException("no externalizer");
***************
*** 247,251 ****
* externalizes (make a java object available for a browser) an object with
* the given {@link Externalizer}. If the given headers are !=null the
! * headers overwrite the headers from the {@link Externalizer}.
* Valid flags are (this may change, look
* also in the static variable section)
--- 240,244 ----
* externalizes (make a java object available for a browser) an object with
* the given {@link Externalizer}. If the given headers are !=null the
! * headers overwrite the headers from the {@link Externalizer}.
* Valid flags are (this may change, look
* also in the static variable section)
***************
*** 259,265 ****
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer,
! Collection headers, int flags)
! {
if (obj == null || externalizer == null)
throw new IllegalStateException("no externalizer");
--- 252,257 ----
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer,
! Collection headers, int flags) {
if (obj == null || externalizer == null)
throw new IllegalStateException("no externalizer");
***************
*** 271,285 ****
/**
* externalizes (make a java object available for a browser) an object with
! * the given {@link Externalizer}.
! * If the mimeType!=null, mimeType overwrites the mimeType of the
* {@link Externalizer}.
! * The object is externalized in the
* {@link #SESSION} scope.
*
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer,
! String mimeType)
! {
return externalize(obj, externalizer, mimeType, null, SESSION);
}
--- 263,276 ----
/**
* externalizes (make a java object available for a browser) an object with
! * the given {@link Externalizer}.
! * If the mimeType!=null, mimeType overwrites the mimeType of the
* {@link Externalizer}.
! * The object is externalized in the
* {@link #SESSION} scope.
*
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer,
! String mimeType) {
return externalize(obj, externalizer, mimeType, null, SESSION);
}
***************
*** 287,301 ****
/**
* externalizes (make a java object available for a browser) an object with
! * the given {@link Externalizer}.
! * If the mimeType!=null, mimeType overwrites the mimeType of the
* {@link Externalizer}.
* If the given headers are !=null the
! * headers overwrite the headers from the {@link Externalizer}.
*
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer,
! String mimeType, Collection headers)
! {
return externalize(obj, externalizer, mimeType, headers, SESSION);
}
--- 278,291 ----
/**
* externalizes (make a java object available for a browser) an object with
! * the given {@link Externalizer}.
! * If the mimeType!=null, mimeType overwrites the mimeType of the
* {@link Externalizer}.
* If the given headers are !=null the
! * headers overwrite the headers from the {@link Externalizer}.
*
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer,
! String mimeType, Collection headers) {
return externalize(obj, externalizer, mimeType, headers, SESSION);
}
***************
*** 303,311 ****
/**
* externalizes (make a java object available for a browser) an object with
! * the given {@link Externalizer}.
! * If the mimeType!=null, mimeType overwrites the mimeType of the
* {@link Externalizer}.
* If the given headers are !=null the
! * headers overwrite the headers from the {@link Externalizer}.
* Valid flags are (this may change, look
* also in the static variable section)
--- 293,301 ----
/**
* externalizes (make a java object available for a browser) an object with
! * the given {@link Externalizer}.
! * If the mimeType!=null, mimeType overwrites the mimeType of the
* {@link Externalizer}.
* If the given headers are !=null the
! * headers overwrite the headers from the {@link Externalizer}.
* Valid flags are (this may change, look
* also in the static variable section)
***************
*** 319,332 ****
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer,
! String mimeType, Collection headers, int flags)
! {
! if ( externalizer == null )
throw new IllegalStateException("no externalizer");
! if ( mimeType == null )
mimeType = externalizer.getMimeType(obj);
! if ( headers == null )
headers = externalizer.getHeaders(obj);
--- 309,321 ----
* @return a URL for accessing the object relative to the base URL.
*/
! public String externalize(Object obj, Externalizer externalizer,
! String mimeType, Collection headers, int flags) {
! if (externalizer == null)
throw new IllegalStateException("no externalizer");
! if (mimeType == null)
mimeType = externalizer.getMimeType(obj);
! if (headers == null)
headers = externalizer.getHeaders(obj);
***************
*** 334,338 ****
mimeType, headers, flags);
! if ( (flags & GLOBAL) > 0 ) {
// session encoding is not necessary here
return SystemExternalizeManager.getSharedInstance().externalize(extInfo);
--- 323,327 ----
mimeType, headers, flags);
! if ((flags & GLOBAL) > 0) {
// session encoding is not necessary here
return SystemExternalizeManager.getSharedInstance().externalize(extInfo);
***************
*** 345,359 ****
/**
* externalizes (make a java object available for a browser) the object in
! * extInfo.
*
* @return a URL for accessing the externalized object relative to the base URL.
*/
public String externalize(ExternalizedResource extInfo) {
! String identifier = (String)reverseExternalized.get(extInfo);
if (identifier == null) {
identifier = createIdentifier();
extInfo.setId(identifier);
!
storeExternalizedResource(identifier, extInfo);
reverseExternalized.put(extInfo, identifier);
--- 334,348 ----
/**
* externalizes (make a java object available for a browser) the object in
! * extInfo.
*
* @return a URL for accessing the externalized object relative to the base URL.
*/
public String externalize(ExternalizedResource extInfo) {
! String identifier = (String) reverseExternalized.get(extInfo);
if (identifier == null) {
identifier = createIdentifier();
extInfo.setId(identifier);
!
storeExternalizedResource(identifier, extInfo);
reverseExternalized.put(extInfo, identifier);
***************
*** 370,383 ****
/**
* externalizes (make a java object available for a browser) the object in
! * extInfo.
*
* @return a URL for accessing the externalized object relative to the base URL.
*/
! public String getId(String url)
! {
! String result = url.substring(0, url.length()-sessionEncoding.length());
! int pos = result.lastIndexOf(".");
! if (pos >= 0)
! result = result.substring(0, pos);
return result;
}
--- 359,373 ----
/**
* externalizes (make a java object available for a browser) the object in
! * extInfo.
*
* @return a URL for accessing the externalized object relative to the base URL.
*/
! public String getId(String url) {
! String result;
! if (url.charAt(0) == '-') {
! result = url;
! } else {
! result = url.substring(0, url.length() - sessionEncoding.length());
! }
return result;
}
***************
*** 392,397 ****
Device out) throws IOException {
ExternalizedResource extInfo = getExternalizedResource(identifier);
!
! if ( extInfo == null ) {
logger.warning("identifier " + identifier + " not found");
response.sendError(HttpServletResponse.SC_NOT_FOUND);
--- 382,387 ----
Device out) throws IOException {
ExternalizedResource extInfo = getExternalizedResource(identifier);
!
! if (extInfo == null) {
logger.warning("identifier " + identifier + " not found");
response.sendError(HttpServletResponse.SC_NOT_FOUND);
***************
*** 403,408 ****
public void deliver(ExternalizedResource extInfo, HttpServletResponse response,
Device out)
! throws IOException
! {
/* FIXME: re-implement.
if ( extInfo.deliverOnce() ) {
--- 393,397 ----
public void deliver(ExternalizedResource extInfo, HttpServletResponse response,
Device out)
! throws IOException {
/* FIXME: re-implement.
if ( extInfo.deliverOnce() ) {
***************
*** 412,416 ****
response.setContentType(extInfo.getMimeType());
!
// FIXME find out, if this is correct: if the content length
// is not size preserving (like a gzip-device), then we must not
--- 401,405 ----
response.setContentType(extInfo.getMimeType());
!
// FIXME find out, if this is correct: if the content length
// is not size preserving (like a gzip-device), then we must not
***************
*** 419,423 ****
int resourceLen = extInfo
.getExternalizer().getLength(extInfo.getObject());
! if ( resourceLen > 0 ) {
logger.log(Level.FINER, extInfo.getMimeType() + ": " + resourceLen);
//response.setContentLength( resourceLen );
--- 408,412 ----
int resourceLen = extInfo
.getExternalizer().getLength(extInfo.getObject());
! if (resourceLen > 0) {
logger.log(Level.FINER, extInfo.getMimeType() + ": " + resourceLen);
//response.setContentLength( resourceLen );
***************
*** 426,443 ****
Collection headers = extInfo.getHeaders();
! if ( headers != null ) {
! for ( Iterator it = headers.iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry) it.next();
! if ( entry.getValue() instanceof String ) {
! response.addHeader( (String) entry.getKey(),
! (String) entry.getValue());
! } else if ( entry.getValue() instanceof Date ) {
! response.addDateHeader( (String) entry.getKey(),
! ((Date) entry.getValue()).getTime());
!
! } else if ( entry.getValue() instanceof Integer ) {
! response.addIntHeader( (String) entry.getKey(),
! ((Integer) entry.getValue()).intValue());
!
} // end of if ()
}
--- 415,432 ----
Collection headers = extInfo.getHeaders();
! if (headers != null) {
! for (Iterator it = headers.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
! if (entry.getValue() instanceof String) {
! response.addHeader((String) entry.getKey(),
! (String) entry.getValue());
! } else if (entry.getValue() instanceof Date) {
! response.addDateHeader((String) entry.getKey(),
! ((Date) entry.getValue()).getTime());
!
! } else if (entry.getValue() instanceof Integer) {
! response.addIntHeader((String) entry.getKey(),
! ((Integer) entry.getValue()).intValue());
!
} // end of if ()
}
|