blob: 646a20d280bfe8a22c84008d6ce41c73015314ea [file] [log] [blame]
Thomas Vachuska24c849c2014-10-27 09:53:05 -07001/*
Jordan Haltermane3813a92017-07-29 14:10:31 -07002 * Copyright 2017-present Open Networking Laboratory
Thomas Vachuska24c849c2014-10-27 09:53:05 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Thomas Vachuska24c849c2014-10-27 09:53:05 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska24c849c2014-10-27 09:53:05 -070015 */
Aaron Kruglikov1b727382016-02-09 16:17:47 -080016package org.onosproject.store.cluster.messaging.impl;
Yuta HIGUCHI0a0b9e42015-02-11 16:57:12 -080017
Madan Jampani05833872016-07-12 23:01:39 -070018import org.onosproject.core.HybridLogicalTime;
Yuta HIGUCHI0a0b9e42015-02-11 16:57:12 -080019
Madan Jampaniab6d3112014-10-02 16:30:14 -070020/**
Jordan Haltermane3813a92017-07-29 14:10:31 -070021 * Base class for internal messages.
Madan Jampaniab6d3112014-10-02 16:30:14 -070022 */
Jordan Haltermane3813a92017-07-29 14:10:31 -070023public abstract class InternalMessage {
Madan Jampaniab6d3112014-10-02 16:30:14 -070024
Madan Jampania9e70a62016-03-02 16:28:18 -080025 /**
Jordan Haltermane3813a92017-07-29 14:10:31 -070026 * Internal message type.
Madan Jampania9e70a62016-03-02 16:28:18 -080027 */
Jordan Haltermane3813a92017-07-29 14:10:31 -070028 public enum Type {
29 REQUEST(1),
30 REPLY(2);
Madan Jampania9e70a62016-03-02 16:28:18 -080031
Jordan Halterman742bd092017-02-28 01:01:49 -080032 private final int id;
33
Jordan Haltermane3813a92017-07-29 14:10:31 -070034 Type(int id) {
Jordan Halterman742bd092017-02-28 01:01:49 -080035 this.id = id;
36 }
37
38 /**
Jordan Haltermane3813a92017-07-29 14:10:31 -070039 * Returns the unique message type ID.
Jordan Halterman742bd092017-02-28 01:01:49 -080040 *
Jordan Haltermane3813a92017-07-29 14:10:31 -070041 * @return the unique message type ID.
Jordan Halterman742bd092017-02-28 01:01:49 -080042 */
43 public int id() {
44 return id;
45 }
46
47 /**
Jordan Haltermane3813a92017-07-29 14:10:31 -070048 * Returns the message type enum associated with the given ID.
Jordan Halterman742bd092017-02-28 01:01:49 -080049 *
Jordan Haltermane3813a92017-07-29 14:10:31 -070050 * @param id the type ID.
51 * @return the type enum for the given ID.
Jordan Halterman742bd092017-02-28 01:01:49 -080052 */
Jordan Haltermane3813a92017-07-29 14:10:31 -070053 public static Type forId(int id) {
Jordan Halterman742bd092017-02-28 01:01:49 -080054 switch (id) {
Jordan Halterman742bd092017-02-28 01:01:49 -080055 case 1:
Jordan Haltermane3813a92017-07-29 14:10:31 -070056 return REQUEST;
Jordan Halterman742bd092017-02-28 01:01:49 -080057 case 2:
Jordan Haltermane3813a92017-07-29 14:10:31 -070058 return REPLY;
Jordan Halterman742bd092017-02-28 01:01:49 -080059 default:
60 throw new IllegalArgumentException("Unknown status ID " + id);
61 }
62 }
Madan Jampania9e70a62016-03-02 16:28:18 -080063 }
64
Madan Jampanib825aeb2016-04-01 15:18:25 -070065 private final int preamble;
Madan Jampani05833872016-07-12 23:01:39 -070066 private final HybridLogicalTime time;
Madan Jampanic26eede2015-04-16 11:42:16 -070067 private final long id;
Madan Jampanic26eede2015-04-16 11:42:16 -070068 private final byte[] payload;
Yuta HIGUCHIc65f5122014-10-07 10:05:59 -070069
Jordan Haltermane3813a92017-07-29 14:10:31 -070070 protected InternalMessage(int preamble,
Jordan Haltermanf7c7f6f2017-05-05 03:02:34 -070071 HybridLogicalTime time,
72 long id,
Jordan Haltermane3813a92017-07-29 14:10:31 -070073 byte[] payload) {
Madan Jampanib825aeb2016-04-01 15:18:25 -070074 this.preamble = preamble;
Madan Jampani05833872016-07-12 23:01:39 -070075 this.time = time;
Yuta HIGUCHI91768e32014-11-22 05:06:35 -080076 this.id = id;
Yuta HIGUCHI91768e32014-11-22 05:06:35 -080077 this.payload = payload;
78 }
79
Jordan Haltermane3813a92017-07-29 14:10:31 -070080 public abstract Type type();
81
Jordan Haltermanf7c7f6f2017-05-05 03:02:34 -070082 public boolean isRequest() {
Jordan Haltermane3813a92017-07-29 14:10:31 -070083 return type() == Type.REQUEST;
Jordan Haltermanf7c7f6f2017-05-05 03:02:34 -070084 }
85
86 public boolean isReply() {
Jordan Haltermane3813a92017-07-29 14:10:31 -070087 return type() == Type.REPLY;
Jordan Haltermanf7c7f6f2017-05-05 03:02:34 -070088 }
89
Madan Jampani05833872016-07-12 23:01:39 -070090 public HybridLogicalTime time() {
91 return time;
92 }
93
Madan Jampanib825aeb2016-04-01 15:18:25 -070094 public int preamble() {
95 return preamble;
96 }
97
Madan Jampaniab6d3112014-10-02 16:30:14 -070098 public long id() {
99 return id;
100 }
101
Madan Jampani53e44e62014-10-07 12:39:51 -0700102 public byte[] payload() {
Madan Jampaniab6d3112014-10-02 16:30:14 -0700103 return payload;
104 }
Jordan Haltermane3813a92017-07-29 14:10:31 -0700105}