001/******************************************************************************* 002 * Copyright (c) 2017, 2018 Red Hat Inc 003 * All rights reserved. This program and the accompanying materials 004 * are made available under the terms of the Eclipse Public License v1.0 005 * which accompanies this distribution, and is available at 006 * http://www.eclipse.org/legal/epl-v10.html 007 * 008 * Contributors: 009 * Jens Reimann - initial API and implementation 010 *******************************************************************************/ 011package org.varlink; 012 013import static de.dentrassi.varlink.spi.CallRequest.of; 014import static de.dentrassi.varlink.spi.Errors.check; 015import static java.util.Collections.singletonMap; 016 017import java.util.concurrent.CompletableFuture; 018 019import de.dentrassi.varlink.internal.VarlinkImpl; 020import de.dentrassi.varlink.spi.Connection; 021 022public class ResolverImpl implements Resolver { 023 024 public static class Factory implements de.dentrassi.varlink.spi.Factory { 025 026 @Override 027 public <T> T create(final VarlinkImpl varlink, final Class<T> clazz, final Connection connection) { 028 return clazz.cast(new ResolverImpl(varlink, connection)); 029 } 030 031 } 032 033 private final VarlinkImpl varlink; 034 035 private final Connection connection; 036 037 private ResolverImpl(final VarlinkImpl varlink, final Connection connection) { 038 this.varlink = varlink; 039 this.connection = connection; 040 } 041 042 @Override 043 public Async async() { 044 return new Async() { 045 046 @Override 047 public CompletableFuture<String> resolve(final String _interface) { 048 return executeResolve(_interface); 049 } 050 }; 051 } 052 053 protected CompletableFuture<String> executeResolve(final String _interface) { 054 return this.connection 055 .call( 056 of( 057 "org.varlink.resolver.Resolve", 058 singletonMap("interface", _interface))) 059 060 .thenApply(result -> { 061 062 check(result); 063 064 return this.varlink.fromJson(String.class, result.getFirstParameter()); 065 }); 066 } 067 068}