Remove GenericEntityOwnershipListenerRegistration 39/109239/2
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 8 Dec 2023 22:56:25 +0000 (23:56 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 8 Dec 2023 23:00:44 +0000 (00:00 +0100)
This registration brings absolutely nothing to the table aside from
capturing the entity type -- which is only used in one implementation
as a detail.

Use a simple Registration instead, which ends up simplifying things
quite significantly, to the point of eliminating mdsal-eos-common-spi.

JIRA: MDSAL-843
Change-Id: I5decd9b39ec7da7d11f904842d4849f09c7a7d46
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
21 files changed:
artifacts/pom.xml
docs/pom.xml
entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingEntityOwnershipListenerRegistration.java [deleted file]
entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipService.java
entityownership/mdsal-eos-binding-adapter/src/test/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DefaultEntityOwnershipServiceTest.java
entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipListenerRegistration.java [deleted file]
entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipService.java
entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipListenerRegistration.java [deleted file]
entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipService.java
entityownership/mdsal-eos-common-spi/pom.xml [deleted file]
entityownership/mdsal-eos-common-spi/src/main/java/module-info.java [deleted file]
entityownership/mdsal-eos-common-spi/src/main/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistration.java [deleted file]
entityownership/mdsal-eos-common-spi/src/test/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistrationTest.java [deleted file]
entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipListenerRegistration.java [deleted file]
entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipService.java
entityownership/mdsal-eos-dom-simple/src/main/java/org/opendaylight/mdsal/eos/dom/simple/SimpleDOMEntityOwnershipService.java
entityownership/pom.xml
features/odl-mdsal-eos-common/pom.xml
singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractClusterSingletonServiceProviderImpl.java
singleton-service/mdsal-singleton-dom-impl/src/main/java/org/opendaylight/mdsal/singleton/dom/impl/DOMClusterSingletonServiceProviderImpl.java
singleton-service/mdsal-singleton-dom-impl/src/test/java/org/opendaylight/mdsal/singleton/dom/impl/AbstractDOMClusterServiceProviderTest.java

index 577218f83640de8f16ea9323ee67da4ffdd88283..2efbc72a549b3e8cd4049325d3392101f42551a4 100644 (file)
                 <artifactId>mdsal-eos-common-api</artifactId>
                 <version>13.0.0-SNAPSHOT</version>
             </dependency>
-            <dependency>
-                <groupId>org.opendaylight.mdsal</groupId>
-                <artifactId>mdsal-eos-common-spi</artifactId>
-                <version>13.0.0-SNAPSHOT</version>
-            </dependency>
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-eos-dom-api</artifactId>
index 1a5bee8af4ca71f85531651223fc3c96a595e09b..23c31eafe62baa9c513af1f12eb5bfa83089f010 100644 (file)
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>mdsal-eos-common-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-eos-common-spi</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>mdsal-eos-dom-api</artifactId>
diff --git a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingEntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingEntityOwnershipListenerRegistration.java
deleted file mode 100644 (file)
index 7e09cac..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2015 Brocade Communications Systems, Inc. and others.  All rights reserved.
- *
- * 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
- */
-package org.opendaylight.mdsal.eos.binding.dom.adapter;
-
-import static java.util.Objects.requireNonNull;
-
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
-import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
-
-/**
- * Implementation of EntityOwnershipListenerRegistration whose instances are returned from the
- * {@link DefaultEntityOwnershipService}.
- *
- * @author Thomas Pantelis
- */
-class BindingEntityOwnershipListenerRegistration extends AbstractObjectRegistration<EntityOwnershipListener>
-        implements EntityOwnershipListenerRegistration {
-    private final String entityType;
-    private final DOMEntityOwnershipListenerRegistration domRegistration;
-
-    BindingEntityOwnershipListenerRegistration(String entityType, EntityOwnershipListener listener,
-            DOMEntityOwnershipListenerRegistration domRegistration) {
-        super(listener);
-        this.entityType = requireNonNull(entityType);
-        this.domRegistration = requireNonNull(domRegistration);
-    }
-
-    @Override
-    public String getEntityType() {
-        return entityType;
-    }
-
-    @Override
-    protected void removeRegistration() {
-        domRegistration.close();
-    }
-}
\ No newline at end of file
index 2a17f21b6e5f3232dc9d3c2ce7f78fd76ea26e87..606d800b3b379260fd8912cb983b9ea60945959a 100644 (file)
@@ -16,7 +16,6 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
@@ -52,10 +51,8 @@ public final class DefaultEntityOwnershipService implements EntityOwnershipServi
     }
 
     @Override
