FiltrablePrimitive.class.php

Go to the documentation of this file.
00001 <?php
00002 /****************************************************************************
00003  *   Copyright (C) 2005-2008 by Anton E. Lebedevich, Konstantin V. Arkhipov *
00004  *                                                                          *
00005  *   This program is free software; you can redistribute it and/or modify   *
00006  *   it under the terms of the GNU Lesser General Public License as         *
00007  *   published by the Free Software Foundation; either version 3 of the     *
00008  *   License, or (at your option) any later version.                        *
00009  *                                                                          *
00010  ****************************************************************************/
00011 
00018     abstract class FiltrablePrimitive extends RangedPrimitive
00019     {
00020         private $importFilter   = null;
00021         private $displayFilter  = null;
00022 
00023         public function __construct($name)
00024         {
00025             parent::__construct($name);
00026             
00027             $this->displayFilter = new FilterChain();
00028             $this->importFilter = new FilterChain();
00029         }
00030 
00034         public function setDisplayFilter(FilterChain $chain)
00035         {
00036             $this->displayFilter = $chain;
00037             
00038             return $this;
00039         }
00040         
00044         public function addDisplayFilter(Filtrator $filter)
00045         {
00046             $this->displayFilter->add($filter);
00047             
00048             return $this;
00049         }
00050 
00054         public function dropDisplayFilters()
00055         {
00056             $this->displayFilter = new FilterChain();
00057             
00058             return $this;
00059         }
00060         
00061         public function getDisplayValue()
00062         {
00063             if (is_array($value = $this->getActualValue())) {
00064                 foreach ($value as &$element)
00065                     $element = $this->displayFilter->apply($element);
00066                 
00067                 return $value;
00068             }
00069             
00070             return $this->displayFilter->apply($value);
00071         }
00072         
00076         public function setImportFilter(FilterChain $chain)
00077         {
00078             $this->importFilter = $chain;
00079             
00080             return $this;
00081         }
00082         
00086         public function addImportFilter(Filtrator $filter)
00087         {
00088             $this->importFilter->add($filter);
00089             
00090             return $this;
00091         }
00092 
00096         public function dropImportFilters()
00097         {
00098             $this->importFilter = new FilterChain();
00099             
00100             return $this;
00101         }
00102         
00106         public function getImportFilter()
00107         {
00108             return $this->importFilter;
00109         }
00110 
00114         public function getDisplayFilter()
00115         {
00116             return $this->displayFilter;
00117         }
00118 
00122         protected function selfFilter()
00123         {
00124             if (is_array($this->value))
00125                 foreach ($this->value as &$value)
00126                     $value = $this->importFilter->apply($value);
00127             else
00128                 $this->value = $this->importFilter->apply($this->value);
00129 
00130             return $this;
00131         }
00132     }
00133 ?>