X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=dom%2Fmdsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fdom%2Fbroker%2FDOMMountPointServiceImpl.java;h=91e3d23202d13ca21c1e46e63f4dd726abce1e8f;hb=0d2bd50cec7c53962a6c8af68710f04cd773c3a9;hp=80d0c80ee34a53e1420714bce6b476188dbb5b57;hpb=11408d627adca7eb71ac956c3ad01f75b6b91596;p=mdsal.git diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java index 80d0c80ee3..91e3d23202 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java @@ -7,13 +7,13 @@ */ package org.opendaylight.mdsal.dom.broker; -import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; import com.google.common.collect.MutableClassToInstanceMap; import java.util.HashMap; import java.util.Map; import java.util.Optional; +import javax.inject.Inject; import javax.inject.Singleton; import org.kohsuke.MetaInfServices; import org.opendaylight.mdsal.dom.api.DOMMountPoint; @@ -22,25 +22,30 @@ import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.mdsal.dom.api.DOMService; import org.opendaylight.mdsal.dom.spi.SimpleDOMMountPoint; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; -import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.ObjectRegistration; -import org.opendaylight.yangtools.util.ListenerRegistry; +import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yangtools.util.ObjectRegistry; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.Deactivate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Component(immediate = true) +@Component @MetaInfServices @Singleton public final class DOMMountPointServiceImpl implements DOMMountPointService { private static final Logger LOG = LoggerFactory.getLogger(DOMMountPointServiceImpl.class); private final Map mountPoints = new HashMap<>(); + private final ObjectRegistry listeners = + ObjectRegistry.createConcurrent("mount point listeners"); - private final ListenerRegistry listeners = ListenerRegistry.create(); + @Inject + @Activate + public DOMMountPointServiceImpl() { + // Exposed only for DI + } @Override public Optional getMountPoint(final YangInstanceIdentifier path) { @@ -48,36 +53,23 @@ public final class DOMMountPointServiceImpl implements DOMMountPointService { } @Override - public DOMMountPointBuilder createMountPoint(final YangInstanceIdentifier path) { - checkState(!mountPoints.containsKey(path), "Mount point already exists"); + public synchronized DOMMountPointBuilder createMountPoint(final YangInstanceIdentifier path) { + checkNotExists(path, mountPoints.get(requireNonNull(path))); return new DOMMountPointBuilderImpl(path); } @Override - public ListenerRegistration registerProvisionListener(final DOMMountPointListener listener) { + public Registration registerProvisionListener(final DOMMountPointListener listener) { return listeners.register(listener); } - @Activate - @SuppressWarnings("static-method") - void activate() { - LOG.info("DOMMountPointService activated"); - } - - @Deactivate - @SuppressWarnings("static-method") - void deactivate() { - LOG.info("DOMMountPointService deactivated"); - } - @SuppressWarnings("checkstyle:IllegalCatch") private ObjectRegistration registerMountPoint(final SimpleDOMMountPoint mountPoint) { final YangInstanceIdentifier mountPointId = mountPoint.getIdentifier(); synchronized (mountPoints) { - final DOMMountPoint prev = mountPoints.putIfAbsent(mountPointId, mountPoint); - checkState(prev == null, "Mount point %s already exists as %s", mountPointId, prev); + checkNotExists(mountPointId, mountPoints.putIfAbsent(mountPointId, mountPoint)); } - listeners.streamListeners().forEach(listener -> { + listeners.streamObjects().forEach(listener -> { try { listener.onMountPointCreated(mountPointId); } catch (final Exception ex) { @@ -102,7 +94,7 @@ public final class DOMMountPointServiceImpl implements DOMMountPointService { } } - listeners.streamListeners().forEach(listener -> { + listeners.streamObjects().forEach(listener -> { try { listener.onMountPointRemoved(mountPointId); } catch (final Exception ex) { @@ -111,9 +103,14 @@ public final class DOMMountPointServiceImpl implements DOMMountPointService { }); } - private final class DOMMountPointBuilderImpl implements DOMMountPointBuilder { + private static void checkNotExists(final YangInstanceIdentifier id, final DOMMountPoint mountPoint) { + if (mountPoint != null) { + throw new IllegalStateException("Mount point " + id + " already exists as " + mountPoint); + } + } - private final MutableClassToInstanceMap services = MutableClassToInstanceMap.create(); + private final class DOMMountPointBuilderImpl implements DOMMountPointBuilder { + private final MutableClassToInstanceMap> services = MutableClassToInstanceMap.create(); private final YangInstanceIdentifier path; private SimpleDOMMountPoint mountPoint; @@ -123,14 +120,17 @@ public final class DOMMountPointServiceImpl implements DOMMountPointService { } @Override - public DOMMountPointBuilder addService(final Class type, final T impl) { - services.putInstance(requireNonNull(type), requireNonNull(impl)); + public , E extends DOMService.Extension> DOMMountPointBuilder addService( + final Class type, final T impl) { + services.putInstance(type, requireNonNull(impl)); return this; } @Override public ObjectRegistration register() { - checkState(mountPoint == null, "Mount point is already built."); + if (mountPoint != null) { + throw new IllegalStateException("Mount point is already built"); + } mountPoint = SimpleDOMMountPoint.create(path, services); return registerMountPoint(mountPoint); }