/**
  * @param array $data
  * @return Property
  */
 public static function factory(array $data = array())
 {
     $property = new self();
     $property->setName(self::stockProperty($data, SchemaEnum::NAME));
     $property->setDescription(self::stockProperty($data, SchemaEnum::DESCRIPTION));
     $property->setType(self::stockProperty($data, SchemaEnum::TYPE));
     $property->setEnum(self::stockProperty($data, SchemaEnum::ENUM));
     $property->setPattern(self::stockProperty($data, SchemaEnum::PATTERN));
     if (isset($data[SchemaEnum::ITEMS])) {
         // handle sub-schemas
         $property->setItems($data[SchemaEnum::ITEMS]);
     }
     return $property;
 }