Changeset 1867

Show
Ignore:
Timestamp:
09/27/08 15:07:07 (3 months ago)
Author:
mikey
Message:

add possibility to set min and max date dynamically into annotation

Files:

Legend:

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

    r1866 r1867  
    88 * @version     $Id$ 
    99 */ 
    10 stubClassLoader::load('net::stubbles::reflection::annotations::stubAnnotation', 
    11                       'net::stubbles::ipo::request::broker::annotations::stubAbstractFilterAnnotation', 
     10stubClassLoader::load('net::stubbles::ipo::request::broker::annotations::stubAbstractFilterAnnotation', 
    1211                      'net::stubbles::ipo::request::filter::stubDateFilter', 
    1312                      'net::stubbles::ipo::request::filter::stubPeriodFilterDecorator', 
    14                       'net::stubbles::lang::types::stubDate' 
     13                      'net::stubbles::lang::types::stubDate', 
     14                      'net::stubbles::reflection::stubBaseReflectionClass', 
     15                      'net::stubbles::reflection::annotations::stubAnnotation' 
    1516); 
    1617/** 
     
    2930    protected $minDate; 
    3031    /** 
     32     * minimum date provider class 
     33     * 
     34     * @var  stubBaseReflectionClass 
     35     */ 
     36    protected $minDateProviderClass; 
     37    /** 
     38     * minimum date provider method 
     39     * 
     40     * @var  string 
     41     */ 
     42    protected $minDateProviderMethod = 'getMinDate'; 
     43    /** 
    3144     * the error id to use in case min date validation fails 
    3245     * 
     
    4053     */ 
    4154    protected $maxDate; 
     55    /** 
     56     * maximum date provider class 
     57     * 
     58     * @var  stubBaseReflectionClass 
     59     */ 
     60    protected $maxDateProviderClass; 
     61    /** 
     62     * maximum date provider method 
     63     * 
     64     * @var  string 
     65     */ 
     66    protected $maxDateProviderMethod = 'getMaxDate'; 
    4267    /** 
    4368     * the error id to use in case max date validation fails 
     
    6893 
    6994    /** 
     95     * sets the minimum date provider class 
     96     * 
     97     * @param  stubBaseReflectionClass  $minDateProviderClass 
     98     */ 
     99    public function setMinDateProviderClass(stubBaseReflectionClass $minDateProviderClass) 
     100    { 
     101        $this->minDateProviderClass = $minDateProviderClass; 
     102    } 
     103 
     104    /** 
     105     * sets the minimum date provider method 
     106     * 
     107     * @param  string  $minDateProviderMethod 
     108     */ 
     109    public function setMinDateProviderMethod($minDateProviderMethod) 
     110    { 
     111        $this->minDateProviderMethod = $minDateProviderMethod; 
     112    } 
     113 
     114    /** 
    70115     * sets the error id to use in case min date validation fails 
    71116     * 
     
    92137 
    93138    /** 
     139     * sets the maximum date provider class 
     140     * 
     141     * @param  stubBaseReflectionClass  $maxDateProviderClass 
     142     */ 
     143    public function setMaxDateProviderClass(stubBaseReflectionClass $maxDateProviderClass) 
     144    { 
     145        $this->maxDateProviderClass = $maxDateProviderClass; 
     146    } 
     147 
     148    /** 
     149     * sets the maximum date provider method 
     150     * 
     151     * @param  string  $maxDateProviderMethod 
     152     */ 
     153    public function setMaxDateProviderMethod($maxDateProviderMethod) 
     154    { 
     155        $this->maxDateProviderMethod = $maxDateProviderMethod; 
     156    } 
     157 
     158    /** 
    94159     * sets the error id to use in case max date validation fails 
    95160     * 
     
    119184    { 
    120185        $filter = new stubDateFilter($this->createRVEFactory()); 
     186        if (null == $this->minDate && null !== $this->minDateProviderClass) { 
     187            $this->setMinDate($this->getDateFromProvider($this->minDateProviderClass, $this->minDateProviderMethod)); 
     188        } 
     189        if (null == $this->maxDate && null !== $this->maxDateProviderClass) { 
     190            $this->setMaxDate($this->getDateFromProvider($this->maxDateProviderClass, $this->maxDateProviderMethod)); 
     191        } 
     192         
    121193        if (null !== $this->minDate || null !== $this->maxDate) { 
    122194            $filter = new stubPeriodFilterDecorator($filter, $this->createRVEFactory()); 
     
    136208        return $filter; 
    137209    } 
     210 
     211    /** 
     212     * retrieves date from provider 
     213     * 
     214     * @param   stubBaseReflectionClass  $providerClass 
     215     * @param   string                   $providerMethod 
     216     * @return  int|string|stubDate 
     217     */ 
     218    protected function getDateFromProvider(stubBaseReflectionClass $providerClass, $providerMethod) 
     219    { 
     220        $method = $providerClass->getMethod($providerMethod); 
     221        if ($method->isStatic() === true) { 
     222            return $method->invoke(null); 
     223        } 
     224         
     225        return $method->invoke($providerClass->newInstance()); 
     226    } 
    138227} 
    139228?> 
  • framework/trunk/src/test/php/net/stubbles/ipo/request/broker/annotations/stubDateFilterAnnotationTestCase.php

    r1866 r1867  
    1010stubClassLoader::load('net::stubbles::ipo::request::broker::annotations::stubDateFilterAnnotation'); 
    1111/** 
     12 * Helper class for the test. 
     13 * 
     14 * @package     stubbles 
     15 * @subpackage  ipo_request_broker_annotations_test 
     16 */ 
     17class DateProvider extends stubBaseObject 
     18{ 
     19    /** 
     20     * returns min data in a static way 
     21     * 
     22     * @return  stubDate 
     23     */ 
     24    public static function getMinDate() 
     25    { 
     26        return stubDate::now(); 
     27    } 
     28 
     29    /** 
     30     * returns min data in a dynamic way 
     31     * 
     32     * @return  stubDate 
     33     */ 
     34    public function getMinDateNonStatic() 
     35    { 
     36        return stubDate::now(); 
     37    } 
     38 
     39    /** 
     40     * returns max data in a static way 
     41     * 
     42     * @return  stubDate 
     43     */ 
     44    public static function getMaxDate() 
     45    { 
     46        return stubDate::now(); 
     47    } 
     48 
     49    /** 
     50     * returns max data in a dynamic way 
     51     * 
     52     * @return  stubDate 
     53     */ 
     54    public function getMaxDateNonStatic() 
     55    { 
     56        return stubDate::now(); 
     57    } 
     58} 
     59/** 
    1260 * Tests for net::stubbles::ipo::request::broker::annotations::stubDateFilterAnnotation. 
    1361 * 
     
    82130     * @test 
    83131     */ 
    84     public function withMaxDate() 
     132    public function withMinDateFromProviderWithDefaultMethod() 
     133    { 
     134        $this->dateFilterAnnotation->setMinDateProviderClass(new stubReflectionClass('DateProvider')); 
     135        $filter = $this->dateFilterAnnotation->getFilter(); 
     136        $this->assertType('stubPeriodFilterDecorator', $filter); 
     137        $this->assertNull($filter->getMaxDate()); 
     138        $this->assertTrue(stubDate::now()->equals($filter->getMinDate())); 
     139        $this->assertType('stubDateFilter', $filter->getDecoratedFilter()); 
     140    } 
     141 
     142    /** 
     143     * test that the correct filter is created 
     144     * 
     145     * @test 
     146     */ 
     147    public function withMinDateFromProviderWithOtherMethod() 
     148    { 
     149        $this->dateFilterAnnotation->setMinDateProviderClass(new stubReflectionClass('DateProvider')); 
     150        $this->dateFilterAnnotation->setMinDateProviderMethod('getMinDateNonStatic'); 
     151        $filter = $this->dateFilterAnnotation->getFilter(); 
     152        $this->assertType('stubPeriodFilterDecorator', $filter); 
     153        $this->assertNull($filter->getMaxDate()); 
     154        $this->assertTrue(stubDate::now()->equals($filter->getMinDate())); 
     155        $this->assertType('stubDateFilter', $filter->getDecoratedFilter()); 
     156    } 
     157 
     158    /** 
     159     * test that the correct filter is created 
     160     * 
     161     * @test 
     162     */ 
     163    public function withMaxDateFromDate() 
    85164    { 
    86165        $maxDate = stubDate::now(); 
     
    101180    { 
    102181        $this->dateFilterAnnotation->setMaxDate('now'); 
     182        $filter = $this->dateFilterAnnotation->getFilter(); 
     183        $this->assertType('stubPeriodFilterDecorator', $filter); 
     184        $this->assertNull($filter->getMinDate()); 
     185        $this->assertTrue(stubDate::now()->equals($filter->getMaxDate())); 
     186        $this->assertType('stubDateFilter', $filter->getDecoratedFilter()); 
     187    } 
     188 
     189    /** 
     190     * test that the correct filter is created 
     191     * 
     192     * @test 
     193     */ 
     194    public function withMaxFromProviderWithDefaultMethod() 
     195    { 
     196        $this->dateFilterAnnotation->setMaxDateProviderClass(new stubReflectionClass('DateProvider')); 
     197        $filter = $this->dateFilterAnnotation->getFilter(); 
     198        $this->assertType('stubPeriodFilterDecorator', $filter); 
     199        $this->assertNull($filter->getMinDate()); 
     200        $this->assertTrue(stubDate::now()->equals($filter->getMaxDate())); 
     201        $this->assertType('stubDateFilter', $filter->getDecoratedFilter()); 
     202    } 
     203 
     204    /** 
     205     * test that the correct filter is created 
     206     * 
     207     * @test 
     208     */ 
     209    public function withMaxFromProviderWithOtherMethod() 
     210    { 
     211        $this->dateFilterAnnotation->setMaxDateProviderClass(new stubReflectionClass('DateProvider')); 
     212        $this->dateFilterAnnotation->setMaxDateProviderMethod('getMaxDateNonStatic'); 
    103213        $filter = $this->dateFilterAnnotation->getFilter(); 
    104214        $this->assertType('stubPeriodFilterDecorator', $filter);