KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > config > export > ExportDialog


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16

17 package org.columba.mail.gui.config.export;
18
19 import java.awt.BorderLayout JavaDoc;
20 import java.awt.Dimension JavaDoc;
21 import java.awt.GridLayout JavaDoc;
22 import java.awt.event.ActionEvent JavaDoc;
23 import java.awt.event.ActionListener JavaDoc;
24 import java.awt.event.KeyEvent JavaDoc;
25 import java.awt.event.MouseAdapter JavaDoc;
26 import java.awt.event.MouseEvent JavaDoc;
27 import java.io.File JavaDoc;
28 import java.util.Iterator JavaDoc;
29 import java.util.LinkedList JavaDoc;
30 import java.util.List JavaDoc;
31 import java.util.Vector JavaDoc;
32
33 import javax.swing.BorderFactory JavaDoc;
34 import javax.swing.JButton JavaDoc;
35 import javax.swing.JComponent JavaDoc;
36 import javax.swing.JDialog JavaDoc;
37 import javax.swing.JFileChooser JavaDoc;
38 import javax.swing.JFrame JavaDoc;
39 import javax.swing.JLabel JavaDoc;
40 import javax.swing.JPanel JavaDoc;
41 import javax.swing.JScrollPane JavaDoc;
42 import javax.swing.JTree JavaDoc;
43 import javax.swing.KeyStroke JavaDoc;
44 import javax.swing.SwingConstants JavaDoc;
45 import javax.swing.tree.DefaultTreeModel JavaDoc;
46 import javax.swing.tree.TreeNode JavaDoc;
47 import javax.swing.tree.TreePath JavaDoc;
48 import javax.swing.tree.TreeSelectionModel JavaDoc;
49
50 import org.columba.core.command.CommandProcessor;
51 import org.columba.core.gui.base.ButtonWithMnemonic;
52 import org.columba.core.gui.base.SingleSideEtchedBorder;
53 import org.columba.core.gui.util.DialogHeaderPanel;
54 import org.columba.core.help.HelpManager;
55 import org.columba.mail.command.MailFolderCommandReference;
56 import org.columba.mail.folder.IMailFolder;
57 import org.columba.mail.folder.command.ExportFolderCommand;
58 import org.columba.mail.gui.tree.FolderTreeModel;
59 import org.columba.mail.gui.tree.util.FolderTreeCellRenderer;
60 import org.columba.mail.util.MailResourceLoader;
61 import org.frapuccino.checkabletree.CheckableItem;
62 import org.frapuccino.checkabletree.CheckableTree;
63
64 import com.jgoodies.forms.layout.CellConstraints;
65 import com.jgoodies.forms.layout.FormLayout;
66
67 /**
68  * ExportDialog lets you select a number of folders for exporting messages into
69  * the MBOX format.
70  *
71  * @author fdietz
72  */

