*/
package org.opendaylight.protocol.bgp.parser.spi;
-import java.util.List;
+import static com.google.common.base.Preconditions.checkState;
+import static java.util.Objects.requireNonNull;
+import java.util.List;
import javax.annotation.concurrent.GuardedBy;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Preconditions;
+import org.opendaylight.yangtools.concepts.Registration;
public abstract class AbstractBGPExtensionProviderActivator implements AutoCloseable, BGPExtensionProviderActivator {
- private static final Logger LOG = LoggerFactory.getLogger(AbstractBGPExtensionProviderActivator.class);
-
- @GuardedBy("this")
- private List<AutoCloseable> registrations;
-
- @GuardedBy("this")
- protected abstract List<AutoCloseable> startImpl(BGPExtensionProviderContext context);
-
- @Override
- public final synchronized void start(final BGPExtensionProviderContext context) {
- Preconditions.checkState(this.registrations == null);
-
- this.registrations = Preconditions.checkNotNull(startImpl(context));
- }
-
- @Override
- public final synchronized void stop() {
- Preconditions.checkState(this.registrations != null);
-
- for (final AutoCloseable r : this.registrations) {
- try {
- r.close();
- } catch (final Exception e) {
- LOG.warn("Failed to close registration", e);
- }
- }
-
- this.registrations = null;
- }
-
- @Override
- public final void close() {
- stop();
- }
+ @GuardedBy("this")
+ private List<? extends Registration> registrations;
+
+ @GuardedBy("this")
+ protected abstract List<? extends Registration> startImpl(BGPExtensionProviderContext context);
+
+ @Override
+ public final synchronized void start(final BGPExtensionProviderContext context) {
+ checkState(this.registrations == null);
+ this.registrations = requireNonNull(startImpl(context));
+ }
+
+ @Override
+ public final synchronized void stop() {
+ if (this.registrations == null) {
+ return;
+ }
+
+ this.registrations.forEach(Registration::close);
+ this.registrations = null;
+ }
+
+ @Override
+ public final void close() {
+ stop();
+ }
}