...
- 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:
...