@Override public void doWriteStartDocument() { BsonContextType contextType = getState() == State.SCOPE_DOCUMENT ? BsonContextType.SCOPE_DOCUMENT : BsonContextType.DOCUMENT; if (getContext() == null || contextType == BsonContextType.SCOPE_DOCUMENT) { bsonCallback.objectStart(); } else { bsonCallback.objectStart(getName()); } setContext(new Context(getContext(), contextType)); }
@Override public void doWriteBoolean(final boolean value) { bsonCallback.gotBoolean(getName(), value); setState(getNextState()); }
@Override protected void doWriteJavaScriptWithScope(final String value) { getContext().callback = bsonCallback; getContext().code = value; getContext().name = getName(); this.bsonCallback = bsonCallback.createBSONCallback(); }
@Override protected void doWriteInt64(final long value) { bsonCallback.gotLong(getName(), value); }
@Override public void doWriteStartArray() { bsonCallback.arrayStart(getName()); setContext(new Context(getContext(), BsonContextType.ARRAY)); }
@Override protected void doWriteEndDocument() { BsonContextType contextType = getContext().getContextType(); setContext(getContext().getParentContext()); bsonCallback.objectDone(); if (contextType == BsonContextType.SCOPE_DOCUMENT) { Object scope = bsonCallback.get(); bsonCallback = getContext().callback; bsonCallback.gotCodeWScope(getContext().name, getContext().code, scope); } }
@Override protected String getName() { if (getContext().getContextType() == BsonContextType.ARRAY) { return Integer.toString(getContext().index++); } else { return super.getName(); } }
@Override public int decode(final byte[] bytes, final BSONCallback callback) { BsonBinaryReader reader = new BsonBinaryReader(new ByteBufferBsonInput(new ByteBufNIO(ByteBuffer.wrap(bytes)))); try { BsonWriter writer = new BSONCallbackAdapter(new BsonWriterSettings(), callback); writer.pipe(reader); return reader.getBsonInput().getPosition(); //TODO check this. } finally { reader.close(); } }
@Override protected void doWriteJavaScript(final String value) { bsonCallback.gotCode(getName(), value); }
@Override protected void doWriteEndArray() { setContext(getContext().getParentContext()); bsonCallback.arrayDone(); }
@Override public void doWriteString(final String value) { bsonCallback.gotString(getName(), value); }
@Override public void doWriteSymbol(final String value) { bsonCallback.gotSymbol(getName(), value); }
@Override public void doWriteNull() { bsonCallback.gotNull(getName()); }
@Override public void doWriteUndefined() { bsonCallback.gotUndefined(getName()); }
@Override protected void doWriteDateTime(final long value) { bsonCallback.gotDate(getName(), value); }
@Override protected void doWriteDouble(final double value) { bsonCallback.gotDouble(getName(), value); }
@Override protected void doWriteDecimal128(final Decimal128 value) { bsonCallback.gotDecimal128(getName(), value); }
@Override protected void doWriteInt32(final int value) { bsonCallback.gotInt(getName(), value); }
@Override protected void doWriteMaxKey() { bsonCallback.gotMaxKey(getName()); }
@Override protected void doWriteMinKey() { bsonCallback.gotMinKey(getName()); }