X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?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=ce18d54261390e2c589ac574b4015f2787e46edd;hb=be7e59c8bd5d66a7643dc4dcfb05f4cd94925cba;hp=cdb78fc5921bc7e23132de35455d8960da93a8b9;hpb=6a54d6fba6751ed97533fab8d95bac108a30c20d;p=controller.git 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 cdb78fc592..ce18d54261 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 @@ -3,79 +3,140 @@ * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html. + * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.md.sal.dom.broker.impl.mount; -import java.util.HashMap; -import java.util.Map; - +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.MutableClassToInstanceMap; 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.DOMService; import org.opendaylight.controller.md.sal.dom.broker.spi.mount.SimpleDOMMountPoint; -import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener; +import org.opendaylight.mdsal.dom.api.DOMMountPointListener; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.ObjectRegistration; -import org.opendaylight.yangtools.concepts.util.ListenerRegistry; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.collect.ClassToInstanceMap; -import com.google.common.collect.MutableClassToInstanceMap; - public class DOMMountPointServiceImpl implements DOMMountPointService { - private final Map mountPoints = new HashMap<>(); + private final org.opendaylight.mdsal.dom.api.DOMMountPointService delegate; - private final ListenerRegistry listeners = ListenerRegistry.create(); + @VisibleForTesting + public DOMMountPointServiceImpl() { + this(new org.opendaylight.mdsal.dom.broker.DOMMountPointServiceImpl()); + } + + public DOMMountPointServiceImpl(final org.opendaylight.mdsal.dom.api.DOMMountPointService delegate) { + this.delegate = delegate; + } @Override - public Optional getMountPoint(final InstanceIdentifier path) { - return Optional.fromNullable(mountPoints.get(path)); + public Optional getMountPoint(final YangInstanceIdentifier path) { + final Optional delegateMountPoint = delegate.getMountPoint(path); + return delegateMountPoint.isPresent() ? Optional.of(convert(delegateMountPoint.get())) : Optional.absent(); + } + + private static DOMMountPoint convert(final org.opendaylight.mdsal.dom.api.DOMMountPoint from) { + return new DOMMountPoint() { + @Override + public YangInstanceIdentifier getIdentifier() { + return from.getIdentifier(); + } + + @Override + public Optional getService(final Class cls) { + return from.getService(cls); + } + + @Override + public SchemaContext getSchemaContext() { + return from.getSchemaContext(); + } + + @Override + public int hashCode() { + return from.getIdentifier().hashCode(); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + + if (!(obj instanceof DOMMountPoint)) { + return false; + } + + DOMMountPoint other = (DOMMountPoint) obj; + return from.getIdentifier().equals(other.getIdentifier()); + } + }; } @Override - public DOMMountPointBuilder createMountPoint(final InstanceIdentifier path) { - Preconditions.checkState(!mountPoints.containsKey(path), "Mount point already exists"); + public DOMMountPointBuilder createMountPoint(final YangInstanceIdentifier path) { return new DOMMountPointBuilderImpl(path); } - public void notifyMountCreated(final InstanceIdentifier identifier) { - for (final ListenerRegistration listener : listeners - .getListeners()) { - listener.getInstance().onMountPointCreated(identifier); - } + @Override + public ListenerRegistration registerProvisionListener(final DOMMountPointListener listener) { + return delegate.registerProvisionListener(listener); } - @Override - public ListenerRegistration registerProvisionListener( - final MountProvisionListener listener) { - return listeners.register(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); } - public ObjectRegistration registerMountPoint(final SimpleDOMMountPoint mountPoint) { - synchronized (mountPoints) { - Preconditions.checkState(!mountPoints.containsKey(mountPoint.getIdentifier()), "Mount point already exists"); - mountPoints.put(mountPoint.getIdentifier(), mountPoint); + @SuppressWarnings("unchecked") + ObjectRegistration doRegisterMountPoint(final SimpleDOMMountPoint mountPoint) { + final org.opendaylight.mdsal.dom.api.DOMMountPointService.DOMMountPointBuilder delegateBuilder = + delegate.createMountPoint(mountPoint.getIdentifier()); + + if (mountPoint.getSchemaContext() != null) { + delegateBuilder.addInitialSchemaContext(mountPoint.getSchemaContext()); } - notifyMountCreated(mountPoint.getIdentifier()); - // FIXME this shouldnt be null - return null; + mountPoint.getAllServices().forEach( + entry -> delegateBuilder.addService((Class)entry.getKey(), entry.getValue())); + + final ObjectRegistration delegateReg = delegateBuilder.register(); + return new ObjectRegistration() { + @Override + public void close() { + delegateReg.close(); + } + + @Override + public DOMMountPoint getInstance() { + return mountPoint; + } + }; } public class DOMMountPointBuilderImpl implements DOMMountPointBuilder { ClassToInstanceMap services = MutableClassToInstanceMap.create(); private SimpleDOMMountPoint mountPoint; - private final InstanceIdentifier path; + private final YangInstanceIdentifier path; private SchemaContext schemaContext; - public DOMMountPointBuilderImpl(final InstanceIdentifier path) { + public DOMMountPointBuilderImpl(final YangInstanceIdentifier path) { this.path = path; } @@ -94,8 +155,8 @@ public class DOMMountPointServiceImpl implements DOMMountPointService { @Override public ObjectRegistration register() { Preconditions.checkState(mountPoint == null, "Mount point is already built."); - mountPoint = SimpleDOMMountPoint.create(path, services,schemaContext); - return registerMountPoint(mountPoint); + mountPoint = SimpleDOMMountPoint.create(path, services, schemaContext); + return doRegisterMountPoint(mountPoint); } } }