Author: robbie
Date: Fri Apr  9 14:16:42 2010
New Revision: 932430

URL: http://svn.apache.org/viewvc?rev=932430&view=rev
Log:
QPID-2379: add ability to respond to method requests with non-zero status 
codes, use to signal unimplemented methods.

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java
    qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java?rev=932430&r1=932429&r2=932430&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFMethodResponseCommand.java
 Fri Apr  9 14:16:42 2010
@@ -20,24 +20,57 @@
  */
 package org.apache.qpid.qmf;
 
-import org.apache.qpid.server.virtualhost.VirtualHost;
-import org.apache.qpid.server.message.ServerMessage;
 import org.apache.qpid.transport.codec.BBEncoder;
 
 public class QMFMethodResponseCommand extends QMFCommand
 {
-    public QMFMethodResponseCommand(final QMFMethodRequestCommand cmd)
+    private CompletionCode _status = null;
+    private String _msg = null;
+
+    public QMFMethodResponseCommand(final QMFMethodRequestCommand cmd, 
+                                    CompletionCode status,
+                                    String msg)
     {
         super( new QMFCommandHeader(cmd.getHeader().getVersion(),
                                     cmd.getHeader().getSeq(),
                                     QMFOperation.METHOD_RESPONSE));
+        
+        if(status == null)
+        {
+            _status = CompletionCode.OK;
+        }
+        else
+        {
+            _status = status;
+        }
+        
+        _msg = msg;
+    }
+    
+    public CompletionCode getStatus()
+    {
+       return _status;
+    }
+
+    public String getStatusText()
+    {
+       return _msg;
     }
 
     @Override
     public void encode(final BBEncoder encoder)
     {
         super.encode(encoder);
-        encoder.writeUint32(0);
-        encoder.writeStr16("OK");
+
+        encoder.writeUint32(_status.ordinal());
+
+        if(_msg == null)
+        {
+            encoder.writeStr16(_status.toString());
+        }
+        else
+        {
+            encoder.writeStr16(_msg);
+        }
     }
 }

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java?rev=932430&r1=932429&r2=932430&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java 
(original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/qmf/QMFService.java 
Fri Apr  9 14:16:42 2010
@@ -679,8 +679,8 @@ public class QMFService implements Confi
                                                                                
                  final String destQueue,
                                                                                
                  final Long qty)
         {
-            // todo
-            throw new UnsupportedOperationException();
+            // TODO
+            return 
factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
         public UUID getId()
@@ -1056,7 +1056,7 @@ public class QMFService implements Confi
                                                                             
final String exchange)
         {
             //TODO
-            return factory.createResponseCommand();
+            return 
factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
 
@@ -1319,20 +1319,20 @@ public class QMFService implements Confi
 
         public BrokerSchema.SessionClass.SolicitAckMethodResponseCommand 
solicitAck(final 
BrokerSchema.SessionClass.SolicitAckMethodResponseCommandFactory factory)
         {
-            //todo
-            throw new UnsupportedOperationException();
+            //TODO
+            return 
factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
         public BrokerSchema.SessionClass.DetachMethodResponseCommand 
detach(final BrokerSchema.SessionClass.DetachMethodResponseCommandFactory 
factory)
         {
-            //todo
-            throw new UnsupportedOperationException();
+            //TODO
+            return 
factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
         public BrokerSchema.SessionClass.ResetLifespanMethodResponseCommand 
resetLifespan(final 
BrokerSchema.SessionClass.ResetLifespanMethodResponseCommandFactory factory)
         {
-            //todo
-            throw new UnsupportedOperationException();
+            //TODO
+            return 
factory.createResponseCommand(CompletionCode.NOT_IMPLEMENTED);
         }
 
         public BrokerSchema.SessionClass.CloseMethodResponseCommand 
close(final BrokerSchema.SessionClass.CloseMethodResponseCommandFactory factory)
@@ -1343,8 +1343,7 @@ public class QMFService implements Confi
             }
             catch (AMQException e)
             {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
+                return factory.createResponseCommand(CompletionCode.EXCEPTION, 
e.getMessage());
             }
 
             return factory.createResponseCommand();

Modified: qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl?rev=932430&r1=932429&r2=932430&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl (original)
+++ qpid/trunk/qpid/java/broker/src/xsl/qmf.xsl Fri Apr  9 14:16:42 2010
@@ -540,6 +540,16 @@ public class <xsl:value-of select="$Clas
                 _requestCmd = cmd;
             }
             
+            public <xsl:value-of select="$ClassName"/>ResponseCommand 
createResponseCommand(CompletionCode status)
+            {
+                return new <xsl:value-of 
select="$ClassName"/>ResponseCommand(_requestCmd, status, null);
+            }
+            
+            public <xsl:value-of select="$ClassName"/>ResponseCommand 
createResponseCommand(CompletionCode status, String msg)
+            {
+                return new <xsl:value-of 
select="$ClassName"/>ResponseCommand(_requestCmd, status, msg);
+            }
+            
             public <xsl:value-of select="$ClassName"/>ResponseCommand 
createResponseCommand( <xsl:apply-templates select="node()[name()='arg' and ( 
@dir='O' or @dir='IO' ) ]" mode="methodArgList"><xsl:with-param 
name="includeType">yes</xsl:with-param><xsl:with-param 
name="direction">O</xsl:with-param></xsl:apply-templates> )
             {
                 return new <xsl:value-of 
select="$ClassName"/>ResponseCommand(_requestCmd<xsl:if 
test="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]">, 
<xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) 
]" mode="methodArgList"><xsl:with-param 
name="direction">O</xsl:with-param></xsl:apply-templates></xsl:if>);
@@ -551,17 +561,29 @@ public class <xsl:value-of select="$Clas
             <xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or 
