This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch nouveau-update-bundle
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 3b6169ada8975639730ba09bd934a705d2d054cb
Author: Robert Newson <[email protected]>
AuthorDate: Sat Mar 21 15:22:24 2026 +0000

    convert api field classes to record
---
 .../apache/couchdb/nouveau/api/DoubleField.java    | 38 +--------------------
 .../java/org/apache/couchdb/nouveau/api/Field.java | 17 ++--------
 .../apache/couchdb/nouveau/api/StoredField.java    | 30 ++---------------
 .../apache/couchdb/nouveau/api/StringField.java    | 39 ++--------------------
 .../org/apache/couchdb/nouveau/api/TextField.java  | 39 ++--------------------
 .../apache/couchdb/nouveau/lucene/LuceneIndex.java | 18 +++++-----
 .../couchdb/nouveau/lucene/LuceneIndexSchema.java  |  8 ++---
 7 files changed, 23 insertions(+), 166 deletions(-)

diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java
index 79a968786..c86b67ffc 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/DoubleField.java
@@ -13,40 +13,4 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.databind.annotation.JsonNaming;
-import jakarta.validation.constraints.NotNull;
-
-@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
-public class DoubleField extends Field {
-
-    @NotNull
-    private final Double value;
-
-    private final boolean store;
-
-    public DoubleField(
-            @JsonProperty("name") final String name,
-            @JsonProperty("value") final Double value,
-            @JsonProperty("store") final boolean store) {
-        super(name);
-        this.value = value;
-        this.store = store;
-    }
-
-    @JsonProperty
-    public Double getValue() {
-        return value;
-    }
-
-    @JsonProperty
-    public boolean isStore() {
-        return store;
-    }
-
-    @Override
-    public String toString() {
-        return "DoubleField [name=" + name + ", value=" + value + ", store=" + 
store + "]";
-    }
-}
+public record DoubleField(String name, double value, boolean store) implements 
Field {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Field.java 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Field.java
index 8b8f109d2..7d00675f8 100644
--- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Field.java
+++ b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/Field.java
@@ -13,14 +13,10 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonSubTypes;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.databind.annotation.JsonNaming;
 import jakarta.validation.constraints.Pattern;
 
-@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, 
property = "@type")
 @JsonSubTypes({
     @JsonSubTypes.Type(value = DoubleField.class, name = "double"),
@@ -28,17 +24,8 @@ import jakarta.validation.constraints.Pattern;
     @JsonSubTypes.Type(value = StringField.class, name = "string"),
     @JsonSubTypes.Type(value = TextField.class, name = "text"),
 })
