org.safs.rational
Class CFMenuBar

java.lang.Object
  extended by org.safs.Processor
      extended by org.safs.ComponentFunction
          extended by org.safs.rational.CFComponent
              extended by org.safs.rational.CFMenuBar
Direct Known Subclasses:
CFDotNetMenuBar, CFFlexMenuBar, CFPopupMenu, CFWinMenuBar

public class CFMenuBar
extends CFComponent


Purpose: CFMenuBar, process a MenuBar (Swing) component
Lifetime: instantiated by TestStepProcessor

Since:
JUN 04, 2003
JUL 16, 2003 (DBauman) Original Release
JAN 23, 2006 (CANAGL) Catch some unexpected exceptions for non-Swing components
APR 15, 2008 (LeiWang) Fix bug of keyword SelectMenuItem: bug example: T,SwingWindow,PTools,SelectMenuItem,, if PTools is a MenuItem, this record will not work Add support to check menu status Add keyword VerifyPopupMenu,SelectUnverifiedPopupMenuItem
JUL 25, 2008 (LwiWang) Add protected method isMenuBar(), isMenuItem(), isPopupMenu(), getPropertyText(),getNewTreeNode() staticExtractMenuItems() Modify method convertToMap(), extractMenuItems(), selectMenuBar(), getSubMenuItemFullPath(), getAbsoluteFileName(), getSubMenuItemCount() selectMenuItemWithVerification(), verifyMenuBar() verifyPopupMenu()
SEP 10, 2008 (LeiWang) Modify method verifyPopupMenu(), use benchFileName as default test and diff file name when test and diff file name are not provided. See defect S0533774.
NOV 25, 2008 (LeiWang) Add method selectUnverifiedMenuItem(). So some dynamically generated menu can be selected without verification. See defect S0546870

Field Summary
static java.lang.String ITEMCOUNT_PROPERTY
           
static java.lang.String MENUCOUNT_PROPERTY
           
static java.lang.String PATH_PREFIX
           
static java.lang.String SELECTMENUITEM
           
static java.lang.String SELECTMENUITEMCONTAINS
           
static java.lang.String SELECTPOPUPMENUITEM
           
static java.lang.String SELECTUNVERIFIEDMENUITEM
           
static java.lang.String SELECTUNVERIFIEDPOPUPMENUITEM
           
static java.lang.String TEXT_PROPERTY
           
static java.lang.String UITYPE_MENUBAR
           
static java.lang.String UITYPE_POPUPMENU
           
static java.lang.String UITYPE_PROPERTY
           
static java.lang.String VERIFYMENUITEM
           
static java.lang.String VERIFYMENUITEMCONTAINS
           
static java.lang.String VERIFYPOPUPMENU
           
static java.lang.String VERIFYPOPUPMENUCONTAINS
           
static java.lang.String VERIFYPOPUPMENUITEM
           
static java.lang.String VERIFYPOPUPMENUPARTIALMATCH
           
 
Fields inherited from class org.safs.rational.CFComponent
ALTLEFTDRAG, ASSIGNPROPERTYVARIABLE, CAPTUREOBJECTDATATOFILE, CAPTUREPROPERTIESTOFILE, CAPTUREPROPERTYTOFILE, CLEARAPPMAPCACHE, CLICK, CLOSEWINDOW, COMPONENTCLICK, CTRLALTLEFTDRAG, CTRLCLICK, CTRLLEFTDRAG, CTRLRIGHTCLICK, CTRLSHIFTLEFTDRAG, DOUBLECLICK, GETGUIIMAGE, GUIDOESEXIST, GUIDOESNOTEXIST, HOVERMOUSE, HSCROLLTO, INPUTCHARACTERS, INPUTKEYS, LEFTDRAG, MAXIMIZE, MINIMIZE, obj1, RESTORE, RIGHTCLICK, RIGHTDRAG, script, SETPOSITION, SETPROPERTYVALUE, SHIFTCLICK, SHIFTLEFTDRAG, VERIFYARRAYPROPERTYTOFILE, VERIFYBINARYFILETOFILE, VERIFYCLIPBOARDTOFILE, VERIFYFILETOFILE, VERIFYGUIIMAGETOFILE, VERIFYOBJECTDATATOFILE, VERIFYPROPERTY, VERIFYPROPERTYCONTAINS, VERIFYPROPERTYTOFILE, VERIFYTEXTFILETOFILE, VERIFYVALUECONTAINS, VERIFYVALUEEQUALS, VERIFYVALUES, VERIFYVALUESIGNORECASE, VSCROLLTO, WAITFORGUI, WIN_MAXIMIZED, WIN_MINIMIZED, WIN_NORMAL
 
