1 package org.columba.mail.gui.config.filter; 19 20 import java.awt.BorderLayout ; 21 import java.awt.Component ; 22 import java.awt.Dimension ; 23 import java.awt.GridBagConstraints ; 24 import java.awt.GridBagLayout ; 25 import java.awt.GridLayout ; 26 import java.awt.Insets ; 27 import java.awt.event.ActionEvent ; 28 import java.awt.event.ActionListener ; 29 import java.awt.event.ItemEvent ; 30 import java.awt.event.ItemListener ; 31 import java.util.Iterator ; 32 import java.util.List ; 33 import java.util.Vector ; 34 35 import javax.swing.BorderFactory ; 36 import javax.swing.Box ; 37 import javax.swing.JButton ; 38 import javax.swing.JPanel ; 39 import javax.swing.JScrollPane ; 40 41 import org.columba.api.plugin.IExtension; 42 import org.columba.api.plugin.IExtensionHandler; 43 import org.columba.api.plugin.PluginHandlerNotFoundException; 44 import org.columba.core.filter.Filter; 45 import org.columba.core.filter.FilterCriteria; 46 import org.columba.core.filter.FilterRule; 47 import org.columba.core.filter.IFilter; 48 import org.columba.core.filter.IFilterCriteria; 49 import org.columba.core.filter.IFilterRule; 50 import org.columba.core.gui.dialog.ErrorDialog; 51 import org.columba.core.plugin.PluginManager; 52 import org.columba.core.resourceloader.IconKeys; 53 import org.columba.core.resourceloader.ImageLoader; 54 import org.columba.mail.gui.config.filter.plugins.DefaultCriteriaRow; 55 import org.columba.mail.plugin.IExtensionHandlerKeys; 56 57 58 public class CriteriaList extends JPanel implements ActionListener , 59 ItemListener { 60 private IFilter filter; 61 62 private List list; 63 64 private JPanel panel; 65 66 private IExtensionHandler pluginHandler; 67 68 private IExtensionHandler pluginUIHandler; 69 70 public CriteriaList(IFilter filter) { 71 super(); 72 73 try { 74 pluginHandler = PluginManager.getInstance() 75 .getExtensionHandler(IExtensionHandlerKeys.ORG_COLUMBA_MAIL_FILTER); 76 pluginUIHandler = PluginManager 77 .getInstance().getExtensionHandler(IExtensionHandlerKeys.ORG_COLUMBA_MAIL_FILTERUI); 78 } catch (PluginHandlerNotFoundException ex) { 79 ErrorDialog.createDialog(ex.getMessage(), ex); 80 } 81 82 this.filter = filter; 83 84 list = new Vector (); 85 86 panel = new JPanel (); 87 88 JScrollPane scrollPane = new JScrollPane (panel); 89 setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); 90 91 scrollPane.setPreferredSize(new Dimension (500, 100)); 92 setLayout(new BorderLayout ()); 93 94 add(scrollPane, BorderLayout.CENTER); 95 96 update(); 97 } 98 99 public void updateComponents(boolean b) { 100 if (!b) { 101 for (Iterator it = list.iterator(); it.hasNext();) { 102 DefaultCriteriaRow row = (DefaultCriteriaRow) it.next(); 103 104 row.updateComponents(false); 105 } 106 } 107 } 108 109 public void add() { 110 IFilterRule rule = filter.getFilterRule(); 111 rule.addEmptyCriteria(); 112 113 updateComponents(false); 114 update(); 115 } 116 117 public void remove(int i) { 118 IFilterRule rule = filter.getFilterRule(); 119 120 if (rule.count() > 1) { 121 updateComponents(false); 122 rule.remove(i); 123 update(); 124 } 125 } 126 127 public void update() { 128 panel.removeAll(); 129 list.clear(); 130 131 GridBagLayout gridbag = new GridBagLayout (); 132 GridBagConstraints c = new GridBagConstraints (); 133 panel.setLayout(gridbag); 134 135 IFilterRule rule = filter.getFilterRule(); 136 137 for (int i = 0; i < rule.count(); i++) { 138 IFilterCriteria criteria = rule.get(i); 139 String type = criteria.getTypeString(); 140 DefaultCriteriaRow column = null; 141 142 c.fill = GridBagConstraints.NONE; 143 144 c.gridx = GridBagConstraints.RELATIVE; 145 c.gridy = i; 146 c.weightx = 1.0; 147 c.anchor = GridBagConstraints.NORTHWEST; 148 c.insets = new Insets (0, 0, 0, 0); 149 c.gridwidth = 1; 150 151 Object [] args = { pluginHandler, this, criteria }; 152 153 try { 154 IExtension extension = pluginHandler.getExtension(type); 155 String uiId = extension.getMetadata().getAttribute("ui"); 156 IExtension uiExtension = pluginUIHandler.getExtension(uiId); 157 158 column = (DefaultCriteriaRow) uiExtension 159 .instanciateExtension(args); 160 } catch (Exception ex) { 161 ex.printStackTrace(); 162 } 163 164 if (column == null) { 166 try { 167 IExtension extension = pluginHandler.getExtension("Subject"); 168 String uiId = extension.getMetadata().getAttribute("ui"); 169 IExtension uiExtension = pluginUIHandler.getExtension(uiId); 170 171 column = (DefaultCriteriaRow) uiExtension 172 .instanciateExtension(args); 173 } catch (Exception ex) { 174 ex.printStackTrace(); 175 } 176 177 criteria.setTypeString("Subject"); 178 } 179 180 gridbag.setConstraints(column.getContentPane(), c); 181 list.add(column); 182 183 panel.add(column.getContentPane()); 184 185 JButton addButton = new JButton (ImageLoader 186 .getIcon(IconKeys.LIST_ADD)); 187 addButton.setActionCommand("ADD"); 188 addButton.setMargin(new Insets (0, 0, 0, 0)); 189 addButton.addActionListener(new ActionListener () { 190 public void actionPerformed(ActionEvent e) { 191 add(); 192 } 193 }); 194 195 JButton removeButton = new JButton (ImageLoader 196 .getIcon(IconKeys.LIST_REMOVE)); 197 removeButton.setMargin(new Insets (0, 0, 0, 0)); 198 removeButton.setActionCommand(Integer.toString(i)); 199 200 final int index = i; 201 removeButton.addActionListener(new ActionListener () { 202 public void actionPerformed(ActionEvent e) { 203 remove(index); 204 } 205 }); 206 207 JPanel buttonPanel = new JPanel (); 208 buttonPanel.setLayout(new GridLayout (0, 2, 2, 2)); 209 buttonPanel.add(removeButton); 210 buttonPanel.add(addButton); 211 212 c.insets = new Insets (2, 2, 2, 2); 213 c.gridx = GridBagConstraints.REMAINDER; 214 c.anchor = GridBagConstraints.NORTHEAST; 215 gridbag.setConstraints(buttonPanel, c); 216 panel.add(buttonPanel); 217 } 218 219 c.weighty = 1.0; 220 221 Component box = Box.createVerticalGlue(); 222 gridbag.setConstraints(box, c); 223 panel.add(box); 224 225 validate(); 226 repaint(); 227 } 228 229 public void actionPerformed(ActionEvent e) { 230 updateComponents(false); 231 update(); 232 } 233 234 237 public void itemStateChanged(ItemEvent arg0) { 238 updateComponents(false); 239 update(); 240 241 } 242 } | Popular Tags |