You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/05/26 19:19:58 UTC

cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util/buf MessageBytes.java

costin      01/05/26 10:19:58

  Modified:    src/share/org/apache/tomcat/util/buf MessageBytes.java
  Log:
  Added comments about deprecation of int/date cache.
  
  Added duplicate() method that will copy another buffer ( will be used to
  save the un-processed url, query string for servlet use )
  
  Revision  Changes    Path
  1.2       +114 -86   jakarta-tomcat/src/share/org/apache/tomcat/util/buf/MessageBytes.java
  
  Index: MessageBytes.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/buf/MessageBytes.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MessageBytes.java	2001/02/20 03:12:13	1.1
  +++ MessageBytes.java	2001/05/26 17:19:58	1.2
  @@ -62,10 +62,8 @@
   import java.text.*;
   import java.util.*;
   import java.io.Serializable;
  +import java.io.IOException;
   
  -// XXX XXX Need StringBuffer support !
  -
  -
   /**
    * This class is used to represent a subarray of bytes in an HTTP message.
    *
  @@ -74,8 +72,6 @@
    * @author Costin Manolache
    */
   public final class MessageBytes implements Cloneable, Serializable {
  -    public static final String DEFAULT_CHAR_ENCODING="8859_1";
  -    
       // primary type ( whatever is set as original value )
       private int type = T_NULL;
       
  @@ -97,14 +93,6 @@
       private String strValue;
       private boolean hasStrValue=false;
   
  -    // efficient int and date
  -    // XXX used only for headers - shouldn't be
  -    // stored here.
  -    private int intValue;
  -    private boolean hasIntValue=false;
  -    private Date dateValue;
  -    private boolean hasDateValue=false;
  -    
       /**
        * Creates a new, uninitialized MessageBytes object.
        */
  @@ -180,31 +168,6 @@
   	type=T_STR;
       }
   
  -    public void setTime(long t) {
  -	// XXX replace it with a byte[] tool
  -	recycle();
  -	if( dateValue==null)
  -	    dateValue=new Date(t);
  -	else
  -	    dateValue.setTime(t);
  -	strValue=DateTool.rfc1123Format.format(dateValue);
  -	hasStrValue=true;
  -	hasDateValue=true;
  -	type=T_STR;   
  -    }
  -
  -    /** Set the buffer to the representation of an int 
  -     */
  -    public void setInt(int i) {
  -	// XXX replace it with a byte[] tool
  -	recycle();
  -	strValue=String.valueOf( i );
  -	intValue=i;
  -	hasIntValue=true;
  -	hasStrValue=true;
  -    	type=T_STR;
  -    }
  -
       // -------------------- Conversion and getters --------------------
       public String toString() {
   	if( hasStrValue ) return strValue;
  @@ -220,42 +183,7 @@
   	}
   	return null;
       }
  -    
  -    public long getTime()
  -    {
  -     	if( hasDateValue ) {
  -	    if( dateValue==null) return -1;
  -	    return dateValue.getTime();
  -     	}
  -	
  -     	long l=DateTool.parseDate( this );
  -     	if( dateValue==null)
  -     	    dateValue=new Date(l);
  -     	else
  -     	    dateValue.setTime(l);
  -     	hasDateValue=true;
  -     	return l;
  -    }
  -    
   
  -    /** Convert the buffer to an int, cache the value
  -     */ 
  -    public int getInt() 
  -    {
  -	if( hasIntValue )
  -	    return intValue;
  -	
  -	switch (type) {
  -	case T_BYTES:
  -	    intValue=byteC.getInt();
  -	    break;
  -	default:
  -	    intValue=Integer.parseInt(toString());
  -	}
  -	hasIntValue=true;
  -	return intValue;
  -    }
  -    
       //----------------------------------------
       public int getType() {
   	return type;
  @@ -272,6 +200,10 @@
   	return charC;
       }
   
  +    public String getString() {
  +	return strValue;
  +    }
  +
       // Convert to bytes !!!
       public void toBytes() {
   	// XXX todo - not used 
  @@ -300,6 +232,7 @@
   	if(type==T_STR)
   	    return strValue.length();
   	toString();
  +	if( strValue==null ) return 0;
   	return strValue.length();
       }
   
  @@ -345,19 +278,6 @@
   	}
       }
   
  -    public int unescapeURL() {
  -	switch (type) {
  -	case T_STR:
  -	    if( strValue==null ) return 0;
  -	    strValue=CharChunk.unescapeURL( strValue );
  -	case T_CHARS:
  -	    return charC.unescapeURL();
  -	case T_BYTES:
  -	    return byteC.unescapeURL();
  -	}
  -	return 0;
  -    }
  -    
       public boolean equals(MessageBytes mb) {
   	switch (type) {
   	case T_STR:
  @@ -522,5 +442,113 @@
   	}
       }
   
  +    /** Copy the src into this MessageBytes, allocating more space if
  +     *  needed
  +     */
  +    public void duplicate( MessageBytes src ) throws IOException
  +    {
  +	switch( src.getType() ) {
  +	case MessageBytes.T_BYTES:
  +	    type=T_BYTES;
  +	    ByteChunk bc=src.getByteChunk();
  +	    byteC.allocate( bc.getLength(), -1 );
  +	    byteC.append( bc );
  +	    break;
  +	case MessageBytes.T_CHARS:
  +	    type=T_CHARS;
  +	    CharChunk cc=src.getCharChunk();
  +	    charC.allocate( cc.getLength(), -1 );
  +	    charC.append( cc );
  +	    break;
  +	case MessageBytes.T_STR:
  +	    type=T_STR;
  +	    String sc=src.getString();
  +	    this.setString( sc );
  +	    break;
  +	}
  +    }
   
  +    // -------------------- Deprecated code --------------------
  +    // efficient int and date
  +    // XXX used only for headers - shouldn't be
  +    // stored here.
  +    private int intValue;
  +    private boolean hasIntValue=false;
  +    private Date dateValue;
  +    private boolean hasDateValue=false;
  +    
  +    /**
  +     *  @deprecated The buffer are general purpose, caching for headers should
  +     *  be done in headers
  +     */
  +    public void setTime(long t) {
  +	// XXX replace it with a byte[] tool
  +	recycle();
  +	if( dateValue==null)
  +	    dateValue=new Date(t);
  +	else
  +	    dateValue.setTime(t);
  +	strValue=DateTool.format1123(dateValue);
  +	hasStrValue=true;
  +	hasDateValue=true;
  +	type=T_STR;   
  +    }
  +
  +    /** Set the buffer to the representation of an int
  +     *  @deprecated The buffer are general purpose, caching for headers should
  +     *  be done in headers
  +     */
  +    public void setInt(int i) {
  +	// XXX replace it with a byte[] tool
  +	recycle();
  +	strValue=String.valueOf( i );
  +	intValue=i;
  +	hasIntValue=true;
  +	hasStrValue=true;
  +    	type=T_STR;
  +    }
  +
  +
  +    /**
  +     *  @deprecated The buffer are general purpose, caching for headers should
  +     *  be done in headers
  +     */
  +    public  long getTime()
  +    {
  +     	if( hasDateValue ) {
  +	    if( dateValue==null) return -1;
  +	    return dateValue.getTime();
  +     	}
  +	
  +     	long l=DateTool.parseDate( this );
  +     	if( dateValue==null)
  +     	    dateValue=new Date(l);
  +     	else
  +     	    dateValue.setTime(l);
  +     	hasDateValue=true;
  +     	return l;
  +    }
  +    
  +
  +    // Used for headers conversion
  +    /** Convert the buffer to an int, cache the value
  +     *  @deprecated The buffer are general purpose, caching for headers should
  +     *  be done in headers
  +     */ 
  +    public int getInt() 
  +    {
  +	if( hasIntValue )
  +	    return intValue;
  +	
  +	switch (type) {
  +	case T_BYTES:
  +	    intValue=byteC.getInt();
  +	    break;
  +	default:
  +	    intValue=Integer.parseInt(toString());
  +	}
  +	hasIntValue=true;
  +	return intValue;
  +    }
  +    
   }