KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > grid > VSortTab


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
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 for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2002 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.grid;
15
16 import java.awt.*;
17 import java.awt.event.*;
18 import javax.swing.*;
19 import java.sql.*;
20
21 import org.compiere.util.*;
22 import org.compiere.apps.*;
23 import org.compiere.swing.*;
24
25 /**
26  * Tab to maintain Order/Sequence
27  *
28  * @author Jorg Janke
29  * @version $Id: VSortTab.java,v 1.5 2003/02/14 06:44:14 jjanke Exp $
30  */

31 public class VSortTab extends CPanel implements APanelTab, ActionListener
32 {
33     /**
34      * Tab Order Constructor
35      *
36      * @param WindowNo Window No
37      * @param AD_Table_ID Table No
38      * @param AD_ColumnSortOrder_ID Sort Column
39      * @param AD_ColumnSortYesNo_ID YesNo Column
40      */

41     public VSortTab(int WindowNo, int AD_Table_ID, int AD_ColumnSortOrder_ID, int AD_ColumnSortYesNo_ID)
42     {
43         Log.trace(Log.l4_Data, "VSortTab");
44         m_WindowNo = WindowNo;
45
46         try
47         {
48             jbInit();
49             dynInit (AD_Table_ID, AD_ColumnSortOrder_ID, AD_ColumnSortYesNo_ID);
50         }
51         catch(Exception JavaDoc e)
52         {
53             Log.error("VSortTab", e);
54         }
55     } // VSortTab
56

57     private int m_WindowNo;
58     private String JavaDoc m_TableName = null;
59     private String JavaDoc m_ColumnSortName= null;
60     private String JavaDoc m_ColumnYesNoName = null;
61     private String JavaDoc m_KeyColumnName = null;
62     private String JavaDoc m_IdentifierColumnName = null;
63     private boolean m_IdentifierTranslated = false;
64     private String JavaDoc m_ParentColumnName = null;
65
66     private boolean m_saveSequence = false;
67     private APanel m_aPanel = null;
68
69
70     // UI variables
71
private GridBagLayout mainLayout = new GridBagLayout();
72     private CLabel noLabel = new CLabel();
73     private CLabel yesLabel = new CLabel();
74     private CButton bAdd = new CButton();
75     private CButton bRemove = new CButton();
76     private CButton bUp = new CButton();
77     private CButton bDown = new CButton();
78     //
79
private DefaultListModel noModel = new DefaultListModel();
80     private DefaultListModel yesModel = new DefaultListModel();
81     private JList noList = new JList(noModel);
82     private JList yesList = new JList(yesModel);
83     private JScrollPane noPane = new JScrollPane(noList);
84     private JScrollPane yesPane = new JScrollPane(yesList);
85
86     /**
87      * Static Layout
88      * @throws Exception
89      */

90     private void jbInit() throws Exception JavaDoc
91     {
92         this.setLayout(mainLayout);
93         //
94
noLabel.setText("No");
95         yesLabel.setText("Yes");
96         //
97
bAdd.setIcon(Env.getImageIcon("Detail24.gif"));
98         bAdd.setMargin(new Insets(2, 2, 2, 2));
99         bAdd.addActionListener(this);
100         bRemove.setIcon(Env.getImageIcon("Parent24.gif"));
101         bRemove.setMargin(new Insets(2, 2, 2, 2));
102         bRemove.addActionListener(this);
103         bUp.setIcon(Env.getImageIcon("Previous24.gif"));
104         bUp.setMargin(new Insets(2, 2, 2, 2));
105         bUp.addActionListener(this);
106         bDown.setIcon(Env.getImageIcon("Next24.gif"));
107         bDown.setMargin(new Insets(2, 2, 2, 2));
108         bDown.addActionListener(this);
109         //
110
// yesList.setBorder(BorderFactory.createLoweredBevelBorder());
111
yesPane.setPreferredSize(new Dimension(200, 300));
112         yesList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
113     // noList.setBorder(BorderFactory.createLoweredBevelBorder());
114
noPane.setPreferredSize(new Dimension(200, 300));
115         noList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
116         //
117
this.add(noLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
118             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
119         this.add(yesLabel, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
120             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
121         this.add(bDown, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
122             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
123         this.add(noPane, new GridBagConstraints(0, 1, 1, 3, 0.0, 0.0
124             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
125         this.add(yesPane, new GridBagConstraints(2, 1, 1, 3, 0.0, 0.0
126             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
127         this.add(bUp, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
128             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
129         this.add(bRemove, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
130             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
131         this.add(bAdd, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
132             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
133     } // jbInit
134

135     /**
136      * Dyanamic Init
137      * @param AD_Table_ID Table No
138      * @param AD_ColumnSortOrder_ID Sort Column
139      * @param AD_ColumnSortYesNo_ID YesNo Column
140      */

141     private void dynInit (int AD_Table_ID, int AD_ColumnSortOrder_ID, int AD_ColumnSortYesNo_ID)
142     {
143         String JavaDoc sql = "SELECT t.TableName, c.AD_Column_ID, c.ColumnName, e.Name," // 1..4
144
+ "c.IsParent, c.IsKey, c.IsIdentifier, c.IsTranslated " // 4..8
145
+ "FROM AD_Table t, AD_Column c, AD_Element e "
146             + "WHERE t.AD_Table_ID=?" // #1
147
+ " AND t.AD_Table_ID=c.AD_Table_ID"
148             + " AND (c.AD_Column_ID=? OR AD_Column_ID=?" // #2..3
149
+ " OR c.IsParent='Y' OR c.IsKey='Y' OR c.IsIdentifier='Y')"
150             + " AND c.AD_Element_ID=e.AD_Element_ID";
151         boolean trl = !Env.isBaseLanguage(Env.getCtx(), "AD_Element");
152         if (trl)
153             sql = "SELECT t.TableName, c.AD_Column_ID, c.ColumnName, et.Name," // 1..4
154
+ "c.IsParent, c.IsKey, c.IsIdentifier, c.IsTranslated " // 4..8
155
+ "FROM AD_Table t, AD_Column c, AD_Element_Trl et "
156                 + "WHERE t.AD_Table_ID=?" // #1
157
+ " AND t.AD_Table_ID=c.AD_Table_ID"
158                 + " AND (c.AD_Column_ID=? OR AD_Column_ID=?" // #2..3
159
+ " OR c.IsParent='Y' OR c.IsKey='Y' OR c.IsIdentifier='Y')"
160                 + " AND c.AD_Element_ID=et.AD_Element_ID"
161                 + " AND et.AD_Language=?"; // #4
162
try
163         {
164             PreparedStatement pstmt = DB.prepareStatement(sql);
165             pstmt.setInt(1, AD_Table_ID);
166             pstmt.setInt(2, AD_ColumnSortOrder_ID);
167             pstmt.setInt(3, AD_ColumnSortYesNo_ID);
168             if (trl)
169                 pstmt.setString(4, Env.getAD_Language(Env.getCtx()));
170             ResultSet rs = pstmt.executeQuery();
171             while (rs.next())
172             {
173                 m_TableName = rs.getString(1);
174                 // Sort Column
175
if (AD_ColumnSortOrder_ID == rs.getInt(2))
176                 {
177                     Log.trace(Log.l6_Database, "VSortTab.dynInit - Sort", rs.getString(1) + "." + rs.getString(3));
178                     m_ColumnSortName = rs.getString(3);
179                     yesLabel.setText(rs.getString(4));
180                 }
181                 // Optional YesNo
182
else if (AD_ColumnSortYesNo_ID == rs.getInt(2))
183                 {
184                     Log.trace(Log.l6_Database, "VSortTab.dynInit - YesNo", rs.getString(1) + "." + rs.getString(3));
185                     m_ColumnYesNoName = rs.getString(3);
186                 }
187                 // Parent
188
else if (rs.getString(5).equals("Y"))
189                 {
190                     Log.trace(Log.l6_Database, "VSortTab.dynInit - Parent", rs.getString(1) + "." + rs.getString(3));
191                     m_ParentColumnName = rs.getString(3);
192                 }
193                 // KeyColumn
194
else if (rs.getString(6).equals("Y"))
195                 {
196                     Log.trace(Log.l6_Database, "VSortTab.dynInit - Key", rs.getString(1) + "." + rs.getString(3));
197                     m_KeyColumnName = rs.getString(3);
198                 }
199                 // Identifier
200
else if (rs.getString(7).equals("Y"))
201                 {
202                     Log.trace(Log.l6_Database, "VSortTab.dynInit - Identifier", rs.getString(1) + "." + rs.getString(3));
203                     m_IdentifierColumnName = rs.getString(3);
204                     if (trl)
205                         m_IdentifierTranslated = "Y".equals(rs.getString(8));
206                 }
207                 else
208                     Log.trace(Log.l6_Database, "VSortTab.dynInit - ??NotUsed??", rs.getString(1) + "." + rs.getString(3));
209             }
210             rs.close();
211             pstmt.close();
212         }
213         catch (SQLException e)
214         {
215             Log.error("VSortTab.dynInit\nSQL=" + sql.toString(), e);
216         }
217         noLabel.setText(Msg.getMsg(Env.getCtx(), "Available"));
218     } // dynInit
219

220     /**
221      * Register APanel
222      * @param panel panel
223      */

224     public void registerAPanel (APanel panel)
225     {
226         m_aPanel = panel;
227     } // registerAPanel
228

229     /**
230      * Unregister APanel
231      */

232     public void unregisterPanel ()
233     {
234         saveData();
235         m_aPanel = null;
236     } // dispoase
237

238
239     /*************************************************************************/
240
241     /**
242      * ActionPerformed
243      * @param e event
244      */

245     public void actionPerformed(ActionEvent e)
246     {
247         // ADD ->
248
if (e.getSource() == bAdd)
249         {
250             Object JavaDoc objects[] = noList.getSelectedValues();
251             for (int i = 0; i < objects.length; i++)
252             {
253                 if (objects[i] != null && noModel.removeElement(objects[i]))
254                 {
255                     Log.trace(Log.l4_Data, "actionPerformed - Add", objects[i]);
256                     yesModel.addElement(objects[i]);
257                     yesList.setSelectedValue(objects[i], true);
258                     m_saveSequence = true;
259                 }
260             }
261         }
262         // REMOVE <-
263
else if (e.getSource() == bRemove)
264         {
265             Object JavaDoc objects[] = yesList.getSelectedValues();
266             for (int i = 0; i < objects.length; i++)
267             {
268                 if (objects[i] != null && yesModel.removeElement(objects[i]))
269                 {
270                     Log.trace(Log.l4_Data, "actionPerformed - Remove", objects[i]);
271                     noModel.addElement(objects[i]);
272                     m_saveSequence = true;
273                 }
274             }
275         }
276         // UP |
277
else if (e.getSource() == bUp)
278         {
279             int indexes[] = yesList.getSelectedIndices();
280             Object JavaDoc objects[] = yesList.getSelectedValues();
281             for (int i = 0; i < indexes.length; i++)
282             {
283                 if (indexes[i] > 0)
284                 {
285                     Object JavaDoc obj = yesList.getSelectedValue();
286                     Log.trace(Log.l4_Data, "actionPerformed - Up", obj);
287                     if (yesModel.removeElement(obj))
288                         yesModel.insertElementAt(obj, indexes[i]-1);
289                     m_saveSequence = true;
290                     indexes[i]--;
291                 }
292             }
293             yesList.setSelectedIndices(indexes);
294         }
295         // DOWN |
296
else if (e.getSource() == bDown)
297         {
298             int indexes[] = yesList.getSelectedIndices();
299             for (int i = 0; i < indexes.length; i++)
300             {
301                 if (indexes[i] != -1 && indexes[i] < yesModel.size()-1)
302                 {
303                     Object JavaDoc obj = yesList.getSelectedValue();
304                     Log.trace(Log.l4_Data, "actionPerformed - Down", obj);
305                     if (yesModel.removeElement(obj))
306                         yesModel.insertElementAt(obj, indexes[i]+1);
307                     m_saveSequence = true;
308                     indexes[i]++;
309                 }
310             }
311             yesList.setSelectedIndices(indexes);
312         }
313
314         // Enable explicit Save
315
if (m_saveSequence && m_aPanel != null)
316             m_aPanel.aSave.setEnabled(true);
317
318     } // actionPerformed
319

320     /*************************************************************************/
321
322     /**
323      * Load Data
324      */

325     public void loadData()
326     {
327         yesModel.removeAllElements();
328         noModel.removeAllElements();
329         //
330
StringBuffer JavaDoc sql = new StringBuffer JavaDoc();
331         // Columns
332
sql.append("SELECT t.").append(m_KeyColumnName) // 1
333
.append(m_IdentifierTranslated ? ",tt." : ",t.").append(m_IdentifierColumnName)
334             .append(",t.").append(m_ColumnSortName); // 3
335
if (m_ColumnYesNoName != null)
336             sql.append(",t.").append(m_ColumnYesNoName); // 4
337
// Tables
338
sql.append(" FROM ").append(m_TableName).append( " t");
339         if (m_IdentifierTranslated)
340             sql.append(", ").append(m_TableName).append("_Trl tt");
341         // Where
342
sql.append(" WHERE t.").append(m_ParentColumnName).append("=?");
343         if (m_IdentifierTranslated)
344             sql.append(" AND t.").append(m_KeyColumnName).append("=tt.").append(m_KeyColumnName)
345                 .append(" AND tt.AD_Language=?");
346         // Order
347
sql.append(" ORDER BY t.").append(m_ColumnSortName);
348         int ID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, m_ParentColumnName);
349         Log.trace(Log.l4_Data, "VSortTab.loadData", sql.toString() + " - ID=" + ID);
350         try
351         {
352             PreparedStatement pstmt = DB.prepareStatement(sql.toString());
353             pstmt.setInt(1, ID);
354             if (m_IdentifierTranslated)
355                 pstmt.setString(2, Env.getAD_Language(Env.getCtx()));
356             ResultSet rs = pstmt.executeQuery();
357             while (rs.next())
358             {
359                 int key = rs.getInt(1);
360                 String JavaDoc name = rs.getString(2);
361                 int seq = rs.getInt(3);
362                 boolean isYes = seq != 0;
363                 if (m_ColumnYesNoName != null)
364                     isYes = rs.getString(4).equals("Y");
365                 //
366
KeyNamePair pp = new KeyNamePair(key, name);
367                 if (isYes)
368                     yesModel.addElement(pp);
369                 else
370                     noModel.addElement(pp);
371             }
372             rs.close();
373             pstmt.close();
374         }
375         catch (SQLException e)
376         {
377             Log.error("VSortTab.loadData", e);
378         }
379         m_saveSequence = false;
380     } // loadData
381

382     /**
383      * Save Data
384      */

385     public void saveData()
386     {
387         if (!m_saveSequence)
388             return;
389         Log.trace(Log.l1_User, "VSortTab.saveData");
390         StringBuffer JavaDoc sql = null;
391         // noList - Set SortColumn to null and optional YesNo Column to 'N'
392
for (int i = 0; i < noModel.getSize(); i++)
393         {
394             KeyNamePair pp = (KeyNamePair)noModel.getElementAt(i);
395             sql = new StringBuffer JavaDoc();
396             sql.append("UPDATE ").append(m_TableName)
397                 .append(" SET ").append(m_ColumnSortName).append("=0");
398             if (m_ColumnYesNoName != null)
399                 sql.append(",").append(m_ColumnYesNoName).append("='N'");
400             sql.append(" WHERE ").append(m_KeyColumnName).append("=").append(pp.getKey());
401             if (DB.executeUpdate(sql.toString()) != 1)
402                 Log.error("VSortTab.saveData - NoModel - Not updated: " + m_KeyColumnName + "=" + pp.getKey());
403         }
404         // yesList - Set SortColumn to value and optional YesNo Column to 'Y'
405
for (int i = 0; i < yesModel.getSize(); i++)
406         {
407             KeyNamePair pp = (KeyNamePair)yesModel.getElementAt(i);
408             sql = new StringBuffer JavaDoc();
409             sql.append("UPDATE ").append(m_TableName)
410                 .append(" SET ").append(m_ColumnSortName).append("=").append(i+1).append("0"); // 10 steps
411
if (m_ColumnYesNoName != null)
412                 sql.append(",").append(m_ColumnYesNoName).append("='Y'");
413             sql.append(" WHERE ").append(m_KeyColumnName).append("=").append(pp.getKey());
414             if (DB.executeUpdate(sql.toString()) != 1)
415                 Log.error("VSortTab.saveData - YesModel - Not updated: " + m_KeyColumnName + "=" + pp.getKey());
416         }
417     } // saveData
418

419 } // VSortTab
420

421
Popular Tags