1 21 22 package org.armedbear.j; 23 24 import java.io.IOException ; 25 import java.io.InputStream ; 26 import java.io.OutputStream ; 27 import java.util.Properties ; 28 import org.armedbear.j.mail.ImapMailbox; 29 import org.armedbear.j.mail.LocalMailbox; 30 import org.armedbear.j.mail.PopMailbox; 31 32 public final class Aliases implements PreferencesChangeListener 33 { 34 private static Properties systemAliases; 35 36 private final File file; 37 38 private Properties userAliases; 39 40 public Aliases() 41 { 42 file = File.getInstance(Directories.getEditorDirectory(), "aliases"); 43 if (systemAliases == null) { 45 systemAliases = new Properties (); 46 systemAliases.setProperty("prefs", 47 Preferences.getPreferencesFile().netPath()); 48 systemAliases.setProperty("aliases", file.netPath()); 49 String inbox = 50 Editor.preferences().getStringProperty(Property.INBOX); 51 if (inbox != null) 52 systemAliases.setProperty("inbox", inbox); 53 systemAliases.setProperty("drafts", 54 "mailbox:".concat(Directories.getDraftsFolder().netPath())); 55 } 56 Editor.preferences().addPreferencesChangeListener(this); 59 loadUserAliases(); 61 } 62 63 public final void reload() 64 { 65 loadUserAliases(); 66 } 67 68 public final File getFile() 69 { 70 return file; 71 } 72 73 public static final boolean isSystemAlias(String alias) 74 { 75 return systemAliases.containsKey(alias); 76 } 77 78 public final String get(String alias) 79 { 80 String value = systemAliases.getProperty(alias); 82 if (value != null) 83 return value; 84 return userAliases.getProperty(alias); 86 } 87 88 public final void setAlias(String alias, String value) 89 { 90 if (isSystemAlias(alias)) 92 return; 93 userAliases.setProperty(alias, value); 94 save(); 95 } 96 97 public void setAliasForBuffer(String alias, Buffer buffer) 99 { 100 if (isSystemAlias(alias)) 102 return; 103 String value = null; 104 if (buffer instanceof ImapMailbox) 105 value = ((ImapMailbox) buffer).getUrl().toString(); 106 else if (buffer instanceof PopMailbox) 107 value = ((PopMailbox) buffer).getUrl().toString(); 108 else if (buffer instanceof LocalMailbox) 109 value = "mailbox:" + ((LocalMailbox) buffer).getMailboxFile().netPath(); 110 else if (buffer.getFile() != null) 111 value = buffer.getFile().netPath(); 112 if (value != null) 113 setAlias(alias, value); 114 } 115 116 public final void remove(String alias) 117 { 118 if (userAliases.remove(alias) != null) 119 save(); 120 } 121 122 private void loadUserAliases() 123 { 124 userAliases = new Properties (); 125 if (file.isFile()) { 126 try { 127 InputStream inputStream = file.getInputStream(); 128 userAliases.load(inputStream); 129 inputStream.close(); 130 } 131 catch (IOException e) { 132 Log.error(e); 133 } 134 } 135 } 136 137 private void save() 138 { 139 try { 140 OutputStream outputStream = file.getOutputStream(); 141 userAliases.store(outputStream, null); 142 outputStream.close(); 143 } 144 catch (IOException e) { 145 Log.error(e); 146 } 147 } 148 149 public void preferencesChanged() 150 { 151 String inbox = Editor.preferences().getStringProperty(Property.INBOX); 152 if (inbox != null) 153 systemAliases.setProperty("inbox", inbox); 154 else 155 systemAliases.remove("inbox"); 156 } 157 } 158 | Popular Tags |