-    public EntityOwnershipListenerRegistration registerListener(final String entityType,
-            final EntityOwnershipListener listener) {
-        return new BindingEntityOwnershipListenerRegistration(entityType, listener,
-            domService.registerListener(entityType, new DOMEntityOwnershipListenerAdapter(listener, adapterContext)));
+    public Registration registerListener(final String entityType, final EntityOwnershipListener listener) {
+        return domService.registerListener(entityType, new DOMEntityOwnershipListenerAdapter(listener, adapterContext));
     }
 
     @Override
index 4c07869c78afb144373218deadfed663a183b8a3..2fe5ffe38f93b70f63e1d9b8435d2d07010bef15 100644 (file)
@@ -30,14 +30,12 @@ import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipChange;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
-import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
-import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
 import org.opendaylight.yangtools.concepts.Registration;
 
@@ -65,9 +63,7 @@ public class DefaultEntityOwnershipServiceTest {
                 BINDING_ENTITY.getIdentifier());
         doReturn(BINDING_ENTITY.getIdentifier()).when(mockCodecRegistry).fromYangInstanceIdentifier(
                 DOM_ENTITY.getIdentifier());
-
-        adapter = new DefaultEntityOwnershipService(mockDOMService,
-            new ConstantAdapterContext(mockCodecRegistry));
+        adapter = new DefaultEntityOwnershipService(mockDOMService, new ConstantAdapterContext(mockCodecRegistry));
     }
 
     @Test
@@ -83,35 +79,28 @@ public class DefaultEntityOwnershipServiceTest {
 
     @Test
     public void testRegisterListener() {
-        final DOMEntityOwnershipListenerRegistration mockDOMReg = mock(DOMEntityOwnershipListenerRegistration.class);
+        final var mockDOMReg = mock(Registration.class);
         doReturn(mockDOMReg).when(mockDOMService).registerListener(eq(DOM_ENTITY.getType()),
                 any(DOMEntityOwnershipListener.class));
-        final EntityOwnershipListener mockListener = mock(EntityOwnershipListener.class);
-
-        final EntityOwnershipListenerRegistration reg = adapter.registerListener(
-                BINDING_ENTITY.getType(), mockListener);
+        final var mockListener = mock(EntityOwnershipListener.class);
 
-        assertNotNull("registerListener returned null", reg);
-        assertEquals("getInstance", mockListener, reg.getInstance());
-        assertEquals("getEntityType", BINDING_ENTITY.getType(), reg.getEntityType());
+        try (var reg = adapter.registerListener(BINDING_ENTITY.getType(), mockListener)) {
+            assertNotNull("registerListener returned null", reg);
 
-        final ArgumentCaptor<DOMEntityOwnershipListener> domListenerCaptor = ArgumentCaptor.forClass(
-                DOMEntityOwnershipListener.class);
-        verify(mockDOMService).registerListener(eq(DOM_ENTITY.getType()),  domListenerCaptor.capture());
+            final var domListenerCaptor = ArgumentCaptor.forClass(DOMEntityOwnershipListener.class);
+            verify(mockDOMService).registerListener(eq(DOM_ENTITY.getType()),  domListenerCaptor.capture());
 
-        final DOMEntityOwnershipChange domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY,
+            final var domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY,
                 EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, true);
-        domListenerCaptor.getValue().ownershipChanged(domOwnershipChange);
+            domListenerCaptor.getValue().ownershipChanged(domOwnershipChange);
 
-        final ArgumentCaptor<EntityOwnershipChange> ownershipChangeCaptor = ArgumentCaptor.forClass(
-                EntityOwnershipChange.class);
-        verify(mockListener).ownershipChanged(ownershipChangeCaptor.capture());
+            final var ownershipChangeCaptor = ArgumentCaptor.forClass(EntityOwnershipChange.class);
+            verify(mockListener).ownershipChanged(ownershipChangeCaptor.capture());
 
-        final EntityOwnershipChange change = ownershipChangeCaptor.getValue();
-        assertEquals("getEntity", BINDING_ENTITY, change.getEntity());
-        assertEquals("getState", EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, change.getState());
-
-        reg.close();
+            final var change = ownershipChangeCaptor.getValue();
+            assertEquals("getEntity", BINDING_ENTITY, change.getEntity());
+            assertEquals("getState", EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, change.getState());
+        }
         verify(mockDOMReg).close();
     }
 
