Skip to content

Commit c9bf29a

Browse files
committed
Improve annotation system not to have to provide types and names
1 parent b10bdd1 commit c9bf29a

37 files changed

+445
-243
lines changed

astra-db-java/src/main/java/com/datastax/astra/client/core/commands/BaseOptions.java

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ public T timeout(Duration duration) {
159159
*/
160160
@SuppressWarnings("unchecked")
161161
public T embeddingAuthProvider(EmbeddingHeadersProvider embeddingAuthProvider) {
162+
Assert.notNull(embeddingAuthProvider, "embeddingAuthProvider");
162163
getDataAPIClientOptions().embeddingAuthProvider(embeddingAuthProvider);
163164
return (T) this;
164165
}
@@ -173,7 +174,9 @@ public T embeddingAuthProvider(EmbeddingHeadersProvider embeddingAuthProvider) {
173174
*/
174175
@SuppressWarnings("unchecked")
175176
public T databaseAdditionalHeaders(Map<String, String> params) {
176-
getDataAPIClientOptions().databaseAdditionalHeaders(params);
177+
if (params!=null && !params.isEmpty()) {
178+
getDataAPIClientOptions().databaseAdditionalHeaders(params);
179+
}
177180
return (T) this;
178181
}
179182

@@ -187,7 +190,9 @@ public T databaseAdditionalHeaders(Map<String, String> params) {
187190
*/
188191
@SuppressWarnings("unchecked")
189192
public T adminAdditionalHeaders(Map<String, String> params) {
190-
getDataAPIClientOptions().adminAdditionalHeaders(params);
193+
if (params!=null && !params.isEmpty()) {
194+
getDataAPIClientOptions().adminAdditionalHeaders(params);
195+
}
191196
return (T) this;
192197
}
193198

@@ -215,9 +220,7 @@ public T httpClientOptions(HttpClientOptions options) {
215220
*/
216221
@SuppressWarnings("unchecked")
217222
public T timeoutOptions(TimeoutOptions timeoutOptions) {
218-
if (getDataAPIClientOptions() == null) {
219-
this.dataAPIClientOptions = new DataAPIClientOptions();
220-
}
223+
Assert.notNull(timeoutOptions, "timeoutOptions");
221224
getDataAPIClientOptions().timeoutOptions(timeoutOptions);
222225
return (T) this;
223226
}
@@ -233,9 +236,9 @@ public T timeoutOptions(TimeoutOptions timeoutOptions) {
233236
*/
234237
@SuppressWarnings("unchecked")
235238
public T registerObserver(String name, CommandObserver observer) {
236-
if (observer != null) {
237-
getDataAPIClientOptions().addObserver(name, observer);
238-
}
239+
Assert.hasLength(name, "name");
240+
Assert.notNull(observer, "observer");
241+
getDataAPIClientOptions().addObserver(name, observer);
239242
return (T) this;
240243
}
241244

@@ -253,24 +256,6 @@ public T unregisterObserver(String name) {
253256
return (T) this;
254257
}
255258

256-
/**
257-
* Return the HTTP Request Timeout based on the command type
258-
*
259-
* @return value of token
260-
*/
261-
public long getTimeout(CommandType commandType) {
262-
return getTimeout(getDataAPIClientOptions().getTimeoutOptions(), commandType);
263-
}
264-
265-
/**
266-
* Return the HTTP Request Timeout based on the command type
267-
*
268-
* @return value of token
269-
*/
270-
public long getRequestTimeout(CommandType commandType) {
271-
return getRequestTimeout(getDataAPIClientOptions().getTimeoutOptions(), commandType);
272-
}
273-
274259
/**
275260
* Request timeout based on the command type.
276261
*
@@ -320,9 +305,6 @@ public long getRequestTimeout(TimeoutOptions timeoutOptions, CommandType type) {
320305
* service key
321306
*/
322307
public T timeout(long timeoutMillis, CommandType commandType) {
323-
if (getDataAPIClientOptions() == null) {
324-
dataAPIClientOptions = new DataAPIClientOptions();
325-
}
326308
if (getDataAPIClientOptions().getTimeoutOptions() == null) {
327309
getDataAPIClientOptions().timeoutOptions(new TimeoutOptions());
328310
}
@@ -348,6 +330,9 @@ public T timeout(long timeoutMillis, CommandType commandType) {
348330
*/
349331
@JsonIgnore
350332
public DataAPIClientOptions getDataAPIClientOptions() {
333+
if (this.dataAPIClientOptions == null) {
334+
this.dataAPIClientOptions = new DataAPIClientOptions();
335+
}
351336
return dataAPIClientOptions;
352337
}
353338

astra-db-java/src/main/java/com/datastax/astra/client/core/options/DataAPIClientOptions.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,8 @@
4747
/**
4848
* Options to set up the client for DataApiClient.
4949
*/
50-
@Setter
5150
@Slf4j
52-
@NoArgsConstructor
51+
@Setter
5352
@Accessors(fluent = true, chain = true)
5453
public class DataAPIClientOptions implements Cloneable {
5554

@@ -374,6 +373,13 @@ public String toString() {
374373
return new DatabaseSerializer().marshall(this);
375374
}
376375

376+
/**
377+
* A default Client Options
378+
*/
379+
public DataAPIClientOptions() {
380+
// defaulting values
381+
}
382+
377383
public DataAPIClientOptions(DataAPIClientOptions options) {
378384
Assert.notNull(options, "Options");
379385
this.apiVersion = options.apiVersion;

astra-db-java/src/main/java/com/datastax/astra/client/core/options/TimeoutOptions.java

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

23+
import com.datastax.astra.internal.utils.Assert;
2324
import lombok.NoArgsConstructor;
2425
import lombok.Setter;
2526
import lombok.experimental.Accessors;
2627

28+
import java.time.Duration;
29+
2730
/**
2831
* This class is used to define the timeout options for the client.
2932
*/
@@ -84,6 +87,48 @@ public TimeoutOptions clone() {
8487
}
8588
}
8689

90+
public TimeoutOptions connectTimeout(Duration timeout) {
91+
Assert.notNull(timeout, "Timeout");
92+
this.connectTimeoutMillis = timeout.toMillis();
93+
return this;
94+
}
95+
96+
public TimeoutOptions requestTimeout(Duration timeout) {
97+
Assert.notNull(timeout, "Timeout");
98+
this.requestTimeoutMillis = timeout.toMillis();
99+
return this;
100+
}
101+
102+
public TimeoutOptions generalMethodTimeout(Duration timeout) {
103+
Assert.notNull(timeout, "Timeout");
104+
this.generalMethodTimeoutMillis = timeout.toMillis();
105+
return this;
106+
}
107+
108+
public TimeoutOptions databaseAdminTimeout(Duration timeout) {
109+
Assert.notNull(timeout, "Timeout");
110+
this.databaseAdminTimeoutMillis = timeout.toMillis();
111+
return this;
112+
}
113+
114+
public TimeoutOptions keyspaceAdminTimeout(Duration timeout) {
115+
Assert.notNull(timeout, "Timeout");
116+
this.keyspaceAdminTimeoutMillis = timeout.toMillis();
117+
return this;
118+
}
119+
120+
public TimeoutOptions collectionAdminTimeout(Duration timeout) {
121+
Assert.notNull(timeout, "Timeout");
122+
this.collectionAdminTimeoutMillis = timeout.toMillis();
123+
return this;
124+
}
125+
126+
public TimeoutOptions tableAdminTimeout(Duration timeout) {
127+
Assert.notNull(timeout, "Timeout");
128+
this.tableAdminTimeoutMillis = timeout.toMillis();
129+
return this;
130+
}
131+
87132
/**
88133
* Gets connectTimeoutMillis
89134
*

astra-db-java/src/main/java/com/datastax/astra/client/databases/Database.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1260,7 +1260,7 @@ public <T> Table<T> createTable(String tableName,
12601260
* @param rowClass the class representing the row type; must not be null
12611261
* @return the created table object
12621262
*/
1263-
private <T> String getTableName(Class<T> rowClass) {
1263+
public <T> String getTableName(Class<T> rowClass) {
12641264
notNull(rowClass, "rowClass");
12651265
EntityTable ann = rowClass.getAnnotation(EntityTable.class);
12661266
if (ann == null) {

astra-db-java/src/main/java/com/datastax/astra/client/databases/options/CreateCollectionOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
import static com.datastax.astra.client.core.commands.CommandType.COLLECTION_ADMIN;
2626

27-
public class CreateCollectionOptions extends BaseOptions<ListCollectionOptions> {
27+
public class CreateCollectionOptions extends BaseOptions<CreateCollectionOptions> {
2828

2929
public CreateCollectionOptions() {
3030
super(null, COLLECTION_ADMIN, null);
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.datastax.astra.client.tables.columns;
2+
3+
import com.datastax.astra.client.core.vector.DataAPIVector;
4+
5+
import java.math.BigDecimal;
6+
import java.math.BigInteger;
7+
import java.net.InetAddress;
8+
import java.time.Instant;
9+
import java.time.LocalDate;
10+
import java.time.LocalTime;
11+
import java.util.HashMap;
12+
import java.util.List;
13+
import java.util.Map;
14+
import java.util.Set;
15+
import java.util.UUID;
16+
17+
/**
18+
* Maps Java types to Cassandra column types.
19+
*/
20+
public class ColumnTypeMapper {
21+
22+
private static final Map<Class<?>, ColumnTypes> typeMapping = new HashMap<>();
23+
24+
static {
25+
typeMapping.put(Integer.class, ColumnTypes.INT);
26+
typeMapping.put(int.class, ColumnTypes.INT);
27+
typeMapping.put(Long.class, ColumnTypes.BIGINT);
28+
typeMapping.put(long.class, ColumnTypes.BIGINT);
29+
30+
typeMapping.put(Double.class, ColumnTypes.DOUBLE);
31+
typeMapping.put(double.class, ColumnTypes.DOUBLE);
32+
33+
typeMapping.put(Float.class, ColumnTypes.FLOAT);
34+
typeMapping.put(float.class, ColumnTypes.FLOAT);
35+
typeMapping.put(Boolean.class, ColumnTypes.BOOLEAN);
36+
typeMapping.put(boolean.class, ColumnTypes.BOOLEAN);
37+
typeMapping.put(Byte.class, ColumnTypes.TINYINT);
38+
typeMapping.put(byte.class, ColumnTypes.TINYINT);
39+
typeMapping.put(Short.class, ColumnTypes.SMALLINT);
40+
typeMapping.put(short.class, ColumnTypes.SMALLINT);
41+
42+
// Commonly used Java types
43+
typeMapping.put(String.class, ColumnTypes.TEXT);
44+
typeMapping.put(UUID.class, ColumnTypes.UUID);
45+
typeMapping.put(BigDecimal.class, ColumnTypes.DECIMAL);
46+
typeMapping.put(BigInteger.class, ColumnTypes.VARINT);
47+
typeMapping.put(InetAddress.class, ColumnTypes.INET);
48+
49+
// Date and time types
50+
typeMapping.put(Instant.class, ColumnTypes.TIMESTAMP);
51+
typeMapping.put(LocalDate.class, ColumnTypes.DATE);
52+
typeMapping.put(LocalTime.class, ColumnTypes.TIME);
53+
54+
// Collection types
55+
typeMapping.put(List.class, ColumnTypes.LIST);
56+
typeMapping.put(Set.class, ColumnTypes.SET);
57+
typeMapping.put(Map.class, ColumnTypes.MAP);
58+
typeMapping.put(DataAPIVector.class, ColumnTypes.VECTOR);
59+
60+
// Unsupported or undefined
61+
typeMapping.put(Object.class, ColumnTypes.UNSUPPORTED);
62+
}
63+
64+
public static ColumnTypes getColumnType(Class<?> clazz) {
65+
return typeMapping.getOrDefault(clazz, ColumnTypes.UNSUPPORTED);
66+
}
67+
68+
}

astra-db-java/src/main/java/com/datastax/astra/client/tables/mapping/Column.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
/**
3636
* Column Name, if not provided the field name will be used
3737
*/
38-
String value();
38+
String name();
3939

4040
/**
4141
* Column Type, if not provided the field type will be used

0 commit comments

Comments
 (0)