blob: 87609f491c8bb5acf808b1a134dd94db92a08e0f [file] [log] [blame]
Andrea Campanella378e21a2017-06-07 12:09:59 +02001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Andrea Campanella378e21a2017-06-07 12:09:59 +02003 *
4 * 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
7 *
8 * 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.
15 */
16
17package org.onosproject.grpc.api;
18
19import com.google.common.annotations.Beta;
20import org.onlab.util.Identifier;
21import org.onosproject.net.DeviceId;
22
23import static com.google.common.base.Preconditions.checkArgument;
24import static com.google.common.base.Preconditions.checkNotNull;
25
26/**
Carmelo Cascone47a853b2018-01-05 02:40:58 +010027 * gRPC managed channel identifier, unique in the scope of a gRPC controller
28 * instance.
Andrea Campanella378e21a2017-06-07 12:09:59 +020029 */
30@Beta
31public final class GrpcChannelId extends Identifier<String> {
32
33 private final DeviceId deviceId;
Andrea Campanella378e21a2017-06-07 12:09:59 +020034 private final String channelName;
35
Andrea Campanella378e21a2017-06-07 12:09:59 +020036 private GrpcChannelId(DeviceId deviceId, String channelName) {
37 super(deviceId.toString() + ":" + channelName);
Carmelo Cascone47a853b2018-01-05 02:40:58 +010038 checkNotNull(deviceId, "device ID must not be null");
Andrea Campanella378e21a2017-06-07 12:09:59 +020039 checkNotNull(channelName, "channel name must not be null");
40 checkArgument(!channelName.isEmpty(), "channel name must not be empty");
41 this.deviceId = deviceId;
42 this.channelName = channelName;
43 }
44
45 /**
Carmelo Cascone47a853b2018-01-05 02:40:58 +010046 * Returns the device part of this channel ID.
Andrea Campanella378e21a2017-06-07 12:09:59 +020047 *
Carmelo Cascone47a853b2018-01-05 02:40:58 +010048 * @return device ID
Andrea Campanella378e21a2017-06-07 12:09:59 +020049 */
50 public DeviceId deviceId() {
51 return deviceId;
52 }
53
54 /**
Carmelo Cascone47a853b2018-01-05 02:40:58 +010055 * Returns the channel name part of this channel ID.
Andrea Campanella378e21a2017-06-07 12:09:59 +020056 *
Carmelo Cascone47a853b2018-01-05 02:40:58 +010057 * @return channel name
Andrea Campanella378e21a2017-06-07 12:09:59 +020058 */
59 public String channelName() {
60 return channelName;
61 }
62
63 /**
Carmelo Cascone47a853b2018-01-05 02:40:58 +010064 * Instantiates a new channel ID for the given device ID and arbitrary
65 * channel name (e.g. the name of the gRPC service).
Andrea Campanella378e21a2017-06-07 12:09:59 +020066 *
Carmelo Cascone47a853b2018-01-05 02:40:58 +010067 * @param deviceId device ID
Andrea Campanella378e21a2017-06-07 12:09:59 +020068 * @param channelName name of the channel
Carmelo Cascone47a853b2018-01-05 02:40:58 +010069 * @return channel ID
Andrea Campanella378e21a2017-06-07 12:09:59 +020070 */
Carmelo Cascone47a853b2018-01-05 02:40:58 +010071 public static GrpcChannelId of(DeviceId deviceId, String channelName) {
72 return new GrpcChannelId(deviceId, channelName);
Andrea Campanella378e21a2017-06-07 12:09:59 +020073 }
74}