diff --git a/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-binding-api/src/main/java/org/opendaylight/mdsal/eos/binding/api/EntityOwnershipListenerRegistration.java
deleted file mode 100644 (file)
index 68c953e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2015 Brocade Communications Systems, Inc. and others.  All rights reserved.
- *
- * 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
- */
-package org.opendaylight.mdsal.eos.binding.api;
-
-import com.google.common.annotations.Beta;
-import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-/**
- * Binding interface for GenericEntityOwnershipCandidateRegistration.
- *
- * @author Thomas Pantelis
- */
-@Beta
-public interface EntityOwnershipListenerRegistration extends
-        GenericEntityOwnershipListenerRegistration<InstanceIdentifier<?>, EntityOwnershipListener> {
-}
index 557b04a1e10cfd614cdf7370e9845ad28240ed14..c7e36f4b1c19fc5121441500b754f83fbfafa91a 100644 (file)
@@ -28,7 +28,7 @@ public interface EntityOwnershipService extends
     Registration registerCandidate(Entity entity) throws CandidateAlreadyRegisteredException;
 
     @Override
-    EntityOwnershipListenerRegistration registerListener(String entityType, EntityOwnershipListener listener);
+    Registration registerListener(String entityType, EntityOwnershipListener listener);
 
     @Override
     Optional<EntityOwnershipState> getOwnershipState(Entity forEntity);
diff --git a/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-common-api/src/main/java/org/opendaylight/mdsal/eos/common/api/GenericEntityOwnershipListenerRegistration.java
deleted file mode 100644 (file)
index 8e1478d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2015 Brocade Communications Systems, Inc. and others.  All rights reserved.
- *
- * 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
- */
-package org.opendaylight.mdsal.eos.common.api;
-
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.HierarchicalIdentifier;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-
-/**
- * An interface that records a request to register a ownership status change listener for a given Entity.
- * Calling close on the registration will unregister listeners and future ownership changes will not
- * be delivered to the listener.
- *
- * @author Thomas Pantelis
- *
- * @param <P> the instance identifier path type
- */
-public interface GenericEntityOwnershipListenerRegistration<P extends HierarchicalIdentifier<P>,
-        L extends GenericEntityOwnershipListener<P, ?
-                extends GenericEntityOwnershipChange<P, ? extends GenericEntity<P>>>>
-                    extends ObjectRegistration<L> {
-
-    /**
-     * getEntityType method returns not null entity type.
-     *
-     * @return the entity type that the listener was registered for
-     */
-    @NonNull String getEntityType();
-
-    /**
-     * Unregister the listener.
-     */
-    @Override
-    void close();
-}
index d52ab1cbfa94535dbd47c66234ac30d79d78de03..69f640f845bd74863dabd1efbfb10e24bd9a65fb 100644 (file)
@@ -55,7 +55,7 @@ public interface GenericEntityOwnershipService<P extends HierarchicalIdentifier<
      * @param listener the listener that is interested in the entities
      * @return a registration object that can be used to unregister the Listener
      */
