KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > config > filter > CriteriaList


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.mail.gui.config.filter;
19
20 import java.awt.BorderLayout JavaDoc;
21 import java.awt.Component JavaDoc;
22 import java.awt.Dimension JavaDoc;
23 import java.awt.GridBagConstraints JavaDoc;
24 import java.awt.GridBagLayout JavaDoc;
25 import java.awt.GridLayout JavaDoc;
26 import java.awt.Insets JavaDoc;
27 import java.awt.event.ActionEvent JavaDoc;
28 import java.awt.event.ActionListener JavaDoc;
29 import java.awt.event.ItemEvent JavaDoc;
30 import java.awt.event.ItemListener JavaDoc;
31 import java.util.Iterator JavaDoc;
32 import java.util.List JavaDoc;
33 import java.util.Vector JavaDoc;
34
35 import javax.swing.BorderFactory JavaDoc;
36 import javax.swing.Box JavaDoc;
37 import javax.swing.JButton JavaDoc;
38 import javax.swing.JPanel JavaDoc;
39 import javax.swing.JScrollPane JavaDoc;
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 JavaDoc implements ActionListener JavaDoc,
59         ItemListener JavaDoc {
60     private IFilter filter;
61
62     private List JavaDoc list;
63
64     private JPanel JavaDoc 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 JavaDoc();
85
86         panel = new JPanel JavaDoc();
87
88         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(panel);
89         setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
90
91         scrollPane.setPreferredSize(new Dimension JavaDoc(500, 100));
92         setLayout(new BorderLayout JavaDoc());
93
94         add(scrollPane, BorderLayout.CENTER);
95
96         update();
97     }
98
99     public void updateComponents(boolean b) {
100         if (!b) {
101             for (Iterator JavaDoc 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 JavaDoc gridbag = new GridBagLayout JavaDoc();
132         GridBagConstraints JavaDoc c = new GridBagConstraints JavaDoc();
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 JavaDoc 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 JavaDoc(0, 0, 0, 0);
149             c.gridwidth = 1;
150
151             Object JavaDoc[] args = { pluginHandler, this, criteria };
152
153             try {
154                 IExtension extension = pluginHandler.getExtension(type);
155                 String JavaDoc uiId = extension.getMetadata().getAttribute("ui");
156                 IExtension uiExtension = pluginUIHandler.getExtension(uiId);
157
158                 column = (DefaultCriteriaRow) uiExtension
159                         .instanciateExtension(args);
160             } catch (Exception JavaDoc ex) {
161                 ex.printStackTrace();
162             }
163
164             // fall-back if error occurs
165
if (column == null) {
166                 try {
167                     IExtension extension = pluginHandler.getExtension("Subject");
168                     String JavaDoc uiId = extension.getMetadata().getAttribute("ui");
169                     IExtension uiExtension = pluginUIHandler.getExtension(uiId);
170
171                     column = (DefaultCriteriaRow) uiExtension
172                             .instanciateExtension(args);
173                 } catch (Exception JavaDoc 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 JavaDoc addButton = new JButton JavaDoc(ImageLoader
186                     .getIcon(IconKeys.LIST_ADD));
187             addButton.setActionCommand("ADD");
188             addButton.setMargin(new Insets JavaDoc(0, 0, 0, 0));
189             addButton.addActionListener(new ActionListener JavaDoc() {
190                 public void actionPerformed(ActionEvent JavaDoc e) {
191                     add();
192                 }
193             });
194
195             JButton JavaDoc removeButton = new JButton JavaDoc(ImageLoader
196                     .getIcon(IconKeys.LIST_REMOVE));
197             removeButton.setMargin(new Insets JavaDoc(0, 0, 0, 0));
198             removeButton.setActionCommand(Integer.toString(i));
199
200             final int index = i;
201             removeButton.addActionListener(new ActionListener JavaDoc() {
202                 public void actionPerformed(ActionEvent JavaDoc e) {
203                     remove(index);
204                 }
205             });
206
207             JPanel JavaDoc buttonPanel = new JPanel JavaDoc();
208             buttonPanel.setLayout(new GridLayout JavaDoc(0, 2, 2, 2));
209             buttonPanel.add(removeButton);
210             buttonPanel.add(addButton);
211
212             c.insets = new Insets JavaDoc(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 JavaDoc box = Box.createVerticalGlue();
222         gridbag.setConstraints(box, c);
223         panel.add(box);
224
225         validate();
226         repaint();
227     }
228
229     public void actionPerformed(ActionEvent JavaDoc e) {
230         updateComponents(false);
231         update();
232     }
233
234     /**
235      * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
236      */

237     public void itemStateChanged(ItemEvent JavaDoc arg0) {
238         updateComponents(false);
239         update();
240
241     }
242 }
Popular Tags