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 }