-    GenericEntityOwnershipListenerRegistration<P, L> registerListener(@NonNull String entityType, @NonNull L listener);
+    @NonNull Registration registerListener(@NonNull String entityType, @NonNull L listener);
 
     /**
      * Gets the current ownership state information for an entity.
diff --git a/entityownership/mdsal-eos-common-spi/pom.xml b/entityownership/mdsal-eos-common-spi/pom.xml
deleted file mode 100644 (file)
index b4f14eb..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
-
- 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
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.opendaylight.mdsal</groupId>
-        <artifactId>dom-parent</artifactId>
-        <version>13.0.0-SNAPSHOT</version>
-        <relativePath>../../dom/dom-parent</relativePath>
-    </parent>
-
-    <artifactId>mdsal-eos-common-spi</artifactId>
-    <packaging>bundle</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.eclipse.jdt</groupId>
-            <artifactId>org.eclipse.jdt.annotation</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-eos-common-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>concepts</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>mockito-configuration</artifactId>
-        </dependency>
-    </dependencies>
-    <scm>
-        <connection>scm:git:http://git.opendaylight.org/gerrit/mdsal.git</connection>
-        <developerConnection>scm:git:ssh://git.opendaylight.org:29418/mdsal.git</developerConnection>
-        <tag>HEAD</tag>
-        <url>https://wiki.opendaylight.org/view/MD-SAL:Main</url>
-    </scm>
-</project>
diff --git a/entityownership/mdsal-eos-common-spi/src/main/java/module-info.java b/entityownership/mdsal-eos-common-spi/src/main/java/module-info.java
deleted file mode 100644 (file)
index d6d3164..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
- *
- * 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
- */
-module org.opendaylight.mdsal.eos.common.spi {
-    exports org.opendaylight.mdsal.eos.common.spi;
-
-    requires transitive org.opendaylight.mdsal.eos.common.api;
-
-    // Annotations
-    requires static transitive org.eclipse.jdt.annotation;
-}
diff --git a/entityownership/mdsal-eos-common-spi/src/main/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-common-spi/src/main/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistration.java
deleted file mode 100644 (file)
index 9450bde..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * 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
- */
-package org.opendaylight.mdsal.eos.common.spi;
-
-import static java.util.Objects.requireNonNull;
-
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.eos.common.api.GenericEntity;
-import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipChange;
-import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListener;
-import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListenerRegistration;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
-import org.opendaylight.yangtools.concepts.HierarchicalIdentifier;
-
-/**
- * Abstract base class for an {@link GenericEntityOwnershipListenerRegistration}.
- *
- * @param <P> the instance identifier path type
- * @param <L> the GenericEntityOwnershipListener type
- */
-public abstract class AbstractGenericEntityOwnershipListenerRegistration<P extends HierarchicalIdentifier<P>,
-    L extends GenericEntityOwnershipListener<P, ? extends GenericEntityOwnershipChange<P, ? extends GenericEntity<P>>>>
-        extends AbstractObjectRegistration<L>
-        implements GenericEntityOwnershipListenerRegistration<P, L> {
-
-    private final @NonNull String entityType;
-
-    protected AbstractGenericEntityOwnershipListenerRegistration(@NonNull final L instance,
-            @NonNull final String entityType) {
-        super(instance);
-        this.entityType = requireNonNull(entityType, "entityType cannot be null");
-    }
-
-    @Override
-    public String getEntityType() {
-        return entityType;
-    }
-}
diff --git a/entityownership/mdsal-eos-common-spi/src/test/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistrationTest.java b/entityownership/mdsal-eos-common-spi/src/test/java/org/opendaylight/mdsal/eos/common/spi/AbstractGenericEntityOwnershipListenerRegistrationTest.java
deleted file mode 100644 (file)
index 721119d..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * 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
- */
-package org.opendaylight.mdsal.eos.common.spi;
-
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-
-import org.junit.Test;
-import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListener;
-
-public class AbstractGenericEntityOwnershipListenerRegistrationTest
-        extends AbstractGenericEntityOwnershipListenerRegistration {
-
-    @Test
-    public void basicTest() throws Exception {
-        assertTrue(this.getEntityType().contains("testEntity"));
-    }
-
-    public AbstractGenericEntityOwnershipListenerRegistrationTest() {
-        super(mock(GenericEntityOwnershipListener.class), "testEntity");
-    }
-
-    @Override
-    protected void removeRegistration() {
-        // NOOP
-    }
-}
\ No newline at end of file
diff --git a/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipListenerRegistration.java b/entityownership/mdsal-eos-dom-api/src/main/java/org/opendaylight/mdsal/eos/dom/api/DOMEntityOwnershipListenerRegistration.java
deleted file mode 100644 (file)
index 22b4b3d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2015 Brocade Communications Systems, Inc. and others.  All rights reserved.
- *
- * 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
- */
-package org.opendaylight.mdsal.eos.dom.api;
-
-import com.google.common.annotations.Beta;
-import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListenerRegistration;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-/**
- * DOM interface for GenericEntityOwnershipCandidateRegistration.
- *
- * @author Thomas Pantelis
- */
-@Beta
-public interface DOMEntityOwnershipListenerRegistration extends
-        GenericEntityOwnershipListenerRegistration<YangInstanceIdentifier, DOMEntityOwnershipListener> {
-}
index 1202a685fe6c4e4aa8bfb071cdb98ab8d5510b59..6038c8a09ae04dda39e4079972ad6d063e5d65ae 100644 (file)
@@ -27,8 +27,7 @@ public interface DOMEntityOwnershipService extends
     Registration registerCandidate(DOMEntity entity) throws CandidateAlreadyRegisteredException;
 
     @Override