73
74 public class ExportDialog extends JDialog JavaDoc implements ActionListener JavaDoc {
75     private ButtonWithMnemonic exportButton;
76
77     private ButtonWithMnemonic selectAllButton;
78
79     private JTree JavaDoc tree;
80
81     private JButton JavaDoc helpButton;
82
83     private JButton JavaDoc closeButton;
84
85     public ExportDialog(JFrame JavaDoc parent) {
86         super(parent, MailResourceLoader.getString("dialog", "export",
87                 "dialog_title"), false);
88
89         initComponents();
90
91         pack();
92         setLocationRelativeTo(null);
93         setVisible(true);
94     }
95
96     private void createChildNodes(CheckableTreeNode root, IMailFolder parent) {
97         for (int i = 0; i < parent.getChildCount(); i++) {
98             IMailFolder child = (IMailFolder) parent.getChildAt(i);
99
100             CheckableTreeNode c = new CheckableTreeNode(child.getName());
101             c.setIcon(FolderTreeCellRenderer.getFolderIcon(child, false));
102             c.setNode(child);
103             root.add(c);
104
105             createChildNodes(c, child);
106         }
107     }
108
109     protected void initComponents() {
110         JPanel JavaDoc mainPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
111         mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
112         getContentPane().add(mainPanel);
113
114         exportButton = new ButtonWithMnemonic(MailResourceLoader.getString(
115                 "dialog", "export", "export"));
116         exportButton.setActionCommand("EXPORT");
117         exportButton.addActionListener(this);
118
119         selectAllButton = new ButtonWithMnemonic(MailResourceLoader.getString(
120                 "dialog", "export", "select_all"));
121         selectAllButton.setActionCommand("SELECTALL");
122         selectAllButton.addActionListener(this);
123
124         IMailFolder parent = (IMailFolder) FolderTreeModel.getInstance()
125                 .getRoot();
126         CheckableTreeNode root = new CheckableTreeNode(parent.getName());
127         root.setNode(parent);
128         createChildNodes(root, parent);
129
130         tree = new CheckableTree(root);
131         tree.setRootVisible(false);
132
133         tree.getSelectionModel().setSelectionMode(
134                 TreeSelectionModel.SINGLE_TREE_SELECTION);
135         tree.addMouseListener(new NodeSelectionListener(tree));
136         tree.expandRow(0);
137         tree.expandRow(1);
138
139         getContentPane().add(createPanel(), BorderLayout.CENTER);
140
141         getContentPane().add(createBottomPanel(), BorderLayout.SOUTH);
142
143         getContentPane().add(
144                 new DialogHeaderPanel(MailResourceLoader.getString("dialog",
145                         "export", "header_title"), MailResourceLoader
146                         .getString("dialog", "export", "header_description")),
147                 BorderLayout.NORTH);
148         getRootPane().setDefaultButton(closeButton);
149         getRootPane().registerKeyboardAction(this, "CLOSE",
150                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
151                 JComponent.WHEN_IN_FOCUSED_WINDOW);
152
153         // associate with JavaHelp
154
HelpManager.getInstance().enableHelpOnButton(helpButton,
155                 "organising_and_managing_your_email_5");
156         HelpManager.getInstance().enableHelpKey(getRootPane(),
157                 "organising_and_managing_your_email_5");
158     }
159
160     private JPanel JavaDoc createPanel() {
161         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
162         FormLayout formlayout1 = new FormLayout(
163                 "FILL:DEFAULT:GROW(1.0),3DLU,FILL:DEFAULT:NONE",
164                 "CENTER:DEFAULT:NONE,1DLU,FILL:DEFAULT:GROW(1.0),3DLU,CENTER:DEFAULT:NONE");
165         CellConstraints cc = new CellConstraints();
166         jpanel1.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
167         jpanel1.setLayout(formlayout1);
168
169         JLabel JavaDoc jlabel1 = new JLabel JavaDoc();
170         jlabel1.setText("Select Folders:");
171         jpanel1.add(jlabel1, cc.xy(1, 1));
172
173         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(tree);
174         scrollPane.setPreferredSize(new Dimension JavaDoc(350, 250));
175         jpanel1.add(scrollPane, cc.xy(1, 3));
176
177         jpanel1.add(createPanel1(), new CellConstraints(3, 3, 1, 1,
178                 CellConstraints.DEFAULT, CellConstraints.TOP));
179
180         return jpanel1;
181     }
182
183     private JPanel JavaDoc createPanel1() {
184         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
185         FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE",
186                 "CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE");
187         CellConstraints cc = new CellConstraints();
188         jpanel1.setLayout(formlayout1);
189
190         jpanel1.add(exportButton, cc.xy(1, 1));
191
192         jpanel1.add(selectAllButton, cc.xy(1, 3));
193
194         return jpanel1;
195     }
196
197     private JPanel JavaDoc createBottomPanel() {
198         JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
199         bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
200
201         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 3, 6, 0));
202         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
203
204         closeButton = new ButtonWithMnemonic(MailResourceLoader.getString(
205                 "global", "close"));
206         closeButton.setActionCommand("CLOSE"); //$NON-NLS-1$
207
closeButton.addActionListener(this);
208         buttonPanel.add(closeButton);
209
210         helpButton = new ButtonWithMnemonic(MailResourceLoader.getString(
211                 "global", "help"));
212         buttonPanel.add(helpButton);
213         bottomPanel.add(buttonPanel, BorderLayout.EAST);
214
215         return bottomPanel;
216     }
217
218     private void getTreeNodeIteration(TreeNode JavaDoc parent, List JavaDoc l) {
219         l.add(parent);
220
221         for (int i = 0; i < parent.getChildCount(); i++) {
222             l.add(parent.getChildAt(i));
223             getTreeNodeIteration((TreeNode JavaDoc) parent.getChildAt(i), l);
224         }
225     }
226
227     /*
228      * (non-Javadoc)
229      *
230      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
231      */

