/* * Copyright (c) 2015 Cisco 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.cluster.schema.provider.impl; import com.google.common.annotations.Beta; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import java.io.IOException; import java.util.Set; import org.opendaylight.controller.cluster.schema.provider.RemoteYangTextSourceProvider; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.Future; import scala.concurrent.Promise; /** * Remote schema provider implementation backed by local schema provider. */ @Beta public class RemoteYangTextSourceProviderImpl implements RemoteYangTextSourceProvider { private static final Logger LOG = LoggerFactory.getLogger(RemoteYangTextSourceProviderImpl.class); private final SchemaRepository repository; private final Set providedSources; public RemoteYangTextSourceProviderImpl(SchemaRepository repository, Set providedSources) { this.repository = repository; this.providedSources = providedSources; } @Override public Future> getProvidedSources() { return akka.dispatch.Futures.successful(providedSources); } @Override public Future getYangTextSchemaSource(SourceIdentifier identifier) { LOG.trace("Sending yang schema source for {}", identifier); final Promise promise = akka.dispatch.Futures.promise(); CheckedFuture future = repository.getSchemaSource(identifier, YangTextSchemaSource.class); Futures.addCallback(future, new FutureCallback() { @Override public void onSuccess(YangTextSchemaSource result) { try { promise.success(new YangTextSchemaSourceSerializationProxy(result)); } catch (IOException e) { LOG.warn("Unable to read schema source for {}", result.getIdentifier(), e); promise.failure(e); } } @Override public void onFailure(Throwable t) { LOG.warn("Unable to retrieve schema source from provider", t); promise.failure(t); } }); return promise.future(); } }