-public abstract class Field {
+public interface Field {
 
     @Pattern(regexp = "^\\$?[a-zA-Z][a-zA-Z0-9_]*$")
-    protected final String name;
-
-    protected Field(final String name) {
-        this.name = name;
-    }
-
-    @JsonProperty
-    public String getName() {
-        return name;
-    }
+    String name();
 }
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java
index 697fc4f93..318c0f138 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StoredField.java
@@ -13,33 +13,9 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.databind.annotation.JsonNaming;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
 
-@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
-public final class StoredField extends Field {
-
-    @NotNull
-    @Schema(oneOf = {String.class, Double.class, byte[].class})
-    private final Object value;
-
-    public StoredField(@JsonProperty("name") final String name, 
@JsonProperty("value") final Object value) {
-        super(name);
-        if (!(value instanceof String || value instanceof Number || value 
instanceof byte[])) {
-            throw new IllegalArgumentException(value + " must be a string, 
number or byte array");
-        }
-        this.value = value;
-    }
-
-    public Object getValue() {
-        return value;
-    }
-
-    @Override
-    public String toString() {
-        return "StoredField [name=" + name + ", value=" + value + "]";
-    }
-}
+public record StoredField(
+        String name, @NotNull @Schema(oneOf = {String.class, Double.class, 
byte[].class}) Object value)
+        implements Field {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StringField.java 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StringField.java
index 32f38063c..d116efa7b 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StringField.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/StringField.java
@@ -13,41 +13,6 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.databind.annotation.JsonNaming;
-import jakarta.validation.constraints.NotNull;
-import java.util.Objects;
+import jakarta.validation.constraints.NotEmpty;
 
-@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
-public final class StringField extends Field {
-
-    @NotNull
-    private final String value;
-
-    private final boolean store;
-
-    public StringField(
-            @JsonProperty("name") final String name,
-            @JsonProperty("value") final String value,
-            @JsonProperty("store") final boolean store) {
-        super(name);
-        this.value = Objects.requireNonNull(value);
-        this.store = store;
-    }
-
-    @JsonProperty
-    public String getValue() {
-        return value;
-    }
-
-    @JsonProperty
-    public boolean isStore() {
-        return store;
-    }
-
-    @Override
-    public String toString() {
-        return "StringField [name=" + name + ", value=" + value + ", store=" + 
store + "]";
-    }
-}
+public record StringField(String name, @NotEmpty String value, boolean store) 
implements Field {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/TextField.java 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/TextField.java
index a82231a2d..ed1ab844e 100644
--- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/TextField.java
+++ b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/TextField.java
@@ -13,41 +13,6 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.databind.annotation.JsonNaming;
-import jakarta.validation.constraints.NotNull;
-import java.util.Objects;
+import jakarta.validation.constraints.NotEmpty;
 
-@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
-public final class TextField extends Field {
-
-    @NotNull
-    private final String value;
-
-    private final boolean store;
-
-    public TextField(
-            @JsonProperty("name") final String name,
-            @JsonProperty("value") final String value,
-            @JsonProperty("store") final boolean store) {
-        super(name);
-        this.value = Objects.requireNonNull(value);
-        this.store = store;
-    }
-
-    @JsonProperty
-    public String getValue() {
-        return value;
-    }
-
-    @JsonProperty
-    public boolean isStore() {
-        return store;
-    }
-
-    @Override
-    public String toString() {
-        return "TextField [name=" + name + ", value=" + value + ", store=" + 
store + "]";
-    }
-}
+public record TextField(String name, @NotEmpty String value, boolean store) 
implements Field {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
index e8eb46ccc..1f6a735ff 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java
@@ -418,34 +418,34 @@ public class LuceneIndex extends Index {
 
         for (Field field : request.fields()) {
             // Underscore-prefix is reserved.
-            if (field.getName().startsWith("_")) {
+            if (field.name().startsWith("_")) {
                 continue;
             }
             if (field instanceof TextField) {
                 var f = (TextField) field;
                 result.add(new org.apache.lucene.document.TextField(
-                        f.getName(), f.getValue(), f.isStore() ? Store.YES : 
Store.NO));
+                        f.name(), f.value(), f.store() ? Store.YES : 
Store.NO));
             } else if (field instanceof StringField) {
                 var f = (StringField) field;
                 result.add(new org.apache.lucene.document.KeywordField(
-                        f.getName(), f.getValue(), f.isStore() ? Store.YES : 
Store.NO));
+                        f.name(), f.value(), f.store() ? Store.YES : 
Store.NO));
             } else if (field instanceof DoubleField) {
                 var f = (DoubleField) field;
                 result.add(new org.apache.lucene.document.DoubleField(
-                        f.getName(), f.getValue(), f.isStore() ? Store.YES : 
Store.NO));
+                        f.name(), f.value(), f.store() ? Store.YES : 
Store.NO));
             } else if (field instanceof StoredField) {
                 var f = (StoredField) field;
-                var val = f.getValue();
+                var val = f.value();
                 if (val instanceof String) {
-                    result.add(new 
org.apache.lucene.document.StoredField(f.getName(), (String) val));
+                    result.add(new 
org.apache.lucene.document.StoredField(f.name(), (String) val));
                 } else if (val instanceof Number) {
-                    result.add(new 
org.apache.lucene.document.StoredField(f.getName(), ((Number) 
val).doubleValue()));
+                    result.add(new 
org.apache.lucene.document.StoredField(f.name(), ((Number) val).doubleValue()));
                 } else if (val instanceof byte[]) {
                     try {
                         final CharBuffer buf = 
utf8Decoder.decode(ByteBuffer.wrap((byte[]) val));
-                        result.add(new 
org.apache.lucene.document.StoredField(f.getName(), buf.toString()));
+                        result.add(new 
org.apache.lucene.document.StoredField(f.name(), buf.toString()));
                     } catch (final CharacterCodingException e) {
-                        result.add(new 
org.apache.lucene.document.StoredField(f.getName(), (byte[]) val));
+                        result.add(new 
org.apache.lucene.document.StoredField(f.name(), (byte[]) val));
                     }
                 } else {
                     throw new WebApplicationException(field + " is not valid", 
Status.BAD_REQUEST);
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndexSchema.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndexSchema.java
index ef335bf5a..bf4351292 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndexSchema.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndexSchema.java
@@ -78,7 +78,7 @@ final class LuceneIndexSchema {
     public void update(final Collection<Field> fields) {
         Objects.requireNonNull(fields);
         for (var field : fields) {
-            map.putIfAbsent(field.getName(), Type.fromField(field));
+            map.putIfAbsent(field.name(), Type.fromField(field));
             assertType(field);
         }
     }
@@ -90,13 +90,13 @@ final class LuceneIndexSchema {
     public void assertType(final Field field) {
         Objects.requireNonNull(field);
         var expectedType = Type.fromField(field);
-        var actualType = map.get(field.getName());
+        var actualType = map.get(field.name());
         if (actualType == null) {
-            throw new WebApplicationException("Unknown field " + 
field.getName(), Status.BAD_REQUEST);
+            throw new WebApplicationException("Unknown field " + field.name(), 
Status.BAD_REQUEST);
         }
         if (expectedType != actualType) {
             throw new WebApplicationException(
-                    String.format("field %s is of type %s not %s", 
field.getName(), expectedType, actualType),
+                    String.format("field %s is of type %s not %s", 
field.name(), expectedType, actualType),
                     Status.BAD_REQUEST);
         }
     }

Reply via email to