KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > taskblocks > io > BugzillaExportDialog


1 /*
2  * Copyright (C) Jakub Neubauer, 2007
3  *
4  * This file is part of TaskBlocks
5  *
6  * TaskBlocks is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * TaskBlocks is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */

19
20 package taskblocks.io;
21
22 import java.awt.BorderLayout JavaDoc;
23 import java.awt.Component JavaDoc;
24 import java.awt.Dimension JavaDoc;
25 import java.awt.GridBagConstraints JavaDoc;
26 import java.awt.GridBagLayout JavaDoc;
27 import java.awt.event.ActionEvent JavaDoc;
28 import java.awt.event.KeyEvent JavaDoc;
29 import java.awt.event.WindowAdapter JavaDoc;
30 import java.awt.event.WindowEvent JavaDoc;
31 import java.io.IOException JavaDoc;
32 import java.io.StringReader JavaDoc;
33 import java.lang.reflect.InvocationTargetException JavaDoc;
34 import java.net.InetAddress JavaDoc;
35 import java.net.UnknownHostException JavaDoc;
36 import java.text.SimpleDateFormat JavaDoc;
37 import java.util.Date JavaDoc;
38 import java.util.HashMap JavaDoc;
39 import java.util.Map JavaDoc;
40 import java.util.prefs.Preferences JavaDoc;
41
42 import javax.swing.AbstractAction JavaDoc;
43 import javax.swing.BorderFactory JavaDoc;
44 import javax.swing.Box JavaDoc;
45 import javax.swing.Icon JavaDoc;
46 import javax.swing.InputMap JavaDoc;
47 import javax.swing.JButton JavaDoc;
48 import javax.swing.JComponent JavaDoc;
49 import javax.swing.JDialog JavaDoc;
50 import javax.swing.JFrame JavaDoc;
51 import javax.swing.JLabel JavaDoc;
52 import javax.swing.JPanel JavaDoc;
53 import javax.swing.JPasswordField JavaDoc;
54 import javax.swing.JRootPane JavaDoc;
55 import javax.swing.JScrollPane JavaDoc;
56 import javax.swing.JSeparator JavaDoc;
57 import javax.swing.JTable JavaDoc;
58 import javax.swing.JTextField JavaDoc;
59 import javax.swing.JTextPane JavaDoc;
60 import javax.swing.KeyStroke JavaDoc;
61 import javax.swing.SwingUtilities JavaDoc;
62 import javax.swing.table.AbstractTableModel JavaDoc;
63 import javax.swing.table.TableCellRenderer JavaDoc;
64 import javax.swing.text.BadLocationException JavaDoc;
65 import javax.swing.text.Document JavaDoc;
66 import javax.swing.text.html.HTMLEditorKit JavaDoc;
67
68 import taskblocks.Utils;
69 import taskblocks.bugzilla.BugzillaSubmitter;
70 import taskblocks.modelimpl.ColorLabel;
71 import taskblocks.modelimpl.TaskImpl;
72
73 public class BugzillaExportDialog extends JDialog JavaDoc {
74
75     TaskImpl[] _tasks;
76
77     JTable JavaDoc _tasksTable;
78
79     Object JavaDoc[][] _tasksData;
80
81     JButton JavaDoc okB;
82
83     JButton JavaDoc cancelB;
84
85     private AbstractAction JavaDoc _okAction;
86
87     private AbstractAction JavaDoc _cancelAction;
88
89     JTextField JavaDoc _baseUrlTF;
90
91     JTextField JavaDoc _userTF;
92
93     JTextField JavaDoc _passwdTF;
94
95     JTextField JavaDoc _productTF;
96
97     JTextField JavaDoc _versionTF;
98
99     JTextField JavaDoc _componentTF;
100
101     JTextField JavaDoc _blocksTF;
102
103     JTextField JavaDoc _hardwareTF;
104
105     JTextField JavaDoc _osTF;
106
107     JTextField JavaDoc _priorTF;
108
109     JTextField JavaDoc _severTF;
110
111     JTextPane JavaDoc _logArea;
112     
113     JTextField JavaDoc _keywordsTF;
114     
115     Preferences JavaDoc _prefs = Preferences.userNodeForPackage(this.getClass());
116
117     public BugzillaExportDialog(JFrame JavaDoc owner, TaskImpl[] tasks) {
118         super(owner, "Bugzilla export", true);
119
120         _tasks = tasks;
121         constructData();
122         createActions();
123
124         JPanel JavaDoc mainP = new JPanel JavaDoc(new BorderLayout JavaDoc(0, 12));
125         okB = new JButton JavaDoc(_okAction);
126         cancelB = new JButton JavaDoc(_cancelAction);
127         Box JavaDoc butP = Box.createHorizontalBox();
128         butP.add(Box.createHorizontalGlue());
129         butP.add(okB);
130         butP.add(Box.createHorizontalStrut(10));
131         butP.add(cancelB);
132         mainP.add(butP, BorderLayout.SOUTH);
133         getContentPane().add(mainP);
134         JPanel JavaDoc mainPanel = createMainPanel();
135         mainP.add(mainPanel, BorderLayout.CENTER);
136
137         mainP.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
138         
139         setDefaultActions(getRootPane());
140         this.addWindowListener(new WindowAdapter JavaDoc(){
141             public void windowClosed(WindowEvent JavaDoc e) {
142                 saveTextFields();
143             }
144         });
145     }
146     
147     private void saveTextFields() {
148         _prefs.put("baseUrl", _baseUrlTF.getText());
149         _prefs.put("user", _userTF.getText());
150         _prefs.put("product", _productTF.getText());
151         _prefs.put("version", _versionTF.getText());
152         _prefs.put("component", _componentTF.getText());
153         _prefs.put("blocks", _blocksTF.getText());
154         _prefs.put("hardware", _hardwareTF.getText());
155         _prefs.put("os", _osTF.getText());
156         _prefs.put("priority", _priorTF.getText());
157         _prefs.put("severity", _severTF.getText());
158         _prefs.put("keywords", _keywordsTF.getText());
159     }
160     
161     private void setDefaultActions(JRootPane JavaDoc rootPane) {
162         KeyStroke JavaDoc strokeEsc = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
163         //KeyStroke strokeEnter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
164

165         InputMap JavaDoc inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
166         inputMap.put(strokeEsc, "ESCAPE");
167         //inputMap.put(strokeEnter, "ENTER");
168
rootPane.getActionMap().put("ESCAPE", _cancelAction);
169         //rootPane.getActionMap().put("ENTER", _okAction);
170
}
171     
172
173
174     private JPanel JavaDoc createMainPanel() {
175         JPanel JavaDoc p = new JPanel JavaDoc(new BorderLayout JavaDoc(0, 12));
176         _tasksTable = new JTable JavaDoc(new TasksModel()) {
177             public Component JavaDoc prepareRenderer(TableCellRenderer JavaDoc renderer, int row,
178                     int column) {
179                 Component JavaDoc c = super.prepareRenderer(renderer, row, column);
180                 return c;
181             }
182         };
183         //_tasksTable.setIntercellSpacing(new Dimension());
184
_tasksTable.getColumnModel().getColumn(0).setMaxWidth(25);
185         _tasksTable.getColumnModel().getColumn(0).setMinWidth(25);
186         _tasksTable.getColumnModel().getColumn(1).setMaxWidth(50);
187         JScrollPane JavaDoc sp = new JScrollPane JavaDoc(_tasksTable);
188         sp.setPreferredSize(new Dimension JavaDoc(700,200));
189         JPanel JavaDoc contentP = new JPanel JavaDoc();
190         p.add(sp, BorderLayout.CENTER);
191
192         _logArea = new JTextPane JavaDoc();
193         ((JTextPane JavaDoc)_logArea).setContentType("text/html");
194         _logArea.setEditable(false);
195         _logArea.setText("<html>Log:");
196         
197         String JavaDoc domain="";
198         try {
199             domain = InetAddress.getLocalHost().getCanonicalHostName();
200         } catch (UnknownHostException JavaDoc e) {
201             e.printStackTrace();
202         }
203         _baseUrlTF = new JTextField JavaDoc(_prefs.get("baseUrl", "http://"));
204         _userTF = new JTextField JavaDoc(_prefs.get("user", System.getProperty("user.name") + "@" + domain));
205         _passwdTF = new JPasswordField JavaDoc("");
206         _productTF = new JTextField JavaDoc(_prefs.get("product", ""));
207         _versionTF = new JTextField JavaDoc(_prefs.get("version", ""));
208         _componentTF = new JTextField JavaDoc(_prefs.get("component", ""));
209         _blocksTF = new JTextField JavaDoc(_prefs.get("blocks", ""));
210         _hardwareTF = new JTextField JavaDoc(_prefs.get("hardware", "All"));
211         _osTF = new JTextField JavaDoc(_prefs.get("os", "All"));
212         _priorTF = new JTextField JavaDoc(_prefs.get("priority", "P2"));
213         _severTF = new JTextField JavaDoc(_prefs.get("severity", "enhancement"));
214         _keywordsTF = new JTextField JavaDoc(_prefs.get("keywords", ""));
215
216         // layout components
217
contentP.setLayout(new GridBagLayout JavaDoc());
218         GridBagConstraints JavaDoc gc = new GridBagConstraints JavaDoc();
219
220         // add labels
221
gc.gridx = 0;
222         gc.gridy = -1;
223         gc.fill = GridBagConstraints.NONE;
224         gc.insets.bottom = 5;
225         gc.anchor = GridBagConstraints.EAST;
226         //
227
gc.gridy++;
228         contentP.add(new JLabel JavaDoc("Bugzilla URL:"), gc);
229         gc.gridy++;
230         contentP.add(new JLabel JavaDoc("User:"), gc);
231         gc.gridy++;
232         contentP.add(new JLabel JavaDoc("Password:"), gc);
233
234         gc.gridy++;
235         gc.gridwidth = 4;
236         gc.insets.top = 8;
237         gc.insets.bottom = 8;
238         gc.fill = GridBagConstraints.HORIZONTAL;
239         contentP.add(new JSeparator JavaDoc(JSeparator.HORIZONTAL), gc);
240         gc.insets.top = 0;
241         gc.insets.bottom = 4;
242         gc.gridwidth = 1;
243         gc.fill = GridBagConstraints.NONE;
244
245         gc.gridy++;
246         contentP.add(new JLabel JavaDoc("Product:"), gc);
247         gc.gridy++;
248         contentP.add(new JLabel JavaDoc("Version:"), gc);
249         gc.gridy++;
250         contentP.add(new JLabel JavaDoc("Component:"), gc);
251         gc.gridy++;
252         contentP.add(new JLabel JavaDoc("Blocks:"), gc);
253         gc.gridx += 2;
254         gc.gridy = 3;
255         gc.insets.left = 10;
256         gc.gridy++;
257         contentP.add(new JLabel JavaDoc("Hardware:"), gc);
258         gc.gridy++;
259         contentP.add(new JLabel JavaDoc("OS:"), gc);
260         gc.gridy++;
261         contentP.add(new JLabel JavaDoc("Priority:"), gc);
262         gc.gridy++;
263         contentP.add(new JLabel JavaDoc("Severity:"), gc);
264         gc.gridy++;
265         contentP.add(new JLabel JavaDoc("Keywords:"), gc);
266
267         // add edit fields
268
gc.gridx = 1;
269         gc.gridy = -1;
270         gc.fill = GridBagConstraints.HORIZONTAL;
271         gc.weightx = 1;
272         gc.insets.left = 8;
273         //
274
gc.gridwidth = 3;
275         gc.gridy++;
276         contentP.add(_baseUrlTF, gc);
277         gc.gridy++;
278         contentP.add(_userTF, gc);
279         gc.gridy++;
280         contentP.add(_passwdTF, gc);
281         gc.gridwidth = 1;
282         gc.gridy++;
283         gc.gridy++;
284         contentP.add(_productTF, gc);
285         gc.gridy++;
286         contentP.add(_versionTF, gc);
287         gc.gridy++;
288         contentP.add(_componentTF, gc);
289         gc.gridy++;
290         contentP.add(_blocksTF, gc);
291         gc.gridx += 2;
292         gc.gridy = 3;
293         gc.gridy++;
294         contentP.add(_hardwareTF, gc);
295         gc.gridy++;
296         contentP.add(_osTF, gc);
297         gc.gridy++;
298         contentP.add(_priorTF, gc);
299         gc.gridy++;
300         contentP.add(_severTF, gc);
301         gc.gridy++;
302         contentP.add(_keywordsTF, gc);
303
304         p.add(contentP, BorderLayout.NORTH);
305         JScrollPane JavaDoc logSP = new JScrollPane JavaDoc(_logArea);
306         logSP.setPreferredSize(new Dimension JavaDoc(100,100));
307         logSP.setMaximumSize(new Dimension JavaDoc(100,100));
308         p.add(logSP, BorderLayout.SOUTH);
309         return p;
310     }
311
312     private void createActions() {
313         _cancelAction = new AbstractAction JavaDoc("Cancel") {
314             public void actionPerformed(ActionEvent JavaDoc e) {
315                 dispose();
316             }
317         };
318
319         _okAction = new AbstractAction JavaDoc("Submit") {
320             public void actionPerformed(ActionEvent JavaDoc e) {
321                 submit();
322             }
323         };
324     }
325
326     private void constructData() {
327
328         SimpleDateFormat JavaDoc statusWhiteboardFormat = new SimpleDateFormat JavaDoc("ddMMyy");
329
330         _tasksData = new Object JavaDoc[_tasks.length][];
331         for (int i = 0; i < _tasks.length; i++) {
332             TaskImpl task = _tasks[i];
333             long startTime = task.getStartTime() * Utils.MILLISECONDS_PER_DAY;
334             long endTime = Utils.countFinishTime(task.getStartTime(), task
335                     .getDuration())
336                     * Utils.MILLISECONDS_PER_DAY;
337             _tasksData[i] = new Object JavaDoc[6];
338             _tasksData[i][0] = new Boolean JavaDoc(true);
339             ColorLabel taskColLabel = _tasks[i].getColorLabel();
340             if(taskColLabel == null) {
341                 _tasksData[i][1] = ColorLabel.COLOR_LABELS[0]._icon;
342             } else {
343                 _tasksData[i][1] = taskColLabel._icon;
344             }
345             _tasksData[i][2] = task.getName();
346             _tasksData[i][3] = task.getMan().getName();
347             _tasksData[i][4] = new Integer JavaDoc(
348                     (int) ((double) task.getDuration() * 8d * 0.8));
349             _tasksData[i][5] = statusWhiteboardFormat.format(new Date JavaDoc(startTime))
350                     + "-" + statusWhiteboardFormat.format(new Date JavaDoc(endTime));
351         }
352     }
353
354     class TasksModel extends AbstractTableModel JavaDoc {
355
356         String JavaDoc[] COL_NAMES = new String JavaDoc[] { "", "Color", "Summary", "Assignee",
357                 "Estimated Time", "Status Whiteboard" };
358
359         Class JavaDoc[] COL_CLASSES = new Class JavaDoc[] { Boolean JavaDoc.class, Icon JavaDoc.class, String JavaDoc.class,
360                 String JavaDoc.class, String JavaDoc.class, String JavaDoc.class };
361
362         public String JavaDoc getColumnName(int column) {
363             return COL_NAMES[column];
364         }
365
366         public Class JavaDoc getColumnClass(int col) {
367             return COL_CLASSES[col];
368         }
369
370         public int getColumnCount() {
371             return COL_NAMES.length;
372         }
373
374         public int getRowCount() {
375             return _tasksData.length;
376         }
377
378         public boolean isCellEditable(int rowIndex, int columnIndex) {
379             return true;
380         }
381
382         public Object JavaDoc getValueAt(int rowIndex, int columnIndex) {
383             return _tasksData[rowIndex][columnIndex];
384         }
385
386         public void setValueAt(Object JavaDoc aValue, int rowIndex, int columnIndex) {
387             _tasksData[rowIndex][columnIndex] = aValue;
388         }
389
390     }
391
392     private void submit() {
393         _okAction.setEnabled(false);
394         new Thread JavaDoc() {
395             public void run() {
396                 try {
397                     int success = 0;
398                     int fails = 0;
399                     for (int i = 0; BugzillaExportDialog.this.isShowing() && i < _tasks.length; i++) {
400                         if (((Boolean JavaDoc) _tasksData[i][0]).booleanValue()) {
401
402                             final int row = i;
403                             SwingUtilities.invokeAndWait(new Runnable JavaDoc(){
404                                 public void run() {
405                                     _tasksTable.getSelectionModel().setSelectionInterval(row, row);
406                                     _tasksTable.scrollRectToVisible(_tasksTable.getCellRect(row, 0, true));
407                                 }
408                             });
409                             
410                             if(submitTask(_tasksData[i], _tasks[i])) {
411                                 success++;
412                                 SwingUtilities.invokeAndWait(new Runnable JavaDoc(){
413                                     public void run() {
414                                         _tasksData[row][0] = Boolean.FALSE;
415                                         ((TasksModel)_tasksTable.getModel()).fireTableDataChanged();
416                                     }
417                                 });
418                             } else {
419                                 fails++;
420                             }
421                         }
422                     }
423                     if(success > 0) {
424                         logMsg("Submitted " + success + " tasks");
425                     }
426                     if(fails > 0) {
427                         logMsg("Failed to submit " + fails + " tasks");
428                     }
429                 } catch(InterruptedException JavaDoc e) {
430                     e.printStackTrace();
431                 } catch (InvocationTargetException JavaDoc e) {
432                     e.printStackTrace();
433                 } finally {
434                     _okAction.setEnabled(true);
435                 }
436             }
437         }.start();
438     }
439
440     private boolean submitTask(Object JavaDoc[] taskData, TaskImpl task) {
441         BugzillaSubmitter bs = new BugzillaSubmitter();
442         Map JavaDoc<String JavaDoc, String JavaDoc> taskProps = new HashMap JavaDoc<String JavaDoc, String JavaDoc>();
443         taskProps.put(BugzillaSubmitter.SUMMARY, (String JavaDoc) taskData[2]);
444         taskProps.put(BugzillaSubmitter.ASSIGNED_TO, (String JavaDoc) taskData[3]);
445         taskProps.put(BugzillaSubmitter.ESTIMATED_TIME, String.valueOf((Integer JavaDoc) taskData[4]));
446         taskProps.put(BugzillaSubmitter.STATUS_WHITEBOARD, (String JavaDoc) taskData[5]);
447         
448         taskProps.put(BugzillaSubmitter.PRODUCT, _productTF.getText());
449         taskProps.put(BugzillaSubmitter.VERSION, _versionTF.getText());
450         taskProps.put(BugzillaSubmitter.COMPONENT, _componentTF.getText());
451         taskProps.put(BugzillaSubmitter.BLOCKS, _blocksTF.getText());
452         taskProps.put(BugzillaSubmitter.HARDWARE, _hardwareTF.getText());
453         taskProps.put(BugzillaSubmitter.OS, _osTF.getText());
454         taskProps.put(BugzillaSubmitter.PRIORITY, _priorTF.getText());
455         taskProps.put(BugzillaSubmitter.SEVERITY, _severTF.getText());
456         taskProps.put(BugzillaSubmitter.DESCRIPTION, ""); // required by bugzilla v. 2.2, (3.0 doesn't)
457
taskProps.put(BugzillaSubmitter.KEYWORDS, _keywordsTF.getText());
458
459         try {
460             //String bugId = "pokus";
461
String JavaDoc bugId = bs.submit(_baseUrlTF.getText(), _userTF.getText(),
462                     _passwdTF.getText(), taskProps);
463             logMsg("- Submitted bug #" + bugId + " for task '" + task.getName() + "'\n");
464             return true;
465         } catch (Exception JavaDoc e) {
466             String JavaDoc msg;
467             if(e instanceof IOException JavaDoc || e.getMessage() == null) {
468                 msg = e.toString();
469             } else {
470                 msg = e.getMessage();
471             }
472             logMsg("<font color=\"#ff0000\"><b>- Error submitting task '" + task.getName()
473                     + "'</b><br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + msg
474                     + "</font>\n");
475             return false;
476         }
477     }
478
479     private void logMsg(String JavaDoc msg) {
480         HTMLEditorKit JavaDoc kit =
481         (HTMLEditorKit JavaDoc) _logArea.getEditorKit();
482       Document JavaDoc doc = _logArea.getDocument();
483       StringReader JavaDoc reader = new StringReader JavaDoc(msg);
484       try {
485             kit.read(reader, doc, doc.getLength());
486         } catch (IOException JavaDoc e) {
487         } catch (BadLocationException JavaDoc e) {
488         }
489         int len = doc.getLength();
490         _logArea.setSelectionStart(len);
491         _logArea.setSelectionEnd(len);
492         _logArea.setPreferredSize(new Dimension JavaDoc(100,100));
493         _logArea.setMaximumSize(new Dimension JavaDoc(100,100));
494     }
495
496     public static void openDialog(JFrame JavaDoc owner, TaskImpl[] tasks) {
497         BugzillaExportDialog d = new BugzillaExportDialog(owner, tasks);
498         d.pack();
499         d.setLocationRelativeTo(owner);
500         d.setVisible(true);
501     }
502
503 }
504
Popular Tags