Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.jasig.portal.layout.dlm
Class DistributedLayoutManager

    java.lang.Object
      org.jasig.portal.layout.dlm.DistributedLayoutManager

All Implemented Interfaces:
  IUserLayoutManager

    public class DistributedLayoutManager

extends java.lang.Object
implements IUserLayoutManager

A layout manager that provides layout control through layout fragments that are derived from regular portal user accounts.

Since:
  uPortal 2.5
Version:
  1.0 $Revision: 1.7.2.1 $ $Date: 2005/09/13 18:31:52 $
Author:
  Mark Boyd

Field Summary
`protected java.lang.String` | `cacheKey`
`private boolean` | `channelsAdded`
`private boolean` | `isFragment`
`protected java.util.Set` | `listeners`
`private static org.apache.commons.logging.Log` | `LOG`
`protected IPerson` | `owner`
`protected UserProfile` | `profile`
`static java.lang.String` | `RCS_ID`
`protected static java.util.Random` | `rnd`
`protected java.lang.String` | `rootNodeId`
`protected IUserLayoutStore` | `store`
`protected org.w3c.dom.Document` | `userLayoutDocument`

Constructor Summary
`DistributedLayoutManager(IPerson owner, UserProfile profile, IUserLayoutStore store)`

Method Summary
`boolean` | `addLayoutEventListener(LayoutEventListener l)` Register a layout event listener
`IUserLayoutNodeDescription` | `addNode(IUserLayoutNodeDescription node, java.lang.String parentId, java.lang.String nextSiblingId)` Add a new node to a current user layout.
`protected boolean` | `canAddNode(IUserLayoutNodeDescription node, IUserLayoutNodeDescription parent, java.lang.String nextSiblingId)`
`boolean` | `canAddNode(IUserLayoutNodeDescription node, java.lang.String parentId, java.lang.String nextSiblingId)` Test if a particular node can be added at a given location.
`protected boolean` | `canDeleteNode(IUserLayoutNodeDescription node)` Returns true if the node exists in the underlying DOM model and it does not contain a 'deleteAllowed' attribute with a value of 'false'.
`boolean` | `canDeleteNode(java.lang.String nodeId)` Tests if a particular node can be deleted.
`private boolean` | `canMoveLeft(java.lang.String nodeId, java.lang.String targetNextSibId)`
`protected boolean` | `canMoveNode(IUserLayoutNodeDescription node, IUserLayoutNodeDescription parent, java.lang.String nextSiblingId)`
`boolean` | `canMoveNode(java.lang.String nodeId, java.lang.String parentId, java.lang.String nextSiblingId)` Test if a particular node can be moved to a given location.
`private boolean` | `canMoveRight(java.lang.String nodeId, java.lang.String targetNextSibId)`
`boolean` | `canUpdateNode(IUserLayoutNodeDescription node)` Returns true if the node is a folder node and edits on the folder are allowed or if the folder is a channel.
`boolean` | `canUpdateNode(java.lang.String nodeId)`
`IUserLayoutNodeDescription` | `createNodeDescription(int nodeType)` A factory method to create an empty `IUserLayoutNodeDescription` instance
`boolean` | `deleteNode(java.lang.String nodeId)` Delete a node (folder or a channel) from a user layout.
`java.lang.String` | `getCacheKey()` Return a cache key, uniqly corresponding to the composition and the structure of the user layout.
`java.util.Enumeration` | `getChildIds(java.lang.String nodeId)` Returns a list of child node Ids for a given node.
`private java.util.Enumeration` | `getChildIds(java.lang.String nodeId, boolean visibleOnly)`
`int` | `getDepth(java.lang.String nodeId)` Returns the depth of a node in the layout tree.
`int` | `getLayoutId()` Returns a layout Id associated with this manager/
`protected IUserLayoutStore` | `getLayoutStore()`
`java.lang.String` | `getNextSiblingId(java.lang.String nodeId)` Determine an Id of a next sibling node.
`IUserLayoutNodeDescription` | `getNode(java.lang.String nodeId)` Obtain a description of a node (channel or a folder) in a given user layout.
`java.lang.String` | `getParentId(java.lang.String nodeId)` Returns an Id of a parent user layout node.
`java.lang.String` | `getPreviousSiblingId(java.lang.String nodeId)` Determine an Id of a previous sibling node.
`java.lang.String` | `getRootFolderId()` Returns an id of the root folder.
`java.lang.String` | `getSubscribeId(java.lang.String fname)` Returns the subscribe ID of a channel having the passed in functional name or null if it can't find such a channel in the layout.
`IUserLayout` | `getUserLayout()` Gets a user layout (with appropriate markings).
`void` | `getUserLayout(org.xml.sax.ContentHandler ch)` Output user layout (with appropriate markings) into a `ContentHandler`
`protected void` | `getUserLayout(org.w3c.dom.Node n, org.xml.sax.ContentHandler ch)`
`void` | `getUserLayout(java.lang.String nodeId, org.xml.sax.ContentHandler ch)` Output subtree of a user layout (with appropriate markings) defined by a particular node into a `ContentHandler`
`org.w3c.dom.Document` | `getUserLayoutDOM()`
`private java.util.Enumeration` | `getVisibleChildIds(java.lang.String nodeId)`
`void` | `loadUserLayout()` Signal manager to load a user layout from a database
`void` | `markAddTargets(IUserLayoutNodeDescription node)` Ask manager to output markings at the locations where a given node can be added.
`void` | `markMoveTargets(java.lang.String nodeId)` Ask manager to output markings at the locations where a given node can be moved.
`boolean` | `moveNode(java.lang.String nodeId, java.lang.String parentId, java.lang.String nextSiblingId)` Move a node (channel or folder) from one location to another.
`private void` | `pushChanDiffsIntoPlf(org.w3c.dom.Element element, IUserLayoutChannelDescription newChan, IUserLayoutChannelDescription oldChan)`
`private void` | `pushFolderDiffsIntoPlf(org.w3c.dom.Element element, UserLayoutFolderDescription newF, UserLayoutFolderDescription oldF)`
`boolean` | `removeLayoutEventListener(LayoutEventListener l)` Remove a registered layout event listener.
`void` | `saveUserLayout()` Signal manager to persist user layout to a database
`void` | `setLayoutStore(IUserLayoutStore store)` Set a user layout store implementation.
`void` | `setUserLayout(IUserLayout userLayout)` Sets a user layout (with appropriate markings).
`private void` | `setUserLayoutDOM(org.w3c.dom.Document doc)`
`private void` | `updateCacheKey()` This is outright cheating ! We're supposed to analyze the user layout tree and return a key that corresponds uniqly to the composition and the sturcture of the tree.
`boolean` | `updateNode(IUserLayoutNodeDescription node)` Update a given node.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### RCS_ID

    public static final java.lang.String RCS_ID

