X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fbroker%2Fimpl%2Fmount%2FDOMMountPointServiceImpl.java;h=6cfdb5abce34cf65bd77f53740480ab9a0ba4723;hp=b73f177cdae0da26584476cee52a5270dec4d00c;hb=e1ede0942d3bff1f1b150816e6bfa96ed9366c20;hpb=e5bd339c5b81732da4496010b03533ec247455fa diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java index b73f177cda..6cfdb5abce 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java @@ -5,78 +5,109 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.md.sal.dom.broker.impl.mount; +import static java.util.Objects.requireNonNull; + import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.MutableClassToInstanceMap; +import java.util.Map; +import java.util.Map.Entry; +import org.opendaylight.controller.md.sal.dom.api.DOMActionService; +import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.controller.md.sal.dom.api.DOMService; import org.opendaylight.controller.md.sal.dom.broker.spi.mount.SimpleDOMMountPoint; +import org.opendaylight.controller.sal.core.compat.DOMDataBrokerAdapter; +import org.opendaylight.controller.sal.core.compat.DOMMountPointAdapter; +import org.opendaylight.controller.sal.core.compat.DOMNotificationServiceAdapter; +import org.opendaylight.controller.sal.core.compat.DOMRpcServiceAdapter; import org.opendaylight.mdsal.dom.api.DOMMountPointListener; +import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class DOMMountPointServiceImpl implements DOMMountPointService { + private abstract static class CompatFactory { + private final Class controllerClass; + private final Class mdsalClass; + + CompatFactory(final Class controllerClass, final Class mdsalClass) { + this.controllerClass = requireNonNull(controllerClass); + this.mdsalClass = requireNonNull(mdsalClass); + } - private final org.opendaylight.mdsal.dom.api.DOMMountPointService delegate; - - @VisibleForTesting - public DOMMountPointServiceImpl() { - this(new org.opendaylight.mdsal.dom.broker.DOMMountPointServiceImpl()); - } - - public DOMMountPointServiceImpl(final org.opendaylight.mdsal.dom.api.DOMMountPointService delegate) { - this.delegate = delegate; - } + final void addService(final org.opendaylight.mdsal.dom.api.DOMMountPointService.DOMMountPointBuilder builder, + final ClassToInstanceMap services) { + if (!services.containsKey(mdsalClass)) { + final C controllerService = services.getInstance(controllerClass); + if (controllerService != null) { + final M mdsalService = createService(controllerService); + if (mdsalService != null) { + builder.addService(mdsalClass, mdsalService); + } + } + } + } - @Override - public Optional getMountPoint(final YangInstanceIdentifier path) { - return Optional.fromJavaUtil(delegate.getMountPoint(path).map(DOMMountPointServiceImpl::convert)); + abstract M createService(C delegate); } - private static DOMMountPoint convert(final org.opendaylight.mdsal.dom.api.DOMMountPoint from) { - return new DOMMountPoint() { + private static final Map, CompatFactory> KNOWN_SERVICES = ImmutableMap.of( + DOMActionService.class, new CompatFactory( + DOMActionService.class, org.opendaylight.mdsal.dom.api.DOMActionService.class) { @Override - public YangInstanceIdentifier getIdentifier() { - return from.getIdentifier(); + org.opendaylight.mdsal.dom.api.DOMActionService createService(final DOMActionService delegate) { + return delegate; } - + }, + DOMDataBroker.class, new CompatFactory( + DOMDataBroker.class, org.opendaylight.mdsal.dom.api.DOMDataBroker.class) { @Override - public Optional getService(final Class cls) { - return Optional.fromJavaUtil(from.getService(cls)); + org.opendaylight.mdsal.dom.api.DOMDataBroker createService(final DOMDataBroker delegate) { + return new DOMDataBrokerAdapter(delegate); } - + }, + DOMNotificationService.class, new CompatFactory(DOMNotificationService.class, + org.opendaylight.mdsal.dom.api.DOMNotificationService.class) { @Override - public SchemaContext getSchemaContext() { - return from.getSchemaContext(); + org.opendaylight.mdsal.dom.api.DOMNotificationService createService(final DOMNotificationService delegate) { + return new DOMNotificationServiceAdapter(delegate); } - + }, + DOMRpcService.class, new CompatFactory( + DOMRpcService.class, org.opendaylight.mdsal.dom.api.DOMRpcService.class) { @Override - public int hashCode() { - return from.getIdentifier().hashCode(); + org.opendaylight.mdsal.dom.api.DOMRpcService createService(final DOMRpcService delegate) { + return new DOMRpcServiceAdapter(delegate); } + }); - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } + private final org.opendaylight.mdsal.dom.api.DOMMountPointService delegate; - if (!(obj instanceof DOMMountPoint)) { - return false; - } + @VisibleForTesting + public DOMMountPointServiceImpl() { + this(new org.opendaylight.mdsal.dom.broker.DOMMountPointServiceImpl()); + } - DOMMountPoint other = (DOMMountPoint) obj; - return from.getIdentifier().equals(other.getIdentifier()); - } - }; + public DOMMountPointServiceImpl(final org.opendaylight.mdsal.dom.api.DOMMountPointService delegate) { + this.delegate = delegate; + } + + @Override + public Optional getMountPoint(final YangInstanceIdentifier path) { + return Optional.fromJavaUtil(delegate.getMountPoint(path).map(DOMMountPointAdapter::new)); } @Override @@ -89,21 +120,8 @@ public class DOMMountPointServiceImpl implements DOMMountPointService { return delegate.registerProvisionListener(listener); } - /** - * Deprecated. - - * @deprecated this method should never have been exposed publicly - registration should be done via the - * public {@link #createMountPoint} interface. As such, this method expects the {@code mountPoint} param - * to be of type {@link SimpleDOMMountPoint}. - */ - @Deprecated - public ObjectRegistration registerMountPoint(final DOMMountPoint mountPoint) { - Preconditions.checkArgument(mountPoint instanceof SimpleDOMMountPoint, "Expected SimpleDOMMountPoint"); - return doRegisterMountPoint((SimpleDOMMountPoint) mountPoint); - } - @SuppressWarnings("unchecked") - ObjectRegistration doRegisterMountPoint(final SimpleDOMMountPoint mountPoint) { + ObjectRegistration registerMountPoint(final SimpleDOMMountPoint mountPoint) { final org.opendaylight.mdsal.dom.api.DOMMountPointService.DOMMountPointBuilder delegateBuilder = delegate.createMountPoint(mountPoint.getIdentifier()); @@ -111,28 +129,29 @@ public class DOMMountPointServiceImpl implements DOMMountPointService { delegateBuilder.addInitialSchemaContext(mountPoint.getSchemaContext()); } - mountPoint.getAllServices().forEach( - entry -> delegateBuilder.addService((Class)entry.getKey(), entry.getValue())); + final ClassToInstanceMap myServices = mountPoint.getServices(); + for (Entry, DOMService> entry : myServices.entrySet()) { + delegateBuilder.addService((Class)entry.getKey(), entry.getValue()); - final ObjectRegistration delegateReg = delegateBuilder.register(); - return new ObjectRegistration() { - @Override - public void close() { - delegateReg.close(); + final CompatFactory compat = KNOWN_SERVICES.get(entry.getKey()); + if (compat != null) { + compat.addService(delegateBuilder, myServices); } + } + final ObjectRegistration delegateReg = delegateBuilder.register(); + return new AbstractObjectRegistration(mountPoint) { @Override - public DOMMountPoint getInstance() { - return mountPoint; + protected void removeRegistration() { + delegateReg.close(); } }; } public class DOMMountPointBuilderImpl implements DOMMountPointBuilder { - - ClassToInstanceMap services = MutableClassToInstanceMap.create(); - private SimpleDOMMountPoint mountPoint; + private final ClassToInstanceMap services = MutableClassToInstanceMap.create(); private final YangInstanceIdentifier path; + private SimpleDOMMountPoint mountPoint; private SchemaContext schemaContext; public DOMMountPointBuilderImpl(final YangInstanceIdentifier path) { @@ -155,7 +174,7 @@ public class DOMMountPointServiceImpl implements DOMMountPointService { public ObjectRegistration register() { Preconditions.checkState(mountPoint == null, "Mount point is already built."); mountPoint = SimpleDOMMountPoint.create(path, services, schemaContext); - return doRegisterMountPoint(mountPoint); + return registerMountPoint(mountPoint); } } }