001package org.kernel.kmod; 002 003public class KmodImpl implements Kmod { 004 public static class Factory implements de.dentrassi.varlink.spi.Factory { 005 public @Override <T> T create(final de.dentrassi.varlink.internal.VarlinkImpl varlink, final Class<T> clazz, 006 final de.dentrassi.varlink.spi.Connection connection) { 007 return clazz.cast(new KmodImpl(connection, varlink)); 008 } 009 } 010 011 private final de.dentrassi.varlink.spi.Connection connection; 012 private final de.dentrassi.varlink.internal.VarlinkImpl varlink; 013 014 private KmodImpl(final de.dentrassi.varlink.spi.Connection connection, 015 final de.dentrassi.varlink.internal.VarlinkImpl varlink) { 016 this.connection = connection; 017 this.varlink = varlink; 018 } 019 020 public void checkError(final de.dentrassi.varlink.spi.CallResponse response) { 021 de.dentrassi.varlink.spi.Errors.checkErrors(response, this::mapError); 022 } 023 024 public java.lang.RuntimeException mapError(final java.lang.String error, 025 final de.dentrassi.varlink.spi.CallResponse response) { 026 switch (error) { 027 case "org.kernel.kmod.UnknownModuleException": 028 return new UnknownModuleException( 029 this.varlink.fromJson(UnknownModuleException.Parameters.class, response.getParameters())); 030 case "org.kernel.kmod.NoInfoAvailableException": 031 return new NoInfoAvailableException( 032 this.varlink.fromJson(NoInfoAvailableException.Parameters.class, response.getParameters())); 033 case "org.kernel.kmod.InvalidParameterException": 034 return new InvalidParameterException( 035 this.varlink.fromJson(InvalidParameterException.Parameters.class, response.getParameters())); 036 default: 037 return null; 038 } 039 } 040 041 @Override 042 public Async async() { 043 return new Async() { 044 public java.util.concurrent.CompletableFuture<ModuleInfo> info(final java.lang.String module) { 045 return internalInfo(module); 046 } 047 048 public java.util.concurrent.CompletableFuture<java.util.List<LoadedModule>> list() { 049 return internalList(); 050 } 051 }; 052 } 053 054 protected java.util.concurrent.CompletableFuture<ModuleInfo> internalInfo(final java.lang.String module) { 055 java.util.Map<java.lang.String, java.lang.Object> parameters = new java.util.HashMap<>(1); 056 return this.connection.call(de.dentrassi.varlink.spi.CallRequest.of("org.kernel.kmod.Info", parameters)) 057 .thenApply(result -> { 058 checkError(result); 059 return this.varlink.fromJson(info_returnTypeToken, result.getFirstParameter()); 060 }); 061 } 062 063 private final static java.lang.reflect.Type info_returnTypeToken = new com.google.gson.reflect.TypeToken<ModuleInfo>() { 064 }.getType(); 065 066 protected java.util.concurrent.CompletableFuture<java.util.List<LoadedModule>> internalList() { 067 return this.connection.call(de.dentrassi.varlink.spi.CallRequest.of("org.kernel.kmod.List")) 068 .thenApply(result -> { 069 checkError(result); 070 return this.varlink.fromJson(list_returnTypeToken, result.getFirstParameter()); 071 }); 072 } 073 074 private final static java.lang.reflect.Type list_returnTypeToken = new com.google.gson.reflect.TypeToken<java.util.List<LoadedModule>>() { 075 }.getType(); 076}