/** * Create new instance of ResourceType * * @param ReflectionClass/IType $instanceType Instance type for the resource, * for entity and * complex this will * be 'ReflectionClass' and for * primitive type this * will be IType * @param ResourceTypeKind $resourceTypeKind Kind of resource * (Entity, Complex or Primitive) * @param string $name Name of the resource * @param string $namespaceName Namespace of the resource * @param ResourceType $baseType Base type of the * resource, if exists * @param boolean $isAbstract Whether resource is abstract * * @throws InvalidArgumentException */ public function __construct($instanceType, $resourceTypeKind, $name, $namespaceName = null, ResourceType $baseType = null, $isAbstract = false) { $this->_type = $instanceType; if ($resourceTypeKind == ResourceTypeKind::PRIMITIVE) { if ($baseType != null) { throw new \InvalidArgumentException(Messages::resourceTypeNoBaseTypeForPrimitive()); } if ($isAbstract) { throw new \InvalidArgumentException(Messages::resourceTypeNoAbstractForPrimitive()); } if (!$instanceType instanceof IType) { throw new \InvalidArgumentException(Messages::resourceTypeTypeShouldImplementIType('$instanceType')); } } else { if (!$instanceType instanceof \ReflectionClass) { throw new \InvalidArgumentException(Messages::resourceTypeTypeShouldReflectionClass('$instanceType')); } } $this->_resourceTypeKind = $resourceTypeKind; $this->_name = $name; $this->_baseType = $baseType; $this->_namespaceName = $namespaceName; $this->_fullName = is_null($namespaceName) ? $name : $namespaceName . '.' . $name; $this->_abstractType = $isAbstract; $this->_isMediaLinkEntry = false; $this->_customState = null; $this->_arrayToDetectLoopInComplexBag = array(); //TODO: Set MLE if base type has MLE Set }