📄 mtree.java
字号:
//
for (int i = 0; i < m_buffer.size(); i++)
{
MTreeNode node = (MTreeNode)m_buffer.get(i);
if (node.getParent_ID() == newNode.getNode_ID())
{
try
{
newNode.add(node);
}
catch (Exception e)
{
log.severe("Adding " + node.getName()
+ " to " + newNode.getName() + ": " + e.getMessage());
}
m_buffer.remove(i);
i--;
}
}
} // checkBuffer
/**************************************************************************
* Get Node Detail.
* Loads data into RowSet m_nodeRowSet
* Columns:
* - ID
* - Name
* - Description
* - IsSummary
* - ImageIndicator
* - additional for Menu
* Parameter:
* - Node_ID
* The SQL contains security/access control
*/
private void getNodeDetails ()
{
// SQL for Node Info
StringBuffer sqlNode = new StringBuffer();
String sourceTable = "t";
String fromClause = getSourceTableName(false); // fully qualified
String columnNameX = getSourceTableName(true);
String color = getActionColorName();
if (getTreeType().equals(TREETYPE_Menu))
{
boolean base = Env.isBaseLanguage(p_ctx, "AD_Menu");
sourceTable = "m";
if (base)
sqlNode.append("SELECT m.AD_Menu_ID, m.Name,m.Description,m.IsSummary,m.Action, "
+ "m.AD_Window_ID, m.AD_Process_ID, m.AD_Form_ID, m.AD_Workflow_ID, m.AD_Task_ID, m.AD_Workbench_ID "
+ "FROM AD_Menu m");
else
sqlNode.append("SELECT m.AD_Menu_ID, t.Name,t.Description,m.IsSummary,m.Action, "
+ "m.AD_Window_ID, m.AD_Process_ID, m.AD_Form_ID, m.AD_Workflow_ID, m.AD_Task_ID, m.AD_Workbench_ID "
+ "FROM AD_Menu m, AD_Menu_Trl t");
if (!base)
sqlNode.append(" WHERE m.AD_Menu_ID=t.AD_Menu_ID AND t.AD_Language='")
.append(Env.getAD_Language(p_ctx)).append("'");
if (!m_editable)
{
boolean hasWhere = sqlNode.indexOf(" WHERE ") != -1;
sqlNode.append(hasWhere ? " AND " : " WHERE ").append("m.IsActive='Y' ");
}
// Do not show Beta
if (!MClient.get(getCtx()).isUseBetaFunctions())
{
boolean hasWhere = sqlNode.indexOf(" WHERE ") != -1;
sqlNode.append(hasWhere ? " AND " : " WHERE ");
sqlNode.append("(m.AD_Window_ID IS NULL OR EXISTS (SELECT * FROM AD_Window w WHERE m.AD_Window_ID=w.AD_Window_ID AND w.IsBetaFunctionality='N'))")
.append(" AND (m.AD_Process_ID IS NULL OR EXISTS (SELECT * FROM AD_Process p WHERE m.AD_Process_ID=p.AD_Process_ID AND p.IsBetaFunctionality='N'))")
.append(" AND (m.AD_Form_ID IS NULL OR EXISTS (SELECT * FROM AD_Form f WHERE m.AD_Form_ID=f.AD_Form_ID AND f.IsBetaFunctionality='N'))");
}
// In R/O Menu - Show only defined Forms
if (!m_editable)
{
boolean hasWhere = sqlNode.indexOf(" WHERE ") != -1;
sqlNode.append(hasWhere ? " AND " : " WHERE ");
sqlNode.append("(m.AD_Form_ID IS NULL OR EXISTS (SELECT * FROM AD_Form f WHERE m.AD_Form_ID=f.AD_Form_ID AND ");
if (m_clientTree)
sqlNode.append("f.Classname");
else
sqlNode.append("f.JSPURL");
sqlNode.append(" IS NOT NULL))");
}
}
else
{
if (columnNameX == null)
throw new IllegalArgumentException("Unknown TreeType=" + getTreeType());
sqlNode.append("SELECT t.").append(columnNameX)
.append("_ID,t.Name,t.Description,t.IsSummary,").append(color)
.append(" FROM ").append(fromClause);
if (!m_editable)
sqlNode.append(" WHERE t.IsActive='Y'");
}
String sql = sqlNode.toString();
if (!m_editable) // editable = menu/etc. window
sql = MRole.getDefault(getCtx(), false).addAccessSQL(sql,
sourceTable, MRole.SQL_FULLYQUALIFIED, m_editable);
log.fine(sql);
m_nodeRowSet = DB.getRowSet (sql, true);
} // getNodeDetails
/**
* Get Menu 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_nodeRowSet.beforeFirst();
while (m_nodeRowSet.next())
{
int node = m_nodeRowSet.getInt(1);
if (node_ID != node) // search for correct one
continue;
// ID,Name,Description,IsSummary,Action/Color
int index = 2;
String name = m_nodeRowSet.getString(index++);
String description = m_nodeRowSet.getString(index++);
boolean isSummary = "Y".equals(m_nodeRowSet.getString(index++));
String actionColor = m_nodeRowSet.getString(index++);
// Menu only
if (getTreeType().equals(TREETYPE_Menu) && !isSummary)
{
int AD_Window_ID = m_nodeRowSet.getInt(index++);
int AD_Process_ID = m_nodeRowSet.getInt(index++);
int AD_Form_ID = m_nodeRowSet.getInt(index++);
int AD_Workflow_ID = m_nodeRowSet.getInt(index++);
int AD_Task_ID = m_nodeRowSet.getInt(index++);
int AD_Workbench_ID = m_nodeRowSet.getInt(index++);
//
MRole role = MRole.getDefault(getCtx(), false);
Boolean access = null;
if (X_AD_Menu.ACTION_Window.equals(actionColor))
access = role.getWindowAccess(AD_Window_ID);
else if (X_AD_Menu.ACTION_Process.equals(actionColor)
|| X_AD_Menu.ACTION_Report.equals(actionColor))
access = role.getProcessAccess(AD_Process_ID);
else if (X_AD_Menu.ACTION_Form.equals(actionColor))
access = role.getFormAccess(AD_Form_ID);
else if (X_AD_Menu.ACTION_WorkFlow.equals(actionColor))
access = role.getWorkflowAccess(AD_Workflow_ID);
else if (X_AD_Menu.ACTION_Task.equals(actionColor))
access = role.getTaskAccess(AD_Task_ID);
// else if (X_AD_Menu.ACTION_Workbench.equals(action))
// access = role.getWorkbenchAccess(AD_Window_ID);
// log.fine("getNodeDetail - " + name + " - " + actionColor + " - " + access);
//
if (access != null // rw or ro for Role
|| m_editable) // Menu Window can see all
{
retValue = new MTreeNode (node_ID, seqNo,
name, description, parent_ID, isSummary,
actionColor, onBar, null); // menu has no color
}
}
else // always add
{
Color color = null; // action
if (actionColor != null && !getTreeType().equals(TREETYPE_Menu))
{
MPrintColor printColor = MPrintColor.get(getCtx(), actionColor);
if (printColor != null)
color = printColor.getColor();
}
//
retValue = new MTreeNode (node_ID, seqNo,
name, description, parent_ID, isSummary,
null, onBar, color); // no action
}
}
}
catch (SQLException e)
{
log.log(Level.SEVERE, "", e);
}
return retValue;
} // getNodeDetails
/**************************************************************************
* Trim tree of empty summary nodes
*/
public void trimTree()
{
boolean needsTrim = m_root != null;
while (needsTrim)
{
needsTrim = false;
Enumeration en = m_root.preorderEnumeration();
while (m_root.getChildCount() > 0 && en.hasMoreElements())
{
MTreeNode nd = (MTreeNode)en.nextElement();
if (nd.isSummary() && nd.getChildCount() == 0)
{
nd.removeFromParent();
needsTrim = true;
}
}
}
} // trimTree
/**
* Diagnostics: Print tree
*/
private void dumpTree()
{
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.getNode_ID())
.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
/**
* Is Menu Tree
* @return true if menu
*/
public boolean isMenu()
{
return TREETYPE_Menu.equals(getTreeType());
} // isMenu
/**
* Is Product Tree
* @return true if product
*/
public boolean isProduct()
{
return TREETYPE_Product.equals(getTreeType());
} // isProduct
/**
* Is Business Partner Tree
* @return true if partner
*/
public boolean isBPartner()
{
return TREETYPE_BPartner.equals(getTreeType());
} // isBPartner
/**
* String representation
* @return info
*/
public String toString()
{
StringBuffer sb = new StringBuffer("MTree[");
sb.append("AD_Tree_ID=").append(getAD_Tree_ID())
.append(", Name=").append(getName());
sb.append("]");
return sb.toString();
}
} // MTree
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -