org.tolven.app.entity
Class UserMenuStructure

java.lang.Object
  extended by org.tolven.app.entity.MenuStructure
      extended by org.tolven.app.entity.UserMenuStructure
All Implemented Interfaces:
java.io.Serializable, AppLocaleText

public class UserMenuStructure
extends MenuStructure
implements java.io.Serializable

An occurance of this object defines an item in an application menu structure. MenuStructure objects are defined within an account. Therefore, different accounts can have completely different menu structures.

MenuStructure objects are arranged in a hierarchy. Each object, except the root object, has a parent MenuStructure. This hierarchy is confined to a single account. Thus, a hierarchy cannot be used to span accounts and thus violate security partitioning. That said, the hierarchy can span sub-accounts within the top-level account.

A MenuStructure object not only defines how the menu looks on the screen, it can also define how the data for dynamic structures is acquired, generally in the form of rules.

The MenuData class defines occurances of menu structures when repeating is specified and/or if there is a rule that creates menu data. By definition, a MenuStructure for a repeating entity is a prototype and therefore only represents a usually invisible placeholder in the menu hierarchy. For example, defining a patient MenuStructure does not imply that there is a visible object on the screen unless there is actually a specific patient to be displayed. Conversely, a MenuStructure called Patients might very well be static, visible and represent a tab one can go to to see a list of patients. Therefore, the static "Patients" MenuStructure makes a good parent for the dynamic "patient placeholder" MenuStructure.

Dynamic (repeating) MenuStructures are represented by a key value. Nested structures may have more than one key value.

A Menustructure can also be static but not have a key value. For example, a "new activity" tab might carry an indication if there are any items to view or not thus saving the user the trouble of having to click the tab to find out of there is anything to do or not. And since saving time is so critical, it is usually better to maintain the indicator on such menus or tabs by rules that run in the background. Thus, the rules for a MenuStructure item can be run asynchronously. Later, the presentation of the pre-computed indicator is simply a matter of looking up the indicator, rather than running a potentially complex query while the user waits.

While each rule in a MenuStructure controls the MenuData associated with that MenuStructure, the individual rules are rolled up to the account. When any data associated with an account changes, the data element is asserted into the working memory of all the rules for that Account. Thus, a rule can potentially see every possible change to an Account. To organize this process, it may be appropriate to modularize the rule logic. For example, say an account gets lab results from a variety of sources in different formats. A rule collecting data from lab results could be quite tedious if it had to handle each lab format. Instead, two different kinds of rules should be created. The first kind simply reads a document and creates a new document in a normalized form. Each separate interface then had a rule that maps to it to this canonical form. The MenuStructure for such an object could be invisible if no one needs to see the raw messages. Then, one much simpler rule reacts the the creation of this new document type and populates the appropriate visible menu structure.

Author:
John Churin
See Also:
Serialized Form

Field Summary
 
Fields inherited from class org.tolven.app.entity.MenuStructure
LOCALEPATH_COLUMN_PREFIX, LOCALEPATH_SEPARATOR, MENUPATH_SEPARATOR, VISIBLE_NEVER
 
Constructor Summary
UserMenuStructure()
           
