diff --git a/build.gradle b/build.gradle index 9dbdd88..fa3e810 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ subprojects { apply from: rootProject.file('gradle/ide/idea.gradle') apply from: rootProject.file('gradle/compile/java.gradle') apply from: rootProject.file('gradle/test/junit5.gradle') + apply from: rootProject.file('gradle/repositories/maven.gradle') apply from: rootProject.file('gradle/publishing/publication.gradle') } - apply from: rootProject.file('gradle/publishing/sonatype.gradle') diff --git a/cql-elasticsearch/build.gradle b/cql-elasticsearch/build.gradle index b2795db..5d65fcd 100644 --- a/cql-elasticsearch/build.gradle +++ b/cql-elasticsearch/build.gradle @@ -1,4 +1,5 @@ dependencies { api project(':cql-common') - api "org.xbib:content-core:${project.property('xbib-content.version')}" + implementation "org.xbib:content-core:${project.property('xbib-content.version')}" + implementation "org.xbib:content-json:${project.property('xbib-content.version')}" } diff --git a/cql-elasticsearch/src/main/java/module-info.java b/cql-elasticsearch/src/main/java/module-info.java index 14b7b25..fd8fb9a 100644 --- a/cql-elasticsearch/src/main/java/module-info.java +++ b/cql-elasticsearch/src/main/java/module-info.java @@ -3,5 +3,6 @@ module org.xbib.cql.elasticsearch { exports org.xbib.cql.elasticsearch.ast; exports org.xbib.cql.elasticsearch.model; requires transitive org.xbib.cql; - requires transitive org.xbib.content.core; + requires org.xbib.content.core; + requires org.xbib.content.json; } diff --git a/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchQueryGenerator.java b/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchQueryGenerator.java index 36c8516..9aa8bbf 100644 --- a/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchQueryGenerator.java +++ b/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/ElasticsearchQueryGenerator.java @@ -1,6 +1,7 @@ package org.xbib.cql.elasticsearch; import org.xbib.content.XContentBuilder; +import org.xbib.content.core.DefaultXContentBuilder; import org.xbib.cql.BooleanGroup; import org.xbib.cql.BooleanOperator; import org.xbib.cql.CQLParser; @@ -158,7 +159,7 @@ public class ElasticsearchQueryGenerator implements Visitor { } if (model.hasFilter()) { queryGen.startFiltered(); - } else if (filterGenerator.getResult().bytes().length() > 0) { + } else if (filterGenerator.getResult().string().length() > 0) { queryGen.startFiltered(); } Node querynode = stack.pop(); @@ -169,16 +170,18 @@ public class ElasticsearchQueryGenerator implements Visitor { new Expression(Operator.EQUALS, new Name("cql.allIndexes"), querynode); } queryGen.visit((Expression) querynode); - if (model.hasFilter()) { + if (model.hasFilter() && model.getFilterExpression() != null) { queryGen.end(); filterGen = new FilterGenerator(queryGen); filterGen.startFilter(); filterGen.visit(model.getFilterExpression()); filterGen.endFilter(); queryGen.end(); - } else if (filterGenerator.getResult().bytes().length() > 0) { + } else if (filterGenerator.getResult().string().length() > 0) { queryGen.end(); - queryGen.getResult().rawField("filter", filterGenerator.getResult().bytes().toBytes()); + DefaultXContentBuilder contentBuilder = (DefaultXContentBuilder) filterGenerator.getResult(); + byte[] b = contentBuilder.bytes().toBytes(); + queryGen.getResult().rawField("filter", b, 0, b.length); queryGen.endFiltered(); } if (boostField != null) { diff --git a/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/SourceGenerator.java b/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/SourceGenerator.java index a6b8801..2151bdc 100644 --- a/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/SourceGenerator.java +++ b/cql-elasticsearch/src/main/java/org/xbib/cql/elasticsearch/SourceGenerator.java @@ -1,13 +1,11 @@ package org.xbib.cql.elasticsearch; import org.xbib.content.XContentBuilder; +import org.xbib.content.core.DefaultXContentBuilder; import org.xbib.content.json.JsonXContent; import java.io.IOException; -/** - * - */ public class SourceGenerator { private final XContentBuilder builder; @@ -16,22 +14,27 @@ public class SourceGenerator { this.builder = JsonXContent.contentBuilder(); } - public void build(QueryGenerator query, - int from, int size) throws IOException { + public void build(QueryGenerator query) throws IOException { + build(query, null, null, null, null); + } + + public void build(QueryGenerator query, Integer from, Integer size) throws IOException { build(query, from, size, null, null); } - public void build(QueryGenerator query, int from, int size, XContentBuilder sort, XContentBuilder facets) - throws IOException { + public void build(QueryGenerator query, Integer from, Integer size, + XContentBuilder sort, XContentBuilder facets) throws IOException { builder.startObject(); - builder.field("from", from); - builder.field("size", size); - builder.rawField("query", query.getResult().bytes().toBytes()); - if (sort != null && sort.bytes().length() > 0) { - builder.rawField("sort", sort.bytes().toBytes()); - } - if (facets != null && facets.bytes().length() > 0) { - builder.rawField("aggregations", facets.bytes().toBytes()); + if (query != null) { + if (from != null) { + builder.field("from", from); + } + if (size != null) { + builder.field("size", size); + } + copy(builder, "query", query.getResult()); + copy(builder, "sort", sort); + copy(builder, "aggregations", facets); } builder.endObject(); builder.close(); @@ -40,4 +43,14 @@ public class SourceGenerator { public XContentBuilder getResult() { return builder; } + + private void copy(XContentBuilder builder, String rawFieldName, XContentBuilder anotherBuilder) throws IOException { + if (anotherBuilder != null) { + DefaultXContentBuilder contentBuilder = (DefaultXContentBuilder) anotherBuilder; + if (contentBuilder.bytes().length() > 0) { + byte[] b = contentBuilder.bytes().toBytes(); + builder.rawField(rawFieldName, b, 0, b.length); + } + } + } } diff --git a/gradle.properties b/gradle.properties index 4c5dcd7..77c580a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ group = org.xbib name = cql -version = 3.0.5 +version = 3.1.0 gradle.wrapper.version = 6.6.1 -xbib-content.version = 2.6.4 +xbib-content.version = 3.0.0 diff --git a/gradle/publishing/publication.gradle b/gradle/publishing/publication.gradle index c35fcb9..2e2b2c0 100644 --- a/gradle/publishing/publication.gradle +++ b/gradle/publishing/publication.gradle @@ -53,12 +53,14 @@ if (project.hasProperty("signing.keyId")) { } } -nexusPublishing { - repositories { - sonatype { - username = project.property('ossrhUsername') - password = project.property('ossrhPassword') - packageGroup = "org.xbib" +if (project.hasProperty("ossrhUsername")) { + nexusPublishing { + repositories { + sonatype { + username = project.property('ossrhUsername') + password = project.property('ossrhPassword') + packageGroup = "org.xbib" + } } } } diff --git a/gradle/repositories/maven.gradle b/gradle/repositories/maven.gradle new file mode 100644 index 0000000..ec58acb --- /dev/null +++ b/gradle/repositories/maven.gradle @@ -0,0 +1,4 @@ +repositories { + mavenLocal() + mavenCentral() +}