-    DOMEntityOwnershipListenerRegistration registerListener(String entityType,
-            DOMEntityOwnershipListener listener);
+    Registration registerListener(String entityType, DOMEntityOwnershipListener listener);
 
     @Override
     Optional<EntityOwnershipState> getOwnershipState(DOMEntity forEntity);
index 64b9a985e50b56202810a9dd992f3b1235eb75dd..693d47753fdb80044d9a999c6ffde965973cd2a3 100644 (file)
@@ -29,10 +29,8 @@ import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
-import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
 import org.opendaylight.mdsal.eos.dom.simple.di.LocalDOMEntityOwnershipService;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
 import org.opendaylight.yangtools.concepts.AbstractRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -87,9 +85,7 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi
     }
 
     @Override
-    public DOMEntityOwnershipListenerRegistration registerListener(final String entityType,
-            final DOMEntityOwnershipListener listener) {
-
+    public Registration registerListener(final String entityType, final DOMEntityOwnershipListener listener) {
         final Collection<DOMEntity> owned;
         synchronized (entities) {
             owned = ImmutableList.copyOf(entities.row(entityType).values());
@@ -100,11 +96,19 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi
             listeners.put(entityType, listener);
         }
 
-        for (DOMEntity entity : owned) {
+        for (var entity : owned) {
             notifyListener(listener, new DOMEntityOwnershipChange(entity, LOCAL_OWNERSHIP_GRANTED));
         }
         LOG.debug("{}: registered listener {}", uuid, listener);
-        return new ListenerRegistration(entityType, listener);
+        return new AbstractRegistration() {
+            @Override
+            protected void removeRegistration() {
+                synchronized (listeners) {
+                    listeners.remove(entityType, listener);
+                    LOG.debug("{}: unregistered listener {}", uuid, listener);
+                }
+            }
+        };
     }
 
     @Override
@@ -139,7 +143,6 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi
     }
 
     private void notifyListeners(final DOMEntity entity, final EntityOwnershipChangeState state) {
-        final DOMEntityOwnershipChange change = new DOMEntityOwnershipChange(entity, state);
 
         final Collection<DOMEntityOwnershipListener> snap;
 
@@ -147,18 +150,12 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi
             snap = ImmutableList.copyOf(listeners.get(entity.getType()));
         }
 
-        for (DOMEntityOwnershipListener listener : snap) {
+        final var change = new DOMEntityOwnershipChange(entity, state);
+        for (var listener : snap) {
             notifyListener(listener, change);
         }
     }
 
-    void unregisterListener(final ListenerRegistration reg) {
-        synchronized (listeners) {
-            listeners.remove(reg.getEntityType(), reg.getInstance());
-            LOG.debug("{}: unregistered listener {}", uuid, reg.getInstance());
-        }
-    }
-
     @Override
     public String toString() {
         final var helper = MoreObjects.toStringHelper(SimpleDOMEntityOwnershipService.class).add("uuid", uuid);
@@ -170,24 +167,4 @@ public sealed class SimpleDOMEntityOwnershipService implements DOMEntityOwnershi
         }
         return helper.toString();
     }
