View Javadoc

1   /* ====================================================================
2    * Copyright (c) 2006 J.T. Beetstra
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining 
5    * a copy of this software and associated documentation files (the 
6    * "Software"), to deal in the Software without restriction, including 
7    * without limitation the rights to use, copy, modify, merge, publish, 
8    * distribute, sublicense, and/or sell copies of the Software, and to 
9    * permit persons to whom the Software is furnished to do so, subject to 
10   * the following conditions:
11   *
12   * The above copyright notice and this permission notice shall be 
13   * included in all copies or substantial portions of the Software.
14   *
15   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
16   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
17   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
18   * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 
19   * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
20   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
21   * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22   * ====================================================================
23   */
24  package com.beetstra.jutf7;
25  
26  
27  /**
28   * <p>The character set specified in RFC 3501 to use for IMAP4rev1 mailbox name encoding.</p>
29   * 
30   * @see <a href="http://tools.ietf.org/html/rfc3501">RFC 3501</a>
31   * @author Jaap Beetstra
32   */
33  class ModifiedUTF7Charset extends UTF7StyleCharset {
34  	private static final String MODIFIED_BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
35  			+ "abcdefghijklmnopqrstuvwxyz" + "0123456789+,";
36  
37  	ModifiedUTF7Charset(String name, String[] aliases) {
38  		super(name, aliases, MODIFIED_BASE64_ALPHABET, true);
39  	}
40  
41  	boolean canEncodeDirectly(char ch) {
42  		if (ch == shift())
43  			return false;
44  		return ch >= 0x20 && ch <= 0x7E;
45  	}
46  
47  	byte shift() {
48  		return '&';
49  	}
50  
51  	byte unshift() {
52  		return '-';
53  	}
54  }