KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > gui > dialog > group > EditGroupDialog


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.addressbook.gui.dialog.group;
19
20 import java.awt.BorderLayout JavaDoc;
21 import java.awt.Dimension JavaDoc;
22 import java.awt.GridLayout JavaDoc;
23 import java.awt.event.ActionEvent JavaDoc;
24 import java.awt.event.ActionListener JavaDoc;
25 import java.awt.event.KeyEvent JavaDoc;
26 import java.awt.event.KeyListener JavaDoc;
27 import java.util.Map JavaDoc;
28
29 import javax.swing.BorderFactory JavaDoc;
30 import javax.swing.JButton JavaDoc;
31 import javax.swing.JComponent JavaDoc;
32 import javax.swing.JDialog JavaDoc;
33 import javax.swing.JFrame JavaDoc;
34 import javax.swing.JLabel JavaDoc;
35 import javax.swing.JOptionPane JavaDoc;
36 import javax.swing.JPanel JavaDoc;
37 import javax.swing.JScrollPane JavaDoc;
38 import javax.swing.JTextField JavaDoc;
39 import javax.swing.KeyStroke JavaDoc;
40 import javax.swing.SwingConstants JavaDoc;
41 import javax.swing.text.JTextComponent JavaDoc;
42
43 import org.columba.addressbook.folder.AbstractFolder;
44 import org.columba.addressbook.gui.autocomplete.AddressCollector;
45 import org.columba.addressbook.gui.autocomplete.DefaultAddressComboBox;
46 import org.columba.addressbook.gui.list.AddressbookDNDListView;
47 import org.columba.addressbook.gui.list.AddressbookListModel;
48 import org.columba.addressbook.model.IContactModelPartial;
49 import org.columba.addressbook.model.IGroupModel;
50 import org.columba.addressbook.util.AddressbookResourceLoader;
51 import org.columba.core.gui.base.ButtonWithMnemonic;
52 import org.columba.core.gui.base.SingleSideEtchedBorder;
53
54 import com.jgoodies.forms.builder.DefaultFormBuilder;
55 import com.jgoodies.forms.builder.PanelBuilder;
56 import com.jgoodies.forms.layout.CellConstraints;
57 import com.jgoodies.forms.layout.FormLayout;
58
59
60 public class EditGroupDialog extends JDialog JavaDoc implements ActionListener JavaDoc,
61         KeyListener JavaDoc {
62     private AddressbookDNDListView list;
63
64     private JButton JavaDoc addButton;
65
66     private JButton JavaDoc removeButton;
67
68     private JLabel JavaDoc nameLabel;
69
70     private JLabel JavaDoc descriptionLabel;
71
72     private JTextField JavaDoc nameTextField;
73
74     private JTextField JavaDoc descriptionTextField;
75
76     private DefaultAddressComboBox addComboBox;
77
78     private AddressbookListModel members;
79
80     private boolean result;
81
82     private ButtonWithMnemonic okButton;
83
84     private ButtonWithMnemonic cancelButton;
85
86     private IGroupModel group;
87
88     private AbstractFolder parentFolder;
89
90     /**
91      * Constructor
92      *
93      * @param frame
94      * parent frame
95      * @param groupNode
96      * null, if you want to create a new group. Otherwise, the
97      * groupNode will be modified.
98      */

99     public EditGroupDialog(JFrame JavaDoc frame, IGroupModel group,
100             AbstractFolder parentFolder) {
101         super(frame, true);
102
103         this.group = group;
104         this.parentFolder = parentFolder;
105
106         result = false;
107
108         setTitle(AddressbookResourceLoader.getString("dialog",
109                 "editgroupdialog", "contact_list_editor")); //$NON-NLS-1$
110

111         // set title
112
initComponents();
113
114         layoutComponents();
115
116         updateComponents(true);
117
118         pack();
119
120         setLocationRelativeTo(null);
121
122         setVisible(true);
123     }
124
125     private JPanel JavaDoc createGroupNamePanel() {
126         JPanel JavaDoc panel = new JPanel JavaDoc();
127         FormLayout layout = new FormLayout(
128                 "12px, right:default, 6px, default:grow", ""); //$NON-NLS-1$ //$NON-NLS-2$
129

130         DefaultFormBuilder b = new DefaultFormBuilder(layout, panel);
131         b.setRowGroupingEnabled(true);
132         b.setLeadingColumnOffset(1);
133
134         b.appendSeparator(AddressbookResourceLoader.getString("dialog",
135                 "editgroupdialog", "description_3")); //$NON-NLS-1$
136

137         b.append(nameLabel);
138         b.append(nameTextField);
139
140         b.append(descriptionLabel);
141         b.append(descriptionTextField);
142
143         return panel;
144     }
145
146     private JPanel JavaDoc createGroupPanel() {
147         JPanel JavaDoc panel = new JPanel JavaDoc();
148         FormLayout layout = new FormLayout(
149                 "6dlu, fill:default:grow, 6px, default", //$NON-NLS-1$
150
"default, 12px, default, 6px, default, fill:default:grow"); //$NON-NLS-1$
151

152         PanelBuilder builder = new PanelBuilder(layout, panel);
153         CellConstraints cc = new CellConstraints();
154
155         builder.addSeparator(AddressbookResourceLoader.getString("dialog",
156                 "editgroupdialog", "group_members"), cc.xywh(1, 1, 4, 1)); //$NON-NLS-1$
157

158         builder.add(addComboBox, cc.xy(2, 3));
159         builder.add(addButton, cc.xy(4, 3));
160         builder.add(new JScrollPane JavaDoc(list), cc.xywh(2, 5, 1, 2));
161         builder.add(removeButton, cc.xy(4, 5));
162
163         return panel;
164     }
165
166     private void layoutComponents() {
167         getContentPane().setLayout(new BorderLayout JavaDoc());
168
169         JPanel JavaDoc mainPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
170         mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
171
172         FormLayout layout = new FormLayout("fill:default:grow", //$NON-NLS-1$
173
"default, 12px, fill:default:grow"); //$NON-NLS-1$
174

175         CellConstraints cc = new CellConstraints();
176         mainPanel.setLayout(layout);
177
178         mainPanel.add(createGroupNamePanel(), cc.xy(1, 1));
179         mainPanel.add(createGroupPanel(), cc.xy(1, 3));
180
181         getContentPane().add(mainPanel, BorderLayout.CENTER);
182
183         JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
184         bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
185
186         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 2, 6, 0));
187         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
188
189         buttonPanel.add(okButton);
190         buttonPanel.add(cancelButton);
191         bottomPanel.add(buttonPanel, BorderLayout.EAST);
192
193         getContentPane().add(bottomPanel, BorderLayout.SOUTH);
194     }
195
196     private void initComponents() {
197         nameLabel = new JLabel JavaDoc(AddressbookResourceLoader.getString("dialog",
198                 "editgroupdialog", "name")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
199
nameTextField = new JTextField JavaDoc();
200
201         descriptionLabel = new JLabel JavaDoc(AddressbookResourceLoader.getString(
202                 "dialog", "editgroupdialog", "description_2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
203
descriptionTextField = new JTextField JavaDoc();
204
205         addComboBox = new DefaultAddressComboBox(parentFolder.getId(), false);
206         ((JTextComponent JavaDoc) addComboBox.getEditor().getEditorComponent())
207                 .addKeyListener(this);
208
209         members = new AddressbookListModel();
210         list = new AddressbookDNDListView(members);
211         list.setMinimumSize(new Dimension JavaDoc(200, 300));
212
213         addButton = new JButton JavaDoc("Add"); //$NON-NLS-1$
214
addButton.addActionListener(this);
215         addButton.setActionCommand("ADD"); //$NON-NLS-1$
216

217         removeButton = new JButton JavaDoc("Remove"); //$NON-NLS-1$
218
removeButton.addActionListener(this);
219         removeButton.setActionCommand("REMOVE"); //$NON-NLS-1$
220

221         okButton = new ButtonWithMnemonic(AddressbookResourceLoader.getString(
222                 "global", "ok")); //$NON-NLS-1$ //$NON-NLS-2$
223
okButton.setActionCommand("OK"); //$NON-NLS-1$
224
okButton.addActionListener(this);
225
226         cancelButton = new ButtonWithMnemonic(AddressbookResourceLoader
227                 .getString("global", "cancel")); //$NON-NLS-1$ //$NON-NLS-2$
228
cancelButton.setActionCommand("CANCEL"); //$NON-NLS-1$
229
cancelButton.addActionListener(this);
230
231         getRootPane().setDefaultButton(okButton);
232         getRootPane().registerKeyboardAction(this, "CANCEL", //$NON-NLS-1$
233
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
234                 JComponent.WHEN_IN_FOCUSED_WINDOW);
235     }
236
237     public boolean getResult() {
238         return result;
239     }
240
241     public void updateComponents(boolean b) {
242         if (b) {
243             // gettext
244
nameTextField.setText(group.getName()); //$NON-NLS-1$
245
descriptionTextField.setText(group.getDescription()); //$NON-NLS-1$
246

247             members = new AddressbookListModel();
248
249             String JavaDoc[] m = group.getMembers();
250
251             try {
252                 Map JavaDoc<String JavaDoc, IContactModelPartial> l = parentFolder.getContactItemMap();
253
254                 for (int i = 0; i < m.length; i++) {
255
256                     IContactModelPartial item = l.get(m[i]);
257
258                     members.addElement(item);
259                 }
260             } catch (Exception JavaDoc e) {
261
262                 e.printStackTrace();
263             }
264
265             this.list.setModel(members);
266         } else {
267             // settext
268
group.setName(nameTextField.getText()); //$NON-NLS-1$
269
group.setDescription(descriptionTextField.getText()); //$NON-NLS-1$
270

271             // remove all children
272
group.removeAllMembers();
273
274             // add children
275
for (int i = 0; i < members.getSize(); i++) {
276                 IContactModelPartial item = (IContactModelPartial) members.get(i);
277                 String JavaDoc uid = item.getId();
278                 group.addMember(uid);
279             }
280         }
281     }
282
283     /**
284      * Add headeritem from ComboBox to List
285      *
286      */

287     private void addHeaderItem() {
288         String JavaDoc s = addComboBox.getText();
289         Object JavaDoc o = AddressCollector.getInstance().getHeaderItem(s);
290
291         if (o != null) {
292             // this is a headeritem from autocompletion
293
members.addElement((IContactModelPartial) o);
294             addComboBox.setText(""); //$NON-NLS-1$
295
} else {
296             JOptionPane
297                     .showMessageDialog(this, AddressbookResourceLoader
298                             .getString("dialog",
299                                     "editgroupdialog", "You_can_only_add")); //$NON-NLS-1$
300
}
301
302         // in the future, it will be possible to also add new addresses
303

304         /*
305          * else { // this is a string // -> check for validity if
306          * (AddressParser.isValid(s)) { HeaderItem item= new
307          * HeaderItem(HeaderItem.CONTACT); item.add("displayname",
308          * AddressParser.getDisplayname(s)); item.add("email;internet",
309          * AddressParser.getAddress(s));
310          *
311          * members.addElement(item); addComboBox.setText(""); } else {
312          * JOptionPane.showMessageDialog( null, s + " is no valid email
313          * address!"); } }
314          */

315     }
316
317     public void actionPerformed(ActionEvent JavaDoc e) {
318         String JavaDoc command = e.getActionCommand();
319
320         if (command.equals("CANCEL")) { //$NON-NLS-1$
321
result = false;
322             setVisible(false);
323         } else if (command.equals("OK")) { //$NON-NLS-1$
324

325             if (nameTextField.getText().length() == 0) {
326                 JOptionPane
327                         .showMessageDialog(
328                                 this,
329                                 AddressbookResourceLoader
330                                         .getString(
331                                                 "dialog",
332                                                 "editgroupdialog", "you_must_enter_a_name_for_the_group")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
333

334                 return;
335             }
336
337             result = true;
338
339             updateComponents(false);
340
341             setVisible(false);
342         } else if (command.equals("ADD")) { //$NON-NLS-1$
343
addHeaderItem();
344         } else if (command.equals("REMOVE")) { //$NON-NLS-1$
345

346             int[] array = list.getSelectedIndices();
347
348             for (int j = 0; j < array.length; j++) {
349                 members.remove(array[j]);
350             }
351         }
352     }
353
354     /** ************************* KeyListener **************************** */
355     public void keyTyped(KeyEvent JavaDoc e) {
356     }
357
358     public void keyPressed(KeyEvent JavaDoc e) {
359     }
360
361     public void keyReleased(KeyEvent JavaDoc e) {
362         char ch = e.getKeyChar();
363
364         if (ch == KeyEvent.VK_ENTER) {
365             addHeaderItem();
366         }
367     }
368 }
369
Popular Tags