Author: rgodfrey
Date: Wed Feb 13 11:06:22 2013
New Revision: 1445552

URL: http://svn.apache.org/r1445552
Log:
PROTON-61 : allow setting of connection capabilities

Modified:
    
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
    
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java
    
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java
    qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py
    
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
    
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java

Modified: 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
 (original)
+++ 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
 Wed Feb 13 11:06:22 2013
@@ -103,7 +103,7 @@ public class JNIData implements Data
         }
     }
 
-        public JNIData(long capacity)
+    public JNIData(long capacity)
     {
         _impl = Proton.pn_data(capacity);
     }

Modified: 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java
 (original)
+++ 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/engine/jni/JNIConnection.java
 Wed Feb 13 11:06:22 2013
@@ -20,9 +20,14 @@
  */
 package org.apache.qpid.proton.engine.jni;
 
+import java.util.ArrayList;
 import java.util.EnumSet;
 
+import java.util.List;
 import org.apache.qpid.proton.ProtonCEquivalent;
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.codec.Data;
+import org.apache.qpid.proton.codec.jni.JNIData;
 import org.apache.qpid.proton.engine.Connection;
 import org.apache.qpid.proton.engine.Delivery;
 import org.apache.qpid.proton.engine.EndpointError;
@@ -37,6 +42,7 @@ import org.apache.qpid.proton.jni.SWIGTY
 
 public class JNIConnection implements Connection
 {
+    public static final Symbol[] EMPTY_CAPABILTIES = new Symbol[0];
     private SWIGTYPE_p_pn_connection_t _impl;
     private Object _context;
 
@@ -202,4 +208,50 @@ public class JNIConnection implements Co
         }
         return null;
     }
+
+    @Override
+    public void setOfferedCapabilities(Symbol[] capabilities)
+    {
+        JNIData data = new 
JNIData(Proton.pn_connection_offered_capabilities(_impl));
+        data.clear();
+        if(capabilities != null)
+        {
+            data.putJavaArray(capabilities);
+        }
+    }
+
+    @Override
+    public void setDesiredCapabilities(Symbol[] capabilities)
+    {
+        JNIData data = new 
JNIData(Proton.pn_connection_desired_capabilities(_impl));
+        data.clear();
+        if(capabilities != null)
+        {
+            data.putJavaArray(capabilities);
+        }
+    }
+
+    @Override
+    public Symbol[] getRemoteOfferedCapabilities()
+    {
+        JNIData data = new 
JNIData(Proton.pn_connection_remote_offered_capabilities(_impl));
+        data.rewind();
+        if(data.next() != null)
+        {
+            return (Symbol[]) data.getJavaArray();
+        }
+        return EMPTY_CAPABILTIES;
+    }
+
+    @Override
+    public Symbol[] getRemoteDesiredCapabilities()
+    {
+        JNIData data = new 
JNIData(Proton.pn_connection_remote_desired_capabilities(_impl));
+        data.rewind();
+        if(data.next() != null)
+        {
+            return (Symbol[]) data.getJavaArray();
+        }
+        return EMPTY_CAPABILTIES;
+    }
 }

Modified: 
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java
 (original)
+++ 
qpid/proton/trunk/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/Connection.java
 Wed Feb 13 11:06:22 2013
@@ -21,6 +21,7 @@
 package org.apache.qpid.proton.engine;
 
 import java.util.EnumSet;
