@Override public Iterator<Entry<Field, FieldValue>> iterator() { return doc.iterator(); }
/** * Copies fields from one document to another based on whether the fields match the given * fieldset. */ public void copyFields(Document source, Document target, FieldSet fieldSet) { for (Iterator<Map.Entry<Field, FieldValue>> i = source.iterator(); i.hasNext();) { Map.Entry<Field, FieldValue> v = i.next(); if (fieldSet.contains(v.getKey())) { target.setFieldValue(v.getKey(), v.getValue()); } } }
/** * Strips all fields not wanted by the given field set from the document. */ public void stripFields(Document target, FieldSet fieldSet) { List<Field> toStrip = new ArrayList<Field>(); for (Iterator<Map.Entry<Field, FieldValue>> i = target.iterator(); i.hasNext();) { Map.Entry<Field, FieldValue> v = i.next(); if (!fieldSet.contains(v.getKey())) { toStrip.add(v.getKey()); } } for (Field f : toStrip) { target.removeFieldValue(f); } } }
@Override public void write(FieldBase field, Document value) { try { fieldNameIfNotNull(generator, field); generator.writeStartObject(); // this makes it impossible to refeed directly, not sure what's correct // perhaps just change to "put"? generator.writeStringField("id", value.getId().toString()); generator.writeObjectFieldStart(FIELDS); Iterator<Map.Entry<Field, FieldValue>> i = value.iterator(); while (i.hasNext()) { Map.Entry<Field, FieldValue> entry = i.next(); entry.getValue().serialize(entry.getKey(), this); } generator.writeEndObject(); generator.writeEndObject(); generator.flush(); } catch (IOException e) { throw new RuntimeException(e); } }
@Override public DocumentUpdate getOutput() { Document doc = adapter.getUpdatableOutput(); DocumentUpdate upd = new DocumentUpdate(doc.getDataType(), doc.getId()); for (Iterator<Map.Entry<Field, FieldValue>> it = doc.iterator(); it.hasNext();) { Map.Entry<Field, FieldValue> entry = it.next(); Field field = entry.getKey(); if (field.getName().equals("sddocname")) { continue; } FieldUpdate fieldUpd = FieldUpdate.create(field); fieldUpd.addValueUpdates(builder.build(entry.getValue())); if (!fieldUpd.isEmpty()) { upd.addFieldUpdate(fieldUpd); } } return upd.isEmpty() ? null : upd; }