📄 mtree.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-2001 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.model;
import java.sql.*;
import java.util.*;
import org.compiere.util.*;
/**
* Builds Tree.
* Creates tree structure - maintained in VTreePanel
*
* @author Jorg Janke
* @version $Id: MTree.java,v 1.2 2003/02/19 06:48:23 jjanke Exp $
*/
public class MTree
{
/**
* Construct Tree
* @param AD_Tree_ID The tree to build
* @param editable True, if tree can be modified
* - includes inactive and empty summary nodes
*/
public MTree (int AD_Tree_ID, boolean editable)
{
this (AD_Tree_ID, 0, 0, editable);
} // MTree
/**
* Construct Tree
* @param AD_Tree_ID The tree to build
* @param AD_User_ID Tree Bar Access control - optional
* @param AD_Role_ID Menu Access control
* @param editable True, if tree can be modified
* - includes inactive and empty summary nodes
*/
public MTree (int AD_Tree_ID,
int AD_User_ID, int AD_Role_ID, boolean editable)
{
Log.trace(Log.l4_Data, "MTree - AD_Tree_ID=" + AD_Tree_ID,
"AD_Role_ID=" + AD_Role_ID + ", AD_User_ID=" + AD_User_ID
+ ", Editable=" + editable);
m_AD_Tree_ID = AD_Tree_ID;
m_AD_User_ID = AD_User_ID;
m_AD_Role_ID = AD_Role_ID;
m_editable = editable;
loadTree();
} // MTree
/** Tree ID */
private int m_AD_Tree_ID;
/** Tree for User */
private int m_AD_User_ID;
/** Role Access Control */
private int m_AD_Role_ID;
/** Is Tree editable */
private boolean m_editable;
/** Tree Name */
private String m_name;
/** Tree Description */
private String m_description;
/** Tree Type */
private String m_treeType;
/** Table Name */
private String m_tableName = "AD_TreeNode";
/** Root Node */
private MTreeNode m_root = null;
/** Buffer while loading tree */
private ArrayList m_buffer = new ArrayList();
/** Prepared Statement for Node Details */
private PreparedStatement m_pstmtDetail;
/*************************************************************************/
/** Tree Type Menu MM */
public static final String TREETYPE_Menu = "MM";
/** Tree Type Account ElementValue EV */
public static final String TREETYPE_ElementValue = "EV";
/** Tree Type Product PR */
public static final String TREETYPE_Product = "PR";
/** Tree Type BusinessPartner BP */
public static final String TREETYPE_BPartner = "BP";
/** Tree Type Organization OO */
public static final String TREETYPE_Org = "OO";
/** Tree Type Project PJ */
public static final String TREETYPE_Project = "PJ";
/** Tree Type ProductCategory PC */
public static final String TREETYPE_ProductCategory = "PC";
/** Tree Type BOM BB */
public static final String TREETYPE_BOM = "BB";
/** Tree Type SalesRegion SR */
public static final String TREETYPE_SalesRegion = "SR";
/** Tree Type Camoaign MC */
public static final String TREETYPE_Campaign = "MC";
/** Tree Type Activity AY */
public static final String TREETYPE_Activity = "AY";
/*************************************************************************/
/**
* Get primary AD_Tree_ID for KeyColumn.
* Called from GridController
* @param keyColumnName key column name, eg. C_Project_ID
* @return AD_Tree_ID
*/
public static int getAD_Tree_ID (String keyColumnName)
{
Log.trace(Log.l4_Data, "MTree.getAD_Tree_ID", keyColumnName);
if (keyColumnName == null || keyColumnName.length() == 0)
return 0;
String TreeType = null;
if (keyColumnName.equals("AD_Menu_ID"))
TreeType = MTree.TREETYPE_Menu;
else if (keyColumnName.equals("C_ElementValue_ID"))
TreeType = MTree.TREETYPE_ElementValue;
else if (keyColumnName.equals("M_Product_ID"))
TreeType = MTree.TREETYPE_Product;
else if (keyColumnName.equals("C_BPartner_ID"))
TreeType = MTree.TREETYPE_BPartner;
else if (keyColumnName.equals("AD_Org_ID"))
TreeType = MTree.TREETYPE_Org;
else if (keyColumnName.equals("C_Project_ID"))
TreeType = MTree.TREETYPE_Project;
else if (keyColumnName.equals("M_ProductCategory_ID"))
TreeType = MTree.TREETYPE_ProductCategory;
else if (keyColumnName.equals("M_BOM_ID"))
TreeType = MTree.TREETYPE_BOM;
else if (keyColumnName.equals("C_SalesRegion_ID"))
TreeType = MTree.TREETYPE_SalesRegion;
else if (keyColumnName.equals("C_Campaign_ID"))
TreeType = MTree.TREETYPE_Campaign;
else if (keyColumnName.equals("C_Activity_ID"))
TreeType = MTree.TREETYPE_Activity;
else
{
Log.error("MTree.getAD_Tree_ID - Could not map " + keyColumnName);
return 0;
}
int AD_Tree_ID = 0;
int AD_Client_ID = Env.getContextAsInt(Env.getCtx(), "#AD_Client_ID");
String sql = "SELECT AD_Tree_ID,Name FROM AD_Tree "
+ "WHERE AD_Client_ID=? AND TreeType=? AND IsActive='Y'";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, AD_Client_ID);
pstmt.setString(2, TreeType);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
AD_Tree_ID = rs.getInt(1);
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("MTree.getAD_Tree_ID", e);
}
return AD_Tree_ID;
} // getAD_Tree_ID
/**
* Get Primary Tree of Tree Type
* @param TreeType see TREETYPE_
* @return MTree
*/
public static MTree getTree (String TreeType)
{
int AD_Tree_ID = 0;
int AD_Client_ID = Env.getContextAsInt(Env.getCtx(), "#AD_Client_ID");
String sql = "SELECT AD_Tree_ID,Name FROM AD_Tree "
+ "WHERE AD_Client_ID=? AND TreeType=? AND IsActive='Y'";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, AD_Client_ID);
pstmt.setString(2, TreeType);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
AD_Tree_ID = rs.getInt(1);
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("MTree.getTree", e);
}
// Not found
if (AD_Tree_ID == 0)
{
Log.trace(Log.l4_Data, "MTree.getTree - No AD_Tree_ID for TreeType=" + TreeType + ", AD_Client_ID=" + AD_Client_ID);
return null;
}
//
MTree tree = new MTree (AD_Tree_ID, false);
return tree;
} // getTree
/*************************************************************************/
/**
* Load Tree
*/
private void loadTree()
{
// Get Tree info
String sql = "SELECT Name, Description, TreeType "
+ "FROM AD_Tree "
+ "WHERE AD_Tree_ID=?"
+ " AND IsActive='Y'";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql);
pstmt.setInt(1, m_AD_Tree_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
m_name = rs.getString(1);
m_description = rs.getString(2);
if (m_description == null)
m_description = "";
m_treeType = rs.getString(3);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("MTree.loadTree", e);
return;
}
loadNodes();
} // loadTree
/**
* Load Nodes
*/
private void loadNodes()
{
// TableName: AD_TreeNode
if (m_treeType.equals(TREETYPE_Menu))
; // m_tableName += "MM";
else if (m_treeType.equals(TREETYPE_BPartner))
m_tableName += "BP";
else if (m_treeType.equals(TREETYPE_Product))
m_tableName += "PR";
// SQL for TreeNodes
StringBuffer cmd = new StringBuffer("SELECT "
+ "tn.Node_ID,tn.Parent_ID,tn.SeqNo,tb.IsActive "
+ "FROM ").append(m_tableName).append(" tn"
+ " LEFT OUTER JOIN AD_TreeBar tb ON (tn.AD_Tree_ID=tb.AD_Tree_ID"
+ " AND tn.Node_ID=tb.Node_ID AND tb.AD_User_ID=?) " // #1
+ "WHERE tn.AD_Tree_ID=?"); // #2
if (!m_editable)
cmd.append(" AND tn.IsActive='Y'");
cmd.append(" ORDER BY COALESCE(tn.Parent_ID, -1), tn.SeqNo");
Log.trace(Log.l6_Database, "MTree.loadNodes", cmd.toString());
// The Node Loop
try
{
m_pstmtDetail = DB.prepareStatement(prepareNodeDetail());
//
PreparedStatement pstmt = DB.prepareStatement(cmd.toString());
pstmt.setInt(1, m_AD_User_ID);
pstmt.setInt(2, m_AD_Tree_ID);
//
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
int node_ID = rs.getInt(1);
int parent_ID = rs.getInt(2);
int seqNo = rs.getInt(3);
boolean onBar = (rs.getString(4) != null);
//
if (node_ID == 0 && parent_ID == 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -