Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • get child nodes
    • method: GET
    • path: .magnolia/rest/tree/<treeName>/<path>
    • arguments: treeName and path in uri
    • returns: TreeNodeListTreeNodeWithChildren
  • get tree configuration
    • method: POST
    • path: .magnolia/rest/tree/<treeName>/config
    • arguments: treeName in uri
    • returns: JsonTreeConfiguration
  • execute command
    • method: POST
    • path: .magnolia/rest/tree/<treeName>/<path>/<command>
    • arguments: treeName, path and the name of the command in uri, rest of parameters are used by the actual command
    • returns: depends on the command, must be able to also output a message (AlertUtil-style)TreeCommandExecutionResult

Commands

Commands are configured in the repository, arguments to a command are set using node data and mapped in using C2B. Parameters in the request are mapped onto the command using reflection before execution. A command is a use-once object (fresh instance created for every request). Commands include:

  • create content
    • arguments: optional name (defaults to 'untitled'), itemType
    • returns: a TreeNodeList with only TreeNodeWithChildren of the newly created TreeNodenodes parent
    • note:
      • if the new name is already taken a unique name will be generated
      • for the website tree the command must also set the default template (CreateWebsiteNodeCommand performs this)
      • for the users tree the command must also add the newly added user to UserManager
  • delete content
    • arguments: none other than the path
    • returns: a TreeNodeList TreeNodeWithChildren of the deleted nodes parent
    • note: must also deactivate the deleted node
  • rename content
    • arguments: the new name
    • returns: a TreeNodeList TreeNodeWithChildren of parent of the node that changed name
    • note:
      • if the new name is already taken a unique name will be generated
      • for the users tree the command must update ACLs after rename
  • move content
    • arguments: new path, name of node to place before/after
    • returns: a TreeNodeList TreeNodeWithChildren of the parent that the node was moved to and the previous parent
    • note:
      • if the new name is already taken a unique name will be generated
  • copy content
    • arguments: new path, name of node to place before/after
    • returns: a TreeNodeList TreeNodeWithChildren of the parent that the node was copied to
    • note:
      • the new content must be deactivated
      • if the new name is already taken a unique name will be generated
  • activate
  • activate incl subnodes
  • add nodedata
    • arguments: name, value and type (type and value optional defaults to empty string)
    • returns: a TreeNodeList TreeNodeWithChildren of the node where nodedata was added
    • note: if the name is already taken a unique name will be generated
  • set nodedata
    • arguments: name and value
    • returns: a TreeNodeList TreeNodeWithChildren of the node where nodedata was changed
  • remove nodedata
    • arguments: name of nodedata to remove
    • returns: a TreeNodeList TreeNodeWithChildren of the node where nodedata was removed
  • rename nodedata
    • arguments: name of nodedata to rename, new name
    • returns: a TreeNodeList TreeNodeWithChildren of the node where nodedata was renamed
    • note: what if the new name already exists? create unique or fail?
  • list versions
  • revert to version
  • import and export
    • note: does this even make sense to do with REST? (there's certainly nothing to return as JSON)
  • search
    • arguments: search query
    • returns: search result
  • set metadata property
    • arguments: name, value and type

Command return values

Update: Commands return TreeCommandExecutionResult that contains all the changed nodes

To be decided: After invoking the command its up to the handler to return a good response. Depending on the command we need to return very different things:

...