+import org.apache.qpid.proton.amqp.Symbol;
 
 
 /**
@@ -53,4 +54,12 @@ public interface Connection extends Endp
     public String getRemoteContainer();
 
     public String getRemoteHostname();
+
+    void setOfferedCapabilities(Symbol[] capabilities);
+
+    void setDesiredCapabilities(Symbol[] capabilities);
+
+    Symbol[] getRemoteOfferedCapabilities();
+
+    Symbol[] getRemoteDesiredCapabilities();
 }

Modified: qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py 
(original)
+++ qpid/proton/trunk/proton-j/proton-api/src/main/resources/proton.py Wed Feb 
13 11:06:22 2013
@@ -163,6 +163,28 @@ class Condition:
         self.description == o.description and \
         self.info == o.info
 
+def convertToPyArray(t,a,f):
+    if a == None or len(a) == 0:
+        return None
+
+    return Array(UNDESCRIBED, t, *map(f,a))
+
+
+arrayElementMappings = {
+    JData.DataType.SYMBOL: lambda s: Symbol.valueOf(s)
+    }
+
+
+arrayTypeMappings = {
+    JData.DataType.SYMBOL: Symbol
+    }
+
+def convertFromPyArray(a):
+    if a == None:
+        return None
+
+    return array(map(arrayElementMappings[a.type],a.elements), 
arrayTypeMappings[a.type])
+
 def wrap_connection(impl):
   if impl: return Connection(_impl = impl)
 
@@ -170,6 +192,8 @@ class Connection(Endpoint):
 
   def __init__(self, _impl=None):
     self.impl = _impl or engineFactory.createConnection()
+    self._desired_capabilities = None
+    self._offered_capabilities = None
 
   @property
   def writable(self):
@@ -214,9 +238,34 @@ class Connection(Endpoint):
       self.impl.setRemoteHostname(hostname)
   remote_hostname = property(_get_remote_hostname, _set_remote_hostname)
 
-  @property
-  def offered_capabilities(self):
-    return DataDummy()
+  def _get_remote_offered_capabilities(self):
+      return convertToPyArray(Data.SYMBOL, 
self.impl.getRemoteOfferedCapabilities(),symbol)
+  def _set_remote_offered_capabilities(self, capabilities):
+      self.impl.setRemoteOfferedCapabilities(convertFromPyArray(capabilities))
+  remote_offered_capabilities = property(_get_remote_offered_capabilities, 
_set_remote_offered_capabilities)
+  
+  def _get_remote_desired_capabilities(self):
+      return convertToPyArray(Data.SYMBOL, 
self.impl.getRemoteDesiredCapabilities(),symbol)
+  def _set_remote_desired_capabilities(self, capabilities):
+      self.impl.setRemoteDesiredCapabilities(convertFromPyArray(capabilities))
+  remote_desired_capabilities = property(_get_remote_desired_capabilities, 
_set_remote_desired_capabilities)
+  
+  
+  def _get_offered_capabilities(self):
+      return self._offered_capabilities
+  def _set_offered_capabilities(self, capabilities):
+      self._offered_capabilities = capabilities
+      self.impl.setOfferedCapabilities(convertFromPyArray(capabilities))
+  offered_capabilities = property(_get_offered_capabilities, 
_set_offered_capabilities)
+  
+  def _get_desired_capabilities(self):
+      return self._desired_capabilities
+  def _set_desired_capabilities(self, capabilities):
+      self._desired_capabilities = capabilities
+      self.impl.setDesiredCapabilities(convertFromPyArray(capabilities))
+  desired_capabilities = property(_get_desired_capabilities, 
_set_desired_capabilities)
+  
+  
 
 
 def wrap_session(impl):

Modified: 
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
 Wed Feb 13 11:06:22 2013
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.List;
+import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.engine.*;
 import org.apache.qpid.proton.amqp.transport.Open;
 
@@ -54,6 +55,12 @@ public class ConnectionImpl extends Endp
     private boolean _bound;
     private String _remoteContainer;
     private String _remoteHostname;
+    private Symbol[] _offeredCapabilities;
+    private Symbol[] _desiredCapabilities;
+    private Symbol[] _remoteOfferedCapabilities;
+    private Symbol[] _remoteDesiredCapabilities;
+
+    private static final Symbol[] EMPTY_SYMBOL_ARRAY = new Symbol[0];
 
     /**
      * @deprecated This constructor's visibility will be reduced to the 
default scope in a future release.
@@ -185,6 +192,8 @@ public class ConnectionImpl extends Endp
         setRemoteState(EndpointState.ACTIVE);
         setRemoteHostname(open.getHostname());
         setRemoteContainer(open.getContainerId());
+        setRemoteDesiredCapabilities(open.getDesiredCapabilities());
+        setRemoteOfferedCapabilities(open.getOfferedCapabilities());
     }
 
 
@@ -281,6 +290,51 @@ public class ConnectionImpl extends Endp
         return _remoteHostname;
     }
 
+    @Override
+    public void setOfferedCapabilities(Symbol[] capabilities)
+    {
+        _offeredCapabilities = capabilities;
+    }
+
+    @Override
+    public void setDesiredCapabilities(Symbol[] capabilities)
+    {
+        _desiredCapabilities = capabilities;
+    }
+
+    @Override
+    public Symbol[] getRemoteOfferedCapabilities()
+    {
+        return _remoteOfferedCapabilities == null ? EMPTY_SYMBOL_ARRAY : 
_remoteOfferedCapabilities;
+    }
+
+    @Override
+    public Symbol[] getRemoteDesiredCapabilities()
+    {
+        return _remoteDesiredCapabilities == null ? EMPTY_SYMBOL_ARRAY : 
_remoteDesiredCapabilities;
+    }
+
+
+    Symbol[] getOfferedCapabilities()
+    {
+        return _offeredCapabilities;
+    }
+
+    Symbol[] getDesiredCapabilities()
+    {
+        return _desiredCapabilities;
+    }
+
+    void setRemoteOfferedCapabilities(Symbol[] remoteOfferedCapabilities)
+    {
+        _remoteOfferedCapabilities = remoteOfferedCapabilities;
+    }
+
+    void setRemoteDesiredCapabilities(Symbol[] remoteDesiredCapabilities)
+    {
+        _remoteDesiredCapabilities = remoteDesiredCapabilities;
+    }
+
     public String getHostname()
     {
         return _localHostname;

Modified: 
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java?rev=1445552&r1=1445551&r2=1445552&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
 Wed Feb 13 11:06:22 2013
@@ -738,6 +738,8 @@ public class TransportImpl extends Endpo
             Open open = new Open();
             open.setContainerId(_connectionEndpoint.getLocalContainerId());
             open.setHostname(_connectionEndpoint.getHostname());
+            
open.setDesiredCapabilities(_connectionEndpoint.getDesiredCapabilities());
+            
open.setOfferedCapabilities(_connectionEndpoint.getOfferedCapabilities());
             // TODO - populate;
 
             _isOpenSent = true;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to