Skip to content

Commit fb21bfe

Browse files
author
ehennum
committed
Optic enhancements #1282
1 parent 9cd8766 commit fb21bfe

File tree

19 files changed

+1305
-414
lines changed

19 files changed

+1305
-414
lines changed

marklogic-client-api/src/main/java/com/marklogic/client/expression/PlanBuilder.java

Lines changed: 98 additions & 32 deletions
Large diffs are not rendered by default.

marklogic-client-api/src/main/java/com/marklogic/client/expression/PlanBuilderBase.java

Lines changed: 79 additions & 48 deletions
Large diffs are not rendered by default.

marklogic-client-api/src/main/java/com/marklogic/client/impl/NodeConverter.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616
package com.marklogic.client.impl;
1717

1818
import com.fasterxml.jackson.core.JsonParser;
19+
import com.fasterxml.jackson.core.JsonProcessingException;
1920
import com.fasterxml.jackson.databind.JsonNode;
2021
import com.fasterxml.jackson.databind.ObjectMapper;
2122
import com.fasterxml.jackson.databind.node.ArrayNode;
2223
import com.fasterxml.jackson.databind.node.ObjectNode;
24+
import com.marklogic.client.MarkLogicIOException;
2325
import com.marklogic.client.io.*;
2426
import com.marklogic.client.io.marker.*;
2527
import org.w3c.dom.Document;
@@ -595,6 +597,43 @@ static public String ReaderToString(Reader reader) {
595597
}
596598
}
597599

600+
static public <T extends JSONReadHandle> T jsonNodeToHandle(JsonNode node, T handle) {
601+
if (node == null) {
602+
return null;
603+
} else if (handle == null) {
604+
throw new IllegalArgumentException("cannot convert JSON node to null handle");
605+
}
606+
607+
try {
608+
HandleImplementation handleImpl = HandleAccessor.checkHandle(handle, "json");
609+
610+
Class<?> as = handleImpl.receiveAs();
611+
if (as == null) {
612+
throw new IllegalArgumentException("handle does not specify class to receive content");
613+
} else if (byte[].class.isAssignableFrom(as)) {
614+
handleImpl.receiveContent(getMapper().writeValueAsBytes(node));
615+
} else if (File.class.isAssignableFrom(as)) {
616+
Path tempFile = Files.createTempFile("tmp", ".json");
617+
Files.copy(new ByteArrayInputStream(getMapper().writeValueAsBytes(node)), tempFile, StandardCopyOption.REPLACE_EXISTING);
618+
handleImpl.receiveContent(tempFile.toFile());
619+
// TODO: JsonParser.class.isAssignableFrom(as)
620+
} else if (InputStream.class.isAssignableFrom(as)) {
621+
handleImpl.receiveContent(new ByteArrayInputStream(getMapper().writeValueAsBytes(node)));
622+
} else if (Reader.class.isAssignableFrom(as)) {
623+
handleImpl.receiveContent(new StringReader(getMapper().writeValueAsString(node)));
624+
} else if (String.class.isAssignableFrom(as)) {
625+
handleImpl.receiveContent(getMapper().writeValueAsString(node));
626+
} else {
627+
throw new IllegalArgumentException("handle receives content with unsupported class: "+as.getSimpleName());
628+
}
629+
630+
return handle;
631+
} catch (JsonProcessingException e) {
632+
throw new MarkLogicIOException("could not set handle to JsonNode", e);
633+
} catch (IOException e) {
634+
throw new MarkLogicIOException("could not create file for JsonNode", e);
635+
}
636+
}
598637
static public JsonNode handleToJsonNode(JSONWriteHandle jsonHandle) {
599638
if (jsonHandle == null) {
600639
return null;

marklogic-client-api/src/main/java/com/marklogic/client/impl/PlanBuilderBaseImpl.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package com.marklogic.client.impl;
1717

18+
import java.util.HashMap;
1819
import java.util.Map;
1920

2021
import com.marklogic.client.DatabaseClientFactory.HandleFactoryRegistry;
@@ -24,6 +25,8 @@
2425
import com.marklogic.client.io.marker.AbstractWriteHandle;
2526
import com.marklogic.client.type.PlanColumn;
2627
import com.marklogic.client.type.PlanParamExpr;
28+
import com.marklogic.client.type.PlanSearchOptions;
29+
import com.marklogic.client.type.XsDoubleVal;
2730

2831
abstract class PlanBuilderBaseImpl extends PlanBuilder {
2932
final static PlanBuilderSubImpl pb = new PlanBuilderSubImpl();
@@ -53,6 +56,57 @@ static BaseTypeImpl.Literal literal(Object value) {
5356
return new BaseTypeImpl.Literal(value);
5457
}
5558

59+
public PlanSearchOptions searchOptions() {
60+
return new PlanSearchOptionsImpl(this);
61+
}
62+
63+
static class PlanSearchOptionsImpl implements PlanSearchOptions {
64+
private PlanBuilderBaseImpl pb;
65+
private XsDoubleVal qualityWeight;
66+
private ScoreMethod scoreMethod;
67+
PlanSearchOptionsImpl(PlanBuilderBaseImpl pb) {
68+
this.pb = pb;
69+
}
70+
PlanSearchOptionsImpl(PlanBuilderBaseImpl pb, XsDoubleVal qualityWeight, ScoreMethod scoreMethod) {
71+
this(pb);
72+
this.qualityWeight = qualityWeight;
73+
this.scoreMethod = scoreMethod;
74+
}
75+
76+
@Override
77+
public XsDoubleVal getQualityWeight() {
78+
return qualityWeight;
79+
}
80+
@Override
81+
public ScoreMethod getScoreMethod() {
82+
return scoreMethod;
83+
}
84+
@Override
85+
public PlanSearchOptions withQualityWeight(double qualityWeight) {
86+
return withQualityWeight(pb.xs.doubleVal(qualityWeight));
87+
}
88+
@Override
89+
public PlanSearchOptions withQualityWeight(XsDoubleVal qualityWeight) {
90+
return new PlanSearchOptionsImpl(pb, qualityWeight, getScoreMethod());
91+
}
92+
@Override
93+
public PlanSearchOptions withScoreMethod(ScoreMethod scoreMethod) {
94+
return new PlanSearchOptionsImpl(pb, getQualityWeight(), scoreMethod);
95+
}
96+
Map<String,String> makeMap() {
97+
if (qualityWeight == null && scoreMethod == null) return null;
98+
99+
Map<String, String> map = new HashMap<String, String>();
100+
if (qualityWeight != null) {
101+
map.put("qualityWeight", String.valueOf(qualityWeight));
102+
}
103+
if (scoreMethod != null) {
104+
map.put("scoreMethod", scoreMethod.name().toLowerCase());
105+
}
106+
return map;
107+
}
108+
}
109+
56110
static class PlanParamBase extends BaseTypeImpl.BaseCallImpl<XsValueImpl.StringValImpl> implements PlanParamExpr {
57111
String name = null;
58112
PlanParamBase(String name) {
@@ -121,6 +175,9 @@ String getAst() {
121175
public PlanColumn col(String column) {
122176
return pb.col(column);
123177
}
178+
public PlanColumn exprCol(String column) {
179+
return pb.exprCol(column);
180+
}
124181
}
125182

126183
static class PlanCallImpl extends BaseTypeImpl.ServerExpressionCallImpl {

0 commit comments

Comments
 (0)