From d468c1aff08b6d13763df9bbdfda958ec723bb75 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 19 May 2021 21:51:00 +0200 Subject: Prepare for raw fields to be presented as base64 encoded in summary. --- container-search/abi-spec.json | 12 +++++++++++ .../yahoo/prelude/fastsearch/Base64DataField.java | 25 ++++++++++++++++++++++ .../com/yahoo/prelude/fastsearch/DataField.java | 2 +- .../com/yahoo/prelude/fastsearch/DocsumField.java | 1 + .../java/com/yahoo/prelude/hitfield/RawBase64.java | 18 ++++++++++++++++ 5 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 container-search/src/main/java/com/yahoo/prelude/fastsearch/Base64DataField.java create mode 100644 container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java (limited to 'container-search') diff --git a/container-search/abi-spec.json b/container-search/abi-spec.json index 74ed9d33f04..b577660c1b9 100644 --- a/container-search/abi-spec.json +++ b/container-search/abi-spec.json @@ -201,6 +201,18 @@ ], "fields": [] }, + "com.yahoo.prelude.hitfield.RawBase64": { + "superClass": "java.lang.Object", + "interfaces": [], + "attributes": [ + "public" + ], + "methods": [ + "public void (byte[])", + "public java.lang.String toString()" + ], + "fields": [] + }, "com.yahoo.prelude.hitfield.RawData": { "superClass": "java.lang.Object", "interfaces": [], diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/Base64DataField.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/Base64DataField.java new file mode 100644 index 00000000000..d51bdc0fad1 --- /dev/null +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/Base64DataField.java @@ -0,0 +1,25 @@ +package com.yahoo.prelude.fastsearch; + +import com.yahoo.data.access.Inspector; +import com.yahoo.data.access.simple.Value; +import com.yahoo.prelude.hitfield.RawBase64; + +/** + * Represents a binary field that is presented as base64 + * @author baldersheim + */ +public class Base64DataField extends DocsumField { + public Base64DataField(String name) { + super(name); + } + + @Override + public String toString() { + return "field " + getName() + " type raw"; + } + + @Override + public Object convert(Inspector value) { + return new RawBase64(value.asData(Value.empty().asData())); + } +} diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DataField.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DataField.java index de07839e3e3..af7d98311f6 100644 --- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DataField.java +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DataField.java @@ -23,7 +23,7 @@ public class DataField extends DocsumField { super(name); } - private Object convert(byte[] value) { + private RawData convert(byte[] value) { return new RawData(value); } diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumField.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumField.java index ef892585d21..70ffc71495a 100644 --- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumField.java +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/DocsumField.java @@ -51,6 +51,7 @@ public abstract class DocsumField { fieldFactory.put("double", DoubleField.class); fieldFactory.put("string", StringField.class); fieldFactory.put("data", DataField.class); + fieldFactory.put("raw", Base64DataField.class); fieldFactory.put("longstring", LongstringField.class); fieldFactory.put("longdata", LongdataField.class); fieldFactory.put("jsonstring", StructDataField.class); diff --git a/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java b/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java new file mode 100644 index 00000000000..134d0bc902a --- /dev/null +++ b/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java @@ -0,0 +1,18 @@ +package com.yahoo.prelude.hitfield; + +import java.util.Base64; + +/** + * @author baldersheim + */ +public class RawBase64 { + private final byte[] content; + public RawBase64(byte[] content) { + this.content = content; + } + + @Override + public String toString() { + return Base64.getEncoder().encodeToString(content); + } +} -- cgit v1.2.3