-
-    private final class ListenerRegistration extends AbstractObjectRegistration<DOMEntityOwnershipListener>
-            implements DOMEntityOwnershipListenerRegistration {
-        private final String entityType;
-
-        ListenerRegistration(final String entityType, final DOMEntityOwnershipListener listener) {
-            super(listener);
-            this.entityType = requireNonNull(entityType);
-        }
-
-        @Override
-        public String getEntityType() {
-            return entityType;
-        }
-
-        @Override
-        protected void removeRegistration() {
-            unregisterListener(this);
-        }
-    }
 }
index 3e90dedabdc030e9065f26ea03bb89b375f5ce75..e593cc81288cfca0cc1f5f9fc26bd9c6600c928f 100644 (file)
@@ -24,7 +24,6 @@
 
     <modules>
         <module>mdsal-eos-common-api</module>
-        <module>mdsal-eos-common-spi</module>
         <module>mdsal-eos-dom-api</module>
         <module>mdsal-eos-dom-simple</module>
         <module>mdsal-eos-binding-api</module>
index 59c6523064d9ed4172414aee526068b5ceb751e5..b4b8847d566f61197e8343160d66b41f3be5066a 100644 (file)
@@ -31,9 +31,5 @@
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>mdsal-eos-common-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-eos-common-spi</artifactId>
-        </dependency>
     </dependencies>
 </project>
index e82a7eafce85d6047b63ad0500a4b2254080b106..abec8073bc248a248d448416f962f8c74266b2a4 100644 (file)
@@ -27,12 +27,12 @@ import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException
 import org.opendaylight.mdsal.eos.common.api.GenericEntity;
 import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipChange;
 import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListener;
-import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.common.api.GenericEntityOwnershipService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
 import org.opendaylight.yangtools.concepts.HierarchicalIdentifier;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,16 +47,13 @@ import org.slf4j.LoggerFactory;
  * @param <C> the GenericEntityOwnershipChange type
  * @param <G> the GenericEntityOwnershipListener type
  * @param <S> the GenericEntityOwnershipService type
- * @param <R> the GenericEntityOwnershipListenerRegistration type
  */
 public abstract class AbstractClusterSingletonServiceProviderImpl<P extends HierarchicalIdentifier<P>,
         E extends GenericEntity<P>,
         C extends GenericEntityOwnershipChange<P, E>,
         G extends GenericEntityOwnershipListener<P, C>,
-        S extends GenericEntityOwnershipService<P, E, G>,
-        R extends GenericEntityOwnershipListenerRegistration<P, G>>
+        S extends GenericEntityOwnershipService<P, E, G>>
         implements ClusterSingletonServiceProvider, GenericEntityOwnershipListener<P, C> {
-
     private static final Logger LOG = LoggerFactory.getLogger(AbstractClusterSingletonServiceProviderImpl.class);
 
     @VisibleForTesting
@@ -68,8 +65,8 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
     private final Map<String, ClusterSingletonServiceGroup<P, E, C>> serviceGroupMap = new ConcurrentHashMap<>();
 
     /* EOS Entity Listeners Registration */
-    private R serviceEntityListenerReg;
-    private R asyncCloseEntityListenerReg;
+    private Registration serviceEntityListenerReg;
+    private Registration asyncCloseEntityListenerReg;
 
     /**
      * Class constructor.
@@ -85,8 +82,8 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
      */
     public final void initializeProvider() {
         LOG.debug("Initialization method for ClusterSingletonService Provider {}", this);
-        this.serviceEntityListenerReg = registerListener(SERVICE_ENTITY_TYPE, entityOwnershipService);
-        this.asyncCloseEntityListenerReg = registerListener(CLOSE_SERVICE_ENTITY_TYPE, entityOwnershipService);
+        serviceEntityListenerReg = registerListener(SERVICE_ENTITY_TYPE, entityOwnershipService);
+        asyncCloseEntityListenerReg = registerListener(CLOSE_SERVICE_ENTITY_TYPE, entityOwnershipService);
     }
 
     @Override
@@ -99,7 +96,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
             "ClusterSingletonService identifier may not be null nor empty");
 
         final ClusterSingletonServiceGroup<P, E, C> serviceGroup;
