/* * Copyright (c) 2016 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.controller.blueprint.ext; import org.osgi.service.blueprint.container.ComponentDefinitionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Factory metadata corresponding to the "static-reference" element that obtains an OSGi service and * returns the actual instance. This differs from the standard "reference" element that returns a dynamic * proxy whose underlying service instance can come and go. * * @author Thomas Pantelis */ class StaticReferenceMetadata extends AbstractDependentComponentFactoryMetadata { private static final Logger LOG = LoggerFactory.getLogger(StaticReferenceMetadata.class); private final String interfaceName; private volatile Object retrievedService; StaticReferenceMetadata(String id, String interfaceName) { super(id); this.interfaceName = interfaceName; } @Override protected void startTracking() { retrieveService(interfaceName, interfaceName, service -> { retrievedService = service; setSatisfied(); }); } @Override public Object create() throws ComponentDefinitionException { super.onCreate(); LOG.debug("{}: create returning service {}", logName(), retrievedService); return retrievedService; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("StaticReferenceMetadata [interfaceName=").append(interfaceName).append("]"); return builder.toString(); } }