/**
* Constructs this node data container
*
* Creating new nodes by instantiating NodeData is not part of the public API!
* The content repository needs to properly integrate new nodes into the node
* tree and therefore you must use createNode() or createNodeFromTemplate()
* in a Node object which will internally create a NodeData object.
*
* @param string $path Absolute path of this node
* @param Workspace $workspace The workspace this node will be contained in
* @param string $identifier The node identifier (not the persistence object identifier!). Specifying this only makes sense while creating corresponding nodes
* @param array $dimensions An array of dimension name to dimension values
*/
public function __construct($path, Workspace $workspace, $identifier = null, array $dimensions = null)
{
parent::__construct();
$this->creationDateTime = new \DateTime();
$this->lastModificationDateTime = new \DateTime();
$this->setPath($path, false);
$this->workspace = $workspace;
$this->identifier = $identifier === null ? Algorithms::generateUUID() : $identifier;
$this->dimensions = new ArrayCollection();
if ($dimensions !== null) {
foreach ($dimensions as $dimensionName => $dimensionValues) {
foreach ($dimensionValues as $dimensionValue) {
$this->dimensions->add(new NodeDimension($this, $dimensionName, $dimensionValue));
}
}
}
$this->buildDimensionValues();
}