Changeset 279

Show
Ignore:
Timestamp:
02/19/07 18:17:29 (2 years ago)
Author:
mikey
Message:

turned net.stubbles.websites.stubPageFactory into an interface
added net.stubbles.websites.stubXJConfPageFactory
added unit test for net.stubbles.websites.xml.stubXMLProcessor

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/config/xml/processors.xml

    r241 r279  
    33    xmlns:xj="http://xjconf.net/XJConf" 
    44    xmlns="http://stubbles.net/websites"> 
    5   <defaultResolver default="page"> 
    6     <processor name="page" type="net.stubbles.websites.processors.stubPageProcessor" /> 
     5  <defaultResolver default="xml"> 
     6    <pageFactory type="net.stubbles.websites.stubXJConfPageFactory" /> 
     7    <processor name="xml" type="net.stubbles.websites.xml.stubXMLPageProcessor" /> 
     8    <processor name="page" type="net.stubbles.websites.memphis.stubMemphisPageProcessor" /> 
    79  </defaultResolver> 
    810</xj:configuration> 
  • trunk/docroot/index.php

    r274 r279  
    33require '../lib/stubbles.php'; 
    44stubClassLoader::load('net.stubbles.websites.memphis.stubMemphisPageProcessor', 
     5                      'net.stubbles.websites.stubXJConfPageFactory', 
    56                      'net.stubbles.ipo.request.stubWebRequest', 
    67                      'net.stubbles.ipo.session.stubPHPSession' 
     
    1011    public static function main() 
    1112    { 
    12         $request   = new stubWebRequest(); 
    13         $session   = new stubPHPSession('stubSID'); 
    14         $processor = new stubMemphisPageProcessor($request, $session); 
     13        $request     = new stubWebRequest(); 
     14        $session     = new stubPHPSession('stubSID'); 
     15        $pageFactory = new stubXJConfPageFactory(stubXJConfLoader::getInstance()); 
     16        $processor   = new stubMemphisPageProcessor($request, $session, $pageFactory); 
    1517        $processor->process()->getResponse()->send(); 
    1618    } 
  • trunk/docroot/xml.php

    r274 r279  
    44stubClassLoader::load('net.stubbles.websites.xml.stubXMLProcessor', 
    55                      'net.stubbles.websites.xml.stubXMLPagePostInterceptor', 
     6                      'net.stubbles.websites.stubXJConfPageFactory', 
    67                      'net.stubbles.ipo.request.stubWebRequest', 
    78                      'net.stubbles.ipo.session.stubPHPSession' 
     
    1920            unlink($file->getPathname()); 
    2021        } 
    21         $request   = new stubWebRequest(); 
    22         $session   = new stubPHPSession('stubSID'); 
    23         $processor = new stubXMLProcessor($request, $session); 
     22        $request     = new stubWebRequest(); 
     23        $session     = new stubPHPSession('stubSID'); 
     24        $pageFactory = new stubXJConfPageFactory(stubXJConfLoader::getInstance()); 
     25        $processor   = new stubXMLProcessor($request, $session, $pageFactory); 
    2426        $postInterceptor = new stubXMLPagePostInterceptor(); 
    2527        $postInterceptor->setRequest($request); 
  • trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisPageProcessor.php

    r267 r279  
    88 */ 
    99stubClassLoader::load('net.stubbles.websites.processors.stubProcessor', 
    10                       'net.stubbles.ipo.request.stubRequest', 
    11                       'net.stubbles.ipo.session.stubSession', 
    12                       'net.stubbles.ipo.response.stubBaseResponse', 
    13                       'net.stubbles.websites.stubPageFactory' 
     10                      'net.stubbles.ipo.response.stubBaseResponse' 
    1411); 
    1512/** 
     
    4946     * constructor 
    5047     * 
    51      * @param  stubRequest  $request  the current request 
    52      * @param  stubSession  $session  the current session 
     48     * @param  stubRequest      $request      the current request 
     49     * @param  stubSession      $session      the current session 
     50     * @param  stubPageFactory  $pageFactory  page factory to use to read the page configuration 
    5351     */ 
    54     public function __construct(stubRequest $request, stubSession $session
     52    public function __construct(stubRequest $request, stubSession $session, stubPageFactory $pageFactory
    5553    { 
    5654        $this->request     = $request; 
    5755        $this->session     = $session; 
     56        $this->pageFactory = $pageFactory; 
    5857        $this->response    = new stubBaseResponse(); 
    59         $this->pageFactory = new stubPageFactory(stubXJConfLoader::getInstance()); 
    6058    } 
    6159 
     
    7775 
    7876        try { 
    79             $page = $this->pageFactory->getPage(stubConfig::getConfigPath() . '/xml/pages/memphis/' . $pageName . '.xml'); 
     77            $page = $this->pageFactory->getPage('memphis/' . $pageName); 
    8078        } catch (stubPageConfigurationException $pce) { 
    8179            $this->response->replaceData((string) $pce); 
  • trunk/src/main/php/net/stubbles/websites/processors/stubDefaultProcessorResolver.php

    r241 r279  
    2525     * list of processors 
    2626     *  
    27      * @var  array 
     27     * @var  array<string,string> 
    2828     */ 
    2929    protected $processors       = array(); 
     30    /** 
     31     * the page factory to use to read the page configuration 
     32     * 
     33     * @var  stubPageFactory 
     34     */ 
     35    protected $pageFactory      = null; 
    3036     
    3137    /** 
     
    5157     
    5258    /** 
     59     * sets the page factory to use to read the page configuration 
     60     * 
     61     * @param  stubPageFactory  $pageFactory 
     62     */ 
     63    public function setPageFactory(stubPageFactory $pageFactory) 
     64    { 
     65        $this->pageFactory = $pageFactory; 
     66    } 
     67     
     68    /** 
    5369     * resolves the request and creates the appropriate processor 
    5470     * 
     
    7187        stubClassLoader::load($this->processors[$paramValue]); 
    7288        $className = stubClassLoader::getNonQualifiedClassName($this->processors[$paramValue]); 
    73         $processor = new $className($request, $session); 
     89        $processor = new $className($request, $session, $this->pageFactory); 
    7490        if (($processor instanceof stubProcessor) == false) { 
    7591            throw new stubProcessorException($this->processors[$paramValue] . ' is not an instance of ' . stubClassLoader::getFullQualifiedClassName('stubProcessor')); 
  • trunk/src/main/php/net/stubbles/websites/processors/stubProcessor.php

    r240 r279  
    99stubClassLoader::load('net.stubbles.ipo.request.stubRequest', 
    1010                      'net.stubbles.ipo.response.stubResponse', 
    11                       'net.stubbles.ipo.session.stubSession' 
     11                      'net.stubbles.ipo.session.stubSession', 
     12                      'net.stubbles.websites.stubPageFactory' 
    1213); 
    1314/** 
     
    2223     * constructor 
    2324     * 
    24      * @param  stubRequest  $request  the current request 
    25      * @param  stubSession  $session  the current session 
     25     * @param  stubRequest      $request      the current request 
     26     * @param  stubSession      $session      the current session 
     27     * @param  stubPageFactory  $pageFactory  page factory to use to read the page configuration 
    2628     */ 
    27     #public function __construct(stubRequest $request, stubSession $session); 
    28      
     29    #public function __construct(stubRequest $request, stubSession $session, stubPageFactory $pageFactory); 
     30 
    2931    /** 
    3032     * processes the request 
  • trunk/src/main/php/net/stubbles/websites/processors/stubProcessorResolver.php

    r241 r279  
    1010                      'net.stubbles.ipo.session.stubSession', 
    1111                      'net.stubbles.websites.processors.stubProcessor', 
    12                       'net.stubbles.websites.processors.stubProcessorException' 
     12                      'net.stubbles.websites.processors.stubProcessorException', 
     13                      'net.stubbles.websites.stubPageFactory' 
    1314); 
    1415/** 
     
    2223{ 
    2324    /** 
     25     * sets the page factory to use to read the page configuration 
     26     * 
     27     * @param  stubPageFactory  $pageFactory 
     28     */ 
     29    public function setPageFactory(stubPageFactory $pageFactory); 
     30     
     31    /** 
    2432     * resolves the request and creates the appropriate processor 
    2533     * 
  • trunk/src/main/php/net/stubbles/websites/processors/stubSimpleProcessorResolver.php

    r241 r279  
    2121     * @var  string 
    2222     */ 
    23     protected $processor = null; 
     23    protected $processor   = null; 
     24    /** 
     25     * the page factory to use to read the page configuration 
     26     * 
     27     * @var  stubPageFactory 
     28     */ 
     29    protected $pageFactory = null; 
    2430 
    2531    /** 
     
    3137    { 
    3238        $this->processor = $fqClassName; 
     39    } 
     40     
     41    /** 
     42     * sets the page factory to use to read the page configuration 
     43     * 
     44     * @param  stubPageFactory  $pageFactory 
     45     */ 
     46    public function setPageFactory(stubPageFactory $pageFactory) 
     47    { 
     48        $this->pageFactory = $pageFactory; 
    3349    } 
    3450 
     
    4561        stubClassLoader::load($this->processor); 
    4662        $className = stubClassLoader::getNonQualifiedClassName($this->processor); 
    47         $processor = new $className($request, $session); 
     63        $processor = new $className($request, $session, $this->pageFactory); 
    4864        if (($processor instanceof stubProcessor) == false) { 
    4965            throw new stubProcessorException($this->processor . ' is not an instance of ' . stubClassLoader::getFullQualifiedClassName('stubProcessor')); 
  • trunk/src/main/php/net/stubbles/websites/stubPageFactory.php

    r267 r279  
    11<?php 
    22/** 
    3  * Class to read the page configuration and to create the page. 
     3 * Interface for a page factory: returns a configured stubPage instance. 
    44 * 
    55 * @author      Frank Kleine <mikey@stubbles.net> 
     
    1111                      'net.stubbles.websites.stubPageConfigurationException' 
    1212); 
    13 XJConfLoader::load('DefinitionParser', 
    14                    'XmlParser', 
    15                    'XJConfClassLoader' 
    16 ); 
    1713/** 
    18  * Class to read the page configuration and to create the page. 
     14 * Interface for a page factory: returns a configured stubPage instance. 
    1915 * 
    2016 * @package     stubbles 
    2117 * @subpackage  websites 
    2218 */ 
    23 class stubPageFactory extends stubBaseObject 
     19interface stubPageFactory 
    2420{ 
    2521    /** 
    26      * the xml parser 
     22     * checks whether the page factory knows the page or not 
    2723     * 
    28      * @var  XmlParser 
     24     * @param   string  $configSource  source of the page configuration to use 
     25     * @return  bool 
    2926     */ 
    30     private static $xmlParser
    31  
     27    public function hasPage($configSource)
     28     
    3229    /** 
    33      * constructor 
     30     * returns the configured stubPage instance 
    3431     * 
    35      * @param  stubXJConfLoader  $classLoader  class loader to use for loading unloaded classes 
    36      */ 
    37     public function __construct(stubXJConfLoader $classLoader) 
    38     { 
    39         if (null == self::$xmlParser) { 
    40             $tagParser = new DefinitionParser(array('http://stubbles.net/websites' => $classLoader)); 
    41             $defs      = $tagParser->parse(stubFactory::getResourceURI('xjconf/websites.xml')); 
    42  
    43             self::$xmlParser = new XmlParser(); 
    44             self::$xmlParser->setTagDefinitions($defs); 
    45         } 
    46     } 
    47  
    48     /** 
    49      * Return the loaded page. 
    50      * 
    51      * @param   string  $configfile   name of configuration file where page is configured 
    52      * @return  stubMemphisPage 
     32     * @param   string    $configSource  source of the page configuration to use 
     33     * @return  stubPage 
    5334     * @throws  stubPageConfigurationException 
    5435     */ 
    55     public function getPage($configFile) 
    56     { 
    57         try { 
    58             self::$xmlParser->parse($configFile); 
    59         } catch (XJConfException $xjce) { 
    60             throw new stubPageConfigurationException('Can not read page configuration from ' . $configFile, $xjce); 
    61         } 
    62  
    63         return self::$xmlParser->getConfigValue('page'); 
    64     } 
     36    public function getPage($configSource); 
    6537} 
    6638?> 
  • trunk/src/main/php/net/stubbles/websites/xml/stubXMLProcessor.php

    r276 r279  
    88 */ 
    99stubClassLoader::load('net.stubbles.websites.processors.stubProcessor', 
    10                       'net.stubbles.ipo.request.stubRequest', 
    11                       'net.stubbles.ipo.session.stubSession', 
    1210                      'net.stubbles.ipo.response.stubBaseResponse', 
    13                       'net.stubbles.websites.stubPageFactory', 
    1411                      'net.stubbles.util.validators.stubRegexValidator', 
    1512                      'net.stubbles.xml.stubDomXMLStreamWriter', 
     
    2118 * @package     stubbles 
    2219 * @subpackage  websites_xml 
    23  * @todo        use a stubXMLStreamWriterFactory to create a stubXMLStreamWriter 
    2420 * @todo        think about how to get the skin information from 
    25  *              stubXMLPageDocument into the stubXMLPagePostInterceptor 
     21 *              stubPage into the stubXMLPagePostInterceptor 
    2622 */ 
    2723class stubXMLProcessor extends stubBaseObject implements stubProcessor 
     
    4541     */ 
    4642    protected $response; 
     43    /** 
     44     * the page factory to use to read the page configuration 
     45     * 
     46     * @var  stubPageFactory 
     47     */ 
     48    protected $pageFactory; 
    4749 
    4850    /** 
    4951     * constructor 
    5052     * 
    51      * @param  stubRequest  $request  the current request 
    52      * @param  stubSession  $session  the current session 
     53     * @param  stubRequest      $request      the current request 
     54     * @param  stubSession      $session      the current session 
     55     * @param  stubPageFactory  $pageFactory  page factory to use to read the page configuration 
    5356     */ 
    54     public function __construct(stubRequest $request, stubSession $session
     57    public function __construct(stubRequest $request, stubSession $session, stubPageFactory $pageFactory
    5558    { 
    5659        $this->request     = $request; 
    5760        $this->session     = $session; 
     61        $this->pageFactory = $pageFactory; 
    5862        $this->response    = new stubBaseResponse(); 
    5963    } 
     
    6872    { 
    6973        if ($this->request->hasValue('page') == true) { 
    70             $pageName = $this->request->getValidatedValue(new stubRegexValidator('([a-zA-Z0-9_])*'), 'page'); 
    71             if (null == $pageName || file_exists(stubConfig::getConfigPath() . '/xml/pages/conf/' . $pageName . '.xml') == false) { 
     74            $pageName = $this->request->getValidatedValue(new stubRegexValidator('([a-zA-Z0-9_])'), 'page'); 
     75            if (null == $pageName || $this->pageFactory->hasPage('conf/' . $pageName) == false) { 
    7276                $pageName = 'index'; 
    7377            } 
     
    7680        } 
    7781 
    78         $xmlStreamWriter = new stubDomXMLStreamWriter(); 
     82        $xmlSerializer   = $this->createXMLSerializer(); 
     83        $xmlStreamWriter = $this->createXMLStreamWriter(); 
     84        $page            = $this->pageFactory->getPage('conf/' . $pageName); 
     85        $elements        = $page->getElements(); 
    7986        $xmlStreamWriter->writeStartElement('document'); 
    80         $xmlSerializer = new stubXMLSerializer(); 
    81  
    82         $pageFactory = new stubPageFactory(stubXJConfLoader::getInstance()); 
    83         $page = $pageFactory->getPage(stubConfig::getConfigPath() . '/xml/pages/conf/' . $pageName . '.xml'); 
    84         $elements = $page->getElements(); 
    8587        foreach ($elements as $name => $element) { 
    8688            $data = $element->process($this->request, $this->session, $this->response); 
    8789            $xmlSerializer->serialize($data, $xmlStreamWriter, array(stubXMLSerializer::OPT_ROOT_TAG => $name)); 
    8890        } 
    89  
    9091 
    9192        $xmlStreamWriter->writeEndElement();  // end document 
     
    104105        return $this->response; 
    105106    } 
     107     
     108    /** 
     109     * returns a xml stream writer 
     110     * 
     111     * @return  stubXMLStreamWriter 
     112     * @todo    use a stubXMLStreamWriterFactory to create the stubXMLStreamWriter 
     113     */ 
     114    protected function createXMLStreamWriter() 
     115    { 
     116        $xmlStreamWriter = new stubDomXMLStreamWriter(); 
     117        return $xmlStreamWriter; 
     118    } 
     119     
     120    /** 
     121     * returns the xml serializer 
     122     * 
     123     * @return  stubXMLSerializer 
     124     */ 
     125    protected function createXMLSerializer() 
     126    { 
     127        $xmlSerializer = new stubXMLSerializer(); 
     128        return $xmlSerializer; 
     129    } 
    106130} 
    107131?> 
  • trunk/src/main/resources/xjconf/processors.xml

    r241 r279  
    1414      <attribute name="processor" type="string" /> 
    1515    </tag> 
     16    <abstractTag name="pageFactory" abstractType="net.stubbles.websites.stubPageFactory" concreteTypeAttribute="type" /> 
    1617  </namespace> 
    1718</defines> 
  • trunk/src/test/php/net/stubbles/websites/WebsitesTestSuite.php

    r277 r279  
    2323        $this->TestSuite('All websites classes tests'); 
    2424        $this->addTestFile($dir . '/stubPageTestCase.php'); 
     25         
     26        // xml tests 
     27        $this->addTestFile($dir . '/xml/stubXMLProcessorTestCase.php'); 
    2528    } 
    2629}