Skip to content

Commit 19092ee

Browse files
committed
update
1 parent f676993 commit 19092ee

File tree

98 files changed

+1261
-1017
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+1261
-1017
lines changed

astra-db-java/src/main/java/com/datastax/astra/client/DataAPIClient.java

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@
7070
*/
7171
public class DataAPIClient {
7272

73+
74+
7375
/**
7476
* The authentication token used as credentials in HTTP requests, specifically as the Authorization bearer token.
7577
* This token is crucial for accessing and interacting with Astra environments, where it plays a role in determining
@@ -234,56 +236,30 @@ public DataAPIClient(DataAPIClientOptions options) {
234236
* @throws SecurityException if the current token does not have the necessary administrative privileges.
235237
*/
236238
public AstraDBAdmin getAdmin() {
237-
return getAdmin(token, new AdminOptions(options));
239+
return getAdmin(new AdminOptions(token, options));
238240
}
239241

240-
/**
241-
* Retrieves an administration client capable of performing CRUD operations on databases, requiring a token with
242-
* advanced privileges. This method is designed for scenarios where administrative access is necessary beyond the
243-
* default token capabilities associated with the {@code DataAPIClient}.
244-
* <p>
245-
* The provided {@code superUserToken} should be granted sufficient privileges to perform administrative operations,
246-
* such as creating, updating, and deleting databases. This typically involves tokens associated with roles like
247-
* Database Administrator or Organization Administrator within the Astra environment.
248-
* </p>
249-
* <p>
250-
* Utilizing this method allows for direct access to the Astra database's administrative functionalities, enabling
251-
* comprehensive management capabilities through the returned {@link AstraDBAdmin} client. This includes but is not
252-
* limited to database creation, modification, and deletion.
253-
* </p>
254-
*
255-
* <p>Example usage:</p>
256-
* <pre>
257-
* {@code
258-
* String superUserToken = "AstraCS:super_user_token_here";
259-
* DataAPIClient apiClient = new DataAPIClient(superUserToken);
260-
* AstraDBAdmin adminClient = apiClient.getAdmin(superUserToken);
261-
* // Now you can use adminClient for administrative operations like creating a database
262-
* }
263-
* </pre>
264-
*
265-
* @param superUserToken A token with elevated privileges, enabling administrative actions within the Astra
266-
* environment. This token must be authorized to perform operations such as creating and managing databases.
267-
* @return An instance of {@link AstraDBAdmin}, configured for administrative tasks with the provided user token.
268-
* @throws SecurityException if the provided {@code superUserToken} lacks the necessary privileges for administrative operations.
269-
*/
270-
public AstraDBAdmin getAdmin(String superUserToken, AdminOptions adminOptions) {
242+
public AstraDBAdmin getAdmin(String superToken) {
243+
return getAdmin(new AdminOptions(superToken, options));
244+
}
245+
246+
public AstraDBAdmin getAdmin(AdminOptions adminOptions) {
271247
if (!options.isAstra()) {
272248
throwErrorRestrictedAstra("getAdmin()", options.getDestination());
273249
}
274-
return new AstraDBAdmin(adminOptions.adminToken(superUserToken));
250+
return new AstraDBAdmin(adminOptions);
275251
}
276252

277253
// --------------------------------------------------
278254
// --- Access Database ---
279255
// --------------------------------------------------
280256

281257
public Database getDatabase(String apiEndpoint) {
282-
return getDatabase(apiEndpoint, new DatabaseOptions(options).token(token));
258+
return getDatabase(apiEndpoint, new DatabaseOptions(token, options));
283259
}
284260

285261
public Database getDatabase(UUID databaseId) {
286-
return getDatabase(lookupEndpoint(databaseId, null), new DatabaseOptions(options).token(token));
262+
return getDatabase(lookupEndpoint(databaseId, null), new DatabaseOptions(token, options));
287263
}
288264

289265
/**

astra-db-java/src/main/java/com/datastax/astra/client/DataAPIClients.java

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@
2424
import com.datastax.astra.client.core.auth.UsernamePasswordTokenProvider;
2525
import com.datastax.astra.client.core.options.DataAPIClientOptions;
2626
import com.datastax.astra.client.databases.Database;
27-
import com.datastax.astra.client.databases.DatabaseOptions;
2827
import com.datastax.astra.internal.command.LoggingCommandObserver;
2928

30-
import static com.datastax.astra.client.admin.AstraDBAdmin.DEFAULT_KEYSPACE;
29+
import static com.datastax.astra.client.core.options.DataAPIClientOptions.DEFAULT_KEYSPACE;
3130

3231
/**
3332
* Provides utility methods for initializing and configuring clients to interact with the Data API. This class
@@ -86,6 +85,31 @@ public static DataAPIClient local() {
8685
.addObserver(new LoggingCommandObserver(DataAPIClient.class)));
8786
}
8887

88+
/**
89+
* Creates a {@link DataAPIClient} configured for interacting with Astra in a development environment. This
90+
* method simplifies the setup of a client specifically tailored for development purposes, where you might
91+
* need different configurations or less stringent security measures compared to a production environment.
92+
* The client is configured to target Astra's development environment, ensuring that operations do not
93+
* affect production data.
94+
*
95+
* @param token The authentication token required for accessing Astra's development environment. This token
96+
* should have the necessary permissions for development activities and be protected accordingly.
97+
* @return A {@link DataAPIClient} instance ready for development activities with Astra, configured with the
98+
* provided authentication token and targeting Astra's development environment.
99+
*
100+
* <p>Example usage:</p>
101+
* <pre>
102+
* {@code
103+
* DataAPIClient devClient = DataAPIClients.astraDev("your_astra_dev_token");
104+
* // Utilize devClient for development database operations
105+
* }
106+
* </pre>
107+
*/
108+
public static DataAPIClient astra(String token) {
109+
return new DataAPIClient(token, new DataAPIClientOptions()
110+
.destination(DataAPIDestination.ASTRA)
111+
.addObserver(new LoggingCommandObserver(DataAPIClient.class)));
112+
}
89113

90114
/**
91115
* Creates a {@link DataAPIClient} configured for interacting with Astra in a development environment. This
@@ -154,7 +178,7 @@ public static DataAPIClient astraTest(String token) {
154178
public static Database defaultLocalDatabase() {
155179
Database db = local().getDatabase(DEFAULT_ENDPOINT_LOCAL);
156180
DataAPIDatabaseAdmin dbAdmin = (DataAPIDatabaseAdmin) db.getDatabaseAdmin();
157-
dbAdmin.createKeyspace(DatabaseOptions.DEFAULT_KEYSPACE);
181+
dbAdmin.createKeyspace(DEFAULT_KEYSPACE);
158182
return db;
159183
}
160184

astra-db-java/src/main/java/com/datastax/astra/client/admin/AdminOptions.java

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,43 +20,24 @@
2020
* #L%
2121
*/
2222

23+
import com.datastax.astra.client.core.commands.BaseOptions;
24+
import com.datastax.astra.client.core.commands.CommandType;
2325
import com.datastax.astra.client.core.options.DataAPIClientOptions;
26+
import com.datastax.astra.internal.serdes.DatabaseSerializer;
2427
import com.datastax.astra.internal.utils.Assert;
2528
import lombok.Setter;
2629
import lombok.experimental.Accessors;
2730

2831
@Setter
2932
@Accessors(fluent = true, chain = true)
30-
public class AdminOptions {
33+
public class AdminOptions extends BaseOptions<AdminOptions> {
3134

32-
private String adminToken;
33-
34-
private DataAPIClientOptions dataAPIClientOptions;
35-
36-
public AdminOptions() {
37-
this(new DataAPIClientOptions());
38-
}
39-
40-
public AdminOptions(DataAPIClientOptions options) {
35+
public AdminOptions(String token, DataAPIClientOptions options) {
4136
Assert.notNull(options, "options");
37+
this.token = token;
38+
this.commandType = CommandType.DATABASE_ADMIN;
4239
this.dataAPIClientOptions = options.clone();
40+
this.serializer = new DatabaseSerializer();
4341
}
4442

45-
/**
46-
* Gets token
47-
*
48-
* @return value of token
49-
*/
50-
public String getAdminToken() {
51-
return adminToken;
52-
}
53-
54-
/**
55-
* Gets dataAPIClientOptions
56-
*
57-
* @return value of dataAPIClientOptions
58-
*/
59-
public DataAPIClientOptions getDataAPIClientOptions() {
60-
return dataAPIClientOptions;
61-
}
6243
}

astra-db-java/src/main/java/com/datastax/astra/client/admin/AstraDBAdmin.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.datastax.astra.client.core.options.DataAPIClientOptions;
2424
import com.datastax.astra.client.databases.DatabaseInfo;
25+
import com.datastax.astra.client.databases.DatabaseOptions;
2526
import com.datastax.astra.internal.api.AstraApiEndpoint;
2627
import com.datastax.astra.internal.command.LoggingCommandObserver;
2728
import com.datastax.astra.internal.utils.Assert;
@@ -47,6 +48,7 @@
4748
import java.util.UUID;
4849
import java.util.stream.Collectors;
4950

51+
import static com.datastax.astra.client.core.options.DataAPIClientOptions.DEFAULT_KEYSPACE;
5052
import static com.datastax.astra.client.exception.InvalidEnvironmentException.throwErrorRestrictedAstra;
5153
import static com.datastax.astra.internal.utils.AnsiUtils.green;
5254
import static com.dtsx.astra.sdk.utils.Utils.readEnvVariable;
@@ -104,9 +106,11 @@ public AstraDBAdmin(AdminOptions options) {
104106
if (dataAPIClientOptions.getObservers().containsKey(LoggingCommandObserver.class.getSimpleName())) {
105107
devopsObservers.put("logging", new LoggingRequestObserver(AstraDBAdmin.class));
106108
}
107-
this.devopsDbClient = new AstraDBOpsClient(options.getAdminToken(), dataAPIClientOptions.getAstraEnvironment(), devopsObservers);
109+
this.devopsDbClient = new AstraDBOpsClient(options.getToken(),
110+
dataAPIClientOptions.getAstraEnvironment(), devopsObservers);
108111
} else {
109-
this.devopsDbClient = new AstraDBOpsClient(options.getAdminToken(), dataAPIClientOptions.getAstraEnvironment());
112+
this.devopsDbClient = new AstraDBOpsClient(options.getToken(),
113+
dataAPIClientOptions.getAstraEnvironment());
110114
}
111115

112116
// Local Agent for Resume
@@ -323,17 +327,23 @@ public DatabaseInfo getDatabaseInfo(@NonNull UUID id) {
323327
public com.datastax.astra.client.databases.Database getDatabase(UUID databaseId, String keyspace) {
324328
Assert.notNull(databaseId, "databaseId");
325329
Assert.hasLength(keyspace, "keyspace");
326-
if (!dataAPIClientOptions.isAstra()) {
327-
throwErrorRestrictedAstra("getDatabase(id, keyspace)", dataAPIClientOptions.getDestination());
330+
if (!adminOptions.getDataAPIClientOptions().isAstra()) {
331+
throwErrorRestrictedAstra("getDatabase(id, keyspace)", adminOptions.getDataAPIClientOptions().getDestination());
328332
}
333+
329334
String databaseRegion = devopsDbClient
330335
.findById(databaseId.toString())
331336
.map(db -> db.getInfo().getRegion())
332337
.orElseThrow(() -> new DatabaseNotFoundException(databaseId.toString()));
333-
return new com.datastax.astra.client.databases.Database(
334-
new AstraApiEndpoint(databaseId, databaseRegion, dataAPIClientOptions.getAstraEnvironment()).getApiEndPoint(),
335-
token, keyspace, dataAPIClientOptions) {
336-
};
338+
339+
AstraApiEndpoint astraApiEndpoint = new AstraApiEndpoint(databaseId,
340+
databaseRegion, adminOptions.getDataAPIClientOptions().getAstraEnvironment());
341+
342+
// Accessing DB with the right keyspace
343+
DatabaseOptions dbOptions = new DatabaseOptions(this.adminOptions.getToken(), this.adminOptions.getDataAPIClientOptions())
344+
.keyspace(keyspace);
345+
346+
return new com.datastax.astra.client.databases.Database(astraApiEndpoint.getApiEndPoint(), dbOptions);
337347
}
338348

339349
/**
@@ -358,7 +368,9 @@ public com.datastax.astra.client.databases.Database getDatabase(UUID databaseId)
358368
*/
359369
public AstraDBDatabaseAdmin getDatabaseAdmin(UUID databaseId) {
360370
Assert.notNull(databaseId, "databaseId");
361-
return new AstraDBDatabaseAdmin(token, databaseId, dataAPIClientOptions);
371+
return new AstraDBDatabaseAdmin(
372+
adminOptions.getToken(), databaseId,
373+
adminOptions.getDataAPIClientOptions());
362374
}
363375

364376
/**

astra-db-java/src/main/java/com/datastax/astra/client/admin/AstraDBDatabaseAdmin.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@
2121
*/
2222

2323
import com.datastax.astra.client.DataAPIDestination;
24-
import com.datastax.astra.client.core.commands.CommandOptions;
24+
import com.datastax.astra.client.core.commands.BaseOptions;
2525
import com.datastax.astra.client.core.options.DataAPIClientOptions;
2626
import com.datastax.astra.client.core.results.FindEmbeddingProvidersResult;
27+
import com.datastax.astra.client.databases.DatabaseOptions;
2728
import com.datastax.astra.internal.api.AstraApiEndpoint;
2829
import com.dtsx.astra.sdk.db.AstraDBOpsClient;
2930
import com.dtsx.astra.sdk.db.domain.Database;
@@ -34,8 +35,6 @@
3435
import java.util.Set;
3536
import java.util.UUID;
3637

37-
import static com.datastax.astra.client.admin.AstraDBAdmin.DEFAULT_KEYSPACE;
38-
3938

4039
/**
4140
* Implementation of the DatabaseAdmin interface for Astra. To create the namespace the devops APi is leverage. To use this class a higher token permission is required.
@@ -87,7 +86,8 @@ public AstraDBDatabaseAdmin(String token, UUID databaseId, DataAPIClientOptions
8786
this.databaseId = databaseId;
8887
this.dataAPIClientOptions = options;
8988
this.devopsDbClient = new AstraDBOpsClient(token, options.getAstraEnvironment());
90-
this.db = new com.datastax.astra.client.databases.Database(getApiEndpoint(), token, DEFAULT_KEYSPACE, options);
89+
this.db = new com.datastax.astra.client.databases.Database(getApiEndpoint(),
90+
new DatabaseOptions(token, options));
9191
}
9292

9393
/**
@@ -162,7 +162,7 @@ public com.datastax.astra.client.databases.Database getDatabase(String keyspace)
162162
* client to interact with database DML.
163163
*/
164164
public com.datastax.astra.client.databases.Database getDatabase(String keyspace, String tokenUser) {
165-
return new com.datastax.astra.client.databases.Database(getApiEndpoint(), tokenUser, keyspace, db.getDatabaseOptions());
165+
return new com.datastax.astra.client.databases.Database(getApiEndpoint(), db.getDatabaseOptions());
166166
}
167167

168168
@Override
@@ -178,7 +178,8 @@ public Set<String> listKeyspaceNames() {
178178
public FindEmbeddingProvidersResult findEmbeddingProviders() {
179179
log.debug("findEmbeddingProviders");
180180
DataAPIDatabaseAdmin admin =
181-
new DataAPIDatabaseAdmin(getApiEndpoint() + "/" + db.getDatabaseOptions().getApiVersion(), token, db.getDatabaseOptions());
181+
new DataAPIDatabaseAdmin(getApiEndpoint() + "/" + db.getDatabaseOptions()
182+
.getDataAPIClientOptions().getApiVersion(), db.getDatabaseOptions());
182183
return new FindEmbeddingProvidersResult(admin.findEmbeddingProviders().getEmbeddingProviders());
183184
}
184185

@@ -199,7 +200,7 @@ public void dropKeyspace(String keyspace) {
199200
}
200201

201202
@Override
202-
public void dropKeyspace(String namespace, CommandOptions<?> options) {
203+
public void dropKeyspace(String namespace, BaseOptions<?> options) {
203204
log.warn("CommandOptions are not supported for dropKeyspace in Astra MODE");
204205
dropKeyspace(namespace);
205206
}

astra-db-java/src/main/java/com/datastax/astra/client/admin/DataAPIDatabaseAdmin.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
*/
2222

2323
import com.datastax.astra.client.core.commands.Command;
24-
import com.datastax.astra.client.core.commands.CommandOptions;
24+
import com.datastax.astra.client.core.commands.BaseOptions;
2525
import com.datastax.astra.client.core.commands.CommandType;
2626
import com.datastax.astra.client.core.results.FindEmbeddingProvidersResult;
2727
import com.datastax.astra.client.core.vectorize.EmbeddingProvider;
@@ -80,7 +80,7 @@ public DataAPIDatabaseAdmin(String apiEndpoint, DatabaseOptions options) {
8080
*/
8181
public DataAPIDatabaseAdmin(Database db) {
8282
this.db = db;
83-
this.commandOptions = new CommandOptions<>(
83+
this.baseOptions = new BaseOptions<>(
8484
db.getDatabaseOptions().getToken(),
8585
CommandType.KEYSPACE_ADMIN,
8686
db.getDatabaseOptions().getDataAPIClientOptions());
@@ -161,7 +161,7 @@ public void createKeyspace(String keyspace, KeyspaceOptions options) {
161161
}
162162

163163
@Override
164-
public void dropKeyspace(String keyspace, CommandOptions<?> options) {
164+
public void dropKeyspace(String keyspace, BaseOptions<?> options) {
165165
hasLength(keyspace, ARG_KEYSPACE);
166166
Command dropNamespace = Command
167167
.create("dropKeyspace")
@@ -183,15 +183,15 @@ protected DataAPISerializer getSerializer() {
183183
}
184184

185185
/**
186-
* Register a listener to execute commands on the collection. Please now use {@link CommandOptions}.
186+
* Register a listener to execute commands on the collection. Please now use {@link BaseOptions}.
187187
*
188188
* @param logger
189189
* name for the logger
190190
* @param commandObserver
191191
* class for the logger
192192
*/
193193
public void registerListener(String logger, CommandObserver commandObserver) {
194-
this.commandOptions.registerObserver(logger, commandObserver);
194+
this.baseOptions.registerObserver(logger, commandObserver);
195195
}
196196

197197
}

astra-db-java/src/main/java/com/datastax/astra/client/admin/DatabaseAdmin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* #L%
2121
*/
2222

23-
import com.datastax.astra.client.core.commands.CommandOptions;
23+
import com.datastax.astra.client.core.commands.BaseOptions;
2424
import com.datastax.astra.client.databases.Database;
2525
import com.datastax.astra.client.core.commands.CommandRunner;
2626
import com.datastax.astra.client.core.vectorize.EmbeddingProvider;
@@ -207,7 +207,7 @@ default void dropKeyspace(String namespace) {
207207
dropKeyspace(namespace, null);
208208
}
209209

210-
void dropKeyspace(String namespace, CommandOptions<?> options);
210+
void dropKeyspace(String namespace, BaseOptions<?> options);
211211

212212
/**
213213
* Asynchronously drops (deletes) the specified keyspace from the database. This operation is idempotent, meaning

0 commit comments

Comments
 (0)