/projs./apk/htc-holiday-Mail/src/com/htc/android/mail/mimemessage/Address.java

https://github.com/xl8or/- · Java · 426 lines · 361 code · 65 blank · 0 comment · 111 complexity · 33979d840353af98e07327ba46fca524 MD5 · raw file

  1. package com.htc.android.mail.mimemessage;
  2. import android.text.TextUtils;
  3. import android.text.util.Rfc822Token;
  4. import android.text.util.Rfc822Tokenizer;
  5. import com.htc.android.mail.mimemessage.Utility;
  6. import java.util.ArrayList;
  7. import java.util.regex.Pattern;
  8. import org.apache.james.mime4j.codec.EncoderUtil;
  9. import org.apache.james.mime4j.decoder.DecoderUtil;
  10. public class Address {
  11. private static final Address[] EMPTY_ADDRESS_ARRAY = new Address[0];
  12. private static final char LIST_DELIMITER_EMAIL = '\u0001';
  13. private static final char LIST_DELIMITER_PERSONAL = '\u0002';
  14. private static final Pattern REMOVE_OPTIONAL_BRACKET = Pattern.compile("^<?([^>]+)>?$");
  15. private static final Pattern REMOVE_OPTIONAL_DQUOTE = Pattern.compile("^\"?([^\"]*)\"?$");
  16. private static final Pattern UNQUOTE = Pattern.compile("\\\\([\\\\\"])");
  17. String mAddress;
  18. String mPersonal;
  19. public Address(String var1) {
  20. this.setAddress(var1);
  21. }
  22. public Address(String var1, String var2) {
  23. this.setAddress(var1);
  24. this.setPersonal(var2);
  25. }
  26. public static boolean isAllValid(String var0) {
  27. boolean var5;
  28. if(var0 != null && var0.length() > 0) {
  29. Rfc822Token[] var1 = Rfc822Tokenizer.tokenize(var0);
  30. int var2 = 0;
  31. for(int var3 = var1.length; var2 < var3; ++var2) {
  32. String var4 = var1[var2].getAddress();
  33. if(!TextUtils.isEmpty(var4) && !isValidAddress(var4)) {
  34. var5 = false;
  35. return var5;
  36. }
  37. }
  38. }
  39. var5 = true;
  40. return var5;
  41. }
  42. static boolean isValidAddress(String var0) {
  43. int var1 = var0.length();
  44. int var2 = var0.indexOf(64);
  45. int var3 = var0.lastIndexOf(64);
  46. int var4 = var3 + 1;
  47. int var5 = var0.indexOf(46, var4);
  48. int var6 = var0.lastIndexOf(46);
  49. boolean var8;
  50. if(var2 > 0 && var2 == var3 && var3 + 1 < var5 && var5 <= var6) {
  51. int var7 = var1 - 1;
  52. if(var6 < var7) {
  53. var8 = true;
  54. return var8;
  55. }
  56. }
  57. var8 = false;
  58. return var8;
  59. }
  60. static Address[] legacyUnpack(String var0) {
  61. Address[] var1;
  62. if(var0 != null && var0.length() != 0) {
  63. ArrayList var2 = new ArrayList();
  64. int var3 = var0.length();
  65. int var5;
  66. for(int var4 = 0; var4 < var3; var4 = var5 + 1) {
  67. var5 = var0.indexOf(44, var4);
  68. if(var5 == -1) {
  69. ;
  70. }
  71. int var7 = var0.indexOf(59, var4);
  72. String var8 = null;
  73. String var9;
  74. if(var7 != -1 && var7 <= var5) {
  75. var9 = Utility.fastUrlDecode(var0.substring(var4, var7));
  76. int var12 = var7 + 1;
  77. var8 = Utility.fastUrlDecode(var0.substring(var12, var5));
  78. } else {
  79. var9 = Utility.fastUrlDecode(var0.substring(var4, var5));
  80. }
  81. Address var10 = new Address(var9, var8);
  82. var2.add(var10);
  83. }
  84. Address[] var13 = new Address[0];
  85. var1 = (Address[])var2.toArray(var13);
  86. } else {
  87. var1 = new Address[0];
  88. }
  89. return var1;
  90. }
  91. public static String pack(Address[] var0) {
  92. String var1;
  93. if(var0 == null) {
  94. var1 = null;
  95. } else {
  96. int var2 = var0.length;
  97. if(var2 == 0) {
  98. var1 = "";
  99. } else if(var2 == 1 && var0[0].getPersonal() == null) {
  100. var1 = var0[0].getAddress();
  101. } else {
  102. StringBuffer var3 = new StringBuffer();
  103. for(int var4 = 0; var4 < var2; ++var4) {
  104. if(var4 != 0) {
  105. StringBuffer var5 = var3.append('\u0001');
  106. }
  107. Address var6 = var0[var4];
  108. String var7 = var6.getAddress();
  109. var3.append(var7);
  110. String var9 = var6.getPersonal();
  111. if(var9 != null) {
  112. StringBuffer var10 = var3.append('\u0002');
  113. var3.append(var9);
  114. }
  115. }
  116. var1 = var3.toString();
  117. }
  118. }
  119. return var1;
  120. }
  121. public static String packedToHeader(String var0) {
  122. return toHeader(unpack(var0));
  123. }
  124. public static Address[] parse(String var0) {
  125. Address[] var1;
  126. if(var0 != null && var0.length() != 0) {
  127. Rfc822Token[] var2 = Rfc822Tokenizer.tokenize(var0);
  128. ArrayList var3 = new ArrayList();
  129. int var4 = 0;
  130. for(int var5 = var2.length; var4 < var5; ++var4) {
  131. Rfc822Token var6 = var2[var4];
  132. String var7 = var6.getAddress();
  133. if(!TextUtils.isEmpty(var7) && isValidAddress(var7)) {
  134. String var8 = var6.getName();
  135. if(TextUtils.isEmpty(var8)) {
  136. var8 = null;
  137. }
  138. Address var9 = new Address(var7, var8);
  139. var3.add(var9);
  140. }
  141. }
  142. Address[] var11 = new Address[0];
  143. var1 = (Address[])var3.toArray(var11);
  144. } else {
  145. var1 = EMPTY_ADDRESS_ARRAY;
  146. }
  147. return var1;
  148. }
  149. public static String parseAndPack(String var0) {
  150. return pack(parse(var0));
  151. }
  152. public static String toFriendly(Address[] var0) {
  153. String var1;
  154. if(var0 != null && var0.length != 0) {
  155. if(var0.length == 1) {
  156. var1 = var0[0].toFriendly();
  157. } else {
  158. String var2 = var0[0].toFriendly();
  159. StringBuffer var3 = new StringBuffer(var2);
  160. int var4 = 1;
  161. while(true) {
  162. int var5 = var0.length;
  163. if(var4 >= var5) {
  164. var1 = var3.toString();
  165. break;
  166. }
  167. StringBuffer var6 = var3.append(',');
  168. String var7 = var0[var4].toFriendly();
  169. var3.append(var7);
  170. ++var4;
  171. }
  172. }
  173. } else {
  174. var1 = null;
  175. }
  176. return var1;
  177. }
  178. public static String toHeader(Address[] var0) {
  179. String var1;
  180. if(var0 != null && var0.length != 0) {
  181. if(var0.length == 1) {
  182. var1 = var0[0].toHeader();
  183. } else {
  184. String var2 = var0[0].toHeader();
  185. StringBuffer var3 = new StringBuffer(var2);
  186. int var4 = 1;
  187. while(true) {
  188. int var5 = var0.length;
  189. if(var4 >= var5) {
  190. var1 = var3.toString();
  191. break;
  192. }
  193. StringBuffer var6 = var3.append(", ");
  194. String var7 = var0[var4].toHeader();
  195. var3.append(var7);
  196. ++var4;
  197. }
  198. }
  199. } else {
  200. var1 = null;
  201. }
  202. return var1;
  203. }
  204. public static String toString(Address[] var0) {
  205. String var1;
  206. if(var0 != null && var0.length != 0) {
  207. if(var0.length == 1) {
  208. var1 = var0[0].toString();
  209. } else {
  210. String var2 = var0[0].toString();
  211. StringBuffer var3 = new StringBuffer(var2);
  212. int var4 = 1;
  213. while(true) {
  214. int var5 = var0.length;
  215. if(var4 >= var5) {
  216. var1 = var3.toString();
  217. break;
  218. }
  219. StringBuffer var6 = var3.append(',');
  220. String var7 = var0[var4].toString();
  221. var3.append(var7);
  222. ++var4;
  223. }
  224. }
  225. } else {
  226. var1 = null;
  227. }
  228. return var1;
  229. }
  230. public static Address[] unpack(String var0) {
  231. Address[] var1;
  232. if(var0 != null && var0.length() != 0) {
  233. ArrayList var2 = new ArrayList();
  234. int var3 = var0.length();
  235. int var4 = 0;
  236. int var6;
  237. for(int var5 = var0.indexOf(2); var4 < var3; var4 = var6 + 1) {
  238. var6 = var0.indexOf(1, var4);
  239. if(var6 == -1) {
  240. ;
  241. }
  242. Address var9;
  243. if(var5 != -1 && var6 > var5) {
  244. String var11 = var0.substring(var4, var5);
  245. int var12 = var5 + 1;
  246. String var13 = var0.substring(var12, var6);
  247. var9 = new Address(var11, var13);
  248. int var14 = var6 + 1;
  249. var5 = var0.indexOf(2, var14);
  250. } else {
  251. String var8 = var0.substring(var4, var6);
  252. var9 = new Address(var8, (String)null);
  253. }
  254. var2.add(var9);
  255. }
  256. Address[] var15 = EMPTY_ADDRESS_ARRAY;
  257. var1 = (Address[])var2.toArray(var15);
  258. } else {
  259. var1 = EMPTY_ADDRESS_ARRAY;
  260. }
  261. return var1;
  262. }
  263. public static Address unpackFirst(String var0) {
  264. Address[] var1 = unpack(var0);
  265. Address var2;
  266. if(var1.length > 0) {
  267. var2 = var1[0];
  268. } else {
  269. var2 = null;
  270. }
  271. return var2;
  272. }
  273. public static String unpackToString(String var0) {
  274. return toString(unpack(var0));
  275. }
  276. public boolean equals(Object var1) {
  277. boolean var4;
  278. if(var1 instanceof Address) {
  279. String var2 = this.getAddress();
  280. String var3 = ((Address)var1).getAddress();
  281. var4 = var2.equals(var3);
  282. } else {
  283. var4 = super.equals(var1);
  284. }
  285. return var4;
  286. }
  287. public String getAddress() {
  288. return this.mAddress;
  289. }
  290. public String getPersonal() {
  291. return this.mPersonal;
  292. }
  293. public String pack() {
  294. String var1 = this.getAddress();
  295. String var2 = this.getPersonal();
  296. String var3;
  297. if(var2 == null) {
  298. var3 = var1;
  299. } else {
  300. var3 = var1 + '\u0002' + var2;
  301. }
  302. return var3;
  303. }
  304. public void setAddress(String var1) {
  305. String var2 = REMOVE_OPTIONAL_BRACKET.matcher(var1).replaceAll("$1");
  306. this.mAddress = var2;
  307. }
  308. public void setPersonal(String var1) {
  309. if(var1 != null) {
  310. String var2 = REMOVE_OPTIONAL_DQUOTE.matcher(var1).replaceAll("$1");
  311. var1 = DecoderUtil.decodeEncodedWords(UNQUOTE.matcher(var2).replaceAll("$1"));
  312. if(var1.length() == 0) {
  313. var1 = null;
  314. }
  315. }
  316. this.mPersonal = var1;
  317. }
  318. public String toFriendly() {
  319. String var1;
  320. if(this.mPersonal != null && this.mPersonal.length() > 0) {
  321. var1 = this.mPersonal;
  322. } else {
  323. var1 = this.mAddress;
  324. }
  325. return var1;
  326. }
  327. public String toHeader() {
  328. String var5;
  329. if(this.mPersonal != null) {
  330. StringBuilder var1 = new StringBuilder();
  331. String var2 = EncoderUtil.encodeAddressDisplayName(this.mPersonal);
  332. StringBuilder var3 = var1.append(var2).append(" <");
  333. String var4 = this.mAddress;
  334. var5 = var3.append(var4).append(">").toString();
  335. } else {
  336. var5 = this.mAddress;
  337. }
  338. return var5;
  339. }
  340. public String toString() {
  341. String var5;
  342. if(this.mPersonal != null) {
  343. if(this.mPersonal.matches(".*[\\(\\)<>@,;:\\\\\".\\[\\]].*")) {
  344. StringBuilder var1 = new StringBuilder();
  345. String var2 = Utility.quoteString(this.mPersonal);
  346. StringBuilder var3 = var1.append(var2).append(" <");
  347. String var4 = this.mAddress;
  348. var5 = var3.append(var4).append(">").toString();
  349. } else {
  350. StringBuilder var6 = new StringBuilder();
  351. String var7 = this.mPersonal;
  352. StringBuilder var8 = var6.append(var7).append(" <");
  353. String var9 = this.mAddress;
  354. var5 = var8.append(var9).append(">").toString();
  355. }
  356. } else {
  357. var5 = this.mAddress;
  358. }
  359. return var5;
  360. }
  361. }