Fields inherited from class org.safs.ComponentFunction
action, compName, mapname, utils, windowName
 
Fields inherited from class org.safs.Processor
breakpointsOn, CASE_INSENSITIVE_FLAG, CASEINSENSITIVE_FLAG, clearProxiesAlways, commandLineBreakpoint, customStr, customText, DEBUG_MESSAGE, debugStr, debugText, DEFAULT_CUSTOM_PROCESSOR_PACKAGE, DEFAULT_CUSTOM_PROCESSOR_SUBPACKAGE, DEFAULT_PROCESSOR_PACKAGE, FAILED_MESSAGE, FAILED_OK_MESSAGE, failedStr, failedText, FAILURE_DETAIL, GENERIC_MESSAGE, genericStr, genericText, LINE_FAILURE_4, log, myBreakpointsOn, otherStr, otherText, PARAM_SIZE_1, PARAM_SIZE_2, PARAM_SIZE_3, PARAM_SIZE_4, params, PASSED_MESSAGE, passedStr, passedText, PRE_TXT_SUCCESS_4, PRE_TXT_SUCCESS_5, processorConfigSet, processorMap, recordProcessed, RECTYPE_DRIVER_COMMAND, RECTYPE_DRIVER_COMMAND_F, RECTYPE_DRIVER_COMMAND_W, RECTYPE_TEST_STEP, RECTYPE_TEST_STEP_F, RECTYPE_TEST_STEP_W, SAFS_CLEARPROXIESALWAYS_ITEM, SAFS_COMMANDLINEBREAKPOINT_ITEM, SAFS_COMMANDLINEBREAKPOINT_VARIABLE, SAFS_PARAMS_FILE, SAFS_RESBUN_NAME, SAFS_SECSWAITFORCOMPONENT_ITEM, SAFS_SECSWAITFORCOMPONENT_VARIABLE, SAFS_SECSWAITFORWINDOW_ITEM, SAFS_SECSWAITFORWINDOW_VARIABLE, SAFS_TESTDOMAINS_ITEM, SAFS_TESTDOMAINS_VARIABLE, secsWaitForComponent, secsWaitForWindow, SENT_MSG_3, testDomains, testRecordData, TXT_FAILURE_1, TXT_FAILURE_2, TXT_FAILURE_3, TXT_FAILURE_4, TXT_FAILURE_5, TXT_SUCCESS_1, TXT_SUCCESS_2, TXT_SUCCESS_2a, TXT_SUCCESS_3, TXT_SUCCESS_4, TXT_SUCCESS_5, WARNING_MESSAGE, WARNING_OK_MESSAGE, warningStr, warningText
 
Constructor Summary
CFMenuBar()
          
Purpose: constructor, calls super
 
Method Summary
protected  java.util.Map convertToMap(java.util.List pathToStatusList)
           
protected  Tree extractMenuItems(java.lang.Object obj, int level)
          
Purpose: Extract a menu hierarchy from a TestObject; The item is for JMenuBars, JPopupMenus, JMenus, and JMenuItems (JMenu is subclass of JMenuItem).
protected  java.lang.String getAbsoluteFileName(java.lang.String filename, java.lang.String parentDir)
           
protected  MenuTreeNode getNewTreeNode(java.lang.Object userObject, int siblingCounter, int childrenCounter)
          Note: Needed to be overrided for other application than Swing.
protected  java.lang.String getPath()
          Retrieves the "path" parameter for commands like SelectMenuItem and SelectMenuItemContains.
protected  java.lang.String getPropertyText(TestObject menuObject)
          Note: Try to get The value of "text" property of a menuitem.
protected  java.lang.String getPropertyTextName()
           
protected  java.lang.String getStatus()
           
protected  java.lang.Integer getSubMenuItemCount(TestObject aMenuObj)
          Return the number of immediate child Menus or MenuItems from the provided JMenuBar or JMenu.