UserMenuStructure(AccountUser accountuser, AccountMenuStructure underlytingMS, java.lang.String visible, java.lang.Integer seq, java.lang.Integer colnumber, java.lang.String windowStyle, java.lang.Integer numSummaryItems, java.lang.String defaultpath, java.lang.String interval)
           
 
Method Summary
 boolean equals(java.lang.Object obj)
           
 AccountMenuStructure findChild(java.lang.String node)
          Find the first child containing the specified node name.
 AccountMenuStructure findDescendent(java.lang.String node)
          Find the first child or child of child, etc containing the specified node name.
 Account getAccount()
           
 AccountMenuStructure getAccountMenuStructure()
           
 AccountUser getAccountuser()
           
 java.util.List<MSAction> getActions()
          Return a list of actions, sorted per sequence
 java.lang.String getAllowRoles()
           
 java.util.Collection<AccountMenuStructure> getChildren()
           
 java.lang.Integer getColumnNumber()
           
 java.util.Collection<MSColumn> getColumns()
           
 java.lang.String getDefaultPathSuffix()
           
 java.lang.String getDenyRoles()
           
 java.lang.Boolean getEnableBackButton()
           
 java.lang.String getFilter()
          The user should never be allowed to override the filter criteria.
 long getId()
           
 java.lang.String getInitialSort()
           
 java.lang.String getInterval()
           
 int getLevel()
           
 java.lang.String getMenuTemplate()
           
 java.lang.String getNode()
           
 java.lang.Integer getNumSummaryItems()
           
 AccountMenuStructure getParent()
           
 java.lang.String getPath()
           
 java.lang.String getQuery()
           
 AccountMenuStructure getReferenced()
          When non-null, a "list" item refers to another MenuStructure item that actually contains the data.
 java.lang.String getRepeating()
           
 java.lang.String getRole()
          Depending on the template, this role helps determine where in the page this menu item occurs.
 AccountMenuStructure getRoot()
          Get the root of this MenuStructure tree
 int getSequence()
           
 java.util.List<AccountMenuStructure> getSortedChildren()
           
 java.util.List<MSColumn> getSortedColumns()
           
 java.lang.String getStyle()
           
 java.lang.String getTemplate()
           
 java.lang.String getText()
           
 java.lang.String getTextOverride()
           
 MenuStructure getUnderlyingMS()
           
 java.lang.String getUniqueKey()
           
 java.lang.String getVisible()
           
 java.lang.String getWindowstyle()
           
 int hashCode()
           
 void setAccount(Account account)
           
 void setAccountuser(AccountUser accountuser)
           
 void setChildren(java.util.Collection<AccountMenuStructure> children)
           
 void setColumnNumber(java.lang.Integer columnNumber)
           
 void setDefaultPathSuffix(java.lang.String defaultPathSuffix)
           
 void setEnableBackButton(java.lang.Boolean enableBackButton)
           
 void setFilter(java.lang.String filter)
           
 void setId(long id)
           
 void setInitialSort(java.lang.String initialSort)
           
 void setInterval(java.lang.String timelineInterval)
           
 void setLevel(int level)
           
 void setMenuTemplate(java.lang.String menuTemplate)
           
 void setNode(java.lang.String node)
           
 void setNumSummaryItems(java.lang.Integer numSummaryItems)
           
 void setParent(AccountMenuStructure parent)
           
 void setParent(MenuStructure parent)
           
 void setPath(java.lang.String path)
          Let the infrastructure set this attribute by following the parent/child hierarchy.
 void setQuery(java.lang.String query)
           
 void setReferenced(AccountMenuStructure referenced)
           
 void setReferenced(MenuStructure referenced)
           
 void setRepeating(java.lang.String repeating)
           
 void setRole(java.lang.String role)
           
 void setSequence(int sequence)
           
 void setSequence(java.lang.Integer sequence)
           
 void setStyle(java.lang.String style)
           
 void setTemplate(java.lang.String template)
           
 void setText(java.lang.String text)
           
 void setTextOverride(java.lang.String text)
           
 void setUnderlyingMS(AccountMenuStructure underlyingMS)
           
 void setUniqueKey(java.lang.String uniqueKey)
           
 void setVisible(java.lang.String visible)
           
 void setWindowstyle(java.lang.String windowstyle)
           
 java.lang.String toString()
           
 void UpdateDPSOfParent(AccountMenuStructure ms)
           
 
Methods inherited from class org.tolven.app.entity.MenuStructure
getDefaultLocaleText, getDefaultLocaleText, getLocaleText, getLocaleText, getLocaleTextKey, getRootApplication, getSortedList, getTemplateType
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

UserMenuStructure

public UserMenuStructure()

UserMenuStructure

public UserMenuStructure(AccountUser accountuser,
                         AccountMenuStructure underlytingMS,
                         java.lang.String visible,
                         java.lang.Integer seq,
                         java.lang.Integer colnumber,
                         java.lang.String windowStyle,
                         java.lang.Integer numSummaryItems,
                         java.lang.String defaultpath,
                         java.lang.String interval)
Method Detail

getId

public long getId()
Specified by:
getId in class MenuStructure

setId

public void setId(long id)
Specified by:
setId in class MenuStructure

getAccountuser

public AccountUser getAccountuser()

setAccountuser

public void setAccountuser(AccountUser accountuser)

getUnderlyingMS

public MenuStructure getUnderlyingMS()

setUnderlyingMS