See Also:
  Constant Field Values

### LOG

    private static final org.apache.commons.logging.Log LOG

### owner

    protected final IPerson owner

### profile

    protected final UserProfile profile

### store

    protected IUserLayoutStore store

### listeners

    protected java.util.Set listeners

### userLayoutDocument

    protected org.w3c.dom.Document userLayoutDocument

### rnd

    protected static java.util.Random rnd

### cacheKey

    protected java.lang.String cacheKey

### rootNodeId

    protected java.lang.String rootNodeId

### channelsAdded

    private boolean channelsAdded

### isFragment

    private boolean isFragment

Constructor Detail

### DistributedLayoutManager

    public DistributedLayoutManager(IPerson owner,
                                    UserProfile profile,
                                    IUserLayoutStore store)
                             throws PortalException

Throws:
  `PortalException`

Method Detail

### setUserLayoutDOM

    private void setUserLayoutDOM(org.w3c.dom.Document doc)

### getUserLayoutDOM

    public org.w3c.dom.Document getUserLayoutDOM()

  Specified by:
    `getUserLayoutDOM` in interface `IUserLayoutManager`

### getUserLayout

    public void getUserLayout(org.xml.sax.ContentHandler ch)
                       throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Output user layout (with appropriate markings) into a `ContentHandler`

  Specified by:
    `getUserLayout` in interface `IUserLayoutManager`
  Parameters:
    `ch` - a `ContentHandler` value
  Throws:
    `PortalException` - if an error occurs