protected  GuiSubitemTestObject getSubMenuItemFullPath(TestObject theObj, java.lang.StringBuffer path)
          theObj is expected to be a JMenu TestObject proxy (Usually a ToggleGUITestObject).
protected  boolean isMenuBar(TestObject menuObject)
          Note: Needed to be override in subclass.
protected  boolean isMenuItem(TestObject menuObject)
          Note: Needed to be override in subclass.
protected  boolean isPopupMenu(TestObject menuObject)
           
protected  void localProcess()
          
Purpose: process: process the testRecordData
This is our specific version.
protected  void selectMenuBar(TestObject menuObj, java.lang.String menuItemPath, boolean fuzzy, boolean verify)
          
Purpose: Select a menuItem

We use an equivalent of this to accomplish the select: jmbMenuBar().click(atPath("Admin->Customers..."));
protected  void selectMenuItem()
          Purpose: Verify the existance of the path exactly, if it exists then select the path
protected  void selectMenuItemContains()
          Purpose: Verify the existance of the path non-exactly, if it exists then select the path
protected  void selectMenuItemWithoutVerification(GuiSubitemTestObject guiObj, java.lang.String path)
           
protected  void selectMenuItemWithVerification(GuiSubitemTestObject guiObj, java.lang.String path, boolean fuzzy)
           
protected  void selectUnverifiedMenuItem()
          Purpose: Select the path (exactly matched) without verification of it's existance
protected  void selectUnverifiedPopupMenuItem()
          Purpose: Select the path provided without the verification of existance of this path
static Tree staticExtractMenuItems(java.lang.Object obj, int level)
          Note: This method is used by the RDDGUIUtilities.java
protected  void verifyMenuBar(java.lang.Object anObj, java.lang.String menuItemPath, java.lang.String status, boolean fuzzy)
          
Purpose: Verify the existance of a path and verify it's status
protected  void verifyMenuItem()
          Purpose: Verify of existance of the provided path exactly
Verify whether the status of the menuitem matches the provided status (optional parameter)
protected  void verifyMenuItemContains()
          Purpose: Verify of existance of the provided path non-exactly
Verify whether the status of the menuitem matches the provided status (optional parameter)
protected  void verifyPopupMenu()
          Purpose: Verify the complete status of the current popup menu with a benchmark file.
 
Methods inherited from class org.safs.rational.CFComponent
captureObjectData, captureObjectDataToFile, checkForCoord, checkForCoord, componentClick, convertObjectValueToString, extractTreeItemsSub, findMenuBars, formatObjectData, getAppletsBrowser, getComponentRectangle, getHelpers, getObjectProperty, getObjectPropertyFromProperties, getUserObject, isDotnetDomain, isFlexDomain, isHtmlDomain, isJavaDomain, isSwtDomain, isSWTWidget, isWinDomain, listAllProperties, listAllProperties, listMethods, listNonValueProperties, listProperties, matchedPathOfMenuItem, parseWhereInfo, performClick, preformDrag, process, selectMenuItem, setPosition, tobj, verifyMenuItem
 
Methods inherited from class org.safs.ComponentFunction
action_getGuiImage, action_verifyGuiImageToFile, componentExecutedFailureMessage, componentFailureMessage, componentSuccessMessage, convertCoords, convertNum, getAlternateParams, getHelpersWorker, issueActionFailure, issueActionOnXFailure, issueErrorPerformingAction, issueErrorPerformingActionOnX, issueFileErrorFailure, issueInputRecordFailure, issueParameterCountFailure, issueParameterCountFailure, issueParameterValueFailure, issuePassedSuccess, issuePassedSuccessUsing, issueUnknownErrorFailure, isSupportedRecordType, lookupAppMapCoordReference, lookupAppMapNumReference, lookupAppMapReference, updateFromTestRecordData
 
