📄 mtree.java
字号:
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 + -