@Override public RecordId fromBytes(DataInput dataInput, IdGeneratorImpl idGenerator) { if (dataInput.indexOf((byte) 0) != -1) { throw new IllegalArgumentException("The NULL character is not allowed in USER record id's."); } String id = dataInput.readUTF(dataInput.getSize() - dataInput.getPosition()); // read the remainder of the data input return new UserRecordId(id, idGenerator); }
@Override public DataInput[] splitInMasterAndVariant(DataInput dataInput) { if (dataInput.getSize() - dataInput.getPosition() > UUID_LENGTH) { DataInput keyInput = new DataInputImpl(((DataInputImpl) dataInput), dataInput.getPosition(), dataInput.getPosition() + 16); DataInput variantInput = new DataInputImpl(((DataInputImpl) dataInput), dataInput.getPosition() + 16, dataInput.getSize() - 17); return new DataInput[]{keyInput, variantInput}; } else { return new DataInput[]{dataInput, null}; } }
protected VariantRecordId(RecordId masterRecordId, DataInput dataInput, IdGeneratorImpl idGenerator) { this.masterRecordId = masterRecordId; this.idGenerator = idGenerator; SortedMap<String, String> varProps = createVariantPropertiesMap(); while (dataInput.getPosition() < dataInput.getSize()) { String dimension = dataInput.readVUTF(); String dimensionValue = dataInput.readVUTF(); IdGeneratorImpl.checkVariantPropertyNameValue(dimension); IdGeneratorImpl.checkVariantPropertyNameValue(dimensionValue); varProps.put(dimension, dimensionValue); } this.variantProperties = Collections.unmodifiableSortedMap(varProps); }
@Override public DataInput[] splitInMasterAndVariant(DataInput dataInput) { // Search for separator byte int sepPos = dataInput.indexOf(VARIANT_SEPARATOR); if (sepPos == -1) { return new DataInput[]{dataInput, null}; } else { DataInput keyInput = new DataInputImpl(((DataInputImpl) dataInput), dataInput.getPosition(), sepPos - dataInput.getPosition()); DataInput variantInput = new DataInputImpl(((DataInputImpl) dataInput), sepPos + 1, dataInput.getSize() - (sepPos + 1)); return new DataInput[]{keyInput, variantInput}; } }