public void setUnderlyingMS(AccountMenuStructure underlyingMS)

setDefaultPathSuffix

public void setDefaultPathSuffix(java.lang.String defaultPathSuffix)
Specified by:
setDefaultPathSuffix in class MenuStructure

getRoot

public AccountMenuStructure getRoot()
Get the root of this MenuStructure tree

Specified by:
getRoot in class MenuStructure
Returns:
The root MenuStructure

equals

public boolean equals(java.lang.Object obj)
Overrides:
equals in class java.lang.Object

toString

public java.lang.String toString()
Specified by:
toString in class MenuStructure

hashCode

public int hashCode()
Specified by:
hashCode in class MenuStructure

getLevel

public int getLevel()
Specified by:
getLevel in class MenuStructure

getNode

public java.lang.String getNode()
Specified by:
getNode in class MenuStructure

getPath

public java.lang.String getPath()
Specified by:
getPath in class MenuStructure

getQuery

public java.lang.String getQuery()
Specified by:
getQuery in class MenuStructure

setQuery

public void setQuery(java.lang.String query)
Specified by:
setQuery in class MenuStructure

getFilter

public java.lang.String getFilter()
The user should never be allowed to override the filter criteria. End-user filter criteria is always on top of this filter.

Specified by:
getFilter in class MenuStructure
Returns:

setFilter

public void setFilter(java.lang.String filter)
Specified by:
setFilter in class MenuStructure

getInitialSort

public java.lang.String getInitialSort()
Specified by:
getInitialSort in class MenuStructure

setInitialSort

public void setInitialSort(java.lang.String initialSort)
Specified by:
setInitialSort in class MenuStructure

getActions

public java.util.List<MSAction> getActions()
Return a list of actions, sorted per sequence

Specified by:
getActions in class MenuStructure

getSequence

public int getSequence()
Specified by:
getSequence in class MenuStructure

getTemplate

public java.lang.String getTemplate()
Specified by:
getTemplate in class MenuStructure

getRepeating

public java.lang.String getRepeating()
Specified by:
getRepeating in class MenuStructure

getVisible

public java.lang.String getVisible()
Specified by:
getVisible in class MenuStructure

getText

public java.lang.String getText()
Specified by:
getText in class MenuStructure

getTextOverride

public java.lang.String getTextOverride()
Specified by:
getTextOverride in class MenuStructure

getParent

public AccountMenuStructure getParent()
Specified by:
getParent in class MenuStructure

getChildren

public java.util.Collection<AccountMenuStructure> getChildren()
Specified by:
getChildren in class MenuStructure

getSortedChildren

public java.util.List<AccountMenuStructure> getSortedChildren()
Specified by:
getSortedChildren in class MenuStructure

getRole

public java.lang.String getRole()
Depending on the template, this role helps determine where in the page this menu item occurs. For example, menuItem is a common role used for the main menu structure. Portlet could also be a role, context, etc.

Specified by:
getRole in class MenuStructure
Returns:

getMenuTemplate

public java.lang.String getMenuTemplate()
Specified by:
getMenuTemplate in class MenuStructure

getAccount

public Account getAccount()
Specified by:
getAccount in class MenuStructure

getColumns

public java.util.Collection<MSColumn> getColumns()
Specified by:
getColumns in class MenuStructure

getSortedColumns

public java.util.List<MSColumn> getSortedColumns()
Specified by:
getSortedColumns in class MenuStructure

getReferenced

public AccountMenuStructure getReferenced()

When non-null, a "list" item refers to another MenuStructure item that actually contains the data. This allows a list to be moved around in the menu structure while the rule that populates the list always does do in a consistent place.

This also allows a list, such as a generic menu to be accessed from within, say, the patient context without requiring patient to be specified in the path

Specified by:
getReferenced in class MenuStructure
Returns:

getDefaultPathSuffix

public java.lang.String getDefaultPathSuffix()
Specified by:
getDefaultPathSuffix in class MenuStructure

getEnableBackButton

public java.lang.Boolean getEnableBackButton()
Specified by:
getEnableBackButton in class MenuStructure

setVisible

public void setVisible(java.lang.String visible)
Specified by:
setVisible in class MenuStructure

setSequence

public void setSequence(java.lang.Integer sequence)

UpdateDPSOfParent

