⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mtree.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
 * 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 + -