e80ccd5b2453cb60abe26cccc10a8775d44d2a83
[ovsdb.git] / southbound / southbound-impl / src / main / java / org / opendaylight / ovsdb / southbound / InstanceIdentifierCodec.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.ovsdb.southbound;
10
11 import java.net.URI;
12 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
13 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
14 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
15 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
16 import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
17 import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec;
18 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
19 import org.opendaylight.yangtools.yang.model.api.Module;
20 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
21 import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 public class InstanceIdentifierCodec extends AbstractModuleStringInstanceIdentifierCodec
26     implements SchemaContextListener {
27
28     private static final Logger LOG = LoggerFactory.getLogger(InstanceIdentifierCodec.class);
29
30     private DataSchemaContextTree dataSchemaContextTree;
31     private SchemaContext context;
32     private final BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;
33
34     public InstanceIdentifierCodec(DOMSchemaService schemaService,
35             BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) {
36         schemaService.registerSchemaContextListener(this);
37         this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer;
38     }
39
40     @Override
41     protected DataSchemaContextTree getDataContextTree() {
42         return dataSchemaContextTree;
43     }
44
45     @Override
46     protected Module moduleForPrefix(final String prefix) {
47         return context.findModules(prefix).stream().findFirst().orElse(null);
48     }
49
50     @Override
51     protected String prefixForNamespace(final URI namespace) {
52         return context.findModules(namespace).stream().map(Module::getName).findFirst().orElse(null);
53     }
54
55     @Override
56     public void onGlobalContextUpdated(SchemaContext schemaContext) {
57         this.context = schemaContext;
58         this.dataSchemaContextTree = DataSchemaContextTree.from(schemaContext);
59     }
60
61     public String serialize(InstanceIdentifier<?> iid) {
62         YangInstanceIdentifier normalizedIid = bindingNormalizedNodeSerializer.toYangInstanceIdentifier(iid);
63         return serialize(normalizedIid);
64     }
65
66     public YangInstanceIdentifier getYangInstanceIdentifier(InstanceIdentifier<?> iid) {
67         return bindingNormalizedNodeSerializer.toYangInstanceIdentifier(iid);
68     }
69
70     public InstanceIdentifier<?> bindingDeserializer(String iidString) throws DeserializationException {
71         YangInstanceIdentifier normalizedYangIid = deserialize(iidString);
72         return bindingNormalizedNodeSerializer.fromYangInstanceIdentifier(normalizedYangIid);
73     }
74
75     public InstanceIdentifier<?> bindingDeserializer(YangInstanceIdentifier yangIID) {
76         return bindingNormalizedNodeSerializer.fromYangInstanceIdentifier(yangIID);
77     }
78
79     public InstanceIdentifier<?> bindingDeserializerOrNull(String iidString) {
80         try {
81             return bindingDeserializer(iidString);
82         } catch (DeserializationException e) {
83             LOG.warn("Unable to deserialize iidString", e);
84         }
85         return null;
86     }
87 }