1: <?php
  2: 
  3: /**
  4:  * Picon Framework
  5:  * http://code.google.com/p/picon-framework/
  6:  *
  7:  * Copyright (C) 2011-2012 Martin Cassidy <martin.cassidy@webquub.com>
  8: 
  9:  * Picon Framework is free software: you can redistribute it and/or modify
 10:  * it under the terms of the GNU General Public License as published by
 11:  * the Free Software Foundation, either version 3 of the License, or
 12:  * (at your option) any later version.
 13: 
 14:  * Picon Framework is distributed in the hope that it will be useful,
 15:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 17:  *  General Public License for more details.
 18: 
 19:  * You should have received a copy of the GNU General Public License
 20:  * along with Picon Framework.  If not, see <http://www.gnu.org/licenses/>.
 21:  * */
 22: 
 23: namespace picon;
 24: 
 25: /**
 26:  * Collection of resolvers that work as one
 27:  * 
 28:  * @author Martin Cassidy
 29:  * @package web/request/resolver
 30:  */
 31: class RequestResolverCollection implements RequestResolver
 32: {
 33:     private $resolvers = array();
 34:     
 35:     public function __construct()
 36:     {
 37:         $this->add(new PageRequestResolver());
 38:         $this->add(new PageInstanceRequestResolver());
 39:         $this->add(new ListenerRequestResolver());
 40:         $this->add(new ResourceRequestResolver);
 41:     }
 42:     
 43:     public function add(RequestResolver $resolver)
 44:     {
 45:         array_push($this->resolvers, $resolver);
 46:     }
 47:     
 48:     public function matches(Request $request)
 49:     {
 50:         foreach($this->resolvers as $resolver)
 51:         {
 52:             if($resolver->matches($request))
 53:             {
 54:                 return true;
 55:             }
 56:         }
 57:         
 58:         return false;
 59:     }
 60:     
 61:     /**
 62:      *
 63:      * @param Request $request
 64:      * @return RequestTarget the target that matches the request, null if none did 
 65:      */
 66:     public function resolve(Request $request)
 67:     {
 68:         foreach($this->resolvers as $resolver)
 69:         {
 70:             if($resolver->matches($request))
 71:             {
 72:                 return $resolver->resolve($request);
 73:             }
 74:         }
 75:         
 76:         return null;
 77:     }
 78:     
 79:     public function generateUrl(RequestTarget $target)
 80:     {
 81:         foreach($this->resolvers as $resolver)
 82:         {
 83:             if($resolver->handles($target))
 84:             {
 85:                 $url = $resolver->generateUrl($target);
 86:                 if(!empty($url))
 87:                 {
 88:                     return $url;
 89:                 }
 90:             }
 91:         }
 92:         
 93:         return null;
 94:     }
 95:     
 96:     public function handles(RequestTarget $target)
 97:     {
 98:         foreach($this->resolvers as $resolver)
 99:         {
100:             if($resolver->handles($target))
101:             {
102:                 return true;
103:             }
104:         }
105:         return false;
106:     }
107: }
108: 
109: ?>
110: