1 21 22 package org.armedbear.j.mail; 23 24 import java.io.BufferedReader ; 25 import java.io.BufferedWriter ; 26 import java.io.IOException ; 27 import java.io.InputStream ; 28 import java.io.InputStreamReader ; 29 import java.io.OutputStream ; 30 import java.io.OutputStreamWriter ; 31 import java.util.Vector ; 32 import org.armedbear.j.Directories; 33 import org.armedbear.j.Editor; 34 import org.armedbear.j.File; 35 import org.armedbear.j.Log; 36 import org.armedbear.j.Utilities; 37 38 public final class AddressBook 39 { 40 private static AddressBook addressBook; 42 43 private static File file; 44 private static File backupFile; 45 46 private Vector entries; 47 48 private AddressBook() 49 { 50 entries = new Vector (); 51 } 52 53 public static AddressBook getGlobalAddressBook() 54 { 55 if (addressBook == null) { 56 file = File.getInstance(Directories.getEditorDirectory(), "addresses"); 57 backupFile = 58 File.getInstance(Directories.getEditorDirectory(), "addresses~"); 59 addressBook = new AddressBook(); 60 InputStream inputStream = null; 61 try { 62 if (file != null && file.isFile()) 63 inputStream = file.getInputStream(); 64 else if (backupFile != null && backupFile.isFile()) { 65 Log.debug("getGlobalAddressBook loading backup file"); 66 inputStream = backupFile.getInputStream(); 67 } 68 if (inputStream != null) { 69 BufferedReader reader = 70 new BufferedReader (new InputStreamReader (inputStream)); 71 String s; 72 while ((s = reader.readLine( )) != null) { 73 AddressBookEntry entry = 74 AddressBookEntry.parseAddressBookEntry(s); 75 if (entry != null) 76 addressBook.addEntry(entry); 77 } 78 reader.close(); 79 } 80 } 81 catch (IOException e) { 82 Log.error(e); 83 } 84 } 85 return addressBook; 86 } 87 88 public static void saveGlobalAddressBook() 89 { 90 try { 91 File tempFile = Utilities.getTempFile(); 92 OutputStream outputStream = tempFile.getOutputStream(); 93 BufferedWriter writer = 94 new BufferedWriter (new OutputStreamWriter (outputStream)); 95 final int limit = addressBook.size(); 96 for (int i = 0; i < limit; i++) { 97 AddressBookEntry entry = addressBook.getEntry(i); 98 writer.write(entry.toString()); 99 writer.write("\n"); 100 } 101 writer.flush(); 102 writer.close(); 103 if (!Utilities.deleteRename(file, backupFile)) { 104 Log.error("saveGlobalAddressBook deleteRename error file = " + 105 file + " backupFile = " + backupFile); 106 } 107 if (!Utilities.deleteRename(tempFile, file)) { 108 Log.error("saveGlobalAddressBook deleteRename error tempFile = " + 109 tempFile + " file = " + file); 110 } 111 } 112 catch (IOException e) { 113 Log.error(e); 114 } 115 } 116 117 public final int size() 118 { 119 return entries.size(); 120 } 121 122 public void maybeAddMailAddress(MailAddress a) 123 { 124 String address = AddressBookEntry.canonicalizeAddress(a.getAddress()); 125 if (address == null) 127 return; 128 String personal = 129 AddressBookEntry.canonicalizePersonal(a.getPersonal()); 130 for (int i = entries.size()-1; i >= 0; i--) { 131 AddressBookEntry entry = getEntry(i); 132 if (address.equalsIgnoreCase(entry.getAddress())) { 133 if (Utilities.isLowerCase(address)) 135 entry.setAddress(address); 136 if (personal == null) 137 return; if (entry.getPersonal() == null) { 139 entry.setPersonal(personal); 141 return; 142 } 143 if (entry.getPersonal().equals(personal)) 144 return; 145 } 146 } 147 Log.debug("calling addEntry a.getAddress() = |" + a.getAddress() + "|"); 148 Log.debug("calling addEntry a.getPersonal() = |" + a.getPersonal() + "|"); 149 Log.debug("calling addEntry personal = |" + personal + "| address = |" + address + "|"); 150 addEntry(new AddressBookEntry(personal, address)); 151 } 152 153 public void promote(MailAddress a) 154 { 155 String address = AddressBookEntry.canonicalizeAddress(a.getAddress()); 156 if (address == null) 158 return; 159 String personal = 160 AddressBookEntry.canonicalizePersonal(a.getPersonal()); 161 AddressBookEntry toBePromoted = new AddressBookEntry(personal, address); 162 for (int i = entries.size()-1; i >= 0; i--) { 163 if (toBePromoted.equals(getEntry(i))) { 164 entries.removeElementAt(i); 165 entries.insertElementAt(toBePromoted, 0); 166 return; 167 } 168 } 169 } 170 171 private final void addEntry(AddressBookEntry entry) 172 { 173 entries.add(entry); 174 } 175 176 public final AddressBookEntry getEntry(int i) 177 { 178 return (AddressBookEntry) entries.get(i); 179 } 180 } 181 | Popular Tags |