blob: 3bebf4c182ab2505827546259ddfa410d5224fea [file] [log] [blame]
Sean Condon06613e92017-06-09 15:14:01 +01001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Sean Condon06613e92017-06-09 15:14:01 +01003 *
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.yang;
17
18import org.apache.felix.scr.annotations.Activate;
19import org.apache.felix.scr.annotations.Deactivate;
20import org.apache.felix.scr.annotations.Reference;
21import org.apache.felix.scr.annotations.ReferenceCardinality;
22import org.onosproject.core.CoreService;
23import org.onosproject.drivers.netconf.MockCoreService;
24import org.onosproject.yang.model.ModelConverter;
25import org.onosproject.yang.model.ModelObjectData;
26import org.onosproject.yang.model.NodeKey;
27import org.onosproject.yang.model.ResourceData;
28import org.onosproject.yang.model.ResourceId;
Thomas Vachuska89534452017-07-28 10:20:12 -070029import org.onosproject.yang.model.RpcContext;
Sean Condon06613e92017-06-09 15:14:01 +010030import org.onosproject.yang.model.SchemaContext;
31import org.onosproject.yang.model.SchemaContextProvider;
32import org.onosproject.yang.model.YangModel;
Thomas Vachuska89534452017-07-28 10:20:12 -070033import org.onosproject.yang.model.YangModule;
34import org.onosproject.yang.model.YangModuleId;
Sean Condon06613e92017-06-09 15:14:01 +010035import org.onosproject.yang.runtime.CompositeData;
36import org.onosproject.yang.runtime.CompositeStream;
37import org.onosproject.yang.runtime.ModelRegistrationParam;
38import org.onosproject.yang.runtime.RuntimeContext;
39import org.onosproject.yang.runtime.YangModelRegistry;
40import org.onosproject.yang.runtime.YangRuntimeService;
41import org.onosproject.yang.runtime.YangSerializer;
42import org.onosproject.yang.runtime.YangSerializerRegistry;
43import org.onosproject.yang.runtime.impl.DefaultModelConverter;
Thomas Vachuska89534452017-07-28 10:20:12 -070044import org.onosproject.yang.runtime.impl.DefaultSchemaContextProvider;
Sean Condon06613e92017-06-09 15:14:01 +010045import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
46import org.onosproject.yang.runtime.impl.DefaultYangRuntimeHandler;
47import org.onosproject.yang.runtime.impl.DefaultYangSerializerRegistry;
48import org.onosproject.yang.serializers.json.JsonSerializer;
49import org.onosproject.yang.serializers.xml.XmlSerializer;
50import org.slf4j.Logger;
51import org.slf4j.LoggerFactory;
52
53import java.util.Set;
54
55import static com.google.common.base.Preconditions.checkNotNull;
56
57public class MockYangRuntimeManager implements YangModelRegistry,
58 YangSerializerRegistry, YangRuntimeService, ModelConverter,
59 SchemaContextProvider {
60
61 private static final String APP_ID = "org.onosproject.yang";
62 private final Logger log = LoggerFactory.getLogger(getClass());
63
64 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
65 protected CoreService coreService;
66
67 private DefaultYangModelRegistry modelRegistry;
68 private DefaultYangSerializerRegistry serializerRegistry;
69 private DefaultYangRuntimeHandler runtimeService;
70 private DefaultModelConverter modelConverter;
Thomas Vachuska89534452017-07-28 10:20:12 -070071 private DefaultSchemaContextProvider schemaContextProvider;
Sean Condon06613e92017-06-09 15:14:01 +010072
73 public void setModelRegistry(DefaultYangModelRegistry yReg) {
74 this.modelRegistry = yReg;
75 }
76
77 @Activate
78 public void activate() {
79 coreService = new MockCoreService();
80 coreService.registerApplication(APP_ID);
81 serializerRegistry = new DefaultYangSerializerRegistry();
82 runtimeService =
83 new DefaultYangRuntimeHandler(serializerRegistry, modelRegistry);
84 serializerRegistry.registerSerializer(new JsonSerializer());
85 serializerRegistry.registerSerializer(new XmlSerializer());
86 modelConverter = new DefaultModelConverter(modelRegistry);
Thomas Vachuska89534452017-07-28 10:20:12 -070087 schemaContextProvider = new DefaultSchemaContextProvider(modelRegistry);
Sean Condon06613e92017-06-09 15:14:01 +010088 log.info("Started");
89 }
90
91 @Deactivate
92 public void deactivate() {
93 log.info("Stopped");
94 }
95
96
97 @Override
98 public void registerModel(ModelRegistrationParam p) {
99 modelRegistry.registerModel(p);
100 }
101
102 @Override
103 public void unregisterModel(ModelRegistrationParam p) {
104 modelRegistry.unregisterModel(p);
105 }
106
107 @Override
108 public Set<YangModel> getModels() {
109 return modelRegistry.getModels();
110 }
111
Yi Tsengd74fe382018-02-16 16:34:19 -0800112 @Override
113 public YangModel getModel(String s) {
114 return modelRegistry.getModel(s);
115 }
Thomas Vachuska89534452017-07-28 10:20:12 -0700116
Yi Tsengd74fe382018-02-16 16:34:19 -0800117 @Override
118 public YangModule getModule(YangModuleId yangModuleId) {
119 return modelRegistry.getModule(yangModuleId);
120 }
Thomas Vachuska89534452017-07-28 10:20:12 -0700121
Yi Tsengd74fe382018-02-16 16:34:19 -0800122 @Override
Sean Condon06613e92017-06-09 15:14:01 +0100123 public void registerSerializer(YangSerializer ys) {
124 serializerRegistry.registerSerializer(ys);
125 }
126
127 @Override
128 public void unregisterSerializer(YangSerializer ys) {
129 serializerRegistry.unregisterSerializer(ys);
130 }
131
132 @Override
Yi Tsengd74fe382018-02-16 16:34:19 -0800133 public void registerAnydataSchema(Class id, Class id1) {
Ray Milkeycbf99172017-11-30 10:54:16 -0800134 throw new UnsupportedOperationException("registerAnydataSchema() needs to be implemented");
135 }
136
137 @Override
138 public void unregisterAnydataSchema(Class id, Class id1) {
139 throw new UnsupportedOperationException("unregisterAnydataSchema() needs to be implemented");
140
141 }
142
143 @Override
Sean Condon06613e92017-06-09 15:14:01 +0100144 public Set<YangSerializer> getSerializers() {
145 return serializerRegistry.getSerializers();
146 }
147
148 @Override
149 public CompositeData decode(CompositeStream cs, RuntimeContext rc) {
150 return runtimeService.decode(cs, rc);
151 }
152
153 @Override
154 public CompositeStream encode(CompositeData cd, RuntimeContext rc) {
155 return runtimeService.encode(cd, rc);
156 }
157
158 @Override
159 public ModelObjectData createModel(ResourceData resourceData) {
160 return modelConverter.createModel(resourceData);
161 }
162
163 @Override
164 public ResourceData createDataNode(ModelObjectData modelObjectData) {
165 return modelConverter.createDataNode(modelObjectData);
166 }
167
168 @Override
169 public SchemaContext getSchemaContext(ResourceId resourceId) {
170 checkNotNull(resourceId, " resource id can't be null.");
171 NodeKey key = resourceId.nodeKeys().get(0);
172 if (resourceId.nodeKeys().size() == 1 &&
173 "/".equals(key.schemaId().name())) {
174 return modelRegistry;
175 }
176 log.info("To be implemented.");
177 return null;
178 }
Thomas Vachuska89534452017-07-28 10:20:12 -0700179
180 @Override
181 public RpcContext getRpcContext(ResourceId resourceId) {
182 return schemaContextProvider.getRpcContext(resourceId);
183 }
Sean Condon06613e92017-06-09 15:14:01 +0100184}