PEIP_ABS_Reply_Producing_Message_Handler.php

Go to the documentation of this file.
00001 <?php
00002 
00003 /*
00004  * This file is part of the PEIP package.
00005  * (c) 2010 Timo Michna <timomichna/yahoo.de>
00006  * 
00007  * For the full copyright and license information, please view the LICENSE
00008  * file that was distributed with this source code.
00009  */
00010 
00022 abstract class PEIP_ABS_Reply_Producing_Message_Handler
00023     extends PEIP_ABS_Message_Handler
00024     implements PEIP_INF_Message_Builder {
00025     
00026     protected 
00027         $outputChannel,
00028         $messageClass = 'PEIP_Generic_Message',
00029         $replyChannelHeaders = array('REPLY_CHANNEL');
00030 
00031     
00037     public function setOutputChannel(PEIP_INF_Channel $outputChannel){
00038         $this->doSetOutputChannel($outputChannel);
00039         return $this;
00040     }   
00041 
00042     
00048     protected function doSetOutputChannel(PEIP_INF_Channel $outputChannel){
00049         $this->outputChannel = $outputChannel;
00050     }
00051     
00052     
00057     public function getOutputChannel(){
00058         return $this->outputChannel;
00059     }
00060 
00066         protected function doGetOutputChannel(PEIP_INF_Message $message){
00067                 $replyChannel = $this->resolveReplyChannel($message);
00068                 return $replyChannel ? $replyChannel : $this->getOutputChannel();               
00069         }
00070 
00076         protected function resolveReplyChannel(PEIP_INF_Message $message){
00077                 foreach($this->replyChannelHeaders as $header){
00078                         if($message->hasHeader($header)){
00079                                 return $message->getHeader($header);
00080                         }
00081                 }
00082                 return NULL;
00083         }
00084                 
00090     protected function replyMessage($content){
00091         $message = $this->ensureMessage($content);      
00092         $this->doGetOutputChannel($message)->send($message);      
00093     }
00094 
00095     
00101     protected function ensureMessage($message){
00102         return ($message instanceof PEIP_INF_Message) ? $message : $this->buildMessage($message);   
00103     }
00104     
00105     
00111     protected function buildMessage($content){
00112         return $this->getMessageBuilder()->setContent($content)->build();   
00113     }   
00114     
00115     
00120     protected function getMessageBuilder(){
00121         return isset($this->messageBuilder) && ($this->messageBuilder->getMessageClass() == $this->getMessageClass())
00122             ? $this->messageBuilder
00123             : $this->messageBuilder = PEIP_Message_Builder::getInstance($this->messageClass);
00124     }
00125       
00131     public function setMessageClass($messageClass){
00132         $this->messageClass = $messageClass;
00133         return $this;
00134     }
00135 
00136     
00141     public function getMessageClass(){
00142         return $this->messageClass;
00143     }       
00144 
00150     public function addReplyChannelHeader($headerName){
00151         $this->replyChannelHeaders[] = $headerName;
00152     }
00153 
00154     
00160     public function setReplyChannelHeaders(array $headerNames){
00161         $this->replyChannelHeaders = $headerNames;
00162         return $this;
00163     } 
00164 
00169     public function getReplyChannelHeaders(){
00170         return $this->replyChannelHeaders;
00171     }
00172     
00173     
00174     
00180     protected function doHandle(PEIP_INF_Message $message){
00181         $this->doReply($message);
00182     }
00183     
00184     
00190     abstract protected function doReply(PEIP_INF_Message $message);
00191     
00192     
00193 }

Generated on Mon Apr 12 11:39:00 2010 for PEIP by  doxygen 1.5.1