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

📄 mtree.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
					m_root = new MTreeNode (node_ID, 0, m_name, m_description, 0, true, null, onBar);
				else
					addToTree (node_ID, parent_ID, seqNo, onBar);
			}
			rs.close();
			pstmt.close();
			//
			m_pstmtDetail.close();
		}
		catch (SQLException e)
		{
			Log.error("MTree.loadNodes", e);
		}
		//  Done with loading - add remainder from buffer
		if (m_buffer.size() != 0)
		{
			Log.trace(Log.l6_Database, "MTree.loadNodes - clearing buffer");
			for (int i = 0; i < m_buffer.size(); i++)
			{
				MTreeNode node = (MTreeNode)m_buffer.get(i);
				MTreeNode parent = m_root.findNode(node.getParent_ID());
				if (parent != null && parent.getAllowsChildren())
				{
					parent.add(node);
					checkBuffer(node);
					m_buffer.remove(i);
					i = -1;
				}
			}
		}

		//	Nodes w/o parent
		if (m_buffer.size() != 0)
		{
			Log.error ("MTree.loadNodes - Nodes w/o parent - adding to root - " + m_buffer);
			for (int i = 0; i < m_buffer.size(); i++)
			{
				MTreeNode node = (MTreeNode)m_buffer.get(i);
				m_root.add(node);
				checkBuffer(node);
				m_buffer.remove(i);
				i = -1;
			}
			if (m_buffer.size() != 0)
				Log.error ("MTree.loadNodes - still nodes in Buffer - " + m_buffer);
		}	//	nodes w/o parents

		//  clean up
		if (!m_editable && m_root.getChildCount() > 0)
			trimTree();