@dir='IO' ) ]" mode="methodInputArgDecl"/>
             private <xsl:value-of 
select="$ClassName"/>ResponseCommand(QMFMethodRequestCommand cmd<xsl:if 
test="node()[name()='arg' and ( @dir='O' or @dir='IO' ) ]">, 
<xsl:apply-templates select="node()[name()='arg' and ( @dir='O' or @dir='IO' ) 
]" mode="methodArgList"><xsl:with-param 
name="includeType">yes</xsl:with-param><xsl:with-param 
name="direction">O</xsl:with-param></xsl:apply-templates></xsl:if>)
             {
-                super(cmd);
+                super(cmd, CompletionCode.OK, "OK");
                 
                 <xsl:apply-templates select="node()[name()='arg' and ( 
@dir='O' or @dir='IO' ) ]" mode="methodInputArgAssign"/>
             }
             
+            private <xsl:value-of 
select="$ClassName"/>ResponseCommand(QMFMethodRequestCommand cmd, 
CompletionCode status, String msg)
+            {
+                super(cmd, status, msg);
+                
+                <xsl:apply-templates select="node()[name()='arg' and ( 
@dir='O' or @dir='IO' ) ]" mode="methodInputArgAssignNull"/>
+            }
+            
             @Override
             public void encode(final BBEncoder encoder)
             {
                 super.encode(encoder);
                 
-                <xsl:apply-templates select="node()[name()='arg' and ( 
@dir='O' or @dir='IO' ) ]" mode="encodeArg"/>
+                <xsl:if test="node()[name()='arg' and ( @dir='O' or @dir='IO' 
) ]">
+                if(getStatus().equals(CompletionCode.OK))
+                {
+                    <xsl:apply-templates select="node()[name()='arg' and ( 
@dir='O' or @dir='IO' ) ]" mode="encodeArg"/>
+                }
+                </xsl:if>
             }
         }
         
@@ -600,6 +622,10 @@ public class <xsl:value-of select="$Clas
     <xsl:template match="node()[name()='arg']" mode="methodInputArgAssign">
                 _<xsl:value-of select="@name"/> = <xsl:value-of 
select="@name"/>;
     </xsl:template>
+    <xsl:template match="node()[name()='arg']" mode="methodInputArgAssignNull">
+                _<xsl:value-of select="@name"/> = null;
+    </xsl:template>
+    
     
     <xsl:template match="node()[name()='class']" 
mode="classList">_<xsl:call-template name="initLower"><xsl:with-param 
name="input" select="@name"/></xsl:call-template>Class<xsl:if 
test="following-sibling::node()[name()='class']">, </xsl:if></xsl:template>
     <xsl:template match="node()[name()='event']" 
mode="eventList">_<xsl:call-template name="initLower"><xsl:with-param 
name="input" select="@name"/></xsl:call-template>EventClass<xsl:if 
test="following-sibling::node()[name()='event']">, </xsl:if></xsl:template>



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to