Methods inherited from class org.safs.Processor
activateBreakpoint, checkBreakpoints, checkMyBreakpoints, delay, distributeConfigInformation, getAppMapItem, getChainedProcessor, getClassInstance, getClearProxiesAlways, getCustomProcClassNames, getCustomProcInstancePath, getLogUtilities, getParams, getProcClassNames, getProcInstance, getProcInstancePath, getRequiredField, getSecsWaitForComponent, getSecsWaitForWindow, getStandardErrorMessage, getTestRecordData, getVariable, hasChainedProcessor, initProcessorAndProcess, instanceProcessorAndProcess, isBreakpointsOn, isComponentFunctionRecord, isDriverCommandRecord, isEngineCommandRecord, isMyBreakpointsOn, isRecordProcessed, paramsFailedMsg, paramsFailedMsg, processCustomProcessor, processSubclassProcessor, setBreakpointsOn, setChainedProcessor, setClearProxiesAlways, setCommandLineBreakpoint, setCustomProcInstancePath, setLogUtilities, setMyBreakpointsOn, setParams, setProcInstance, setProcInstancePath, setRecordProcessed, setSecsWaitForComponent, setSecsWaitForWindow, setTestDomains, setTestRecordData, setVariable, standardFailureMessage, substituteVariable, validateParamSize, validProcessorClassName
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SELECTMENUITEM

public static final java.lang.String SELECTMENUITEM
See Also:
Constant Field Values

SELECTMENUITEMCONTAINS

public static final java.lang.String SELECTMENUITEMCONTAINS
See Also:
Constant Field Values

SELECTUNVERIFIEDMENUITEM

public static final java.lang.String SELECTUNVERIFIEDMENUITEM
See Also:
Constant Field Values

SELECTPOPUPMENUITEM

public static final java.lang.String SELECTPOPUPMENUITEM
See Also:
Constant Field Values

SELECTUNVERIFIEDPOPUPMENUITEM

public static final java.lang.String SELECTUNVERIFIEDPOPUPMENUITEM
See Also:
Constant Field Values

VERIFYMENUITEM

public static final java.lang.String VERIFYMENUITEM
See Also:
Constant Field Values

VERIFYMENUITEMCONTAINS

public static final java.lang.String VERIFYMENUITEMCONTAINS
See Also:
Constant Field Values

VERIFYPOPUPMENU

public static final java.lang.String VERIFYPOPUPMENU
See Also:
Constant Field Values

VERIFYPOPUPMENUCONTAINS

public static final java.lang.String VERIFYPOPUPMENUCONTAINS
See Also:
Constant Field Values

VERIFYPOPUPMENUITEM

public static final java.lang.String VERIFYPOPUPMENUITEM
See Also:
Constant Field Values

VERIFYPOPUPMENUPARTIALMATCH

public static final java.lang.String VERIFYPOPUPMENUPARTIALMATCH
See Also:
Constant Field Values

TEXT_PROPERTY

public static final java.lang.String TEXT_PROPERTY
See Also:
Constant Field Values

ITEMCOUNT_PROPERTY

public static final java.lang.String ITEMCOUNT_PROPERTY
See Also:
Constant Field Values

MENUCOUNT_PROPERTY

public static final java.lang.String MENUCOUNT_PROPERTY
See Also:
Constant Field Values

UITYPE_PROPERTY

public static final java.lang.String UITYPE_PROPERTY
See Also:
Constant Field Values

UITYPE_MENUBAR

public static final java.lang.String UITYPE_MENUBAR
See Also:
Constant Field Values

UITYPE_POPUPMENU

public static final java.lang.String UITYPE_POPUPMENU
See Also:
Constant Field Values

PATH_PREFIX

public static final java.lang.String PATH_PREFIX
See Also:
Constant Field Values
Constructor Detail

CFMenuBar

public CFMenuBar()

Purpose: constructor, calls super

Method Detail

localProcess

protected void localProcess()

Purpose: process: process the testRecordData
This is our specific version. We subclass the generic CFComponent. The types of objects handled here are 'GuiSubitemTestObject' and 'ToggleGUITestObject'. Path Example: "Admin->Customers..." The actions handled here are:


Side Effects: Processor.testRecordData statusCode is set based on the result of the processing
State Read: Processor.testRecordData, Processor.params
Assumptions: none

Overrides:
localProcess in class CFComponent

selectMenuItem

protected void selectMenuItem()
                       throws SAFSException
Purpose: Verify the existance of the path exactly, if it exists then select the path

Throws:
SAFSException

selectMenuItemContains

protected void selectMenuItemContains()
                               throws SAFSException
Purpose: Verify the existance of the path non-exactly, if it exists then select the path

Throws:
SAFSException

selectUnverifiedMenuItem

