package com.after_sunrise.oss.otdb.je.binding; import com.after_sunrise.oss.otdb.je.entity.TickSource; import com.sleepycat.bind.tuple.PackedLongBinding; import com.sleepycat.bind.tuple.TupleBinding; import com.sleepycat.bind.tuple.TupleInput; import com.sleepycat.bind.tuple.TupleOutput; import com.sleepycat.je.DatabaseEntry; import com.sleepycat.je.SecondaryDatabase; import com.sleepycat.je.SecondaryKeyCreator; /** * @author takanori.takase */ public class TickSourceBinding extends TupleBinding<TickSource> implements SecondaryKeyCreator { private final PackedLongBinding idBinding = new PackedLongBinding(); @Override public boolean createSecondaryKey(SecondaryDatabase secondary, DatabaseEntry key, DatabaseEntry data, DatabaseEntry result) { TickSource source = entryToObject(data); idBinding.objectToEntry(source.getId(), result); return true; } @Override public TickSource entryToObject(TupleInput input) { TickSource source = new TickSource(input.readPackedLong()); if (input.readBoolean()) { source.setStartTime(input.readPackedLong()); } if (input.readBoolean()) { source.setEndTime(input.readPackedLong()); } if (input.readBoolean()) { source.setCount(input.readPackedLong()); } if (input.readBoolean()) { source.setDeleted(input.readBoolean()); } return source; } @Override public void objectToEntry(TickSource object, TupleOutput output) { output.writePackedLong(object.getId()); write(object.getStartTime(), output); write(object.getEndTime(), output); write(object.getCount(), output); write(object.getDeleted(), output); } private void write(Long value, TupleOutput output) { if (value == null) { output.writeBoolean(false); } else { output.writeBoolean(true); output.writePackedLong(value); } } private void write(Boolean value, TupleOutput output) { if (value == null) { output.writeBoolean(false); } else { output.writeBoolean(true); output.writeBoolean(value); } } }