Changeset 295

Show
Ignore:
Timestamp:
02/23/07 18:51:01 (2 years ago)
Author:
mikey
Message:

added net.stubbles.websites.xml.stubXMLPreInterceptor
added session and request data to xml result document

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/docroot/xml.php

    r292 r295  
    44stubClassLoader::load('net.stubbles.websites.xml.stubXMLProcessor', 
    55                      'net.stubbles.websites.xml.stubXMLPagePostInterceptor', 
     6                      'net.stubbles.websites.xml.stubXMLPreInterceptor', 
    67                      'net.stubbles.websites.stubXJConfPageFactory', 
    78                      'net.stubbles.ipo.request.stubWebRequest', 
     9                      'net.stubbles.ipo.request.filters.stubAbstractFilter', 
     10                      'net.stubbles.ipo.request.stubRequestValueError', 
    811                      'net.stubbles.ipo.session.stubPHPSession' 
    912); 
     13class TestFilter extends stubAbstractFilter 
     14{ 
     15    public function execute($value) 
     16    { 
     17        throw new stubFilterException(new stubRequestValueError('foo', array('de_DE' => 'Dies ist eine deutsche Fehlermeldung', 'en_EN' => 'This is an english error message'))); 
     18    } 
     19} 
    1020class Bootstrap 
    1121{ 
     
    2232        $request     = new stubWebRequest(); 
    2333        $session     = new stubPHPSession('stubSID'); 
     34        $preInterceptor = new stubXMLPreInterceptor(); 
     35        $preInterceptor->setRequest($request); 
     36        $preInterceptor->setSession($session); 
     37        $preInterceptor->preProcess(); 
     38        if ($request->isCancelled() == true) { 
     39            return; 
     40        } 
     41        $request->getFilteredValue(new TestFilter(), 'bar'); 
    2442        $pageFactory = new stubXJConfPageFactory(stubXJConfLoader::getInstance()); 
    2543        $processor   = new stubXMLProcessor($request, $session, $pageFactory); 
  • trunk/src/main/php/net/stubbles/ipo/request/stubRequestValueError.php

    r142 r295  
    1818 * @package     stubbles 
    1919 * @subpackage  ipo_request 
     20 * @XMLTag(tagName=error) 
     21 * @XMLMethods[XMLMatcher](pattern=/getId|getMessages/) 
    2022 */ 
    2123class stubRequestValueError extends stubBaseObject 
     
    6062     * 
    6163     * @return  string 
     64     * @XMLAttribute(attributeName=id) 
    6265     */ 
    6366    public function getId() 
     
    7174     * @param   string  $locale 
    7275     * @return  bool 
     76     * @XMLIgnore 
    7377     */ 
    7478    public function hasMessage($locale) 
     
    8286     * @param   string  $locale 
    8387     * @return  string 
     88     * @XMLIgnore 
    8489     */ 
    8590    public function getMessage($locale) 
     
    101106     * 
    102107     * @return  array<string,string> 
     108     * @XMLTag(tagName=messages) 
    103109     */ 
    104110    public function getMessages() 
     
    146152     * @return  stubRequestValueError 
    147153     * @throws  stubRequestValueErrorException 
     154     * @XMLIgnore 
    148155     */ 
    149156    public function setValues(array $values) 
     
    164171     * 
    165172     * @return  array<string> 
     173     * @XMLIgnore 
    166174     */ 
    167175    public function getValueKeys() 
  • trunk/src/main/php/net/stubbles/websites/xml/stubXMLProcessor.php

    r294 r295  
    3838     * does the real processing 
    3939     * 
    40      * @todo  think about putting default values into the result document 
     40     * @todo  use request prefix decorator for page elements 
    4141     */ 
    4242    protected function doProcess() 
     
    5858        $elements        = $page->getElements(); 
    5959        $xmlStreamWriter->writeStartElement('document'); 
     60        $this->writeSessionValues($xmlStreamWriter); 
    6061        foreach ($elements as $name => $element) { 
    6162            $data = $element->process($this->request, $this->session, $this->response); 
    6263            $xmlSerializer->serialize($data, $xmlStreamWriter, array(stubXMLSerializer::OPT_ROOT_TAG => $name)); 
    6364        } 
     65        $this->writeRequestValues($xmlStreamWriter, $xmlSerializer); 
    6466 
    6567        $xmlStreamWriter->writeEndElement();  // end document 
    6668        $this->response->replaceData($xmlStreamWriter->asXML()); 
     69        $this->session->putValue('net.stubbles.websites.lastRequestResponseData', $this->response->getData()); 
     70    } 
     71     
     72    /** 
     73     * writes the session values into the result document 
     74     * 
     75     * Default values are whether the session is new or not, the current and 
     76     * the next token of the request: 
     77     * <code> 
     78     * <document> 
     79     *   <session> 
     80     *     <isNew>true</isNew> 
     81     *     <token> 
     82     *       <current>foo</current> 
     83     *       <next>bar</next> 
     84     *     </token> 
     85     *   </session> 
     86     *   [...] 
     87     * </document> 
     88     * </code> 
     89     * Concrete session data will not be written into the result document. 
     90     *  
     91     * @param  stubXMLStreamWriter  $xmlStreamWriter 
     92     */ 
     93    protected function writeSessionValues(stubXMLStreamWriter $xmlStreamWriter) 
     94    { 
     95        $xmlStreamWriter->writeStartElement('session'); 
     96        $xmlStreamWriter->writeElement('isNew', array(), (($this->session->isNew() == true) ? ('true') : ('false'))); 
     97        $xmlStreamWriter->writeStartElement('token'); 
     98        $xmlStreamWriter->writeElement('current', array(), $this->session->getCurrentToken()); 
     99        $xmlStreamWriter->writeElement('next', array(), $this->session->getNextToken()); 
     100        $xmlStreamWriter->writeEndElement();  // end token 
     101        $xmlStreamWriter->writeEndElement();  // end session 
     102    } 
     103     
     104    /** 
     105     * writes the request values into the result document 
     106     * 
     107     * Currently this are only the request errors created during processing of the page elements: 
     108     * <code> 
     109     *   [...] 
     110     *   <request> 
     111     *     <errors> 
     112     *       <error id="foo"> 
     113     *         <messages> 
     114     *           <de_DE>Dies ist eine deutsche Fehlermeldung.</de_DE> 
     115     *           <en_EN>This is an english error message.</en_EN> 
     116     *         </messages> 
     117     *       </error> 
     118     *       [...] 
     119     *     </errors> 
     120     *   </request> 
     121     * </code> 
     122     * Concrete request values will not be written into the result document. 
     123     *  
     124     * @param  stubXMLStreamWriter  $xmlStreamWriter 
     125     * @param  stubXMLSerializer    $xmlSerializer 
     126     */ 
     127    protected function writeRequestValues(stubXMLStreamWriter $xmlStreamWriter, $xmlSerializer) 
     128    { 
     129        $xmlStreamWriter->writeStartElement('request'); 
     130        $errors = $this->request->getValueErrors(); 
     131        $xmlSerializer->serialize($errors, $xmlStreamWriter, array(stubXMLSerializer::OPT_ROOT_TAG => 'errors')); 
     132        $xmlStreamWriter->writeEndElement();  // end request 
    67133    } 
    68134 
  • trunk/src/test/php/net/stubbles/websites/xml/stubXMLProcessorTestCase.php

    r292 r295  
    114114        $this->mockRequest->setReturnValue('hasValue', false); 
    115115        $this->mockPageFactory->expectOnce('getPage', array('conf/index')); 
    116         $this->mockXMLStreamWriter->expectOnce('writeStartElement', array('document')); 
    117         $this->mockXMLStreamWriter->expectOnce('writeEndElement'); 
     116        $this->mockXMLStreamWriter->expectCallcount('writeStartElement', 4); 
     117        $this->mockXMLStreamWriter->expectCallcount('writeEndElement', 4); 
    118118        $this->mockXMLStreamWriter->setReturnValue('asXML', '<document />'); 
    119         $this->mockXMLSerializer->expectNever('serialize'); 
     119        $this->mockXMLSerializer->expectOnce('serialize'); 
    120120        $return = $this->xmlProcessor->process(); 
    121121        $this->assertReference($this->xmlProcessor, $return); 
     
    144144        $this->page->addElement($pageElement1); 
    145145        $this->page->addElement($pageElement2); 
    146         $this->mockXMLStreamWriter->expectOnce('writeStartElement', array('document')); 
    147         $this->mockXMLStreamWriter->expectOnce('writeEndElement'); 
     146        $this->mockXMLStreamWriter->expectCallcount('writeStartElement', 4); 
     147        $this->mockXMLStreamWriter->expectCallcount('writeEndElement', 4); 
    148148        $this->mockXMLStreamWriter->setReturnValue('asXML', '<document><foo>foo</foo><bar>bar</bar></document>'); 
    149149        $this->mockXMLSerializer->expectAt(0, 'serialize', array('foo', $this->mockXMLStreamWriter, array(stubXMLSerializer::OPT_ROOT_TAG => 'foo')));