+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ ConnectionContextImpl that = (ConnectionContextImpl) o;
+
+ if (!connectionAdapter.equals(that.connectionAdapter)) {
+ return false;
+ }
+
+ if (featuresReply != null ? !featuresReply.equals(that.featuresReply) : that.featuresReply != null) {
+ return false;
+ }
+
+ return nodeId != null ? nodeId.equals(that.nodeId) : that.nodeId == null;
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = connectionAdapter.hashCode();
+ result = 31 * result + (featuresReply != null ? featuresReply.hashCode() : 0);
+ result = 31 * result + (nodeId != null ? nodeId.hashCode() : 0);
+ return result;
+ }
+
+ private class DeviceInfoImpl implements DeviceInfo {
+
+ private final NodeId nodeId;
+ private final KeyedInstanceIdentifier<Node, NodeKey> nodeII;
+ private final Short version;
+ private final BigInteger datapathId;
+ private final ServiceGroupIdentifier serviceGroupIdentifier;
+ private OutboundQueue outboundQueueProvider;
+
+ DeviceInfoImpl(
+ final NodeId nodeId,
+ final KeyedInstanceIdentifier<Node, NodeKey> nodeII,
+ final Short version,
+ final BigInteger datapathId,
+ final OutboundQueue outboundQueueProvider) {
+ this.nodeId = nodeId;
+ this.nodeII = nodeII;
+ this.version = version;
+ this.datapathId = datapathId;
+ this.outboundQueueProvider = outboundQueueProvider;
+ this.serviceGroupIdentifier = ServiceGroupIdentifier.create(this.nodeId.getValue());
+ }
+
+ @Override
+ public NodeId getNodeId() {
+ return nodeId;
+ }
+
+ @Override
+ public KeyedInstanceIdentifier<Node, NodeKey> getNodeInstanceIdentifier() {
+ return nodeII;
+ }
+
+ @Override
+ public short getVersion() {
+ return version;
+ }
+
+ @Override
+ public BigInteger getDatapathId() {
+ return datapathId;
+ }
+
+ @Override
+ public ServiceGroupIdentifier getServiceIdentifier() {
+ return this.serviceGroupIdentifier;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ DeviceInfoImpl that = (DeviceInfoImpl) o;
+
+ return (nodeId.equals(that.nodeId) &&
+ nodeII.equals(that.nodeII) &&
+ version.equals(that.version) &&
+ datapathId.equals(that.datapathId));
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = nodeId.hashCode();
+ result = 31 * result + nodeII.hashCode();
+ result = 31 * result + version.hashCode();
+ result = 31 * result + datapathId.hashCode();
+ return result;
+ }
+
+ public void setOutboundQueueProvider(final OutboundQueue outboundQueueProvider) {
+ this.outboundQueueProvider = outboundQueueProvider;
+ }
+
+ @Override
+ public Long reserveXidForDeviceMessage() {
+ return outboundQueueProvider.reserveEntry();
+ }
+ }