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 io.systemd.network; 012 013import static de.dentrassi.varlink.spi.Errors.check; 014import static java.util.Arrays.asList; 015 016import java.util.List; 017import java.util.concurrent.CompletableFuture; 018 019import de.dentrassi.varlink.internal.VarlinkImpl; 020import de.dentrassi.varlink.spi.CallRequest; 021import de.dentrassi.varlink.spi.Connection; 022 023public class NetworkImpl implements Network { 024 025 public static class Factory implements de.dentrassi.varlink.spi.Factory { 026 027 @Override 028 public <T> T create(final VarlinkImpl varlink, final Class<T> clazz, final Connection connection) { 029 return clazz.cast(new NetworkImpl(varlink, connection)); 030 } 031 032 } 033 034 private final Connection connection; 035 private final VarlinkImpl varlink; 036 037 private NetworkImpl(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<List<Netdev>> list() { 048 return executeList(); 049 } 050 }; 051 } 052 053 protected CompletableFuture<List<Netdev>> executeList() { 054 return this.connection.call(CallRequest.of("io.systemd.network.List")) 055 .thenApply(cr -> { 056 check(cr); 057 058 return asList( 059 this.varlink 060 .fromJson( 061 Netdev[].class, 062 cr.getFirstParameter())); 063 }); 064 } 065 066}