### getUserLayout

    public void getUserLayout(java.lang.String nodeId,
                              org.xml.sax.ContentHandler ch)
                       throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Output subtree of a user layout (with appropriate markings) defined by a particular node into a `ContentHandler`

  Specified by:
    `getUserLayout` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` a node determining a user layout subtree.
    `ch` - a `ContentHandler` value
  Throws:
    `PortalException` - if an error occurs

### getUserLayout

    protected void getUserLayout(org.w3c.dom.Node n,
                                 org.xml.sax.ContentHandler ch)
                          throws PortalException

  Throws:
    `PortalException`

### setLayoutStore

    public void setLayoutStore(IUserLayoutStore store)

  Description copied from interface: `IUserLayoutManager`
  Set a user layout store implementation.

  Specified by:
    `setLayoutStore` in interface `IUserLayoutManager`
  Parameters:
    `store` - an `IUserLayoutStore` value

### getLayoutStore

    protected IUserLayoutStore getLayoutStore()

### loadUserLayout

    public void loadUserLayout()
                        throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Signal manager to load a user layout from a database

  Specified by:
    `loadUserLayout` in interface `IUserLayoutManager`
  Throws:
    `PortalException` - if an error occurs

### saveUserLayout

    public void saveUserLayout()
                        throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Signal manager to persist user layout to a database

  Specified by:
    `saveUserLayout` in interface `IUserLayoutManager`
  Throws:
    `PortalException` - if an error occurs

### getNode

    public IUserLayoutNodeDescription getNode(java.lang.String nodeId)
                                       throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Obtain a description of a node (channel or a folder) in a given user layout.

  Specified by:
    `getNode` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` channel subscribe id or folder id.
  Returns:
    an `UserLayoutNodeDescription` value
  Throws:
    `PortalException` - if an error occurs