//		diagPrintTree();
	}   //  loadNodes

	/**
	 *  Add Node to Tree.
	 *  If not found add to buffer
	 *  @param node_ID Node_ID
	 *  @param parent_ID Parent_ID
	 *  @param seqNo SeqNo
	 *  @param onBar on bar
	 */
	private void addToTree (int node_ID, int parent_ID, int seqNo, boolean onBar)
	{
		//  Create new Node
		MTreeNode child = getNodeDetail (node_ID, parent_ID, seqNo, onBar);
		if (child == null)
			return;

		//  Add to Tree
		MTreeNode parent = null;
		if (m_root != null)
			parent = m_root.findNode (parent_ID);
		//  Parent found
		if (parent != null && parent.getAllowsChildren())
		{
			parent.add(child);
			//  see if we can add nodes from buffer
			if (m_buffer.size() > 0)
				checkBuffer(child);
		}
		else
			m_buffer.add(child);
	}   //  addToTree

	/**
	 *  Check the buffer for nodes which have newNode as Parents
	 *  @param newNode new node
	 */
	private void checkBuffer (MTreeNode newNode)
	{
		for (int i = 0; i < m_buffer.size(); i++)
		{
			MTreeNode node = (MTreeNode)m_buffer.get(i);
			if (node.getParent_ID() == newNode.getID())
			{
				newNode.add(node);
				m_buffer.remove(i);
				i--;
			}
		}
	}   //  checkBuffer

	/*************************************************************************/

	/**
	 *  Prepare Node Detail.
	 *  Columns:
	 *  - Name
	 *  - Description
	 *  - IsSummary
	 *  - ImageIndicator
	 *  Parameter:
	 *  - Node_ID
	 *  The SQL contains security/access control
	 *  @return SQL to get Node Detail Info
	 */
	private String prepareNodeDetail ()
	{
		//  SQL for Node Info
		StringBuffer cmdNode = new StringBuffer();
		if (m_treeType.equals(MTree.TREETYPE_Menu))
		{
			boolean base = Env.isBaseLanguage(Env.getCtx(), "AD_Menu");
			if (base)
				cmdNode.append("SELECT m.Name,m.Description,m.IsSummary,m.Action "
					+ "FROM AD_Menu m");
			else
				cmdNode.append("SELECT t.Name,t.Description,m.IsSummary,m.Action "
					+ "FROM AD_Menu m, AD_Menu_Trl t");
			if (!m_editable)
				cmdNode.append(", (SELECT ").append(m_AD_Role_ID).append(" AS XRole FROM DUAL) x");
			cmdNode.append(" WHERE m.AD_Menu_ID=?");            //  #1
			if (!base)
				cmdNode.append(" AND m.AD_Menu_ID=t.AD_Menu_ID AND t.AD_Language='")
					.append(Env.getAD_Language(Env.getCtx())).append("'");
			if (!m_editable)
				cmdNode.append(" AND m.IsActive='Y' "
					+ "AND (m.IsSummary='Y' OR m.Action='B'"
					+ " OR EXISTS (SELECT * FROM AD_Window_Access wa WHERE wa.AD_Window_ID=m.AD_Window_ID AND wa.AD_Role_ID=XRole AND wa.IsActive='Y')"
					+ " OR EXISTS (SELECT * FROM AD_Process_Access wa WHERE wa.AD_Process_ID=m.AD_Process_ID AND wa.AD_Role_ID=XRole AND wa.IsActive='Y')"
					+ " OR EXISTS (SELECT * FROM AD_Form_Access wa WHERE wa.AD_Form_ID=m.AD_Form_ID AND wa.AD_Role_ID=XRole AND wa.IsActive='Y')"
					+ " OR EXISTS (SELECT * FROM AD_Task_Access wa WHERE wa.AD_Task_ID=m.AD_Task_ID AND wa.AD_Role_ID=XRole AND wa.IsActive='Y')"
					+ " OR EXISTS (SELECT * FROM AD_Workflow_Access wa WHERE wa.AD_Workflow_ID=m.AD_Workflow_ID AND wa.AD_Role_ID=XRole AND wa.IsActive='Y')"
					+ ")");
		}
		else
		{
			cmdNode.append("SELECT Name,Description,IsSummary,NULL FROM ");
			//
			String sourceTable = null;
			if (m_treeType.equals(MTree.TREETYPE_Org))
				sourceTable = "AD_Org";
			else if (m_treeType.equals(MTree.TREETYPE_Product))
				sourceTable = "M_Product";
			else if (m_treeType.equals(MTree.TREETYPE_ProductCategory))
				sourceTable = "M_Product_Category";
			else if (m_treeType.equals(MTree.TREETYPE_BOM))
				sourceTable = "M_BOM";
			else if (m_treeType.equals(MTree.TREETYPE_ElementValue))
				sourceTable = "C_ElementValue";
			else if (m_treeType.equals(MTree.TREETYPE_BPartner))
				sourceTable = "C_BPartner";
			else if (m_treeType.equals(MTree.TREETYPE_Campaign))
				sourceTable = "C_Campaign";
			else if (m_treeType.equals(MTree.TREETYPE_Project))
				sourceTable = "C_Project";
			else if (m_treeType.equals(MTree.TREETYPE_Activity))
				sourceTable = "C_Activity";
			else if (m_treeType.equals(MTree.TREETYPE_SalesRegion))
				sourceTable = "C_SalesRegion";
			if (sourceTable == null)
			{
				throw new IllegalArgumentException("MTree.prepareNodeDetail - Unknown TreeType=" + m_treeType);
			}
			cmdNode.append(sourceTable).append(" WHERE ")
				.append(sourceTable).append("_ID=?");               // #1
			if (!m_editable)
				cmdNode.append(" AND IsActive='Y'");
		}
		Log.trace(Log.l6_Database, "MTree.prepareNodeDetail", cmdNode.toString());
		return cmdNode.toString();
	}   //  prepareNodeDetail

	/**
	 *  Get Node Details.
	 *  As SQL contains security access, not all nodes will be found
	 *  @param  node_ID     Key of the record
	 *  @param  parent_ID   Parent ID of the record
	 *  @param  seqNo       Sort index
	 *  @param  onBar       Node also on Shortcut bar
	 *  @return Node
	 */
	private MTreeNode getNodeDetail (int node_ID, int parent_ID, int seqNo, boolean onBar)
	{
		MTreeNode retValue = null;
		try
		{
			m_pstmtDetail.setInt(1, node_ID);
			ResultSet rs = m_pstmtDetail.executeQuery();
			if (rs.next())
			{
				retValue = new MTreeNode (node_ID, seqNo,
					rs.getString(1),                //  name
					rs.getString(2),                //  description
					parent_ID,
					"Y".equals(rs.getString(3)),    //  IsSummary
					rs.getString(4),                //  ImageIndicator
					onBar);
			}
			rs.close();
		}
		catch (SQLException e)
		{
			Log.error("MTree.getNodeDetail", e);
		}
		return retValue;
	}   //  getNodeDetails

	/*************************************************************************/

	/**
	 *  Trim tree of empty summary nodes
	 */
	private void trimTree()
	{
		boolean needsTrim = m_root != null;
		while (needsTrim)
		{
			needsTrim = false;
			Enumeration en = m_root.preorderEnumeration();
			while (en.hasMoreElements())
			{
				MTreeNode nd = (MTreeNode)en.nextElement();
				if (nd.isSummary() && nd.getChildCount() == 0)
				{
					nd.removeFromParent();
					needsTrim = true;
				}
			}
		}
	}   //  trimTree

	/**
	 *  Diagnostics: Print tree
	 */
	private void diagPrintTree()
	{
		Enumeration en = m_root.preorderEnumeration();
		int count = 0;
		while (en.hasMoreElements())
		{
			StringBuffer sb = new StringBuffer();
			MTreeNode nd = (MTreeNode)en.nextElement();
			for (int i = 0; i < nd.getLevel(); i++)
				sb.append(" ");
			sb.append("ID=").append(nd.getID())
				.append(", SeqNo=").append(nd.getSeqNo())
				.append(" ").append(nd.getName());
			System.out.println(sb.toString());
			count++;
		}
		System.out.println("Count=" + count);
	}   //  diagPrintTree

	/**
	 *  Get Root node
	 *  @return root
	 */
	public MTreeNode getRoot()
	{
		return m_root;
	}   //  getRoot

	/**
	 *  Get Table Name
	 *  @return Table Name
	 */
	public String getTableName()
	{
		return m_tableName;
	}   //  getTableName

	/**
	 *  String representation
	 *  @return info
	 */
	public String toString()
	{
		StringBuffer sb = new StringBuffer("MTree[");
		sb.append("AD_Tree_ID=").append(m_AD_Tree_ID)
			.append(", Name=").append(m_name);
		sb.append("]");
		return sb.toString();
	}
}   //  MTree

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -