Source code: medi/swing/GenreManagement.java
1 /*
2 * GenreManagement_2.java
3 *
4 * Created on 21 aprile 2002, 18.58
5 Medi - A media archiver. Archives media files for easy management.
6 Copyright (C) 2002 Antonio Petrelli
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
22 Contact me at: brenmcguire@users.sourceforge.net
23 */
24
25 package medi.swing;
26
27 import javatools.db.*;
28 import medi.base.Provider;
29 import medi.swing.util.*;
30
31 /**
32 * It is a frame to manage assignment of data to a genre or a genre to a father
33 * genre.
34 * @author Antonio Petrelli
35 * @version 0.0.1
36 */
37 public class GenreManagement extends javax.swing.JDialog {
38
39 /** Adds an array of data to a genre.
40 */
41 public final int ADD_MODE = 1;
42 /** Moves an array of data from a genre to another genre.
43 */
44 public final int MOVE_MODE = 2;
45 /** Moves a genre from a point to another.
46 */
47 public final int MOVE_GENRE_MODE = 3;
48
49 /** Creates new form GenreManagement
50 * @param parent The parent frame.
51 * @param modal The modal flag.
52 */
53 public GenreManagement(java.awt.Frame parent, boolean modal) {
54 super(parent, modal);
55 initComponents();
56 butSelect.setEnabled(false);
57 }
58
59 /** Sets the provider to use.
60 * @param pPrv The provider to use.
61 */
62 public void setProvider(Provider pPrv) {
63 prv = pPrv;
64 }
65
66 /** Sets the mode (ADD_MODE, MOVE_MODE or MOVE_GENRE_MDOE).
67 * @param pMode The mode.
68 */
69 public void setMode(int pMode) {
70 mode = pMode;
71 switch (mode) {
72 case ADD_MODE:
73 lblGenreSelection.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Choose_a_genre_to_put_your_data"));
74 break;
75 case MOVE_MODE:
76 lblGenreSelection.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Choose_a_genre_to_move_your_data_to"));
77 break;
78 case MOVE_GENRE_MODE:
79 lblGenreSelection.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Choose_a_parent_genre_to_move_your_genre_to"));
80 }
81 }
82
83 /** Displays this frame.
84 */
85 public void show() {
86 try {
87 initTreeGenre();
88 }
89 catch (DbException e) {
90 System.out.println(e.getMessage());
91 }
92 super.show();
93 }
94
95 /** Sets the data array.
96 * @param pDataIDs The array of data IDs.
97 */
98 public void setDataIDs(Long[] pDataIDs) {
99 dataIDs = pDataIDs;
100 }
101
102 /** Sets the origin genre.
103 * @param pGenreID The origin genre ID.
104 */
105 public void setOriginGenre(Integer pGenreID) {
106 genreID = pGenreID;
107 }
108
109 /** This method is called from within the constructor to
110 * initialize the form.
111 * WARNING: Do NOT modify this code. The content of this method is
112 * always regenerated by the Form Editor.
113 */
114 private void initComponents() {//GEN-BEGIN:initComponents
115 lblGenreSelection = new javax.swing.JLabel();
116 scpGenre = new javax.swing.JScrollPane();
117 treeGenre = new javax.swing.JTree();
118 butButtons = new javax.swing.JPanel();
119 butSelect = new javax.swing.JButton();
120 butCancel = new javax.swing.JButton();
121
122 addWindowListener(new java.awt.event.WindowAdapter() {
123 public void windowClosing(java.awt.event.WindowEvent evt) {
124 closeDialog(evt);
125 }
126 });
127
128 lblGenreSelection.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("This_label_will_change"));
129 lblGenreSelection.setPreferredSize(new java.awt.Dimension(157, 20));
130 getContentPane().add(lblGenreSelection, java.awt.BorderLayout.NORTH);
131
132 scpGenre.setPreferredSize(new java.awt.Dimension(400, 363));
133 treeGenre.setToolTipText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Genres_tree"));
134 treeGenre.setShowsRootHandles(true);
135 treeGenre.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
136 public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
137 treeGenreValueChanged(evt);
138 }
139 });
140
141 treeGenre.addTreeWillExpandListener(new javax.swing.event.TreeWillExpandListener() {
142 public void treeWillExpand(javax.swing.event.TreeExpansionEvent evt)
143 throws javax.swing.tree.ExpandVetoException {
144 treeGenreTreeWillExpand(evt);
145 }
146 public void treeWillCollapse(javax.swing.event.TreeExpansionEvent evt)
147 throws javax.swing.tree.ExpandVetoException {
148 treeGenreTreeWillCollapse(evt);
149 }
150 });
151
152 scpGenre.setViewportView(treeGenre);
153
154 getContentPane().add(scpGenre, java.awt.BorderLayout.CENTER);
155
156 butSelect.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Select"));
157 butSelect.setToolTipText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Choose_the_selected_genre"));
158 butSelect.addActionListener(new java.awt.event.ActionListener() {
159 public void actionPerformed(java.awt.event.ActionEvent evt) {
160 butSelectActionPerformed(evt);
161 }
162 });
163
164 butButtons.add(butSelect);
165
166 butCancel.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Cancel"));
167 butCancel.setToolTipText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Cancel_the_operation"));
168 butCancel.addActionListener(new java.awt.event.ActionListener() {
169 public void actionPerformed(java.awt.event.ActionEvent evt) {
170 butCancelActionPerformed(evt);
171 }
172 });
173
174 butButtons.add(butCancel);
175
176 getContentPane().add(butButtons, java.awt.BorderLayout.SOUTH);
177
178 pack();
179 }//GEN-END:initComponents
180
181 private void butCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_butCancelActionPerformed
182 // Add your handling code here:
183 setVisible(false);
184 dispose();
185 }//GEN-LAST:event_butCancelActionPerformed
186
187 private void butSelectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_butSelectActionPerformed
188 // Add your handling code here:
189 int result;
190
191 result = javax.swing.JOptionPane.showConfirmDialog(null,
192 java.util.ResourceBundle.getBundle("res/MediBundle").getString("Are_you_sure_to_select_this_genre?"),
193 java.util.ResourceBundle.getBundle("res/MediBundle").getString("Confirm_genre_selection"), javax.swing.JOptionPane.YES_NO_OPTION,
194 javax.swing.JOptionPane.QUESTION_MESSAGE);
195
196 if (result != javax.swing.JOptionPane.YES_OPTION)
197 return;
198
199 try {
200 switch (mode) {
201 case ADD_MODE:
202 addLinkData2Genre();
203 break;
204 case MOVE_MODE:
205 moveLinkData2Genre();
206 break;
207 case MOVE_GENRE_MODE:
208 prv.moveLinkParentGenre(genreID, newGenreID);
209 default:
210 }
211 }
212 catch (DbException e) {
213 System.out.println(e.getMessage());
214 }
215 setVisible(false);
216 dispose();
217 }//GEN-LAST:event_butSelectActionPerformed
218
219 private void treeGenreValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_treeGenreValueChanged
220 // Add your handling code here:
221 int index;
222 MediTreeNode node;
223 javax.swing.tree.TreePath tempPath;
224 Object[] tempIDs;
225
226 tempPath = evt.getPath();
227 index = tempPath.getPathCount();
228 node = (MediTreeNode) tempPath.getLastPathComponent();
229 tempIDs = node.getID();
230 if (index >= 2) {
231 tempIDs = node.getID();
232 newGenreID = (Integer) tempIDs[0];
233 if (mode == MOVE_GENRE_MODE && genreID.equals(newGenreID))
234 butSelect.setEnabled(false);
235 else
236 butSelect.setEnabled(true);
237 }
238 else if (mode == MOVE_GENRE_MODE) {
239 newGenreID = null;
240 butSelect.setEnabled(true);
241 }
242 else {
243 genreID = null;
244 butSelect.setEnabled(false);
245 }
246 }//GEN-LAST:event_treeGenreValueChanged
247
248 private void treeGenreTreeWillCollapse(javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException {//GEN-FIRST:event_treeGenreTreeWillCollapse
249 // Add your handling code here:
250 ((MediTreeNode) evt.getPath().getLastPathComponent()).setExpanded(false);
251 }//GEN-LAST:event_treeGenreTreeWillCollapse
252
253 private void treeGenreTreeWillExpand(javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException {//GEN-FIRST:event_treeGenreTreeWillExpand
254 // Add your handling code here:
255 Object[] tempIDs;
256 String type;
257 int pathCount;
258 MediTreeNode tempNode;
259 javax.swing.tree.TreePath tempPath;
260 DbIterator rowIt;
261
262 try {
263 tempPath = evt.getPath();
264 pathCount = tempPath.getPathCount();
265 tempNode = (MediTreeNode) tempPath.getLastPathComponent();
266
267 if (tempNode.isExpanded())
268 return;
269
270 if (pathCount >= 2) {
271 tempIDs = tempNode.getID();
272 rowIt = prv.getGenres(null, (Integer) tempIDs[0]).iterator();
273 TreeUtils.fillTree(tempNode, rowIt, genreIndexes, genreIDIndexes, java.util.ResourceBundle.getBundle("res/MediBundle").getString("Genre"), ": ", true);
274 }
275 tempNode.setExpanded(true);
276 }
277 catch (DbException e) {
278 System.out.println(e.getMessage());
279 }
280 }//GEN-LAST:event_treeGenreTreeWillExpand
281
282 /** Closes the dialog */
283 private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
284 setVisible(false);
285 dispose();
286 }//GEN-LAST:event_closeDialog
287
288 // Variables declaration - do not modify//GEN-BEGIN:variables
289 private javax.swing.JLabel lblGenreSelection;
290 private javax.swing.JButton butSelect;
291 private javax.swing.JButton butCancel;
292 private javax.swing.JTree treeGenre;
293 private javax.swing.JScrollPane scpGenre;
294 private javax.swing.JPanel butButtons;
295 // End of variables declaration//GEN-END:variables
296
297 private Provider prv;
298 private int mode;
299 private Long[] dataIDs;
300 private Integer genreID;
301 private Integer newGenreID;
302 private MediTreeNode genreRoot;
303 private DbTable genreRes;
304
305 private int[] genreIndexes = {2};
306 private int[] genreIDIndexes = {0};
307
308 private void initTreeGenre() throws DbException {
309 DbIterator rowIt;
310 MediTreeNode tempRoot;
311
312 genreRoot = new MediTreeNode(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Genres"));
313 ((javax.swing.tree.DefaultTreeModel) treeGenre.getModel()).setRoot(genreRoot);
314 genreRes = prv.getGenres(null, null);
315 rowIt = genreRes.iterator();
316 tempRoot = (MediTreeNode)
317 ((javax.swing.tree.DefaultTreeModel) treeGenre.getModel()).getRoot();
318 TreeUtils.fillTree(tempRoot, rowIt, genreIndexes, genreIDIndexes, java.util.ResourceBundle.getBundle("res/MediBundle").getString("Genre"), ": ", true);
319 }
320
321 private void addLinkData2Genre() throws DbException {
322 int i, numValues;
323 MediTreeNode tempNode;
324
325 numValues = dataIDs.length;
326 for (i=0; i < numValues; i++) {
327 prv.linkDataToGenre(dataIDs[i], newGenreID);
328 }
329 }
330
331 private void moveLinkData2Genre() throws DbException {
332 int i, numValues;
333 MediTreeNode tempNode;
334
335 numValues = dataIDs.length;
336 for (i=0; i < numValues; i++) {
337 prv.moveLinkDataToGenre(dataIDs[i], genreID, newGenreID);
338 }
339 }
340 }