Add datasource structure support for DynamoDB (#2919)

This commit is contained in:
Shrikant Sharat Kandula 2021-02-10 13:28:35 +05:30 committed by GitHub
parent 8c72e901ee
commit ed1c926c8a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 2 deletions

View File

@ -8,6 +8,7 @@ import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DatasourceStructure {
List<Table> tables;

View File

@ -6,6 +6,7 @@ import com.appsmith.external.models.ActionConfiguration;
import com.appsmith.external.models.ActionExecutionResult;
import com.appsmith.external.models.DBAuth;
import com.appsmith.external.models.DatasourceConfiguration;
import com.appsmith.external.models.DatasourceStructure;
import com.appsmith.external.models.DatasourceTestResult;
import com.appsmith.external.models.Endpoint;
import com.appsmith.external.plugins.BasePlugin;
@ -29,6 +30,7 @@ import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.DynamoDbClientBuilder;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbResponse;
import software.amazon.awssdk.services.dynamodb.model.ListTablesResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
@ -38,6 +40,7 @@ import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@ -202,6 +205,28 @@ public class DynamoPlugin extends BasePlugin {
)
.subscribeOn(scheduler);
}
@Override
public Mono<DatasourceStructure> getStructure(DynamoDbClient ddb, DatasourceConfiguration datasourceConfiguration) {
return Mono.fromCallable(() -> {
final ListTablesResponse listTablesResponse = ddb.listTables();
List<DatasourceStructure.Table> tables = new ArrayList<>();
for (final String tableName : listTablesResponse.tableNames()) {
tables.add(new DatasourceStructure.Table(
DatasourceStructure.TableType.TABLE,
tableName,
Collections.emptyList(),
Collections.emptyList(),
Collections.emptyList()
));
}
return new DatasourceStructure(tables);
}).subscribeOn(scheduler);
}
}
private static String toLowerCamelCase(String action) {

View File

@ -4,6 +4,7 @@ import com.appsmith.external.models.ActionConfiguration;
import com.appsmith.external.models.ActionExecutionResult;
import com.appsmith.external.models.DBAuth;
import com.appsmith.external.models.DatasourceConfiguration;
import com.appsmith.external.models.DatasourceStructure;
import com.appsmith.external.models.Endpoint;
import lombok.extern.log4j.Log4j;
import org.junit.BeforeClass;
@ -29,6 +30,7 @@ import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
@ -91,8 +93,6 @@ public class DynamoPluginTest {
))
.build());
System.out.println(ddb.listTables());
Endpoint endpoint = new Endpoint();
endpoint.setHost(host);
endpoint.setPort(port.longValue());
@ -238,4 +238,24 @@ public class DynamoPluginTest {
.verifyComplete();
}
@Test
public void testStructure() {
final Mono<DatasourceStructure> structureMono = pluginExecutor
.datasourceCreate(dsConfig)
.flatMap(conn -> pluginExecutor.getStructure(conn, dsConfig));
StepVerifier.create(structureMono)
.assertNext(structure -> {
assertNotNull(structure);
assertNotNull(structure.getTables());
assertEquals(
List.of("cities"),
structure.getTables().stream()
.map(DatasourceStructure.Table::getName)
.collect(Collectors.toList())
);
})
.verifyComplete();
}
}