blob: 770d835b021367e775fc64b98b9ac660d6dc7522 [file] [log] [blame]
shivani vaidya9632b5f2017-06-27 11:00:04 -07001/*
2 * Copyright 2017-present Open Networking Foundation
3 *
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 */
16package org.onosproject.incubator.protobuf.models.net;
17
shivani vaidya9632b5f2017-06-27 11:00:04 -070018import org.onosproject.incubator.protobuf.models.net.link.LinkEnumsProtoTranslator;
adibrastegarniac02358a2018-11-06 18:02:00 -050019import org.onosproject.grpc.net.models.LinkProtoOuterClass;
shivani vaidya9632b5f2017-06-27 11:00:04 -070020import org.onosproject.net.Annotations;
21import org.onosproject.net.ConnectPoint;
Jian Lid8e72072017-11-21 10:50:02 +090022import org.onosproject.net.DefaultAnnotations;
shivani vaidya9632b5f2017-06-27 11:00:04 -070023import org.onosproject.net.DefaultLink;
24import org.onosproject.net.Link;
Jian Lid8e72072017-11-21 10:50:02 +090025import org.onosproject.net.SparseAnnotations;
shivani vaidya9632b5f2017-06-27 11:00:04 -070026import org.onosproject.net.provider.ProviderId;
27
Jian Lid40252c2017-12-08 04:13:20 +090028import java.util.HashMap;
Jian Lid8e72072017-11-21 10:50:02 +090029import java.util.Map;
30
shivani vaidya9632b5f2017-06-27 11:00:04 -070031/**
32 * gRPC LinkProto message to equivalent ONOS Link conversion related utilities.
33 */
34public final class LinkProtoTranslator {
35
36 /**
Jian Lid40252c2017-12-08 04:13:20 +090037 * Translates gRPC LinkCore message to {@link Link}.
shivani vaidya9632b5f2017-06-27 11:00:04 -070038 *
39 * @param link gRPC message
Jian Lid40252c2017-12-08 04:13:20 +090040 * @return {@link Link} null if link is a default instance
shivani vaidya9632b5f2017-06-27 11:00:04 -070041 */
42 public static Link translate(LinkProtoOuterClass.LinkProto link) {
43 if (link.equals(LinkProtoOuterClass.LinkProto.getDefaultInstance())) {
44 return null;
45 }
46 ProviderId providerId = ProviderIdProtoTranslator.translate(link.getProviderId());
47 Link.State state = LinkEnumsProtoTranslator.translate(link.getState()).get();
48 ConnectPoint src = ConnectPointProtoTranslator.translate(link.getSrc()).get();
49 ConnectPoint dst = ConnectPointProtoTranslator.translate(link.getDst()).get();
50 Link.Type type = LinkEnumsProtoTranslator.translate(link.getType()).get();
Jian Lid8e72072017-11-21 10:50:02 +090051 Annotations annots = asAnnotations(link.getAnnotations());
shivani vaidya9632b5f2017-06-27 11:00:04 -070052 Boolean isExpected = link.getIsExpected();
53 return DefaultLink.builder().state(state)
54 .annotations(annots)
55 .providerId(providerId)
56 .src(src)
57 .dst(dst)
58 .type(type)
59 .isExpected(isExpected)
60 .build();
61 }
62
shivani vaidya9632b5f2017-06-27 11:00:04 -070063 /**
Jian Lid40252c2017-12-08 04:13:20 +090064 * Translates {@link Link} to gRPC LinkCore message.
shivani vaidya9632b5f2017-06-27 11:00:04 -070065 *
Jian Lid40252c2017-12-08 04:13:20 +090066 * @param link {@link Link}
shivani vaidya9632b5f2017-06-27 11:00:04 -070067 * @return gRPC LinkCore message
68 */
69 public static LinkProtoOuterClass.LinkProto translate(Link link) {
70 if (link == null) {
71 return LinkProtoOuterClass.LinkProto.getDefaultInstance();
72 }
73 return LinkProtoOuterClass.LinkProto.newBuilder()
74 .setProviderId(ProviderIdProtoTranslator.translate(link.providerId()))
75 .setState(LinkEnumsProtoTranslator.translate(link.state()))
76 .setSrc(ConnectPointProtoTranslator.translate(link.src()))
77 .setDst(ConnectPointProtoTranslator.translate(link.dst()))
78 .setType(LinkEnumsProtoTranslator.translate(link.type()))
79 .setIsExpected(link.isExpected())
80 .build();
81 }
82
Jian Lid8e72072017-11-21 10:50:02 +090083 // may be this can be moved to Annotation itself or AnnotationsUtils
Jian Lid40252c2017-12-08 04:13:20 +090084
Jian Lid8e72072017-11-21 10:50:02 +090085 /**
86 * Converts Map of Strings to {@link SparseAnnotations}.
87 *
88 * @param annotations Map of annotation key and values
89 * @return {@link SparseAnnotations}
90 */
91 public static SparseAnnotations asAnnotations(Map<String, String> annotations) {
92 DefaultAnnotations.Builder builder = DefaultAnnotations.builder();
93 annotations.entrySet().forEach(e -> {
94 if (e.getValue() != null) {
95 builder.set(e.getKey(), e.getValue());
96 } else {
97 builder.remove(e.getKey());
98 }
99 });
100 return builder.build();
101 }
102
Jian Lid40252c2017-12-08 04:13:20 +0900103 /**
104 * Converts Annotations to Map of Strings.
105 *
106 * @param annotations {@link Annotations}
107 * @return Map of annotation key and values
108 */
109 public static Map<String, String> asMap(Annotations annotations) {
110 if (annotations instanceof DefaultAnnotations) {
111 return ((DefaultAnnotations) annotations).asMap();
112 }
113 Map<String, String> map = new HashMap<>();
114 annotations.keys()
115 .forEach(k -> map.put(k, annotations.value(k)));
116
117 return map;
118 }
119
shivani vaidya9632b5f2017-06-27 11:00:04 -0700120 // Utility class not intended for instantiation.
Jian Lid40252c2017-12-08 04:13:20 +0900121 private LinkProtoTranslator() {
122 }
shivani vaidya9632b5f2017-06-27 11:00:04 -0700123
124}
125