public void writeToFile(IndexCommand command) throws IOException { /* c: commandType * e: entityType * n: indexNameId * k: keyId * i: entityId * v: value type * u: value * x: 0=entityId needs 4b, 1=entityId needs 8b * y: 0=startNode needs 4b, 1=startNode needs 8b * z: 0=endNode needs 4b, 1=endNode needs 8b * * [cccv,vvex][yznn,nnnn][kkkk,kkkk] * [iiii,iiii] x 4 or 8 * (either string value) * [llll,llll][llll,llll][llll,llll][string chars...] * (numeric value) * [uuuu,uuuu] x 2-8 (depending on value type) */ writeIndexCommandHeader(command); putIntOrLong(command.getEntityId()); // Value Object value = command.getValue(); switch (command.getValueType()) { case IndexCommand.VALUE_TYPE_STRING: write3bLengthAndString(channel, value.toString()); break; case IndexCommand.VALUE_TYPE_SHORT: channel.putShort(((Number) value).shortValue()); break; case IndexCommand.VALUE_TYPE_INT: channel.putInt(((Number) value).intValue()); break; case IndexCommand.VALUE_TYPE_LONG: channel.putLong(((Number) value).longValue()); break; case IndexCommand.VALUE_TYPE_FLOAT: channel.putFloat(((Number) value).floatValue()); break; case IndexCommand.VALUE_TYPE_DOUBLE: channel.putDouble(((Number) value).doubleValue()); break; case IndexCommand.VALUE_TYPE_NULL: break; default: throw new RuntimeException("Unknown value type " + command.getValueType()); } }
protected void writeIndexCommandHeader(IndexCommand command) throws IOException { writeIndexCommandHeader( command.getValueType(), command.getEntityType(), needsLong(command.getEntityId()), command.startNodeNeedsLong(), command.endNodeNeedsLong(), command.getIndexNameId(), command.getKeyId()); }