Changeset 1665

Show
Ignore:
Timestamp:
06/30/08 21:52:44 (2 months ago)
Author:
mikey
Message:

refactor request broker to use a method and property matcher

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/php/net/stubbles/ipo/request/broker/stubRequestBroker.php

    r1578 r1665  
    99stubClassLoader::load('net::stubbles::ipo::request::stubRequest', 
    1010                      'net::stubbles::ipo::request::broker::stubRequestBrokerException', 
     11                      'net::stubbles::ipo::request::broker::stubRequestBrokerMethodPropertyMatcher', 
    1112                      'net::stubbles::ipo::request::broker::annotations::stubFloatFilterAnnotation', 
    1213                      'net::stubbles::ipo::request::broker::annotations::stubHTTPURLFilterAnnotation', 
     
    2930{ 
    3031    /** 
     32     * the matcher to be used for methods and properties 
     33     * 
     34     * @var  stubRequestBrokerMethodPropertyMatcher 
     35     */ 
     36    protected static $methodAndPropertyMatcher; 
     37 
     38    /** 
     39     * static initializer 
     40     */ 
     41    // @codeCoverageIgnoreStart 
     42    public static function __static() 
     43    { 
     44        self::$methodAndPropertyMatcher = new stubRequestBrokerMethodPropertyMatcher(); 
     45    } 
     46    // @codeCoverageIgnoreEnd 
     47 
     48    /** 
    3149     * does the real action 
    3250     * 
     
    4765        } 
    4866         
    49         foreach ($refClass->getProperties() as $refProperty) { 
    50             if ($this->isAvailable($refProperty) === true) { 
    51                 $filterAnnotation = $refProperty->getAnnotation('Filter'); 
    52                 if (false === $required) { 
    53                     $filterAnnotation->setRequired(false); 
    54                 } 
    55                  
    56                 $value = $request->getFilteredValue($filterAnnotation->getFilter(), $prefix . $filterAnnotation->getFieldName()); 
    57                 if ($request->hasValueError($prefix . $filterAnnotation->getFieldName()) === false) { 
    58                     $refProperty->setValue($object, $value); 
    59                 } 
     67        foreach ($refClass->getPropertiesByMatcher(self::$methodAndPropertyMatcher) as $refProperty) { 
     68            $filterAnnotation = $refProperty->getAnnotation('Filter'); 
     69            if (false === $required) { 
     70                $filterAnnotation->setRequired(false); 
     71            } 
     72             
     73            $value = $request->getFilteredValue($filterAnnotation->getFilter(), $prefix . $filterAnnotation->getFieldName()); 
     74            if ($request->hasValueError($prefix . $filterAnnotation->getFieldName()) === false) { 
     75                $refProperty->setValue($object, $value); 
    6076            } 
    6177        } 
    6278         
    63         foreach ($refClass->getMethods() as $refMethod) { 
    64             if ($this->isAvailable($refMethod) === true) { 
    65                 $filterAnnotation = $refMethod->getAnnotation('Filter'); 
    66                 if (false === $required) { 
    67                     $filterAnnotation->setRequired(false); 
    68                 } 
    69                  
    70                 $value = $request->getFilteredValue($filterAnnotation->getFilter(), $prefix . $filterAnnotation->getFieldName()); 
    71                 if ($request->hasValueError($prefix . $filterAnnotation->getFieldName()) === false) { 
    72                     $refMethod->invoke($object, $value); 
    73                 } 
     79        foreach ($refClass->getMethodsByMatcher(self::$methodAndPropertyMatcher) as $refMethod) { 
     80            $filterAnnotation = $refMethod->getAnnotation('Filter'); 
     81            if (false === $required) { 
     82                $filterAnnotation->setRequired(false); 
     83            } 
     84             
     85            $value = $request->getFilteredValue($filterAnnotation->getFilter(), $prefix . $filterAnnotation->getFieldName()); 
     86            if ($request->hasValueError($prefix . $filterAnnotation->getFieldName()) === false) { 
     87                $refMethod->invoke($object, $value); 
    7488            } 
    7589        } 
    7690    } 
    77  
    78     /** 
    79      * checks if the property or method is available for broking 
    80      * 
    81      * @param   stubReflectionProperty|stubReflectionMethod  $refInstance 
    82      * @return  bool 
    83      */ 
    84     protected function isAvailable($refInstance) 
    85     { 
    86         if ($refInstance->isPublic() === false || $refInstance->isStatic() === true) { 
    87             return false; 
    88         } 
    89          
    90         if ($refInstance->hasAnnotation('Filter') === true) { 
    91             return true; 
    92         } 
    93          
    94         return false; 
    95     } 
    9691} 
    9792?>