Configurable update-strategy for clusteredAppConfig
[controller.git] / opendaylight / blueprint / src / main / java / org / opendaylight / controller / blueprint / ext / StaticReferenceMetadata.java
1 /*
2  * Copyright (c) 2016 Brocade Communications 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 package org.opendaylight.controller.blueprint.ext;
9
10 import org.osgi.service.blueprint.container.ComponentDefinitionException;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13
14 /**
15  * Factory metadata corresponding to the "static-reference" element that obtains an OSGi service and
16  * returns the actual instance. This differs from the standard "reference" element that returns a dynamic
17  * proxy whose underlying service instance can come and go.
18  *
19  * @author Thomas Pantelis
20  */
21 class StaticReferenceMetadata extends AbstractDependentComponentFactoryMetadata {
22     private static final Logger LOG = LoggerFactory.getLogger(StaticReferenceMetadata.class);
23
24     private final String interfaceName;
25     private volatile Object retrievedService;
26
27     StaticReferenceMetadata(String id, String interfaceName) {
28         super(id);
29         this.interfaceName = interfaceName;
30     }
31
32     @Override
33     protected void startTracking() {
34         retrieveService(interfaceName, interfaceName, service -> {
35             retrievedService = service;
36             setSatisfied();
37         });
38     }
39
40     @Override
41     public Object create() throws ComponentDefinitionException {
42         super.onCreate();
43
44         LOG.debug("{}: create returning service {}", logName(), retrievedService);
45
46         return retrievedService;
47     }
48
49     @Override
50     public String toString() {
51         StringBuilder builder = new StringBuilder();
52         builder.append("StaticReferenceMetadata [interfaceName=").append(interfaceName).append("]");
53         return builder.toString();
54     }
55 }