-        ClusterSingletonServiceGroup<P, E, C> existing = serviceGroupMap.get(serviceIdentifier);
+        final var existing = serviceGroupMap.get(serviceIdentifier);
         if (existing == null) {
             serviceGroup = createGroup(serviceIdentifier, new ArrayList<>(1));
             serviceGroupMap.put(serviceIdentifier, serviceGroup);
@@ -113,7 +110,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
             serviceGroup = existing;
         }
 
-        final ClusterSingletonServiceRegistration reg =  new AbstractClusterSingletonServiceRegistration(service) {
+        final var reg =  new AbstractClusterSingletonServiceRegistration(service) {
             @Override
             protected void removeRegistration() {
                 // We need to bounce the unregistration through a ordered lock in order not to deal with asynchronous
@@ -129,8 +126,8 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
     private ClusterSingletonServiceGroup<P, E, C> createGroup(final String serviceIdentifier,
             final List<ClusterSingletonServiceRegistration> services) {
         return new ClusterSingletonServiceGroupImpl<>(serviceIdentifier, entityOwnershipService,
-                createEntity(SERVICE_ENTITY_TYPE, serviceIdentifier),
-                createEntity(CLOSE_SERVICE_ENTITY_TYPE, serviceIdentifier), services);
+            createEntity(SERVICE_ENTITY_TYPE, serviceIdentifier),
+            createEntity(CLOSE_SERVICE_ENTITY_TYPE, serviceIdentifier), services);
     }
 
     private void initializeOrRemoveGroup(final ClusterSingletonServiceGroup<P, E, C> group)
@@ -144,11 +141,10 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
     }
 
     void removeRegistration(final String serviceIdentifier, final ClusterSingletonServiceRegistration reg) {
-
         final PlaceholderGroup<P, E, C> placeHolder;
         final ListenableFuture<?> future;
         synchronized (this) {
-            final ClusterSingletonServiceGroup<P, E, C> lookup = verifyNotNull(serviceGroupMap.get(serviceIdentifier));
+            final var lookup = verifyNotNull(serviceGroupMap.get(serviceIdentifier));
             future = lookup.unregisterService(reg);
             if (future == null) {
                 return;
@@ -172,7 +168,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
         final String identifier = placeHolder.getIdentifier();
         LOG.debug("Service group {} closed", identifier);
 
-        final List<ClusterSingletonServiceRegistration> services = placeHolder.getServices();
+        final var services = placeHolder.getServices();
         if (services.isEmpty()) {
             // No services, we are all done
             if (serviceGroupMap.remove(identifier, placeHolder)) {
@@ -184,7 +180,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
         }
 
         // Placeholder is being retired, we are reusing its services as the seed for the group.
-        final ClusterSingletonServiceGroup<P, E, C> group = createGroup(identifier, services);
+        final var group = createGroup(identifier, services);
         verify(serviceGroupMap.replace(identifier, placeHolder, group));
         placeHolder.setSuccessor(group);
         LOG.debug("Service group upgraded from {} to {}", placeHolder, group);
@@ -205,17 +201,13 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
             serviceEntityListenerReg = null;
         }
 
-        final List<ListenableFuture<?>> listGroupCloseListFuture = new ArrayList<>();
-
-        for (final ClusterSingletonServiceGroup<P, E, C> serviceGroup : serviceGroupMap.values()) {
-            listGroupCloseListFuture.add(serviceGroup.closeClusterSingletonGroup());
-        }
-
-        final ListenableFuture<List<Object>> finalCloseFuture = Futures.allAsList(listGroupCloseListFuture);
-        Futures.addCallback(finalCloseFuture, new FutureCallback<List<?>>() {
-
+        final var futures = serviceGroupMap.values().stream()
+            .map(ClusterSingletonServiceGroup::closeClusterSingletonGroup)
+            .toList();
+        final var future = Futures.allAsList(futures);
+        Futures.addCallback(future, new FutureCallback<>() {
             @Override
-            public void onSuccess(final List<?> result) {
+            public void onSuccess(final List<Object> result) {
                 cleanup();
             }
 
@@ -232,7 +224,7 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
     public final void ownershipChanged(final C ownershipChange) {
         LOG.debug("Ownership change for ClusterSingletonService Provider {}", ownershipChange);
         final String serviceIdentifier = getServiceIdentifierFromEntity(ownershipChange.getEntity());
-        final ClusterSingletonServiceGroup<P, E, C> serviceHolder = serviceGroupMap.get(serviceIdentifier);
+        final var serviceHolder = serviceGroupMap.get(serviceIdentifier);
         if (serviceHolder != null) {
             serviceHolder.ownershipChanged(ownershipChange);
         } else {
@@ -241,14 +233,13 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Hier
     }
 
     /**
-     * Method implementation registers a defined {@link GenericEntityOwnershipListenerRegistration} type
-     * EntityOwnershipListenerRegistration.
+     * Method implementation registers the listener.
      *
      * @param entityType the type of the entity
      * @param entityOwnershipServiceInst - EOS type
-     * @return instance of EntityOwnershipListenerRegistration
+     * @return a {@link Registration}
      */
-    protected abstract R registerListener(String entityType, S entityOwnershipServiceInst);
+    protected abstract Registration registerListener(String entityType, S entityOwnershipServiceInst);
 
     /**
      * Creates an extended {@link GenericEntity} instance.
index 667db395580852fdf78bed392adc2d62918accea..cf9d8f9ce796baebdff92a32e1081d7056b0393e 100644 (file)
@@ -12,9 +12,9 @@ import org.kohsuke.MetaInfServices;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
-import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 
@@ -26,8 +26,7 @@ public class DOMClusterSingletonServiceProviderImpl extends
         AbstractClusterSingletonServiceProviderImpl<YangInstanceIdentifier, DOMEntity,
                                                     DOMEntityOwnershipChange,
                                                     DOMEntityOwnershipListener,
-                                                    DOMEntityOwnershipService,
-                                                    DOMEntityOwnershipListenerRegistration>
+                                                    DOMEntityOwnershipService>
         implements DOMEntityOwnershipListener {
 
     public DOMClusterSingletonServiceProviderImpl() {
@@ -45,8 +44,7 @@ public class DOMClusterSingletonServiceProviderImpl extends
     }
 
     @Override
-    protected DOMEntityOwnershipListenerRegistration registerListener(final String type,
-            final DOMEntityOwnershipService eos) {
+    protected Registration registerListener(final String type, final DOMEntityOwnershipService eos) {
         return eos.registerListener(type, this);
     }
 
index be56f7f41bb15fafde7cae7aed021fd987a59395..818f7e5f3d67548f343acf0267205754012aba63 100644 (file)
@@ -29,7 +29,6 @@ import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException
 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
-import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
@@ -95,9 +94,9 @@ public abstract class AbstractDOMClusterServiceProviderTest {
     @Mock
     public Registration mockDoubleEntityCandReg;
     @Mock
-    public DOMEntityOwnershipListenerRegistration mockEosEntityListReg;
+    public Registration mockEosEntityListReg;
     @Mock
-    public DOMEntityOwnershipListenerRegistration mockEosDoubleEntityListReg;
+    public Registration mockEosDoubleEntityListReg;
 
     public DOMClusterSingletonServiceProviderImpl clusterSingletonServiceProvider;
     public TestClusterSingletonService clusterSingletonService;