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=41650666cd80c022931a7877b2d9fd9bbbd6a708;hp=cdb78fc5921bc7e23132de35455d8960da93a8b9;hb=0eb621d29daaf08979c356e2148e99c48458e169;hpb=bc6fe782ce2868db0121defeebe7f006429c1203 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..41650666cd 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 @@ -8,9 +8,12 @@ package org.opendaylight.controller.md.sal.dom.broker.impl.mount; +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 java.util.HashMap; import java.util.Map; - 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; @@ -19,63 +22,72 @@ import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener; 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 Map mountPoints = new HashMap<>(); private final ListenerRegistry listeners = ListenerRegistry.create(); @Override - public Optional getMountPoint(final InstanceIdentifier path) { - return Optional.fromNullable(mountPoints.get(path)); + public Optional getMountPoint(final YangInstanceIdentifier path) { + return Optional.fromNullable(mountPoints.get(path)); } @Override - public DOMMountPointBuilder createMountPoint(final InstanceIdentifier path) { + public DOMMountPointBuilder createMountPoint(final YangInstanceIdentifier path) { Preconditions.checkState(!mountPoints.containsKey(path), "Mount point already exists"); return new DOMMountPointBuilderImpl(path); } - public void notifyMountCreated(final InstanceIdentifier identifier) { + public void notifyMountCreated(final YangInstanceIdentifier identifier) { for (final ListenerRegistration listener : listeners .getListeners()) { listener.getInstance().onMountPointCreated(identifier); } } + public void notifyMountRemoved(final YangInstanceIdentifier identifier) { + for (final ListenerRegistration listener : listeners + .getListeners()) { + listener.getInstance().onMountPointRemoved(identifier); + } + } + @Override public ListenerRegistration registerProvisionListener( final MountProvisionListener listener) { return listeners.register(listener); } - public ObjectRegistration registerMountPoint(final SimpleDOMMountPoint mountPoint) { + public ObjectRegistration registerMountPoint(final DOMMountPoint mountPoint) { synchronized (mountPoints) { Preconditions.checkState(!mountPoints.containsKey(mountPoint.getIdentifier()), "Mount point already exists"); mountPoints.put(mountPoint.getIdentifier(), mountPoint); } notifyMountCreated(mountPoint.getIdentifier()); - // FIXME this shouldnt be null - return null; + return new MountRegistration(mountPoint); + } + + public void unregisterMountPoint(final YangInstanceIdentifier mountPointId) { + synchronized (mountPoints) { + Preconditions.checkState(mountPoints.containsKey(mountPointId), "Mount point does not exist"); + mountPoints.remove(mountPointId); + } + notifyMountRemoved(mountPointId); } 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; } @@ -98,4 +110,22 @@ public class DOMMountPointServiceImpl implements DOMMountPointService { return registerMountPoint(mountPoint); } } + + private final class MountRegistration implements ObjectRegistration { + private final DOMMountPoint mountPoint; + + public MountRegistration(final DOMMountPoint mountPoint) { + this.mountPoint = mountPoint; + } + + @Override + public DOMMountPoint getInstance() { + return mountPoint; + } + + @Override + public void close() throws Exception { + unregisterMountPoint(mountPoint.getIdentifier()); + } + } }