blob: 2ffe5a6832b453c4f06ff673a5cb5bdb169c0d5c [file] [log] [blame]
hirokif4ed5212018-05-26 22:39:38 -07001/*
2 * Copyright 2018-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 */
16
17package org.onosproject.odtn.utils.tapi;
18
19import java.lang.reflect.InvocationTargetException;
20import java.lang.reflect.Method;
21import java.util.Map;
22import java.util.Map.Entry;
hiroki96ab3c22018-12-11 14:10:52 -080023import org.onosproject.yang.gen.v1.tapicommon.rev20181210.tapicommon.globalclass.DefaultName;
24import org.onosproject.yang.gen.v1.tapicommon.rev20181210.tapicommon.globalclass.Name;
hirokif4ed5212018-05-26 22:39:38 -070025import org.onosproject.yang.model.ModelObject;
26import org.slf4j.Logger;
27
28import static org.slf4j.LoggerFactory.getLogger;
29
30/**
31 * Utility methods dealing with TAPI modelObject which includes local class grouping.
32 * <p>
Thomas Vachuskaa01ef782018-07-25 14:07:11 -070033 * tapi-common@2018-03-07.yang
hirokif4ed5212018-05-26 22:39:38 -070034 * grouping local-class {
35 * leaf local-id {
36 * type string;
37 * }
38 * list name {
39 * key 'value-name';
40 * uses name-and-value;
41 * }
42 * }
Thomas Vachuskaa01ef782018-07-25 14:07:11 -070043 * </p>
hirokif4ed5212018-05-26 22:39:38 -070044 * <p>
45 * grouping name-and-value {
46 * leaf value-name {
47 * type string;
48 * description "The name of the value. The value need not have a name.";
49 * }
50 * leaf value {
51 * type string;
52 * description "The value";
53 * }
54 * description "A scoped name-value pair";
55 * }
56 * </p>
57 */
58public final class TapiLocalClassUtil {
59
60 private static final Logger log = getLogger(TapiLocalClassUtil.class);
61
62 private TapiLocalClassUtil() {
63 }
64
65 /**
66 * Set local-id for the ModelObject.
67 *
68 * @param obj ModelObject
69 * @param localId LocalId
70 * @param <T> Type of ModelObject
71 */
72 public static <T extends ModelObject> void setLocalId(T obj, String localId) {
73 @SuppressWarnings("unchecked")
74 Class<T> cls = (Class<T>) obj.getClass();
75 try {
76 Method method = cls.getMethod("localId", String.class);
77 method.invoke(obj, localId);
78 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
79 log.error("Exception thrown", e);
80 }
81 }
82
83 /**
84 * Get local-id for the ModelObject.
85 *
86 * @param obj ModelObject
87 * @param <T> Type of ModelObject
88 * @return Local-id
89 */
90 public static <T extends ModelObject> String getLocalId(T obj) {
91 String localId = null;
92 @SuppressWarnings("unchecked")
93 Class<T> cls = (Class<T>) obj.getClass();
94 try {
95 Method method = cls.getMethod("localId");
96 localId = (String) method.invoke(obj);
97 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
98 log.error("Exception thrown", e);
99 }
100
101 return localId;
102 }
103
104 /**
105 * Add key-value to the ModelObject as "name-and-value" list.
106 *
107 * @param obj ModelObject
108 * @param kvs Key-value map
109 * @param <T> Type of ModelObject
110 */
111 public static <T extends ModelObject> void addNameList(T obj, Map<String, String> kvs) {
112
113 @SuppressWarnings("unchecked")
114 Class<T> cls = (Class<T>) obj.getClass();
115 try {
116 Method method = cls.getMethod("addToName", Name.class);
117
118 for (Entry<String, String> kv : kvs.entrySet()) {
119 DefaultName prop = new DefaultName();
120 prop.valueName(kv.getKey());
121 prop.value(kv.getValue());
122 method.invoke(obj, prop);
123 }
124 } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
125 log.error("Exception thrown", e);
126 }
127 }
hirokid8fd7862018-10-09 15:24:24 +0900128}