📄 vsorttab.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Business Solution
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
* Portions created by Jorg Janke are Copyright (C) 1999-2002 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.grid;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import org.compiere.util.*;
import org.compiere.apps.*;
import org.compiere.swing.*;
/**
* Tab to maintain Order/Sequence
*
* @author Jorg Janke
* @version $Id: VSortTab.java,v 1.5 2003/02/14 06:44:14 jjanke Exp $
*/
public class VSortTab extends CPanel implements APanelTab, ActionListener
{
/**
* Tab Order Constructor
*
* @param WindowNo Window No
* @param AD_Table_ID Table No
* @param AD_ColumnSortOrder_ID Sort Column
* @param AD_ColumnSortYesNo_ID YesNo Column
*/
public VSortTab(int WindowNo, int AD_Table_ID, int AD_ColumnSortOrder_ID, int AD_ColumnSortYesNo_ID)
{
Log.trace(Log.l4_Data, "VSortTab");
m_WindowNo = WindowNo;
try
{
jbInit();
dynInit (AD_Table_ID, AD_ColumnSortOrder_ID, AD_ColumnSortYesNo_ID);
}
catch(Exception e)
{
Log.error("VSortTab", e);
}
} // VSortTab
private int m_WindowNo;
private String m_TableName = null;
private String m_ColumnSortName= null;
private String m_ColumnYesNoName = null;
private String m_KeyColumnName = null;
private String m_IdentifierColumnName = null;
private boolean m_IdentifierTranslated = false;
private String m_ParentColumnName = null;
private boolean m_saveSequence = false;
private APanel m_aPanel = null;
// UI variables
private GridBagLayout mainLayout = new GridBagLayout();
private CLabel noLabel = new CLabel();
private CLabel yesLabel = new CLabel();
private CButton bAdd = new CButton();
private CButton bRemove = new CButton();
private CButton bUp = new CButton();
private CButton bDown = new CButton();
//
private DefaultListModel noModel = new DefaultListModel();
private DefaultListModel yesModel = new DefaultListModel();
private JList noList = new JList(noModel);
private JList yesList = new JList(yesModel);
private JScrollPane noPane = new JScrollPane(noList);
private JScrollPane yesPane = new JScrollPane(yesList);
/**
* Static Layout
* @throws Exception
*/
private void jbInit() throws Exception
{
this.setLayout(mainLayout);
//
noLabel.setText("No");
yesLabel.setText("Yes");
//
bAdd.setIcon(Env.getImageIcon("Detail24.gif"));
bAdd.setMargin(new Insets(2, 2, 2, 2));
bAdd.addActionListener(this);
bRemove.setIcon(Env.getImageIcon("Parent24.gif"));
bRemove.setMargin(new Insets(2, 2, 2, 2));
bRemove.addActionListener(this);
bUp.setIcon(Env.getImageIcon("Previous24.gif"));
bUp.setMargin(new Insets(2, 2, 2, 2));
bUp.addActionListener(this);
bDown.setIcon(Env.getImageIcon("Next24.gif"));
bDown.setMargin(new Insets(2, 2, 2, 2));
bDown.addActionListener(this);
//
// yesList.setBorder(BorderFactory.createLoweredBevelBorder());
yesPane.setPreferredSize(new Dimension(200, 300));
yesList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// noList.setBorder(BorderFactory.createLoweredBevelBorder());
noPane.setPreferredSize(new Dimension(200, 300));
noList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
//
this.add(noLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(yesLabel, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(bDown, new GridBagConstraints(3, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
this.add(noPane, new GridBagConstraints(0, 1, 1, 3, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
this.add(yesPane, new GridBagConstraints(2, 1, 1, 3, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
this.add(bUp, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
this.add(bRemove, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
this.add(bAdd, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(4, 4, 4, 4), 0, 0));
} // jbInit
/**
* Dyanamic Init
* @param AD_Table_ID Table No
* @param AD_ColumnSortOrder_ID Sort Column
* @param AD_ColumnSortYesNo_ID YesNo Column
*/
private void dynInit (int AD_Table_ID, int AD_ColumnSortOrder_ID, int AD_ColumnSortYesNo_ID)
{
String sql = "SELECT t.TableName, c.AD_Column_ID, c.ColumnName, e.Name," // 1..4
+ "c.IsParent, c.IsKey, c.IsIdentifier, c.IsTranslated " // 4..8
+ "FROM AD_Table t, AD_Column c, AD_Element e "
+ "WHERE t.AD_Table_ID=?" // #1
+ " AND t.AD_Table_ID=c.AD_Table_ID"
+ " AND (c.AD_Column_ID=? OR AD_Column_ID=?" // #2..3
+ " OR c.IsParent='Y' OR c.IsKey='Y' OR c.IsIdentifier='Y')"
+ " AND c.AD_Element_ID=e.AD_Element_ID";
boolean trl = !Env.isBaseLanguage(Env.getCtx(), "AD_Element");
if (trl)
sql = "SELECT t.TableName, c.AD_Column_ID, c.ColumnName, et.Name," // 1..4
+ "c.IsParent, c.IsKey, c.IsIdentifier, c.IsTranslated " // 4..8
+ "FROM AD_Table t, AD_Column c, AD_Element_Trl et "
+ "WHERE t.AD_Table_ID=?" // #1
+ " AND t.AD_Table_ID=c.AD_Table_ID"
+ " AND (c.AD_Column_ID=? OR AD_Column_ID=?" // #2..3
+ " OR c.IsParent='Y' OR c.IsKey='Y' OR c.IsIdentifier='Y')"
+ " AND c.AD_Element_ID=et.AD_Element_ID"
+ " AND et.AD_Language=?"; // #4
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, AD_Table_ID);
pstmt.setInt(2, AD_ColumnSortOrder_ID);
pstmt.setInt(3, AD_ColumnSortYesNo_ID);
if (trl)
pstmt.setString(4, Env.getAD_Language(Env.getCtx()));
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
m_TableName = rs.getString(1);
// Sort Column
if (AD_ColumnSortOrder_ID == rs.getInt(2))
{
Log.trace(Log.l6_Database, "VSortTab.dynInit - Sort", rs.getString(1) + "." + rs.getString(3));
m_ColumnSortName = rs.getString(3);
yesLabel.setText(rs.getString(4));
}
// Optional YesNo
else if (AD_ColumnSortYesNo_ID == rs.getInt(2))
{
Log.trace(Log.l6_Database, "VSortTab.dynInit - YesNo", rs.getString(1) + "." + rs.getString(3));
m_ColumnYesNoName = rs.getString(3);
}
// Parent
else if (rs.getString(5).equals("Y"))
{
Log.trace(Log.l6_Database, "VSortTab.dynInit - Parent", rs.getString(1) + "." + rs.getString(3));
m_ParentColumnName = rs.getString(3);
}
// KeyColumn
else if (rs.getString(6).equals("Y"))
{
Log.trace(Log.l6_Database, "VSortTab.dynInit - Key", rs.getString(1) + "." + rs.getString(3));
m_KeyColumnName = rs.getString(3);
}
// Identifier
else if (rs.getString(7).equals("Y"))
{
Log.trace(Log.l6_Database, "VSortTab.dynInit - Identifier", rs.getString(1) + "." + rs.getString(3));
m_IdentifierColumnName = rs.getString(3);
if (trl)
m_IdentifierTranslated = "Y".equals(rs.getString(8));
}
else
Log.trace(Log.l6_Database, "VSortTab.dynInit - ??NotUsed??", rs.getString(1) + "." + rs.getString(3));
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("VSortTab.dynInit\nSQL=" + sql.toString(), e);
}
noLabel.setText(Msg.getMsg(Env.getCtx(), "Available"));
} // dynInit
/**
* Register APanel
* @param panel panel
*/
public void registerAPanel (APanel panel)
{
m_aPanel = panel;
} // registerAPanel
/**
* Unregister APanel
*/
public void unregisterPanel ()
{
saveData();
m_aPanel = null;
} // dispoase
/*************************************************************************/
/**
* ActionPerformed
* @param e event
*/
public void actionPerformed(ActionEvent e)
{
// ADD ->
if (e.getSource() == bAdd)
{
Object objects[] = noList.getSelectedValues();
for (int i = 0; i < objects.length; i++)
{
if (objects[i] != null && noModel.removeElement(objects[i]))
{
Log.trace(Log.l4_Data, "actionPerformed - Add", objects[i]);
yesModel.addElement(objects[i]);
yesList.setSelectedValue(objects[i], true);
m_saveSequence = true;
}
}
}
// REMOVE <-
else if (e.getSource() == bRemove)
{
Object objects[] = yesList.getSelectedValues();
for (int i = 0; i < objects.length; i++)
{
if (objects[i] != null && yesModel.removeElement(objects[i]))
{
Log.trace(Log.l4_Data, "actionPerformed - Remove", objects[i]);
noModel.addElement(objects[i]);
m_saveSequence = true;
}
}
}
// UP |
else if (e.getSource() == bUp)
{
int indexes[] = yesList.getSelectedIndices();
Object objects[] = yesList.getSelectedValues();
for (int i = 0; i < indexes.length; i++)
{
if (indexes[i] > 0)
{
Object obj = yesList.getSelectedValue();
Log.trace(Log.l4_Data, "actionPerformed - Up", obj);
if (yesModel.removeElement(obj))
yesModel.insertElementAt(obj, indexes[i]-1);
m_saveSequence = true;
indexes[i]--;
}
}
yesList.setSelectedIndices(indexes);
}
// DOWN |
else if (e.getSource() == bDown)
{
int indexes[] = yesList.getSelectedIndices();
for (int i = 0; i < indexes.length; i++)
{
if (indexes[i] != -1 && indexes[i] < yesModel.size()-1)
{
Object obj = yesList.getSelectedValue();
Log.trace(Log.l4_Data, "actionPerformed - Down", obj);
if (yesModel.removeElement(obj))
yesModel.insertElementAt(obj, indexes[i]+1);
m_saveSequence = true;
indexes[i]++;
}
}
yesList.setSelectedIndices(indexes);
}
// Enable explicit Save
if (m_saveSequence && m_aPanel != null)
m_aPanel.aSave.setEnabled(true);
} // actionPerformed
/*************************************************************************/
/**
* Load Data
*/
public void loadData()
{
yesModel.removeAllElements();
noModel.removeAllElements();
//
StringBuffer sql = new StringBuffer();
// Columns
sql.append("SELECT t.").append(m_KeyColumnName) // 1
.append(m_IdentifierTranslated ? ",tt." : ",t.").append(m_IdentifierColumnName)
.append(",t.").append(m_ColumnSortName); // 3
if (m_ColumnYesNoName != null)
sql.append(",t.").append(m_ColumnYesNoName); // 4
// Tables
sql.append(" FROM ").append(m_TableName).append( " t");
if (m_IdentifierTranslated)
sql.append(", ").append(m_TableName).append("_Trl tt");
// Where
sql.append(" WHERE t.").append(m_ParentColumnName).append("=?");
if (m_IdentifierTranslated)
sql.append(" AND t.").append(m_KeyColumnName).append("=tt.").append(m_KeyColumnName)
.append(" AND tt.AD_Language=?");
// Order
sql.append(" ORDER BY t.").append(m_ColumnSortName);
int ID = Env.getContextAsInt(Env.getCtx(), m_WindowNo, m_ParentColumnName);
Log.trace(Log.l4_Data, "VSortTab.loadData", sql.toString() + " - ID=" + ID);
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString());
pstmt.setInt(1, ID);
if (m_IdentifierTranslated)
pstmt.setString(2, Env.getAD_Language(Env.getCtx()));
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
int key = rs.getInt(1);
String name = rs.getString(2);
int seq = rs.getInt(3);
boolean isYes = seq != 0;
if (m_ColumnYesNoName != null)
isYes = rs.getString(4).equals("Y");
//
KeyNamePair pp = new KeyNamePair(key, name);
if (isYes)
yesModel.addElement(pp);
else
noModel.addElement(pp);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("VSortTab.loadData", e);
}
m_saveSequence = false;
} // loadData
/**
* Save Data
*/
public void saveData()
{
if (!m_saveSequence)
return;
Log.trace(Log.l1_User, "VSortTab.saveData");
StringBuffer sql = null;
// noList - Set SortColumn to null and optional YesNo Column to 'N'
for (int i = 0; i < noModel.getSize(); i++)
{
KeyNamePair pp = (KeyNamePair)noModel.getElementAt(i);
sql = new StringBuffer();
sql.append("UPDATE ").append(m_TableName)
.append(" SET ").append(m_ColumnSortName).append("=0");
if (m_ColumnYesNoName != null)
sql.append(",").append(m_ColumnYesNoName).append("='N'");
sql.append(" WHERE ").append(m_KeyColumnName).append("=").append(pp.getKey());
if (DB.executeUpdate(sql.toString()) != 1)
Log.error("VSortTab.saveData - NoModel - Not updated: " + m_KeyColumnName + "=" + pp.getKey());
}
// yesList - Set SortColumn to value and optional YesNo Column to 'Y'
for (int i = 0; i < yesModel.getSize(); i++)
{
KeyNamePair pp = (KeyNamePair)yesModel.getElementAt(i);
sql = new StringBuffer();
sql.append("UPDATE ").append(m_TableName)
.append(" SET ").append(m_ColumnSortName).append("=").append(i+1).append("0"); // 10 steps
if (m_ColumnYesNoName != null)
sql.append(",").append(m_ColumnYesNoName).append("='Y'");
sql.append(" WHERE ").append(m_KeyColumnName).append("=").append(pp.getKey());
if (DB.executeUpdate(sql.toString()) != 1)
Log.error("VSortTab.saveData - YesModel - Not updated: " + m_KeyColumnName + "=" + pp.getKey());
}
} // saveData
} // VSortTab
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -