| /* |
| * Copyright 2015-present Open Networking Laboratory |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.onosproject.store.group.impl; |
| |
| import org.onosproject.net.DeviceId; |
| import org.onosproject.net.group.GroupBuckets; |
| import org.onosproject.net.group.GroupDescription; |
| import org.onosproject.net.group.GroupKey; |
| import org.onosproject.net.group.GroupStore.UpdateType; |
| |
| /** |
| * Format of the Group store message that is used to |
| * communicate with the peer nodes in the cluster. |
| */ |
| public final class GroupStoreMessage { |
| private final DeviceId deviceId; |
| private final GroupKey appCookie; |
| private final GroupDescription groupDesc; |
| private final UpdateType updateType; |
| private final GroupBuckets updateBuckets; |
| private final GroupKey newAppCookie; |
| private final Type type; |
| |
| /** |
| * Type of group store request. |
| */ |
| public enum Type { |
| ADD, |
| UPDATE, |
| DELETE |
| } |
| |
| private GroupStoreMessage(Type type, |
| DeviceId deviceId, |
| GroupKey appCookie, |
| GroupDescription groupDesc, |
| UpdateType updateType, |
| GroupBuckets updateBuckets, |
| GroupKey newAppCookie) { |
| this.type = type; |
| this.deviceId = deviceId; |
| this.appCookie = appCookie; |
| this.groupDesc = groupDesc; |
| this.updateType = updateType; |
| this.updateBuckets = updateBuckets; |
| this.newAppCookie = newAppCookie; |
| } |
| |
| /** |
| * Creates a group store message for group ADD request. |
| * |
| * @param deviceId device identifier in which group to be added |
| * @param desc group creation parameters |
| * @return constructed group store message |
| */ |
| public static GroupStoreMessage createGroupAddRequestMsg(DeviceId deviceId, |
| GroupDescription desc) { |
| return new GroupStoreMessage(Type.ADD, |
| deviceId, |
| null, |
| desc, |
| null, |
| null, |
| null); |
| } |
| |
| /** |
| * Creates a group store message for group UPDATE request. |
| * |
| * @param deviceId the device ID |
| * @param appCookie the current group key |
| * @param updateType update (add or delete) type |
| * @param updateBuckets group buckets for updates |
| * @param newAppCookie optional new group key |
| * @return constructed group store message |
| */ |
| public static GroupStoreMessage createGroupUpdateRequestMsg(DeviceId deviceId, |
| GroupKey appCookie, |
| UpdateType updateType, |
| GroupBuckets updateBuckets, |
| GroupKey newAppCookie) { |
| return new GroupStoreMessage(Type.UPDATE, |
| deviceId, |
| appCookie, |
| null, |
| updateType, |
| updateBuckets, |
| newAppCookie); |
| } |
| |
| /** |
| * Creates a group store message for group DELETE request. |
| * |
| * @param deviceId the device ID |
| * @param appCookie the group key |
| * @return constructed group store message |
| */ |
| public static GroupStoreMessage createGroupDeleteRequestMsg(DeviceId deviceId, |
| GroupKey appCookie) { |
| return new GroupStoreMessage(Type.DELETE, |
| deviceId, |
| appCookie, |
| null, |
| null, |
| null, |
| null); |
| } |
| |
| /** |
| * Returns the device identifier of this group request. |
| * |
| * @return device identifier |
| */ |
| public DeviceId deviceId() { |
| return deviceId; |
| } |
| |
| /** |
| * Returns the application cookie associated with this group request. |
| * |
| * @return application cookie |
| */ |
| public GroupKey appCookie() { |
| return appCookie; |
| } |
| |
| /** |
| * Returns the group create parameters associated with this group request. |
| * |
| * @return group create parameters |
| */ |
| public GroupDescription groupDesc() { |
| return groupDesc; |
| } |
| |
| /** |
| * Returns the group buckets to be updated as part of this group request. |
| * |
| * @return group buckets to be updated |
| */ |
| public GroupBuckets updateBuckets() { |
| return updateBuckets; |
| } |
| |
| /** |
| * Returns the update group operation type. |
| * |
| * @return update operation type |
| */ |
| public UpdateType updateType() { |
| return updateType; |
| } |
| |
| /** |
| * Returns the new application cookie associated with this group operation. |
| * |
| * @return new application cookie |
| */ |
| public GroupKey newAppCookie() { |
| return newAppCookie; |
| } |
| |
| /** |
| * Returns the type of this group operation. |
| * |
| * @return group message type |
| */ |
| public Type type() { |
| return type; |
| } |
| } |