/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.sal.connector.api; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.Future; import org.opendaylight.yangtools.concepts.Immutable; public interface BindingAwareRpcRouter extends RpcRouter { @Override Future> sendRpc( RpcRequest input); @SuppressFBWarnings("EI_EXPOSE_REP2") class BindingAwareRequest implements RpcRequest, Immutable { private final BindingAwareRouteIdentifier routingInformation; private final byte[] payload; public BindingAwareRequest(BindingAwareRouteIdentifier routingInformation, byte[] payload) { this.routingInformation = routingInformation; this.payload = payload; } @Override public BindingAwareRouteIdentifier getRoutingInformation() { return this.routingInformation; } @Override @SuppressFBWarnings("EI_EXPOSE_REP") public byte[] getPayload() { return payload; } } class BindingAwareRouteIdentifier implements RouteIdentifier, Immutable { private final String type; private final String route; private final String content; public BindingAwareRouteIdentifier(String type, String route, String content) { this.type = type; this.route = route; this.content = content; } /** * Java class name of Rpc Context. */ @Override public String getContext() { return this.content; } /** * String representation of route e.g. node-id * */ @Override public String getRoute() { return this.route; } /** * Java class name of Rpc Type e.g org.opendaylight.AddFlowInput. */ @Override public String getType() { return this.type; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (content == null ? 0 : content.hashCode()); result = prime * result + (route == null ? 0 : route.hashCode()); result = prime * result + (type == null ? 0 : type.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } BindingAwareRouteIdentifier other = (BindingAwareRouteIdentifier) obj; if (content == null) { if (other.content != null) { return false; } } else if (!content.equals(other.content)) { return false; } if (route == null) { if (other.route != null) { return false; } } else if (!route.equals(other.route)) { return false; } if (type == null) { if (other.type != null) { return false; } } else if (!type.equals(other.type)) { return false; } return true; } } }