This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch nouveau-fix-batch in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit eed8d6b37b19194d2f529f0c025bc371224a4005 Author: Robert Newson <[email protected]> AuthorDate: Mon Jul 13 22:48:02 2026 +0100 nouveau: remove unused classes --- .../apache/couchdb/nouveau/NouveauApplication.java | 4 - .../couchdb/nouveau/lucene/LuceneModule.java | 29 ---- .../couchdb/nouveau/lucene/QueryDeserializer.java | 134 ---------------- .../couchdb/nouveau/lucene/QuerySerializer.java | 168 --------------------- .../nouveau/lucene/QuerySerializationTest.java | 106 ------------- 5 files changed, 441 deletions(-) diff --git a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java index c2230d1eb..3f6e22f81 100644 --- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java +++ b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java @@ -24,7 +24,6 @@ import org.apache.couchdb.nouveau.core.IndexManager; import org.apache.couchdb.nouveau.core.UserAgentFilter; import org.apache.couchdb.nouveau.health.AnalyzeHealthCheck; import org.apache.couchdb.nouveau.health.IndexHealthCheck; -import org.apache.couchdb.nouveau.lucene.LuceneModule; import org.apache.couchdb.nouveau.lucene.ParallelSearcherFactory; import org.apache.couchdb.nouveau.resources.AnalyzeResource; import org.apache.couchdb.nouveau.resources.IndexResource; @@ -65,9 +64,6 @@ public class NouveauApplication extends Application<NouveauApplicationConfigurat indexManager.setRootDir(configuration.getRootDir()); environment.lifecycle().manage(indexManager); - // Serialization classes - environment.getObjectMapper().registerModule(new LuceneModule()); - // WelcomeResource final WelcomeResource welcomeResource = new WelcomeResource(); environment.jersey().register(welcomeResource); diff --git a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneModule.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneModule.java deleted file mode 100644 index 35be8efe2..000000000 --- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneModule.java +++ /dev/null @@ -1,29 +0,0 @@ -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.apache.couchdb.nouveau.lucene; - -import com.fasterxml.jackson.core.Version; -import com.fasterxml.jackson.databind.module.SimpleModule; -import org.apache.lucene.search.Query; - -public class LuceneModule extends SimpleModule { - - public LuceneModule() { - super("lucene", Version.unknownVersion()); - - // Query - addSerializer(Query.class, new QuerySerializer()); - addDeserializer(Query.class, new QueryDeserializer()); - } -} diff --git a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/QueryDeserializer.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/QueryDeserializer.java deleted file mode 100644 index aa5460b9a..000000000 --- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/QueryDeserializer.java +++ /dev/null @@ -1,134 +0,0 @@ -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.apache.couchdb.nouveau.lucene; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import java.io.IOException; -import java.util.Iterator; -import org.apache.lucene.index.Term; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.FuzzyQuery; -import org.apache.lucene.search.MatchAllDocsQuery; -import org.apache.lucene.search.PhraseQuery; -import org.apache.lucene.search.PrefixQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.RegexpQuery; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.WildcardQuery; - -public class QueryDeserializer extends StdDeserializer<Query> { - - public QueryDeserializer() { - this(null); - } - - public QueryDeserializer(Class<?> vc) { - super(vc); - } - - @Override - public Query deserialize(final JsonParser parser, final DeserializationContext context) - throws IOException, JsonProcessingException { - return deserializeNode(parser, context, parser.getCodec().readTree(parser)); - } - - private Query deserializeNode(final JsonParser parser, final DeserializationContext context, final JsonNode node) - throws IOException, JsonProcessingException { - final String type = get(parser, node, "@type").asText(); - switch (type) { - case "term": { - final String field = get(parser, node, "field").asText(); - final String text = get(parser, node, "text").asText(); - return new TermQuery(new Term(field, text)); - } - case "boolean": { - if (!get(parser, node, "clauses").isArray()) { - throw new JsonParseException(parser, "boolean clauses must be an array"); - } - final BooleanQuery.Builder builder = new BooleanQuery.Builder(); - final Iterator<JsonNode> it = get(parser, node, "clauses").elements(); - while (it.hasNext()) { - final Query q = deserializeNode(parser, context, it.next()); - builder.add(q, null); - } - return builder.build(); - } - case "wildcard": { - final String field = get(parser, node, "field").asText(); - final String text = get(parser, node, "text").asText(); - return new WildcardQuery(new Term(field, text)); - } - case "phrase": { - final String field = get(parser, node, "field").asText(); - if (!get(parser, node, "terms").isArray()) { - throw new JsonParseException(parser, "phrase terms must be an array"); - } - final PhraseQuery.Builder builder = new PhraseQuery.Builder(); - final Iterator<JsonNode> it = get(parser, node, "terms").elements(); - while (it.hasNext()) { - builder.add(new Term(field, it.next().asText())); - } - builder.setSlop(getInt(parser, node, "slop", 0)); - return builder.build(); - } - case "prefix": { - final String field = get(parser, node, "field").asText(); - final String text = get(parser, node, "text").asText(); - return new PrefixQuery(new Term(field, text)); - } - case "fuzzy": { - final String field = get(parser, node, "field").asText(); - final String text = get(parser, node, "text").asText(); - final int maxEdits = getInt(parser, node, "max_edits", 2); - final int prefixLength = getInt(parser, node, "prefix_length", 0); - return new FuzzyQuery(new Term(field, text), maxEdits, prefixLength); - } - case "regexp": { - final String field = get(parser, node, "field").asText(); - final String text = get(parser, node, "text").asText(); - return new RegexpQuery(new Term(field, text)); - } - case "term_range": { - } - case "point_range": { - } - case "match_all": - return MatchAllDocsQuery.INSTANCE; - } - throw new JsonParseException(parser, type + " not a supported query type"); - } - - private JsonNode get(final JsonParser parser, final JsonNode node, final String key) throws JsonParseException { - if (node.hasNonNull(key)) { - return node.get(key); - } - throw new JsonParseException(parser, key + " is required"); - } - - private int getInt(final JsonParser parser, final JsonNode node, final String key, final int defaultValue) - throws JsonParseException { - if (node.hasNonNull(key)) { - if (node.get(key).isInt()) { - return node.get(key).asInt(); - } - throw new JsonParseException(parser, key + " must be an int"); - } - return defaultValue; - } -} diff --git a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/QuerySerializer.java b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/QuerySerializer.java deleted file mode 100644 index 7e42ee6db..000000000 --- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/QuerySerializer.java +++ /dev/null @@ -1,168 +0,0 @@ -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.apache.couchdb.nouveau.lucene; - -import com.fasterxml.jackson.core.JsonGenerationException; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; -import java.io.IOException; -import org.apache.lucene.index.Term; -import org.apache.lucene.search.BooleanClause; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.FuzzyQuery; -import org.apache.lucene.search.MatchAllDocsQuery; -import org.apache.lucene.search.PhraseQuery; -import org.apache.lucene.search.PointRangeQuery; -import org.apache.lucene.search.PrefixQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.RegexpQuery; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.TermRangeQuery; -import org.apache.lucene.search.WildcardQuery; - -class QuerySerializer extends StdSerializer<Query> { - - QuerySerializer() { - this(null); - } - - QuerySerializer(Class<Query> vc) { - super(vc); - } - - @Override - public void serialize(final Query query, final JsonGenerator gen, final SerializerProvider provider) - throws IOException { - - if (query instanceof TermQuery) { - final TermQuery termQuery = (TermQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "term"); - gen.writeStringField("field", termQuery.getTerm().field()); - gen.writeStringField("term", termQuery.getTerm().text()); - gen.writeEndObject(); - return; - } - - if (query instanceof BooleanQuery) { - final BooleanQuery booleanQuery = (BooleanQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "boolean"); - gen.writeFieldName("clauses"); - gen.writeStartArray(); - for (final BooleanClause clause : booleanQuery.clauses()) { - gen.writeStartObject(); - gen.writeFieldName("query"); - serialize(clause.query(), gen, provider); - gen.writeStringField("occur", clause.occur().name().toLowerCase()); - gen.writeEndObject(); - } - gen.writeEndArray(); - gen.writeEndObject(); - return; - } - - if (query instanceof WildcardQuery) { - final WildcardQuery wildcardQuery = (WildcardQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "wildcard"); - gen.writeStringField("field", wildcardQuery.getField()); - gen.writeStringField("text", wildcardQuery.getTerm().text()); - gen.writeEndObject(); - return; - } - - if (query instanceof PhraseQuery) { - final PhraseQuery phraseQuery = (PhraseQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "phrase"); - gen.writeStringField("field", phraseQuery.getField()); - gen.writeFieldName("terms"); - gen.writeStartArray(); - for (final Term term : phraseQuery.getTerms()) { - gen.writeString(term.text()); - } - gen.writeEndArray(); - gen.writeNumberField("slop", phraseQuery.getSlop()); - gen.writeEndObject(); - return; - } - - if (query instanceof PrefixQuery) { - final PrefixQuery prefixQuery = (PrefixQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "prefix"); - gen.writeStringField("field", prefixQuery.getField()); - gen.writeStringField("text", prefixQuery.getPrefix().text()); - gen.writeEndObject(); - return; - } - - if (query instanceof FuzzyQuery) { - final FuzzyQuery fuzzyQuery = (FuzzyQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "fuzzy"); - gen.writeStringField("field", fuzzyQuery.getField()); - gen.writeStringField("text", fuzzyQuery.getTerm().text()); - gen.writeNumberField("max_edits", fuzzyQuery.getMaxEdits()); - gen.writeNumberField("prefix_length", fuzzyQuery.getPrefixLength()); - gen.writeEndObject(); - return; - } - - if (query instanceof RegexpQuery) { - final RegexpQuery regexpQuery = (RegexpQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "regexp"); - gen.writeStringField("field", regexpQuery.getField()); - gen.writeStringField("text", regexpQuery.getRegexp().text()); - gen.writeEndObject(); - return; - } - - if (query instanceof TermRangeQuery) { - final TermRangeQuery termRangeQuery = (TermRangeQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "term_range"); - gen.writeStringField("field", termRangeQuery.getField()); - gen.writeStringField("lower", termRangeQuery.getLowerTerm().utf8ToString()); - gen.writeBooleanField("includes_lower", termRangeQuery.includesLower()); - gen.writeStringField("upper", termRangeQuery.getUpperTerm().utf8ToString()); - gen.writeBooleanField("includes_upper", termRangeQuery.includesUpper()); - gen.writeEndObject(); - return; - } - - if (query instanceof PointRangeQuery) { - final PointRangeQuery pointRangeQuery = (PointRangeQuery) query; - gen.writeStartObject(); - gen.writeStringField("@type", "point_range"); - gen.writeStringField("field", pointRangeQuery.getField()); - gen.writeBinaryField("lower", pointRangeQuery.getLowerPoint()); - gen.writeBinaryField("upper", pointRangeQuery.getUpperPoint()); - gen.writeNumberField("num_dims", pointRangeQuery.getNumDims()); - gen.writeEndObject(); - } - - if (query instanceof MatchAllDocsQuery) { - gen.writeStartObject(); - gen.writeStringField("@type", "match_all"); - gen.writeEndObject(); - return; - } - - throw new JsonGenerationException(query.getClass() + " not supported", gen); - } -} diff --git a/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene/QuerySerializationTest.java b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene/QuerySerializationTest.java deleted file mode 100644 index 9d20907c9..000000000 --- a/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene/QuerySerializationTest.java +++ /dev/null @@ -1,106 +0,0 @@ -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package org.apache.couchdb.nouveau.lucene; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.lucene.index.Term; -import org.apache.lucene.search.BooleanClause.Occur; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.FuzzyQuery; -import org.apache.lucene.search.MatchAllDocsQuery; -import org.apache.lucene.search.PhraseQuery; -import org.apache.lucene.search.PrefixQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.RegexpQuery; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.WildcardQuery; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -public class QuerySerializationTest { - - private static ObjectMapper mapper; - - @BeforeAll - public static void setup() { - mapper = new ObjectMapper(); - mapper.registerModule(new LuceneModule()); - } - - @Test - public void basicTest() throws Exception { - final BooleanQuery.Builder builder = new BooleanQuery.Builder(); - builder.add(new TermQuery(new Term("foo", "bar")), Occur.MUST); - builder.add(new TermQuery(new Term("foo", "bar")), Occur.MUST_NOT); - builder.add(new TermQuery(new Term("foo", "bar")), Occur.SHOULD); - builder.add(new PhraseQuery("bar", "foo", "bar", "baz"), Occur.MUST); - final Query query = builder.build(); - - final String expected = - "{\"@type\":\"boolean\",\"clauses\":[{\"query\":{\"@type\":\"term\",\"field\":\"foo\",\"term\":\"bar\"},\"occur\":\"must\"},{\"query\":{\"@type\":\"term\",\"field\":\"foo\",\"term\":\"bar\"},\"occur\":\"must_not\"},{\"query\":{\"@type\":\"term\",\"field\":\"foo\",\"term\":\"bar\"},\"occur\":\"should\"},{\"query\":{\"@type\":\"phrase\",\"field\":\"bar\",\"terms\":[\"foo\",\"bar\",\"baz\"],\"slop\":0},\"occur\":\"must\"}]}"; - assertThat(mapper.writeValueAsString(query)).isEqualTo(expected); - } - - @Test - public void deserializeJunk() throws Exception { - assertThrows(JsonParseException.class, () -> { - mapper.readValue("{}", Query.class); - }); - } - - @Test - public void deserializeTermQuery() throws Exception { - assertThat(mapper.readValue("{\"@type\":\"term\", \"field\":\"foo\", \"text\":\"bar\"}", Query.class)) - .isEqualTo(new TermQuery(new Term("foo", "bar"))); - } - - @Test - public void deserializeWildcardQuery() throws Exception { - assertThat(mapper.readValue("{\"@type\":\"wildcard\", \"field\":\"foo\", \"text\":\"bar\"}", Query.class)) - .isEqualTo(new WildcardQuery(new Term("foo", "bar"))); - } - - @Test - public void deserializePrefixQuery() throws Exception { - assertThat(mapper.readValue("{\"@type\":\"prefix\", \"field\":\"foo\", \"text\":\"bar\"}", Query.class)) - .isEqualTo(new PrefixQuery(new Term("foo", "bar"))); - } - - @Test - public void deserializeRegexQuery() throws Exception { - assertThat(mapper.readValue("{\"@type\":\"regexp\", \"field\":\"foo\", \"text\":\"bar\"}", Query.class)) - .isEqualTo(new RegexpQuery(new Term("foo", "bar"))); - } - - @Test - public void deserializeFuzzyQuery() throws Exception { - assertThat(mapper.readValue("{\"@type\":\"fuzzy\", \"field\":\"foo\", \"text\":\"bar\"}", Query.class)) - .isEqualTo(new FuzzyQuery(new Term("foo", "bar"))); - } - - @Test - public void deserializePhraseQuery() throws Exception { - assertThat(mapper.readValue("{\"@type\":\"phrase\", \"field\":\"foo\", \"terms\": [\"bar\"]}", Query.class)) - .isEqualTo(new PhraseQuery.Builder().add(new Term("foo", "bar")).build()); - } - - @Test - public void deserializeMatchAllQuery() throws Exception { - assertThat(mapper.readValue("{\"@type\":\"match_all\"}", Query.class)).isEqualTo(new MatchAllDocsQuery()); - } -}