protected void selectUnverifiedMenuItem()
                                 throws SAFSException
Purpose: Select the path (exactly matched) without verification of it's existance

Throws:
SAFSException

selectUnverifiedPopupMenuItem

protected void selectUnverifiedPopupMenuItem()
                                      throws SAFSException
Purpose: Select the path provided without the verification of existance of this path

Throws:
SAFSException

verifyMenuItem

protected void verifyMenuItem()
                       throws SAFSException
Purpose: Verify of existance of the provided path exactly
Verify whether the status of the menuitem matches the provided status (optional parameter)

Throws:
SAFSException

verifyMenuItemContains

protected void verifyMenuItemContains()
                               throws SAFSException
Purpose: Verify of existance of the provided path non-exactly
Verify whether the status of the menuitem matches the provided status (optional parameter)

Throws:
SAFSException

verifyPopupMenu

protected void verifyPopupMenu()
                        throws SAFSException
Purpose: Verify the complete status of the current popup menu with a benchmark file.

Throws:
SAFSException

selectMenuBar

protected void selectMenuBar(TestObject menuObj,
                             java.lang.String menuItemPath,
                             boolean fuzzy,
                             boolean verify)
                      throws SAFSException

Purpose: Select a menuItem

We use an equivalent of this to accomplish the select: jmbMenuBar().click(atPath("Admin->Customers..."));

Parameters:
menuObj - -- GuiSubItemTestObject representing a JMenuBar or JPopupMenu or JMenuItem or JMenu or MainMenu, MenuItem, MenuStrip, and ToolStripMenuItem
menuItemPath - -- String, path information to the final JMenu or JMenuItem or MenuItem or ToolStripMenuItem to be selected.
fuzzy - -- If false, match the given path exactly with the Menu. This parameter will not be used if verify is false.
verify - -- If true, verify existance of path before selecting.
Throws:
SAFSException

verifyMenuBar

protected void verifyMenuBar(java.lang.Object anObj,
                             java.lang.String menuItemPath,
                             java.lang.String status,
                             boolean fuzzy)
                      throws SAFSException

Purpose: Verify the existance of a path and verify it's status

Parameters:
anObj - -- GuiSubItemTestObject representing a JMenuBar or JPopupMenu.
menuItemPath - -- String, the path to be selected
status - -- String, the menuItem status to be verified
fuzzy - -- If false, match the given path exactly with the Menu.
Throws:
SAFSException

selectMenuItemWithoutVerification

protected void selectMenuItemWithoutVerification(GuiSubitemTestObject guiObj,
                                                 java.lang.String path)
Parameters:
guiObj, - TestObject may be JMenuBar or JPopupMenu
path, - String is the full path of some MenuItem on which a click action will take place

selectMenuItemWithVerification

protected void selectMenuItemWithVerification(GuiSubitemTestObject guiObj,
                                              java.lang.String path,
                                              boolean fuzzy)
Parameters:
guiObj, - TestObject may be JMenuBar or JPopupMenu
path, - String is the full path of some MenuItem on which a click action will take place
fuzzy, - boolean, If true, we will do a non-exact verification of existance of path

getPath

protected java.lang.String getPath()
Retrieves the "path" parameter for commands like SelectMenuItem and SelectMenuItemContains. The routine handles the "NoSuchElementException" if no "path" parameter is provided. It also makes sure we get a valid path, or an empty string. We should never get a null. The routine stores the value in the private "path" field for repeated referencing.

Returns:
String path parameter or an empty string if none is available.

getStatus

protected java.lang.String getStatus()
Returns:
String the menuitem status to be verified which is an optional parameter.

getSubMenuItemCount

protected java.lang.Integer getSubMenuItemCount(TestObject aMenuObj)
Return the number of immediate child Menus or MenuItems from the provided JMenuBar or JMenu. The routine will look for both the itemCount property and menuCount property--whichever it finds to be present.

Parameters:
aMenuObj - -- Typically a JMenuBar or JMenu proxy. Will be cast to TestObject.
Returns:
Integer -- the number of child Menus or MenuItems or 0.

getSubMenuItemFullPath

protected GuiSubitemTestObject getSubMenuItemFullPath(TestObject theObj,
                                                      java.lang.StringBuffer path)
                                               throws SAFSException
