2 * Copyright (c) 2015 Brocade Communications Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.config.yang.config.distributed_entity_ownership_service;
11 import com.google.common.base.Optional;
12 import com.google.common.collect.ForwardingObject;
13 import org.opendaylight.controller.config.api.DependencyResolver;
14 import org.opendaylight.controller.config.api.ModuleIdentifier;
15 import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker;
16 import org.opendaylight.controller.md.sal.common.api.clustering.CandidateAlreadyRegisteredException;
17 import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
18 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipCandidateRegistration;
19 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListener;
20 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListenerRegistration;
21 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
22 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipState;
23 import org.osgi.framework.BundleContext;
25 public class DistributedEntityOwnershipServiceProviderModule extends AbstractDistributedEntityOwnershipServiceProviderModule {
26 private BundleContext bundleContext;
28 public DistributedEntityOwnershipServiceProviderModule(final ModuleIdentifier identifier,
29 final DependencyResolver dependencyResolver) {
30 super(identifier, dependencyResolver);
33 public DistributedEntityOwnershipServiceProviderModule(final ModuleIdentifier identifier,
34 final DependencyResolver dependencyResolver,
35 final DistributedEntityOwnershipServiceProviderModule oldModule, final AutoCloseable oldInstance) {
36 super(identifier, dependencyResolver, oldModule, oldInstance);
40 public void customValidation() {
44 public boolean canReuseInstance(final AbstractDistributedEntityOwnershipServiceProviderModule oldModule) {
49 public AutoCloseable createInstance() {
50 // The DistributedEntityOwnershipService is provided via blueprint so wait for and return it here for
51 // backwards compatibility.
52 WaitingServiceTracker<EntityOwnershipService> tracker = WaitingServiceTracker.create(
53 EntityOwnershipService.class, bundleContext);
54 EntityOwnershipService delegate = tracker.waitForService(WaitingServiceTracker.FIVE_MINUTES);
55 return new ForwardingEntityOwnershipService(delegate, tracker);
58 public void setBundleContext(final BundleContext bundleContext) {
59 this.bundleContext = bundleContext;
62 private static class ForwardingEntityOwnershipService extends ForwardingObject
63 implements EntityOwnershipService, AutoCloseable {
64 private final EntityOwnershipService delegate;
65 private final AutoCloseable closeable;
67 public ForwardingEntityOwnershipService(EntityOwnershipService delegate, AutoCloseable closeable) {
68 this.delegate = delegate;
69 this.closeable = closeable;
73 public EntityOwnershipCandidateRegistration registerCandidate(Entity entity)
74 throws CandidateAlreadyRegisteredException {
75 return delegate().registerCandidate(entity);
79 public EntityOwnershipListenerRegistration registerListener(String entityType,
80 EntityOwnershipListener listener) {
81 return delegate().registerListener(entityType, listener);
85 public Optional<EntityOwnershipState> getOwnershipState(Entity forEntity) {
86 return delegate().getOwnershipState(forEntity);
90 public boolean isCandidateRegistered(Entity entity) {
91 return delegate().isCandidateRegistered(entity);
95 protected EntityOwnershipService delegate() {
100 public void close() throws Exception {
101 // We don't close the delegate as the life-cycle is controlled via blueprint.