### addNode

    public IUserLayoutNodeDescription addNode(IUserLayoutNodeDescription node,
                                              java.lang.String parentId,
                                              java.lang.String nextSiblingId)
                                       throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Add a new node to a current user layout.

  Specified by:
    `addNode` in interface `IUserLayoutManager`
  Parameters:
    `node` - an `UserLayoutNodeDescription` value of a node to be added (Id doesn't have to be set)
    `parentId` - a `String` id of a folder to which the new node (channel or folder) should be added.
    `nextSiblingId` - a `String` an id of a sibling node (channel or folder) prior to which the new node should be inserted.
  Returns:
    an `UserLayoutNodeDescription` value with a newly determined Id.
  Throws:
    `PortalException` - if an error occurs

### moveNode

    public boolean moveNode(java.lang.String nodeId,
                            java.lang.String parentId,
                            java.lang.String nextSiblingId)
                     throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Move a node (channel or folder) from one location to another.

  Specified by:
    `moveNode` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` value of a node Id.
    `parentId` - a `String` id of a folder to which the node should be moved.
    `nextSiblingId` - a `String` id of a sibling node (folder or channel) prior to which the node should be placed. (`null` to append at the end)
  Returns:
    a `boolean` value noting if the operation was successful
  Throws:
    `PortalException` - if an error occurs

### deleteNode

    public boolean deleteNode(java.lang.String nodeId)
                       throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Delete a node (folder or a channel) from a user layout.

  Specified by:
    `deleteNode` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` id (channel subscribe id or folder id)
  Returns:
    a `boolean` value noting if the operation was successful
  Throws:
    `PortalException` - if an error occurs

### updateNode

    public boolean updateNode(IUserLayoutNodeDescription node)
                       throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Update a given node.

  Specified by:
    `updateNode` in interface `IUserLayoutManager`
  Parameters:
    `node` - an `UserLayoutNodeDescription` value with a valid id.
  Returns:
    a `boolean` value noting if the operation was successful
  Throws:
    `PortalException` - if an error occurs

### pushFolderDiffsIntoPlf

    private void pushFolderDiffsIntoPlf(org.w3c.dom.Element element,
                                        UserLayoutFolderDescription newF,
                                        UserLayoutFolderDescription oldF)
                                 throws PortalException

  Throws:
    `PortalException`

### pushChanDiffsIntoPlf

    private void pushChanDiffsIntoPlf(org.w3c.dom.Element element,
                                      IUserLayoutChannelDescription newChan,
                                      IUserLayoutChannelDescription oldChan)
                               throws PortalException

  Throws:
    `PortalException`

### canAddNode

    public boolean canAddNode(IUserLayoutNodeDescription node,
                              java.lang.String parentId,
                              java.lang.String nextSiblingId)
                       throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Test if a particular node can be added at a given location.

  Specified by:
    `canAddNode` in interface `IUserLayoutManager`
  Parameters:
    `node` - an `UserLayoutNodeDescription` value describing the node to be added.
    `parentId` - a `String` id of a parent to which the node to be added.
    `nextSiblingId` - a `String` id of a sibling prior to which the node to be inserted. (`null` to append at the end)
  Returns:
    a `boolean` value
  Throws:
    `PortalException` - if an error occurs

### canAddNode

    protected boolean canAddNode(IUserLayoutNodeDescription node,
                                 IUserLayoutNodeDescription parent,
                                 java.lang.String nextSiblingId)
                          throws PortalException

  Throws:
    `PortalException`

### canMoveNode

    public boolean canMoveNode(java.lang.String nodeId,
                               java.lang.String parentId,
                               java.lang.String nextSiblingId)
                        throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Test if a particular node can be moved to a given location.

  Specified by:
    `canMoveNode` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` id of a node to be moved.
    `parentId` - a `String` id of a parent to which the node to be moved.
    `nextSiblingId` - a `String` id of a sibling prior to which the node is to be inserted (`null` to append at the end)
  Returns:
    a `boolean` value
  Throws:
    `PortalException` - if an error occurs

### canMoveNode

    protected boolean canMoveNode(IUserLayoutNodeDescription node,
                                  IUserLayoutNodeDescription parent,
                                  java.lang.String nextSiblingId)
                           throws PortalException

  Throws:
    `PortalException`

### canMoveRight

    private boolean canMoveRight(java.lang.String nodeId,
                                 java.lang.String targetNextSibId)
                          throws PortalException

  Throws:
    `PortalException`

### canMoveLeft

    private boolean canMoveLeft(java.lang.String nodeId,
                                java.lang.String targetNextSibId)
                         throws PortalException

  Throws:
    `PortalException`

### canDeleteNode

    public boolean canDeleteNode(java.lang.String nodeId)
                          throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Tests if a particular node can be deleted.

  Specified by:
    `canDeleteNode` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` node id.
  Returns:
    a `boolean` value
  Throws:
    `PortalException` - if an error occurs

### canDeleteNode

    protected boolean canDeleteNode(IUserLayoutNodeDescription node)
                             throws PortalException

  Returns true if the node exists in the underlying DOM model and it does not contain a 'deleteAllowed' attribute with a value of 'false'.

  Throws:
    `PortalException`

### canUpdateNode

    public boolean canUpdateNode(java.lang.String nodeId)
                          throws PortalException

  Throws:
    `PortalException`

### canUpdateNode

    public boolean canUpdateNode(IUserLayoutNodeDescription node)

  Returns true if the node is a folder node and edits on the folder are allowed or if the folder is a channel.

  Specified by:
    `canUpdateNode` in interface `IUserLayoutManager`
  Parameters:
    `node` - a `IUserLayoutNodeDescription` node id.
  Returns:
    a `boolean` value

### markAddTargets

    public void markAddTargets(IUserLayoutNodeDescription node)

  Description copied from interface: `IUserLayoutManager`
  Ask manager to output markings at the locations where a given node can be added. The marks will appear next time `getUserLayout` method is called.

  Specified by:
    `markAddTargets` in interface `IUserLayoutManager`
  Parameters:
    `node` - an `UserLayoutNodeDescription` value or `null` to stop outputting add markings.

### markMoveTargets

    public void markMoveTargets(java.lang.String nodeId)
                         throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Ask manager to output markings at the locations where a given node can be moved. The marks will appear next time `getUserLayout` method is called.

  Specified by:
    `markMoveTargets` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` value or `null` to stop outputting move markings.
  Throws:
    `PortalException` - if an error occurs

### getParentId

    public java.lang.String getParentId(java.lang.String nodeId)
                                 throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Returns an Id of a parent user layout node. The user layout root node always has ID= `IUserLayout.ROOT_NODE_NAME`

  Specified by:
    `getParentId` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` value
  Returns:
    a `String` value
  Throws:
    `PortalException` - if an error occurs

### getNextSiblingId

    public java.lang.String getNextSiblingId(java.lang.String nodeId)
                                      throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Determine an Id of a next sibling node.

  Specified by:
    `getNextSiblingId` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` value
  Returns:
    a `String` Id value of a next sibling node, or `null` if this is the last sibling.
  Throws:
    `PortalException` - if an error occurs

### getPreviousSiblingId

    public java.lang.String getPreviousSiblingId(java.lang.String nodeId)
                                          throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Determine an Id of a previous sibling node.

  Specified by:
    `getPreviousSiblingId` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` value
  Returns:
    a `String` Id value of a previous sibling node, or `null` if this is the first sibling.
  Throws:
    `PortalException` - if an error occurs

### getChildIds

    public java.util.Enumeration getChildIds(java.lang.String nodeId)
                                      throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Returns a list of child node Ids for a given node.

  Specified by:
    `getChildIds` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` value
  Returns:
    a `List` of `String` child node Ids.
  Throws:
    `PortalException` - if an error occurs

### getVisibleChildIds

    private java.util.Enumeration getVisibleChildIds(java.lang.String nodeId)
                                              throws PortalException

  Throws:
    `PortalException`

### getChildIds

    private java.util.Enumeration getChildIds(java.lang.String nodeId,
                                              boolean visibleOnly)
                                       throws PortalException

  Throws:
    `PortalException`

### getCacheKey

    public java.lang.String getCacheKey()

  Description copied from interface: `IUserLayoutManager`
  Return a cache key, uniqly corresponding to the composition and the structure of the user layout.

  Specified by:
    `getCacheKey` in interface `IUserLayoutManager`
  Returns:
    a `String` value

### updateCacheKey

    private void updateCacheKey()

  This is outright cheating ! We're supposed to analyze the user layout tree and return a key that corresponds uniqly to the composition and the sturcture of the tree. Here we just return a different key wheneever anything changes. So if one was to move a node back and forth, the key would always never (almost) come back to the original value, even though the changes to the user layout are cyclic.

### getLayoutId

    public int getLayoutId()

  Description copied from interface: `IUserLayoutManager`
  Returns a layout Id associated with this manager/

  Specified by:
    `getLayoutId` in interface `IUserLayoutManager`
  Returns:
    an `int` layout Id value;

### getSubscribeId

    public java.lang.String getSubscribeId(java.lang.String fname)

  Returns the subscribe ID of a channel having the passed in functional name or null if it can't find such a channel in the layout.

  Specified by:
    `getSubscribeId` in interface `IUserLayoutManager`
  Parameters:
    `fname` - the functional name to lookup
  Returns:
    a `String` subscription id

### addLayoutEventListener

    public boolean addLayoutEventListener(LayoutEventListener l)

  Description copied from interface: `IUserLayoutManager`
  Register a layout event listener

  Specified by:
    `addLayoutEventListener` in interface `IUserLayoutManager`
  Parameters:
    `l` - a `LayoutEventListener` object
  Returns:
    a `boolean` success status

### removeLayoutEventListener

    public boolean removeLayoutEventListener(LayoutEventListener l)

  Description copied from interface: `IUserLayoutManager`
  Remove a registered layout event listener.

  Specified by:
    `removeLayoutEventListener` in interface `IUserLayoutManager`
  Parameters:
    `l` - a `LayoutEventListener` object
  Returns:
    a `boolean` success status

### getUserLayout

    public IUserLayout getUserLayout()
                              throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Gets a user layout (with appropriate markings).

  Specified by:
    `getUserLayout` in interface `IUserLayoutManager`
  Returns:
    the user layout
  Throws:
    `PortalException` - if an error occurs

### setUserLayout

    public void setUserLayout(IUserLayout userLayout)
                       throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Sets a user layout (with appropriate markings).

  Specified by:
    `setUserLayout` in interface `IUserLayoutManager`
  Parameters:
    `userLayout` - the user layout
  Throws:
    `PortalException` - if an error occurs

### getRootFolderId

    public java.lang.String getRootFolderId()

  Description copied from interface: `IUserLayoutManager`
  Returns an id of the root folder.

  Specified by:
    `getRootFolderId` in interface `IUserLayoutManager`
  Returns:
    a `String` value

### getDepth

    public int getDepth(java.lang.String nodeId)
                 throws PortalException

  Description copied from interface: `IUserLayoutManager`
  Returns the depth of a node in the layout tree.

  Specified by:
    `getDepth` in interface `IUserLayoutManager`
  Parameters:
    `nodeId` - a `String` value
  Returns:
    a depth value
  Throws:
    `PortalException` - if an error occurs

### createNodeDescription

    public IUserLayoutNodeDescription createNodeDescription(int nodeType)
                                                     throws PortalException

  Description copied from interface: `IUserLayoutManager`
  A factory method to create an empty `IUserLayoutNodeDescription` instance

  Specified by:
    `createNodeDescription` in interface `IUserLayoutManager`
  Parameters:
    `nodeType` - a node type constant from `IUserLayoutNodeDescription` interface
  Returns:
    an `IUserLayoutNodeDescription` instance
  Throws:
    `PortalException` - if the error occurs.

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD