/** * Adds a node type * * Adding a node type will give the ability to a node to have different kind of properties based on the original * node. You can compare it with inheriting functions from a parent class. * * @param EncoderNode $nodeType * @return EncoderNode Returns the EncoderNode if the node type was successfully added */ public static function addNodeType(EncoderNode $nodeType) { if ($nodeType->getNodeTypeName() === null) { throw new EncoderNodeException('The node type you\'re trying to add seems to be a regular node because it has a no type name. Make sure you try to add an EncoderNode with a type name'); } $nodeName = $nodeType->getNodeName(); $nodeTypeName = $nodeType->getNodeTypeName(); if (self::nodeTypeExists($nodeName, $nodeTypeName)) { throw new EncoderNodeException(sprintf('Node type with name "%s" and node type name "%s" already exists', $nodeName, $nodeTypeName)); } $nodeType->typeName = $nodeTypeName; $nodeTypeId = self::getNodeTypeId($nodeType->getNodeName(), $nodeTypeName); self::$nodesTypes[$nodeTypeId] = $nodeType; self::softCleanNodeTypeCache(); return $nodeType; }