2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved.
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
8 package org.opendaylight.controller.sal.core.compat;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.base.Optional;
13 import com.google.common.collect.ForwardingObject;
14 import com.google.common.collect.ImmutableMap;
16 import org.eclipse.jdt.annotation.Nullable;
17 import org.opendaylight.controller.md.sal.dom.api.DOMActionService;
18 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
19 import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
20 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService;
21 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
22 import org.opendaylight.controller.md.sal.dom.api.DOMService;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
24 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
27 * Adapter providing Controller DOMMountPoint implementation based on an MD-SAL DOMMountPoint delegate. Services are
28 * looked up in the delegate first. If a lookup is unsuccessful, this class attempts to transparently proxy well-known
29 * Controller DOMServices on top of their MD-SAL counterparts available from delegate.
32 public class DOMMountPointAdapter extends ForwardingObject implements DOMMountPoint {
33 private abstract static class CompatFactory<M extends org.opendaylight.mdsal.dom.api.DOMService,
34 C extends DOMService> {
35 private final Class<M> mdsalClass;
37 CompatFactory(final Class<M> mdsalClass) {
38 this.mdsalClass = requireNonNull(mdsalClass);
41 final @Nullable C createService(final org.opendaylight.mdsal.dom.api.DOMMountPoint mountPoint) {
42 return mountPoint.getService(mdsalClass).map(this::createService).orElse(null);
45 abstract C createService(M delegate);
48 private static final Map<Class<? extends DOMService>, CompatFactory<?, ?>> KNOWN_SERVICES = ImmutableMap.of(
49 DOMActionService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMActionService, DOMActionService>(
50 org.opendaylight.mdsal.dom.api.DOMActionService.class) {
52 DOMActionService createService(final org.opendaylight.mdsal.dom.api.DOMActionService delegate) {
53 return new LegacyDOMActionServiceAdapter(delegate);
56 DOMDataBroker.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMDataBroker, DOMDataBroker>(
57 org.opendaylight.mdsal.dom.api.DOMDataBroker.class) {
59 DOMDataBroker createService(final org.opendaylight.mdsal.dom.api.DOMDataBroker delegate) {
60 return new LegacyDOMDataBrokerAdapter(delegate);
63 DOMNotificationService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMNotificationService,
64 DOMNotificationService>(org.opendaylight.mdsal.dom.api.DOMNotificationService.class) {
66 DOMNotificationService createService(final org.opendaylight.mdsal.dom.api.DOMNotificationService delegate) {
67 return new LegacyDOMNotificationServiceAdapter(delegate);
70 DOMRpcService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMRpcService, DOMRpcService>(
71 org.opendaylight.mdsal.dom.api.DOMRpcService.class) {
73 DOMRpcService createService(final org.opendaylight.mdsal.dom.api.DOMRpcService delegate) {
74 return new LegacyDOMRpcServiceAdapter(delegate);
78 private final org.opendaylight.mdsal.dom.api.DOMMountPoint delegate;
80 public DOMMountPointAdapter(final org.opendaylight.mdsal.dom.api.DOMMountPoint delegate) {
81 this.delegate = requireNonNull(delegate);
85 public YangInstanceIdentifier getIdentifier() {
86 return delegate().getIdentifier();
90 public <T extends DOMService> Optional<T> getService(final Class<T> cls) {
91 final java.util.Optional<T> found = delegate.getService(cls);
92 if (found.isPresent()) {
93 return Optional.of(found.get());
96 final CompatFactory<?, ?> compat = KNOWN_SERVICES.get(cls);
97 return Optional.fromNullable(cls.cast(compat == null ? null : compat.createService(delegate)));
101 public SchemaContext getSchemaContext() {
102 return delegate().getSchemaContext();
106 public int hashCode() {
107 return getIdentifier().hashCode();
111 public boolean equals(final Object obj) {
116 if (!(obj instanceof DOMMountPoint)) {
120 DOMMountPoint other = (DOMMountPoint) obj;
121 return getIdentifier().equals(other.getIdentifier());
125 protected org.opendaylight.mdsal.dom.api.DOMMountPoint delegate() {