1 package org.opendaylight.controller.sal.connector.remoterpc.router.zeromq;
4 import org.codehaus.jackson.map.ObjectMapper;
5 import org.opendaylight.controller.sal.connector.api.RpcRouter;
9 public class Message implements Serializable {
11 public static enum MessageType {
12 ANNOUNCE((byte) 0), //TODO: Remove announce, add rpc registration and deregistration
17 private final byte type;
19 MessageType(byte type) {
23 public byte getType(){
28 private MessageType type;
29 private String sender;
30 private RpcRouter.RouteIdentifier route;
31 private Object payload;
33 public MessageType getType() {
37 public void setType(MessageType type) {
41 public String getSender() {
45 public void setSender(String sender) {
49 public RpcRouter.RouteIdentifier getRoute() {
53 public void setRoute(RpcRouter.RouteIdentifier route) {
57 public Object getPayload() {
61 public void setPayload(Object payload) {
62 this.payload = payload;
66 public String toString() {
69 ", sender='" + sender + '\'' +
71 ", payload=" + payload +
76 * Converts any {@link Serializable} object to byte[]
82 public static byte[] serialize(Object obj) throws IOException {
83 ByteArrayOutputStream b = new ByteArrayOutputStream();
84 ObjectOutputStream o = new ObjectOutputStream(b);
86 return b.toByteArray();
90 * Converts byte[] to a java object
95 * @throws ClassNotFoundException
97 public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
98 ByteArrayInputStream b = new ByteArrayInputStream(bytes);
99 ObjectInputStream o = new ObjectInputStream(b);
100 return o.readObject();
103 public static byte[] toJsonBytes(Message m) throws IOException {
104 ObjectMapper o = new ObjectMapper();
105 return o.writeValueAsBytes(m);
108 public static Message fromJsonBytes(byte [] bytes) throws IOException {
110 ObjectMapper o = new ObjectMapper();
111 return o.readValue(bytes, Message.class);
114 public static class Response extends Message implements RpcRouter.RpcReply {
115 private ResponseCode code; // response code
117 public static enum ResponseCode {
118 SUCCESS(200), BADREQUEST(400), TIMEOUT(408), GONE(410), SERVERERROR(500), SERVICEUNAVAILABLE(503);
122 ResponseCode(int code) {
127 public ResponseCode getCode() {
131 public void setCode(ResponseCode code) {
137 * Builds a {@link Message} object
139 public static class MessageBuilder{
141 private Message message;
143 public MessageBuilder(){
144 message = new Message();
148 public MessageBuilder type(MessageType type){
149 message.setType(type);
153 public MessageBuilder sender(String sender){
154 message.setSender(sender);
158 public MessageBuilder route(RpcRouter.RouteIdentifier route){
159 message.setRoute(route);
163 public MessageBuilder payload(Object obj){
164 message.setPayload(obj);
168 public Message build(){