public class ParameterList
extends java.lang.Object
mail.mime.encodeparameters
and
mail.mime.decodeparameters
System properties
control whether encoded parameters, as specified by
RFC 2231,
are supported. By default, such encoded parameters are
supported.
Also, in the current implementation, setting the System property
mail.mime.decodeparameters.strict
to "true"
will cause a ParseException
to be thrown for errors
detected while decoding encoded parameters. By default, if any
decoding errors occur, the original (undecoded) string is used.
The current implementation supports the System property
mail.mime.parameters.strict
, which if set to false
when parsing a parameter list allows parameter values
to contain whitespace and other special characters without
being quoted; the parameter value ends at the next semicolon.
If set to true (the default), parameter values are required to conform
to the MIME specification and must be quoted if they contain whitespace
or special characters.
Modifier and Type | Class and Description |
---|---|
private static class |
ParameterList.LiteralValue
A struct to hold a literal value that shouldn't be further encoded.
|
private static class |
ParameterList.MultiValue
A struct for a multi-segment parameter.
|
private static class |
ParameterList.ParamEnum
Map the LinkedHashMap's keySet iterator to an Enumeration.
|
private static class |
ParameterList.ToStringBuffer
A special wrapper for a StringBuffer that keeps track of the
number of characters used in a line, wrapping to a new line
as necessary; for use by the toString method.
|
private static class |
ParameterList.Value
A struct to hold an encoded value.
|
Modifier and Type | Field and Description |
---|---|
private static boolean |
applehack |
private static boolean |
decodeParameters |
private static boolean |
decodeParametersStrict |
private static boolean |
encodeParameters |
private static char[] |
hex |
private java.lang.String |
lastName
MWB 3BView: The name of the last parameter added to the map.
|
private java.util.Map<java.lang.String,java.lang.Object> |
list
The map of name, value pairs.
|
private java.util.Set<java.lang.String> |
multisegmentNames
A set of names for multi-segment parameters that we
haven't processed yet.
|
private static boolean |
parametersStrict |
private java.util.Map<java.lang.String,java.lang.Object> |
slist
A map containing the segments for all not-yet-processed
multi-segment parameters.
|
private static boolean |
splitLongParameters |
private static boolean |
windowshack |
Constructor and Description |
---|
ParameterList()
No-arg Constructor.
|
ParameterList(java.lang.String s)
Constructor that takes a parameter-list string.
|
Modifier and Type | Method and Description |
---|---|
private void |
combineMultisegmentNames(boolean keepConsistentOnFailure)
Iterate through the saved set of names of multi-segment parameters,
for each parameter find all segments stored in the slist map,
decode each segment as needed, combine the segments together into
a single decoded value, and save all segments in a MultiValue object
in the main list indexed by the parameter name.
|
void |
combineSegments()
Normal users of this class will use simple parameter names.
|
private static void |
decodeBytes(java.lang.String value,
java.io.OutputStream os)
Decode the encoded bytes in value and write them to the OutputStream.
|
private static java.lang.String |
decodeBytes(java.lang.String value,
java.lang.String charset)
Decode the encoded bytes in value using the specified charset.
|
private static ParameterList.Value |
encodeValue(java.lang.String value,
java.lang.String charset)
Encode a parameter value, if necessary.
|
private static ParameterList.Value |
extractCharset(java.lang.String value)
Extract charset and encoded value.
|
java.lang.String |
get(java.lang.String name)
Returns the value of the specified parameter.
|
java.util.Enumeration<java.lang.String> |
getNames()
Return an enumeration of the names of all parameters in this
list.
|
private void |
putEncodedName(java.lang.String name,
java.lang.String value)
If the name is an encoded or multi-segment name (or both)
handle it appropriately, storing the appropriate String
or Value object.
|
private static java.lang.String |
quote(java.lang.String value) |
void |
remove(java.lang.String name)
Removes the specified parameter from this ParameterList.
|
void |
set(java.lang.String name,
java.lang.String value)
Set a parameter.
|
void |
set(java.lang.String name,
java.lang.String value,
java.lang.String charset)
Set a parameter.
|
(package private) void |
setLiteral(java.lang.String name,
java.lang.String value)
Package-private method to set a literal value that won't be
further encoded.
|
int |
size()
Return the number of parameters in this list.
|
java.lang.String |
toString()
Convert this ParameterList into a MIME String.
|
java.lang.String |
toString(int used)
Convert this ParameterList into a MIME String.
|
private java.util.Map<java.lang.String,java.lang.Object> list
private java.util.Set<java.lang.String> multisegmentNames
private java.util.Map<java.lang.String,java.lang.Object> slist
private java.lang.String lastName
private static final boolean encodeParameters
private static final boolean decodeParameters
private static final boolean decodeParametersStrict
private static final boolean applehack
private static final boolean windowshack
private static final boolean parametersStrict
private static final boolean splitLongParameters
private static final char[] hex
public ParameterList()
public ParameterList(java.lang.String s) throws ParseException
s
- the parameter-list string.ParseException
- if the parse fails.public void combineSegments()
set(java.lang.String, java.lang.String)
method. After all these segments are added
to this ParameterList, they need to be combined to represent
the logical parameter name and value. This method will combine
all segments of multi-segment names. Normal users should never need to call this method.
private void putEncodedName(java.lang.String name, java.lang.String value) throws ParseException
ParseException
private void combineMultisegmentNames(boolean keepConsistentOnFailure) throws ParseException
ParseException
public int size()
public java.lang.String get(java.lang.String name)
name
- parameter name.null
if the parameter is not
present.public void set(java.lang.String name, java.lang.String value)
name
- name of the parameter.value
- value of the parameter.public void set(java.lang.String name, java.lang.String value, java.lang.String charset)
mail.mime.encodeparameters
System property
is true, and the parameter value is non-ASCII, it will be
encoded with the specified charset, as specified by RFC 2231.name
- name of the parameter.value
- value of the parameter.charset
- charset of the parameter value.void setLiteral(java.lang.String name, java.lang.String value)
name
- name of the parameter.value
- value of the parameter.public void remove(java.lang.String name)
name
- name of the parameter.public java.util.Enumeration<java.lang.String> getNames()
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String toString(int used)
used
- number of character positions already used, in
the field into which the parameter list is to
be inserted.private static java.lang.String quote(java.lang.String value)
private static ParameterList.Value encodeValue(java.lang.String value, java.lang.String charset)
private static ParameterList.Value extractCharset(java.lang.String value) throws ParseException
ParseException
private static java.lang.String decodeBytes(java.lang.String value, java.lang.String charset) throws ParseException, java.io.UnsupportedEncodingException
ParseException
java.io.UnsupportedEncodingException
private static void decodeBytes(java.lang.String value, java.io.OutputStream os) throws ParseException, java.io.IOException
ParseException
java.io.IOException