Ejemplo n.º 1
0
 public function testResourceProperty()
 {
     $addressResType = new ResourceType(new \ReflectionClass('UnitTests\\POData\\Facets\\NorthWind1\\Address2'), ResourceTypeKind::COMPLEX, 'Address', 'Northwind');
     $booleanResourcetype = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::BOOLEAN);
     $isPrimaryPrimProperty = new ResourceProperty('IsPrimary', null, ResourcePropertyKind::PRIMITIVE, $booleanResourcetype);
     $addressResType->addProperty($isPrimaryPrimProperty);
     try {
         $addressComplexProperty = new ResourceProperty('Address', null, ResourcePropertyKind::COMPLEX_TYPE | ResourcePropertyKind::KEY, $addressResType);
         $this->fail('An expected InvalidArgumentException for \'invalid ResourcePropertyKind\' has not been raised');
     } catch (\InvalidArgumentException $exception) {
         $this->assertStringEndsWith('not a valid ResourcePropertyKind enum value or valid combination of ResourcePropertyKind enum values', $exception->getMessage());
     }
     $stringResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::STRING);
     try {
         $addressComplexProperty = new ResourceProperty('Address', null, ResourcePropertyKind::COMPLEX_TYPE, $stringResourceType);
         $this->fail('An expected InvalidArgumentException for \'Property and ResourceType kind mismatch\' has not been raised');
     } catch (\InvalidArgumentException $exception) {
         $this->assertStringStartsWith('The \'$kind\' parameter does not match with the type of the resource type', $exception->getMessage());
     }
     $customerResType = new ResourceType(new \ReflectionClass('UnitTests\\POData\\Facets\\NorthWind1\\Customer2'), ResourceTypeKind::ENTITY, 'Customer', 'Northwind');
     $stringResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::STRING);
     $customerIDPrimProperty = new ResourceProperty('CustomerID', null, ResourcePropertyKind::PRIMITIVE | ResourcePropertyKind::KEY, $stringResourceType);
     $customerNamePrimProperty = new ResourceProperty('CustomerName', null, ResourcePropertyKind::PRIMITIVE, $stringResourceType);
     $intResourceType = ResourceType::getPrimitiveResourceType(EdmPrimitiveType::INT32);
     $ratingPrimProperty = new ResourceProperty('Rating', null, ResourcePropertyKind::PRIMITIVE, $intResourceType);
     $customerResType->addProperty($customerIDPrimProperty);
     $customerResType->addProperty($customerNamePrimProperty);
     $customerResType->addProperty($ratingPrimProperty);
     $this->assertTrue($customerIDPrimProperty->isKindOf(ResourcePropertyKind::KEY));
     $this->assertTrue($customerIDPrimProperty->isKindOf(ResourcePropertyKind::PRIMITIVE));
     $customerReferenceSetProperty = new ResourceProperty('Customers', null, ResourcePropertyKind::RESOURCESET_REFERENCE, $customerResType);
     $this->assertEquals($customerReferenceSetProperty->getName(), 'Customers');
     $this->assertEquals($customerReferenceSetProperty->getKind(), ResourcePropertyKind::RESOURCESET_REFERENCE);
     $this->assertEquals($customerReferenceSetProperty->getInstanceType() instanceof \ReflectionClass, true);
     $this->assertEquals($customerReferenceSetProperty->getResourceType()->getName(), 'Customer');
     $this->assertEquals($customerReferenceSetProperty->getTypeKind(), ResourceTypeKind::ENTITY);
     $this->assertFalse($customerReferenceSetProperty->isKindOf(ResourcePropertyKind::RESOURCE_REFERENCE));
 }
Ejemplo n.º 2
0
 /**
  * Write primitive property facets. 
  * 
  * @param ResourceProperty $primitveProperty primitive property
  * 
  * @return void
  */
 private function _writePrimitivePropertyFacets(ResourceProperty $primitveProperty)
 {
     $nullable = true;
     if ($primitveProperty->isKindOf(ResourcePropertyKind::KEY)) {
         $nullable = false;
     }
     $this->_xmlWriter->writeAttribute(ODataConstants::NULLABLE, $nullable ? "true" : "false");
 }
Ejemplo n.º 3
0
 /**      
  * Add a property belongs to this resource type instance
  * 
  * @param ResourceProperty $property Property to add
  * 
  * @throws InvalidOperationException
  * @return void
  */
 public function addProperty(ResourceProperty $property)
 {
     if ($this->_resourceTypeKind == ResourceTypeKind::PRIMITIVE) {
         throw new InvalidOperationException(Messages::resourceTypeNoAddPropertyForPrimitive());
     }
     $name = $property->getName();
     foreach (array_keys($this->_propertiesDeclaredOnThisType) as $propertyName) {
         if (strcasecmp($propertyName, $name) == 0) {
             throw new InvalidOperationException(Messages::resourceTypePropertyWithSameNameAlreadyExists($propertyName, $this->_name));
         }
     }
     if ($property->isKindOf(ResourcePropertyKind::KEY)) {
         if ($this->_resourceTypeKind != ResourceTypeKind::ENTITY) {
             throw new InvalidOperationException(Messages::resourceTypeKeyPropertiesOnlyOnEntityTypes());
         }
         if ($this->_baseType != null) {
             throw new InvalidOperationException(Messages::resourceTypeNoKeysInDerivedTypes());
         }
     }
     if ($property->isKindOf(ResourcePropertyKind::ETAG) && $this->_resourceTypeKind != ResourceTypeKind::ENTITY) {
         throw new InvalidOperationException(Messages::resourceTypeETagPropertiesOnlyOnEntityTypes());
     }
     //Check for Base class properties
     $this->_propertiesDeclaredOnThisType[$name] = $property;
     // Set $this->_allProperties to null, this is very important because the
     // first call to getAllProperties will initilaize $this->_allProperties,
     // further call to getAllProperties will not reinitialize _allProperties
     // so if addProperty is called after calling getAllProperties then the
     // property just added will not be reflected in $this->_allProperties
     unset($this->_allProperties);
     $this->_allProperties = array();
 }