Remove DataChangeListener and friends
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / main / java / org / opendaylight / controller / md / sal / binding / impl / AbstractForwardedDataBroker.java
1 /*
2  * Copyright (c) 2014 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 package org.opendaylight.controller.md.sal.binding.impl;
9
10 import com.google.common.base.Optional;
11 import java.util.HashMap;
12 import java.util.HashSet;
13 import java.util.Map;
14 import java.util.Map.Entry;
15 import java.util.Set;
16 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
17 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
18 import org.opendaylight.yangtools.concepts.Delegator;
19 import org.opendaylight.yangtools.yang.binding.DataObject;
20 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
23 import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 public abstract class AbstractForwardedDataBroker implements Delegator<DOMDataBroker>, AutoCloseable {
28
29     private static final Logger LOG = LoggerFactory.getLogger(AbstractForwardedDataBroker.class);
30     // The Broker to whom we do all forwarding
31     private final DOMDataBroker domDataBroker;
32
33     private final BindingToNormalizedNodeCodec codec;
34
35     protected AbstractForwardedDataBroker(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec,
36             final DOMSchemaService schemaService) {
37         this.domDataBroker = domDataBroker;
38         this.codec = codec;
39     }
40
41     protected AbstractForwardedDataBroker(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec) {
42         this.domDataBroker = domDataBroker;
43         this.codec = codec;
44     }
45
46     protected BindingToNormalizedNodeCodec getCodec() {
47         return codec;
48     }
49
50     @Override
51     public DOMDataBroker getDelegate() {
52         return domDataBroker;
53     }
54
55     protected Map<InstanceIdentifier<?>, DataObject> toBinding(final InstanceIdentifier<?> path,
56             final Map<YangInstanceIdentifier, ? extends NormalizedNode<?, ?>> normalized) {
57         final Map<InstanceIdentifier<?>, DataObject> newMap = new HashMap<>();
58
59         for (final Map.Entry<YangInstanceIdentifier, ? extends NormalizedNode<?, ?>> entry : normalized.entrySet()) {
60             try {
61                 final Optional<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> potential =
62                         getCodec().toBinding(entry);
63                 if (potential.isPresent()) {
64                     final Entry<InstanceIdentifier<? extends DataObject>, DataObject> binding = potential.get();
65                     newMap.put(binding.getKey(), binding.getValue());
66                 }
67             } catch (final DeserializationException e) {
68                 LOG.warn("Failed to transform {}, omitting it", entry, e);
69             }
70         }
71         return newMap;
72     }
73
74     protected Set<InstanceIdentifier<?>> toBinding(final InstanceIdentifier<?> path,
75             final Set<YangInstanceIdentifier> normalized) {
76         final Set<InstanceIdentifier<?>> hashSet = new HashSet<>();
77         for (final YangInstanceIdentifier normalizedPath : normalized) {
78             try {
79                 final Optional<InstanceIdentifier<? extends DataObject>> potential =
80                         getCodec().toBinding(normalizedPath);
81                 if (potential.isPresent()) {
82                     final InstanceIdentifier<? extends DataObject> binding = potential.get();
83                     hashSet.add(binding);
84                 } else if (normalizedPath.getLastPathArgument()
85                         instanceof YangInstanceIdentifier.AugmentationIdentifier) {
86                     hashSet.add(path);
87                 }
88             } catch (final DeserializationException e) {
89                 LOG.warn("Failed to transform {}, omitting it", normalizedPath, e);
90             }
91         }
92         return hashSet;
93     }
94
95     protected Optional<DataObject> toBindingData(final InstanceIdentifier<?> path, final NormalizedNode<?, ?> data) {
96         if (path.isWildcarded()) {
97             return Optional.absent();
98         }
99         return (Optional<DataObject>) getCodec().deserializeFunction(path)
100                 .apply(Optional.<NormalizedNode<?, ?>>of(data));
101     }
102
103     @Override
104     public void close() {
105     }
106 }