public void UpdateDPSOfParent(AccountMenuStructure ms)
Specified by:
UpdateDPSOfParent in class MenuStructure

findChild

public AccountMenuStructure findChild(java.lang.String node)
Description copied from class: MenuStructure
Find the first child containing the specified node name.

Specified by:
findChild in class MenuStructure
Parameters:
node - Parent node to search
Returns:
MenuStructure or null

findDescendent

public AccountMenuStructure findDescendent(java.lang.String node)
Description copied from class: MenuStructure
Find the first child or child of child, etc containing the specified node name.

Specified by:
findDescendent in class MenuStructure
Parameters:
node - Node from which to begin search
Returns:
MenuStructure or null

setAccount

public void setAccount(Account account)
Specified by:
setAccount in class MenuStructure

setChildren

public void setChildren(java.util.Collection<AccountMenuStructure> children)
Specified by:
setChildren in class MenuStructure

setEnableBackButton

public void setEnableBackButton(java.lang.Boolean enableBackButton)
Specified by:
setEnableBackButton in class MenuStructure

setLevel

public void setLevel(int level)
Specified by:
setLevel in class MenuStructure

setMenuTemplate

public void setMenuTemplate(java.lang.String menuTemplate)
Specified by:
setMenuTemplate in class MenuStructure

setNode

public void setNode(java.lang.String node)
Specified by:
setNode in class MenuStructure

setParent

public void setParent(AccountMenuStructure parent)
Specified by:
setParent in class MenuStructure

setParent

public void setParent(MenuStructure parent)
Specified by:
setParent in class MenuStructure

setPath

public void setPath(java.lang.String path)
Description copied from class: MenuStructure
Let the infrastructure set this attribute by following the parent/child hierarchy. In fact, it will be reset at persist time.

Specified by:
setPath in class MenuStructure

setReferenced

public void setReferenced(AccountMenuStructure referenced)
Specified by:
setReferenced in class MenuStructure

setReferenced

public void setReferenced(MenuStructure referenced)
Specified by:
setReferenced in class MenuStructure

setRepeating

public void setRepeating(java.lang.String repeating)
Specified by:
setRepeating in class MenuStructure

setRole

public void setRole(java.lang.String role)
Specified by:
setRole in class MenuStructure

setSequence

public void setSequence(int sequence)
Specified by:
setSequence in class MenuStructure

setTemplate

public void setTemplate(java.lang.String template)
Specified by:
setTemplate in class MenuStructure

setText

public void setText(java.lang.String text)
Specified by:
setText in class MenuStructure

setTextOverride

public void setTextOverride(java.lang.String text)
Specified by:
setTextOverride in class MenuStructure

getAccountMenuStructure

public AccountMenuStructure getAccountMenuStructure()
Specified by:
getAccountMenuStructure in class MenuStructure

getColumnNumber

public java.lang.Integer getColumnNumber()
Specified by:
getColumnNumber in class MenuStructure

setColumnNumber

public void setColumnNumber(java.lang.Integer columnNumber)
Specified by:
setColumnNumber in class MenuStructure

getWindowstyle

public java.lang.String getWindowstyle()
Specified by:
getWindowstyle in class MenuStructure

setWindowstyle

public void setWindowstyle(java.lang.String windowstyle)

getNumSummaryItems

public java.lang.Integer getNumSummaryItems()
Specified by:
getNumSummaryItems in class MenuStructure

setNumSummaryItems

public void setNumSummaryItems(java.lang.Integer numSummaryItems)

getAllowRoles

public java.lang.String getAllowRoles()
Specified by:
getAllowRoles in class MenuStructure

getDenyRoles

public java.lang.String getDenyRoles()
Specified by:
getDenyRoles in class MenuStructure

getInterval

public java.lang.String getInterval()
Specified by:
getInterval in class MenuStructure

setInterval

public void setInterval(java.lang.String timelineInterval)
Specified by:
setInterval in class MenuStructure

getStyle

public java.lang.String getStyle()
Specified by:
getStyle in class MenuStructure

setStyle

public void setStyle(java.lang.String style)
Specified by:
setStyle in class MenuStructure

getUniqueKey

public java.lang.String getUniqueKey()
Specified by:
getUniqueKey in class MenuStructure

setUniqueKey

public void setUniqueKey(java.lang.String uniqueKey)
Specified by:
setUniqueKey in class MenuStructure