Source code: medi/swing/SessionManagement.java
1 /*
2 * SessionManagement_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 session, or session position.
33 * @author Antonio Petrelli
34 */
35 public class SessionManagement extends javax.swing.JDialog {
36
37 /** Adds an array of data to a session.
38 */
39 public final int ADD_MODE = 1;
40 /** Moves a data array from a session to another session.
41 */
42 public final int MOVE_MODE = 2;
43 /** Moves a session from a position to another.
44 */
45 public final int MOVE_SESSION_MODE = 3;
46
47 /** Creates new form SessionManagement
48 * @param parent The parent frame.
49 * @param modal The modal flag.
50 */
51 public SessionManagement(java.awt.Frame parent, boolean modal) {
52 super(parent, modal);
53 initComponents();
54 butSelect.setEnabled(false);
55 }
56
57 /** Sets the provider to use.
58 * @param pPrv The provider to use.
59 */
60 public void setProvider(Provider pPrv) {
61 prv = pPrv;
62 }
63
64 /** Sets the mode (ADD_MODE, MOVE_MODE or MOVE_SESSION_MODE).
65 * @param pMode The mode.
66 */
67 public void setMode(int pMode) {
68 mode = pMode;
69 switch (mode) {
70 case ADD_MODE:
71 lblSessionSelection.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Choose_a_directory_to_put_your_data"));
72 break;
73 case MOVE_MODE:
74 lblSessionSelection.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Choose_a_directory_to_move_your_data_to"));
75 break;
76 case MOVE_SESSION_MODE:
77 lblSessionSelection.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Choose_a_place_to_move_your_directory_to"));
78 break;
79 }
80 }
81
82 /** Shows this frame.
83 */
84 public void show() {
85 try {
86 initTreeSession();
87 }
88 catch (DbException e) {
89 System.out.println(e.getMessage());
90 }
91 super.show();
92 }
93
94 /** Sets the data array.
95 * @param pDataIDs The array of data IDs.
96 */
97 public void setDataIDs(Long[] pDataIDs) {
98 dataIDs = pDataIDs;
99 }
100
101 /** Sets the origin session.
102 * @param pVolumeID The origin volume ID.
103 * @param pSessionID The origin session ID.
104 */
105 public void setOriginSession(Integer pVolumeID, Integer pSessionID) {
106 volumeID = pVolumeID;
107 sessionID = pSessionID;
108 }
109
110 /** This method is called from within the constructor to
111 * initialize the form.
112 * WARNING: Do NOT modify this code. The content of this method is
113 * always regenerated by the Form Editor.
114 */
115 private void initComponents() {//GEN-BEGIN:initComponents
116 scpSession = new javax.swing.JScrollPane();
117 treeSession = new javax.swing.JTree();
118 panButtons = new javax.swing.JPanel();
119 butSelect = new javax.swing.JButton();
120 butCancel = new javax.swing.JButton();
121 lblSessionSelection = new javax.swing.JLabel();
122
123 addWindowListener(new java.awt.event.WindowAdapter() {
124 public void windowClosing(java.awt.event.WindowEvent evt) {
125 closeDialog(evt);
126 }
127 });
128
129 scpSession.setPreferredSize(new java.awt.Dimension(400, 363));
130 treeSession.setToolTipText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Volume/session_tree"));
131 treeSession.setShowsRootHandles(true);
132 treeSession.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
133 public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
134 treeSessionValueChanged(evt);
135 }
136 });
137
138 treeSession.addTreeWillExpandListener(new javax.swing.event.TreeWillExpandListener() {
139 public void treeWillExpand(javax.swing.event.TreeExpansionEvent evt)
140 throws javax.swing.tree.ExpandVetoException {
141 treeSessionTreeWillExpand(evt);
142 }
143 public void treeWillCollapse(javax.swing.event.TreeExpansionEvent evt)
144 throws javax.swing.tree.ExpandVetoException {
145 treeSessionTreeWillCollapse(evt);
146 }
147 });
148
149 scpSession.setViewportView(treeSession);
150
151 getContentPane().add(scpSession, java.awt.BorderLayout.CENTER);
152
153 butSelect.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Select"));
154 butSelect.setToolTipText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Choose_the_selected_session/volume"));
155 butSelect.addActionListener(new java.awt.event.ActionListener() {
156 public void actionPerformed(java.awt.event.ActionEvent evt) {
157 butSelectActionPerformed(evt);
158 }
159 });
160
161 panButtons.add(butSelect);
162
163 butCancel.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Cancel"));
164 butCancel.setToolTipText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Cancel_the_operation"));
165 butCancel.addActionListener(new java.awt.event.ActionListener() {
166 public void actionPerformed(java.awt.event.ActionEvent evt) {
167 butCancelActionPerformed(evt);
168 }
169 });
170
171 panButtons.add(butCancel);
172
173 getContentPane().add(panButtons, java.awt.BorderLayout.SOUTH);
174
175 lblSessionSelection.setText(java.util.ResourceBundle.getBundle("res/MediBundle").getString("This_label_will_change"));
176 lblSessionSelection.setPreferredSize(new java.awt.Dimension(157, 20));
177 getContentPane().add(lblSessionSelection, java.awt.BorderLayout.NORTH);
178
179 pack();
180 }//GEN-END:initComponents
181
182 private void butCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_butCancelActionPerformed
183 // Add your handling code here:
184 setVisible(false);
185 dispose();
186 }//GEN-LAST:event_butCancelActionPerformed
187
188 private void butSelectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_butSelectActionPerformed
189 // Add your handling code here:
190 int result;
191
192 result = javax.swing.JOptionPane.showConfirmDialog(null,
193 java.util.ResourceBundle.getBundle("res/MediBundle").getString("Are_you_sure_to_select_this_session?"),
194 java.util.ResourceBundle.getBundle("res/MediBundle").getString("Confirm_session_selection"), javax.swing.JOptionPane.YES_NO_OPTION,
195 javax.swing.JOptionPane.QUESTION_MESSAGE);
196
197 if (result != javax.swing.JOptionPane.YES_OPTION)
198 return;
199
200 try {
201 switch (mode) {
202 case ADD_MODE:
203 addLinkData2Session();
204 break;
205 case MOVE_MODE:
206 moveLinkData2Session();
207 break;
208 case MOVE_SESSION_MODE:
209 prv.moveLinkSessionToFatherSession(volumeID, sessionID,
210 newVolumeID, newSessionID);
211 break;
212 default:
213 }
214 }
215 catch (DbException e) {
216 System.out.println(e.getMessage());
217 }
218 setVisible(false);
219 dispose();
220 }//GEN-LAST:event_butSelectActionPerformed
221
222 private void treeSessionValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_treeSessionValueChanged
223 // Add your handling code here:
224 int index;
225 MediTreeNode node;
226 javax.swing.tree.TreePath tempPath;
227 Object[] tempIDs;
228
229 tempPath = evt.getPath();
230 index = tempPath.getPathCount();
231 node = (MediTreeNode) tempPath.getLastPathComponent();
232 tempIDs = node.getID();
233 if (index >= 4) {
234 tempIDs = node.getID();
235 newVolumeID = (Integer) tempIDs[0];
236 newSessionID = (Integer) tempIDs[1];
237 if (mode == MOVE_SESSION_MODE && volumeID.equals(newVolumeID) &&
238 sessionID.equals(newSessionID))
239 butSelect.setEnabled(false);
240 else
241 butSelect.setEnabled(true);
242 }
243 else if (index == 3 && mode == MOVE_SESSION_MODE) {
244 tempIDs = node.getID();
245 newVolumeID = (Integer) tempIDs[0];
246 newSessionID = null;
247 butSelect.setEnabled(true);
248 }
249 else {
250 volumeID = null;
251 sessionID = null;
252 butSelect.setEnabled(false);
253 }
254 }//GEN-LAST:event_treeSessionValueChanged
255
256 private void treeSessionTreeWillCollapse(javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException {//GEN-FIRST:event_treeSessionTreeWillCollapse
257 // Add your handling code here:
258 ((MediTreeNode) evt.getPath().getLastPathComponent()).setExpanded(false);
259 }//GEN-LAST:event_treeSessionTreeWillCollapse
260
261 private void treeSessionTreeWillExpand(javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException {//GEN-FIRST:event_treeSessionTreeWillExpand
262 // Add your handling code here:
263 Object[] tempIDs;
264 String type;
265 int pathCount;
266 MediTreeNode tempNode;
267 javax.swing.tree.TreePath tempPath;
268 DbIterator rowIt;
269
270 try {
271 tempPath = evt.getPath();
272 pathCount = tempPath.getPathCount();
273 tempNode = (MediTreeNode) tempPath.getLastPathComponent();
274
275 if (tempNode.isExpanded())
276 return;
277
278 switch (pathCount) {
279 case 2:
280 tempIDs = tempNode.getID();
281 rowIt = prv.getVolumes((Integer) tempIDs[0], null).iterator();
282 TreeUtils.fillTree(tempNode, rowIt, volumeIndexes, volumeIDIndexes, java.util.ResourceBundle.getBundle("res/MediBundle").getString("Volume"), ": ", true);
283 ((javax.swing.tree.DefaultTreeModel) treeSession.getModel()).reload();
284 break;
285 case 3:
286 tempIDs = tempNode.getID();
287 rowIt = prv.getSessions((Integer) tempIDs[0], null, null).iterator();
288 TreeUtils.fillTree(tempNode, rowIt, sessionIndexes, sessionIDIndexes, java.util.ResourceBundle.getBundle("res/MediBundle").getString("Session"), ": ", true);
289 ((javax.swing.tree.DefaultTreeModel) treeSession.getModel()).reload();
290 break;
291 default:
292 if (pathCount >= 4) {
293 tempIDs = tempNode.getID();
294 rowIt = prv.getSessions((Integer) tempIDs[0], null, (Integer) tempIDs[1]).iterator();
295 TreeUtils.fillTree(tempNode, rowIt, sessionIndexes, sessionIDIndexes, java.util.ResourceBundle.getBundle("res/MediBundle").getString("Session"), ": ", true);
296 ((javax.swing.tree.DefaultTreeModel) treeSession.getModel()).reload();
297 }
298 }
299 tempNode.setExpanded(true);
300 }
301 catch (DbException e) {
302 System.out.println(e.getMessage());
303 }
304 }//GEN-LAST:event_treeSessionTreeWillExpand
305
306 /** Closes the dialog */
307 private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
308 setVisible(false);
309 dispose();
310 }//GEN-LAST:event_closeDialog
311
312 // Variables declaration - do not modify//GEN-BEGIN:variables
313 private javax.swing.JLabel lblSessionSelection;
314 private javax.swing.JPanel panButtons;
315 private javax.swing.JButton butSelect;
316 private javax.swing.JButton butCancel;
317 private javax.swing.JTree treeSession;
318 private javax.swing.JScrollPane scpSession;
319 // End of variables declaration//GEN-END:variables
320
321 private Provider prv;
322 private int mode;
323 private Long[] dataIDs;
324 private Integer volumeID, sessionID;
325 private Integer newVolumeID, newSessionID;
326 private MediTreeNode containerRoot;
327 private DbTable containerRes;
328
329 private int[] containerIndexes = {0, 1};
330 private int[] containerIDIndexes = {0};
331 private int[] volumeIndexes = {0, 2};
332 private int[] volumeIDIndexes = {0};
333 private int[] sessionIndexes = {1, 4};
334 private int[] sessionIDIndexes = {0, 1};
335
336 private void initTreeSession() throws DbException {
337 DbIterator rowIt;
338 MediTreeNode tempRoot;
339
340 containerRoot = new MediTreeNode(java.util.ResourceBundle.getBundle("res/MediBundle").getString("Containers"));
341 ((javax.swing.tree.DefaultTreeModel) treeSession.getModel()).setRoot(containerRoot);
342 containerRes = prv.getContainers(null);
343 rowIt = containerRes.iterator();
344 tempRoot = (MediTreeNode)
345 ((javax.swing.tree.DefaultTreeModel) treeSession.getModel()).getRoot();
346 TreeUtils.fillTree(tempRoot, rowIt, containerIndexes, containerIDIndexes, java.util.ResourceBundle.getBundle("res/MediBundle").getString("Container"), ": ", true);
347 }
348
349 private void addLinkData2Session() throws DbException {
350 int i, numValues;
351 MediTreeNode tempNode;
352
353 numValues = dataIDs.length;
354 for (i=0; i < numValues; i++) {
355 prv.linkDataToSession(dataIDs[i], newVolumeID, newSessionID);
356 }
357 }
358
359 private void moveLinkData2Session() throws DbException {
360 int i, numValues;
361 MediTreeNode tempNode;
362
363 numValues = dataIDs.length;
364 for (i=0; i < numValues; i++) {
365 prv.moveLinkDataToSession(dataIDs[i], volumeID, sessionID,
366 newVolumeID, newSessionID);
367 }
368 }
369 }