1 package org.columba.mail.folderoptions; 17 18 import java.util.Enumeration ; 19 20 import org.columba.api.plugin.IExtension; 21 import org.columba.api.plugin.IExtensionHandler; 22 import org.columba.api.plugin.PluginException; 23 import org.columba.api.plugin.PluginHandlerNotFoundException; 24 import org.columba.core.plugin.PluginManager; 25 import org.columba.core.xml.XmlElement; 26 import org.columba.mail.config.FolderItem; 27 import org.columba.mail.config.IFolderItem; 28 import org.columba.mail.folder.IMailbox; 29 import org.columba.mail.gui.frame.MailFrameMediator; 30 import org.columba.mail.plugin.IExtensionHandlerKeys; 31 32 42 public class FolderOptionsController implements IFolderOptionsController { 43 48 public final static int STATE_BEFORE = 0; 49 50 56 public final static int STATE_AFTER = 1; 57 58 61 private MailFrameMediator mediator; 62 63 66 private IExtensionHandler handler; 67 68 74 public FolderOptionsController(MailFrameMediator mediator) { 75 this.mediator = mediator; 76 77 try { 79 handler = PluginManager.getInstance().getExtensionHandler( 80 IExtensionHandlerKeys.ORG_COLUMBA_MAIL_FOLDEROPTIONS); 81 } catch (PluginHandlerNotFoundException e) { 82 e.printStackTrace(); 84 } 85 } 86 87 94 public AbstractFolderOptionsPlugin getPlugin(String name) { 95 96 AbstractFolderOptionsPlugin plugin = null; 97 98 try { 99 IExtension extension = handler.getExtension(name); 100 101 plugin = (AbstractFolderOptionsPlugin) extension 102 .instanciateExtension(new Object [] { mediator }); 103 } catch (Exception e) { 104 e.printStackTrace(); 106 } 107 108 return plugin; 109 110 } 111 112 118 public void load(IMailbox folder, int state) { 119 Enumeration e = handler.getExtensionEnumeration(); 121 while (e.hasMoreElements()) { 122 IExtension extension = (IExtension) e.nextElement(); 123 String stateString = extension.getMetadata().getAttribute("state"); 124 try { 125 AbstractFolderOptionsPlugin plugin = (AbstractFolderOptionsPlugin) extension 126 .instanciateExtension(new Object [] { mediator }); 127 128 if ((state == STATE_BEFORE) && (stateString.equals("before"))) { 129 plugin.loadOptionsFromXml(null); 130 } else if ((state == STATE_AFTER) 131 && (stateString.equals("after"))) { 132 plugin.loadOptionsFromXml(folder); 133 } 134 } catch (PluginException e1) { 135 e1.printStackTrace(); 136 } 137 138 } 139 } 140 141 147 public void save(IMailbox folder) { 148 String [] ids = handler.getPluginIdList(); 150 151 for (int i = 0; i < ids.length; i++) { 152 AbstractFolderOptionsPlugin plugin = getPlugin(ids[i]); 153 plugin.saveOptionsToXml(folder); 154 } 155 } 156 157 161 public void load(int state) { 162 Enumeration e = handler.getExtensionEnumeration(); 164 while (e.hasMoreElements()) { 165 IExtension extension = (IExtension) e.nextElement(); 166 String stateString = extension.getMetadata().getAttribute("state"); 167 try { 168 AbstractFolderOptionsPlugin plugin = (AbstractFolderOptionsPlugin) extension 169 .instanciateExtension(new Object [] { mediator }); 170 171 if ((state == STATE_BEFORE) && (stateString.equals("before"))) { 172 plugin.loadOptionsFromXml(null); 173 } else if ((state == STATE_AFTER) 174 && (stateString.equals("after"))) { 175 plugin.loadOptionsFromXml(null); 176 } 177 } catch (Exception e1) { 178 e1.printStackTrace(); 180 } 181 } 182 } 183 184 206 public XmlElement getConfigNode(IMailbox folder, String name) { 207 XmlElement parent = null; 208 boolean global = false; 209 210 if ((folder == null) || (name == null)) { 211 parent = FolderItem.getGlobalOptions(); 213 global = true; 214 } else { 215 parent = folder.getConfiguration().getFolderOptions(); 217 global = false; 218 } 219 220 AbstractFolderOptionsPlugin plugin = getPlugin(name); 222 XmlElement child = parent.getElement(plugin.getName()); 223 224 if (child == null) { 225 child = plugin.createDefaultElement(global); 227 parent.addElement(child); 228 } 229 230 if (global) { 231 return child; 232 } 233 234 String overwrite = child.getAttribute("overwrite"); 235 236 if ((overwrite != null) && (overwrite.equals("true"))) { 238 return child; 240 } else { 241 parent = FolderItem.getGlobalOptions(); 243 child = parent.getElement(plugin.getName()); 244 245 return child; 246 } 247 } 248 249 255 public void createDefaultSettings(IMailbox folder) { 256 IFolderItem item = folder.getConfiguration(); 257 XmlElement parent = item.getElement("property"); 258 259 String [] ids = handler.getPluginIdList(); 261 262 for (int i = 0; i < ids.length; i++) { 263 AbstractFolderOptionsPlugin plugin = getPlugin(ids[i]); 264 XmlElement child = plugin.createDefaultElement(false); 265 parent.addElement(child); 266 } 267 } 268 269 278 285 } 286 | Popular Tags |