public void field(String name, com.yahoo.slime.Inspector inspector) { list.add(new AbstractMap.SimpleImmutableEntry<String,com.yahoo.data.access.Inspector>(name, new SlimeAdapter(inspector))); } });
public void entry(int idx, com.yahoo.slime.Inspector inspector) { list.add(new SlimeAdapter(inspector)); } });
public void traverse(final com.yahoo.data.access.ObjectTraverser ot) { inspector.traverse(new com.yahoo.slime.ObjectTraverser() { public void field(String name, com.yahoo.slime.Inspector inspector) { ot.field(name, new SlimeAdapter(inspector)); } }); } public com.yahoo.data.access.Inspector entry(int idx) { return new SlimeAdapter(inspector.entry(idx)); }
public Iterable<com.yahoo.data.access.Inspector> entries() { final List<com.yahoo.data.access.Inspector> list = new ArrayList<>(); inspector.traverse(new com.yahoo.slime.ArrayTraverser() { public void entry(int idx, com.yahoo.slime.Inspector inspector) { list.add(new SlimeAdapter(inspector)); } }); return list; } public Iterable<Map.Entry<String,com.yahoo.data.access.Inspector>> fields() {
public void traverse(final com.yahoo.data.access.ArrayTraverser at) { inspector.traverse(new com.yahoo.slime.ArrayTraverser() { public void entry(int idx, com.yahoo.slime.Inspector inspector) { at.entry(idx, new SlimeAdapter(inspector)); } }); } public void traverse(final com.yahoo.data.access.ObjectTraverser ot) {
public void field(String name, com.yahoo.slime.Inspector inspector) { ot.field(name, new SlimeAdapter(inspector)); } });
public void entry(int idx, com.yahoo.slime.Inspector inspector) { at.entry(idx, new SlimeAdapter(inspector)); } });
public com.yahoo.data.access.Inspector entry(int idx) { return new SlimeAdapter(inspector.entry(idx)); } public com.yahoo.data.access.Inspector field(String name) { return new SlimeAdapter(inspector.field(name)); }
public com.yahoo.data.access.Inspector field(String name) { return new SlimeAdapter(inspector.field(name)); } public Iterable<com.yahoo.data.access.Inspector> entries() {
/** * Makes data available for decoding for the given hit. * * @param summaryClass the requested summary class * @param data docsum data from backend * @param hit the Hit corresponding to this document summary * @return Error message or null on success. * @throws ConfigurationException if the summary class of this hit is missing */ public final String lazyDecode(String summaryClass, byte[] data, FastHit hit) { ByteBuffer buffer = ByteBuffer.wrap(data); buffer.order(ByteOrder.LITTLE_ENDIAN); long docsumClassId = buffer.getInt(); if (docsumClassId != SLIME_MAGIC_ID) { throw new IllegalArgumentException("Only expecting SchemaLess docsums - summary class:" + summaryClass + " hit:" + hit); } DocsumDefinition docsumDefinition = getDocsum(summaryClass); Slime value = BinaryFormat.decode(buffer.array(), buffer.arrayOffset()+buffer.position(), buffer.remaining()); Inspector docsum = new SlimeAdapter(value.get()); if (docsum.type() != OBJECT) { return "Hit " + hit + " failed: " + docsum.asString(); } hit.addSummary(docsumDefinition, docsum); return null; }
private int fill(List<FastHit> hits, String summaryClass, DocumentDatabase documentDb, byte[] slimeBytes) { com.yahoo.slime.Inspector root = BinaryFormat.decode(slimeBytes).get(); com.yahoo.slime.Inspector errors = root.field("errors"); boolean hasErrors = errors.valid() && (errors.entries() > 0); if (hasErrors) { addErrors(errors); } Inspector summaries = new SlimeAdapter(root.field("docsums")); if ( ! summaries.valid()) return 0; // No summaries; Perhaps we requested a non-existing summary class int skippedHits = 0; for (int i = 0; i < hits.size(); i++) { Inspector summary = summaries.entry(i).field("docsum"); if (summary.fieldCount() != 0) { hits.get(i).setField(Hit.SDDOCNAME_FIELD, documentDb.getName()); hits.get(i).addSummary(documentDb.getDocsumDefinitionSet().getDocsum(summaryClass), summary); hits.get(i).setFilled(summaryClass); } else { skippedHits++; } } return skippedHits; }
public Inspector inspect() { if (value == null) { JsonDecoder decoder = new JsonDecoder(); Slime slime = decoder.decode(new Slime(), Utf8.toBytes(content)); if (slime.get().field("error_message").valid() && slime.get().field("partial_result").valid() && slime.get().field("offending_input").valid()) { // probably a json parse error... value = new Value.StringValue(content); } else if (slime.get().type() == com.yahoo.slime.Type.OBJECT || slime.get().type() == com.yahoo.slime.Type.ARRAY) { // valid json object or array value = new SlimeAdapter(slime.get()); } else { // 'valid' json, but leaf value value = new Value.StringValue(content); } } return value; }