theObj is expected to be a JMenu TestObject proxy (Usually a ToggleGUITestObject). Path information (might not have length > 0).

We are then going to go UP the tree to make the full path from menubar down to the subitem.

Parameters:
theObj - -- The JMenu proxy to be evaluated.
path - -- The initial path provided prior to us filling in the full path up the hierarchy. This must be the child path of "theObj"
Returns:
GuiSubitemTestObject, the test proxy object of "JMenuBar" or "JPopupMenu". The parameter path will contain the full path to the ancestor whose type is "JMenuBar" or "JPopupMenu"
Throws:
SAFSException

staticExtractMenuItems

public static Tree staticExtractMenuItems(java.lang.Object obj,
                                          int level)
                                   throws SAFSException
Note: This method is used by the RDDGUIUtilities.java

Throws:
SAFSException

extractMenuItems

protected Tree extractMenuItems(java.lang.Object obj,
                                int level)
                         throws SAFSException

Purpose: Extract a menu hierarchy from a TestObject; The item is for JMenuBars, JPopupMenus, JMenus, and JMenuItems (JMenu is subclass of JMenuItem). This routine is reentrant until there are no more submenus to process.
Assumptions: obj is a MenuBar, PopupMenu, Menu or MenuItem TestObject proxy.
Note: For this method works for application other than java-swing, we need to override getSubMenuItemCount(),getPropertyText(),getPropertyTextName(),getNewTreeNode() in the subclass like CFDotNetMenuBar. The following tree show the structure of JMenuBar JMenuBar |____________________________________ | | | JMenu JMenu JMenu ___|___ | | | | JMenuItem JMenu __|__ | | JMenuItem JMenuItem

Parameters:
obj, - Object (TestObject)
level, - what level in the tree are we processing
Returns:
org.safs.Tree, the real instance is org.safs.rational.MenuTree
Throws:
SAFSException

getAbsoluteFileName

protected java.lang.String getAbsoluteFileName(java.lang.String filename,
                                               java.lang.String parentDir)
                                        throws SAFSException
Parameters:
filename - String
parentDir - String, the parent directory of the filename
Returns:
String, absolute file name got from filename and it's parent
Throws:
SAFSException

convertToMap

protected java.util.Map convertToMap(java.util.List pathToStatusList)
Parameters:
pathToStatus, - String contains "path=status". Example: "File->Open=Enabled"
Returns:
Map, contains path as key and status as value

isMenuBar

protected boolean isMenuBar(TestObject menuObject)
                     throws SAFSException
Note: Needed to be override in subclass. "uIClassID" is a property specific for java swing object, we use this property to test what UI Component it is. This can only work for swing.

Parameters:
menuObject - A TestObject represents a MenuBar or PopupMenu or Menu or MenuItem
Returns:
True if the TestObject is MenuBar or PopupMenu. False otherwise.
Throws:
SAFSException

isMenuItem

protected boolean isMenuItem(TestObject menuObject)
                      throws SAFSException
Note: Needed to be override in subclass. We just call isMenuBar() to make the test.

Parameters:
menuObject - A TestObject represents a MenuBar or PopupMenu or Menu or MenuItem
Returns:
True if the TestObject is Menu or MenuItem. False otherwise.
Throws:
SAFSException

isPopupMenu

protected boolean isPopupMenu(TestObject menuObject)
                       throws SAFSException
Parameters:
menuObject -
Returns:
True if the menuObject is a popupMenu; False otherwise.
Throws:
SAFSException

getPropertyText

protected java.lang.String getPropertyText(TestObject menuObject)
Note: Try to get The value of "text" property of a menuitem. Needed to be overrided for other application than Swing. For example: For java, "text" is the text property. But for .NET, "Text" is.

Parameters:
menuObj - A TestObject represents menu or menuItem.
Returns:
The value of "text" property of a menuitem.

getPropertyTextName

protected java.lang.String getPropertyTextName()

getNewTreeNode

protected MenuTreeNode getNewTreeNode(java.lang.Object userObject,
                                      int siblingCounter,
                                      int childrenCounter)
Note: Needed to be overrided for other application than Swing.

Parameters:
userObject -
siblingCounter -
childrenCounter -
Returns:
An apporiate MenuTreeNode. For Example, a JavaMenuTreeNode for java application; a DotNetMenuTreeNode for .NET application.