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.gaul.modernizer_maven_annotations.SuppressModernizer;
18 import org.opendaylight.controller.md.sal.dom.api.DOMActionService;
19 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
20 import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
21 import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService;
22 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
23 import org.opendaylight.controller.md.sal.dom.api.DOMService;
24 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
28 * Adapter providing Controller DOMMountPoint implementation based on an MD-SAL DOMMountPoint delegate. Services are
29 * looked up in the delegate first. If a lookup is unsuccessful, this class attempts to transparently proxy well-known
30 * Controller DOMServices on top of their MD-SAL counterparts available from delegate.
33 public class DOMMountPointAdapter extends ForwardingObject implements DOMMountPoint {
34 private abstract static class CompatFactory<M extends org.opendaylight.mdsal.dom.api.DOMService,
35 C extends DOMService> {
36 private final Class<M> mdsalClass;
38 CompatFactory(final Class<M> mdsalClass) {
39 this.mdsalClass = requireNonNull(mdsalClass);
42 final @Nullable C createService(final org.opendaylight.mdsal.dom.api.DOMMountPoint mountPoint) {
43 return mountPoint.getService(mdsalClass).map(this::createService).orElse(null);
46 abstract C createService(M delegate);
49 private static final Map<Class<? extends DOMService>, CompatFactory<?, ?>> KNOWN_SERVICES = ImmutableMap.of(
50 DOMActionService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMActionService, DOMActionService>(
51 org.opendaylight.mdsal.dom.api.DOMActionService.class) {
53 DOMActionService createService(final org.opendaylight.mdsal.dom.api.DOMActionService delegate) {
54 return new LegacyDOMActionServiceAdapter(delegate);
57 DOMDataBroker.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMDataBroker, DOMDataBroker>(
58 org.opendaylight.mdsal.dom.api.DOMDataBroker.class) {
60 DOMDataBroker createService(final org.opendaylight.mdsal.dom.api.DOMDataBroker delegate) {
61 return new LegacyDOMDataBrokerAdapter(delegate);
64 DOMNotificationService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMNotificationService,
65 DOMNotificationService>(org.opendaylight.mdsal.dom.api.DOMNotificationService.class) {
67 DOMNotificationService createService(final org.opendaylight.mdsal.dom.api.DOMNotificationService delegate) {
68 return new LegacyDOMNotificationServiceAdapter(delegate);
71 DOMRpcService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMRpcService, DOMRpcService>(
72 org.opendaylight.mdsal.dom.api.DOMRpcService.class) {
74 DOMRpcService createService(final org.opendaylight.mdsal.dom.api.DOMRpcService delegate) {
75 return new LegacyDOMRpcServiceAdapter(delegate);
79 private final org.opendaylight.mdsal.dom.api.DOMMountPoint delegate;
81 public DOMMountPointAdapter(final org.opendaylight.mdsal.dom.api.DOMMountPoint delegate) {
82 this.delegate = requireNonNull(delegate);
86 public YangInstanceIdentifier getIdentifier() {
87 return delegate().getIdentifier();
92 public <T extends DOMService> Optional<T> getService(final Class<T> cls) {
93 final java.util.Optional<T> found = delegate.getService(cls);
94 if (found.isPresent()) {
95 return Optional.of(found.get());
98 final CompatFactory<?, ?> compat = KNOWN_SERVICES.get(cls);
99 return Optional.fromNullable(cls.cast(compat == null ? null : compat.createService(delegate)));
103 public SchemaContext getSchemaContext() {
104 return delegate().getSchemaContext();
108 public int hashCode() {
109 return getIdentifier().hashCode();
113 public boolean equals(final Object obj) {
118 if (!(obj instanceof DOMMountPoint)) {
122 DOMMountPoint other = (DOMMountPoint) obj;
123 return getIdentifier().equals(other.getIdentifier());
127 protected org.opendaylight.mdsal.dom.api.DOMMountPoint delegate() {