Bug 5421 - Single cluster-wide service API
[mdsal.git] / singleton-service / mdsal-singleton-common-api / src / main / java / org / opendaylight / mdsal / singleton / common / api / ClusterSingletonServiceRegistrationDelegator.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.mdsal.singleton.common.api;
10
11 import com.google.common.base.Preconditions;
12 import com.google.common.util.concurrent.ListenableFuture;
13
14 /**
15  * Package protected help class represent a Delegator for {@link ClusterSingletonService}
16  * instance and {@link ClusterSingletonServiceRegistration} implementation.
17  * Close registration means remove {@link ClusterSingletonService} instance from internal
18  * ClusterSingletonServiceGroup list reference.
19  *
20  * Close {@link ClusterSingletonServiceRegistration} is prepared for a possible restart
21  * service or application in osgi container. Any another servicies from group can not be
22  * stoped.
23  */
24 class ClusterSingletonServiceRegistrationDelegator
25         implements ClusterSingletonServiceRegistration, ClusterSingletonService {
26
27     private final ClusterSingletonService service;
28     private final ClusterSingletonServiceGroup<?, ?, ?> group;
29
30     ClusterSingletonServiceRegistrationDelegator(final ClusterSingletonService service,
31             final ClusterSingletonServiceGroup<?, ?, ?> group) {
32         this.service = Preconditions.checkNotNull(service);
33         this.group = Preconditions.checkNotNull(group);
34     }
35
36     @Override
37     public void close() throws Exception {
38         group.unregisterService(this);
39     }
40
41     @Override
42     public void instantiateServiceInstance() {
43         service.instantiateServiceInstance();
44     }
45
46     @Override
47     public ListenableFuture<Void> closeServiceInstance() {
48         return service.closeServiceInstance();
49     }
50
51     @Override
52     public ServiceGroupIdentifier getIdentifier() {
53         return service.getIdentifier();
54     }
55
56     public String getServiceGroupIdentifier() {
57         return service.getIdentifier().getValue();
58     }
59 }