232     public void actionPerformed(ActionEvent JavaDoc e) {
233         String JavaDoc action = e.getActionCommand();
234
235         if (action.equals("CLOSE")) {
236             setVisible(false);
237         } else if (action.equals("SELECTALL")) {
238             List JavaDoc list = new LinkedList JavaDoc();
239             getTreeNodeIteration((TreeNode JavaDoc) tree.getModel().getRoot(), list);
240
241             Iterator JavaDoc iterator = list.iterator();
242             CheckableTreeNode node;
243
244             while (iterator.hasNext()) {
245                 node = (CheckableTreeNode) iterator.next();
246                 node.setSelected(true);
247                 ((DefaultTreeModel JavaDoc) tree.getModel()).nodeChanged(node);
248             }
249         } else if (action.equals("EXPORT")) {
250             File JavaDoc destFile = null;
251
252             // ask the user about the destination file
253
JFileChooser JavaDoc chooser = new JFileChooser JavaDoc();
254             chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
255             chooser.setMultiSelectionEnabled(false);
256
257             int result = chooser.showSaveDialog(this);
258
259             if (result == JFileChooser.APPROVE_OPTION) {
260                 File JavaDoc file = chooser.getSelectedFile();
261
262                 destFile = file;
263             } else {
264                 return;
265             }
266
267             setVisible(false);
268
269             // get list of all folders
270
List JavaDoc list = new LinkedList JavaDoc();
271             getTreeNodeIteration((TreeNode JavaDoc) tree.getModel().getRoot(), list);
272
273             Iterator JavaDoc it = list.iterator();
274
275             Vector JavaDoc v = new Vector JavaDoc();
276
277             // get list of all selected folders
278
while (it.hasNext()) {
279                 CheckableItem node = (CheckableItem) it.next();
280
281                 boolean export = (boolean) node.isSelected();
282
283                 if (export) {
284                     v.add(node);
285                 }
286             }
287
288             // create command reference array for the command
289
MailFolderCommandReference r = null;
290
291             for (int i = 0; i < v.size(); i++) {
292                 IMailFolder node = (IMailFolder) ((CheckableTreeNode) v.get(i))
293                         .getNode();
294
295                 r = new MailFolderCommandReference(node);
296                 r.setDestFile(destFile);
297
298                 // execute the command
299
CommandProcessor.getInstance()
300                         .addOp(new ExportFolderCommand(r));
301             }
302
303         }
304     }
305
306     class NodeSelectionListener extends MouseAdapter JavaDoc {
307         JTree JavaDoc tree;
308
309         NodeSelectionListener(JTree JavaDoc tree) {
310             this.tree = tree;
311         }
312
313         public void mouseClicked(MouseEvent JavaDoc e) {
314             int x = e.getX();
315             int y = e.getY();
316             int row = tree.getRowForLocation(x, y);
317             TreePath JavaDoc path = tree.getPathForRow(row);
318
319             // TreePath path = tree.getSelectionPath();
320
if (path != null) {
321                 CheckableItem node = (CheckableItem) path
322                         .getLastPathComponent();
323
324                 node.setSelected(!node.isSelected());
325
326                 ((DefaultTreeModel JavaDoc) tree.getModel()).nodeChanged(node);
327
328                 // I need revalidate if node is root. but why?
329
if (row == 0) {
330                     tree.revalidate();
331                     tree.repaint();
332                 }
333             }
334         }
335     }
336 }
Popular Tags