1 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 31 public class VSortTab extends CPanel implements APanelTab, ActionListener 32 { 33 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 e) 52 { 53 Log.error("VSortTab", e); 54 } 55 } 57 private int m_WindowNo; 58 private String m_TableName = null; 59 private String m_ColumnSortName= null; 60 private String m_ColumnYesNoName = null; 61 private String m_KeyColumnName = null; 62 private String m_IdentifierColumnName = null; 63 private boolean m_IdentifierTranslated = false; 64 private String m_ParentColumnName = null; 65 66 private boolean m_saveSequence = false; 67 private APanel m_aPanel = null; 68 69 70 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 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 90 private void jbInit() throws Exception 91 { 92 this.setLayout(mainLayout); 93 noLabel.setText("No"); 95 yesLabel.setText("Yes"); 96 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 yesPane.setPreferredSize(new Dimension(200, 300)); 112 yesList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 113 noPane.setPreferredSize(new Dimension(200, 300)); 115 noList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 116 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 } 135 141 private void dynInit (int AD_Table_ID, int AD_ColumnSortOrder_ID, int AD_ColumnSortYesNo_ID) 142 { 143 String sql = "SELECT t.TableName, c.AD_Column_ID, c.ColumnName, e.Name," + "c.IsParent, c.IsKey, c.IsIdentifier, c.IsTranslated " + "FROM AD_Table t, AD_Column c, AD_Element e " 146 + "WHERE t.AD_Table_ID=?" + " AND t.AD_Table_ID=c.AD_Table_ID" 148 + " AND (c.AD_Column_ID=? OR AD_Column_ID=?" + " 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," + "c.IsParent, c.IsKey, c.IsIdentifier, c.IsTranslated " + "FROM AD_Table t, AD_Column c, AD_Element_Trl et " 156 + "WHERE t.AD_Table_ID=?" + " AND t.AD_Table_ID=c.AD_Table_ID" 158 + " AND (c.AD_Column_ID=? OR AD_Column_ID=?" + " 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=?"; 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 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 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 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 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 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 } 220 224 public void registerAPanel (APanel panel) 225 { 226 m_aPanel = panel; 227 } 229 232 public void unregisterPanel () 233 { 234 saveData(); 235 m_aPanel = null; 236 } 238 239 240 241 245 public void actionPerformed(ActionEvent e) 246 { 247 if (e.getSource() == bAdd) 249 { 250 Object 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 else if (e.getSource() == bRemove) 264 { 265 Object 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 else if (e.getSource() == bUp) 278 { 279 int indexes[] = yesList.getSelectedIndices(); 280 Object objects[] = yesList.getSelectedValues(); 281 for (int i = 0; i < indexes.length; i++) 282 { 283 if (indexes[i] > 0) 284 { 285 Object 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 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 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 if (m_saveSequence && m_aPanel != null) 316 m_aPanel.aSave.setEnabled(true); 317 318 } 320 321 322 325 public void loadData() 326 { 327 yesModel.removeAllElements(); 328 noModel.removeAllElements(); 329 StringBuffer sql = new StringBuffer (); 331 sql.append("SELECT t.").append(m_KeyColumnName) .append(m_IdentifierTranslated ? ",tt." : ",t.").append(m_IdentifierColumnName) 334 .append(",t.").append(m_ColumnSortName); if (m_ColumnYesNoName != null) 336 sql.append(",t.").append(m_ColumnYesNoName); sql.append(" FROM ").append(m_TableName).append( " t"); 339 if (m_IdentifierTranslated) 340 sql.append(", ").append(m_TableName).append("_Trl tt"); 341 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 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 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 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 } 382 385 public void saveData() 386 { 387 if (!m_saveSequence) 388 return; 389 Log.trace(Log.l1_User, "VSortTab.saveData"); 390 StringBuffer sql = null; 391 for (int i = 0; i < noModel.getSize(); i++) 393 { 394 KeyNamePair pp = (KeyNamePair)noModel.getElementAt(i); 395 sql = new StringBuffer (); 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 for (int i = 0; i < yesModel.getSize(); i++) 406 { 407 KeyNamePair pp = (KeyNamePair)yesModel.getElementAt(i); 408 sql = new StringBuffer (); 409 sql.append("UPDATE ").append(m_TableName) 410 .append(" SET ").append(m_ColumnSortName).append("=").append(i+1).append("0"); 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 } 419 } 421 | Popular Tags |