@Override public void writeKeys(Key sourceKey, int offset, ByteBuffer keyBuffer) throws JasDBStorageException { int curPosition = offset; for(KeyFactory keyFactory : keyFactories) { Key value = sourceKey.getKey(keyNameMapper, keyFactory.getFieldName()); if(value != null) { keyFactory.writeKey(value, curPosition, keyBuffer); } curPosition += keyFactory.getKeySize(); } }
@Override public void enrichKey(IndexableItem indexableItem, Key key) throws JasDBStorageException { for(KeyFactory keyFactory : keyFactories) { Key createdKey = keyFactory.createKey(indexableItem); key.addKey(keyNameMapper, keyFactory.getFieldName(), createdKey); } } }
@Override public void loadKeys(Key targetKey, int offset, ByteBuffer keyBuffer) throws JasDBStorageException { int curPosition = offset; for(KeyFactory keyFactory : keyFactories) { Key valueKey = keyFactory.loadKey(curPosition, keyBuffer); targetKey.addKey(keyNameMapper, keyFactory.getFieldName(), valueKey); curPosition += keyFactory.getKeySize(); } }
@Override public KeyLoadResult loadKeys(Key targetKey, int offset, DataBlock dataBlock) throws JasDBStorageException { int curOffset = offset; DataBlock currentBlock = dataBlock; for(KeyFactory keyFactory : keyFactories) { KeyLoadResult valueKeyResult = keyFactory.loadKey(curOffset, currentBlock); targetKey.addKey(keyNameMapper, keyFactory.getFieldName(), valueKeyResult.getLoadedKey()); currentBlock = valueKeyResult.getEndBlock(); curOffset = valueKeyResult.getNextOffset(); } return new KeyLoadResultImpl(targetKey, currentBlock, curOffset); }
@Override public KeyLoadResult loadKey(int curPosition, DataBlock dataBlock) throws JasDBStorageException { KeyLoadResult loadResult = keyFactory.loadKey(curPosition, dataBlock); if(loadResult != null) { loadResult = this.multiValueKeyLoader.loadKeys(loadResult.getLoadedKey(), loadResult.getNextOffset(), loadResult.getEndBlock()); return loadResult; } else { return null; } }
private void mergeKeys(Key mergeInto, Key mergeFrom, KeyNameMapper sourceNameMapper, KeyNameMapper targetNameMapper) { Set<String> sourceFields = sourceNameMapper.getFieldSet(); sourceFields.removeAll(targetNameMapper.getFieldSet()); if(!sourceFields.isEmpty()) { for(String sourceField : sourceFields) { targetNameMapper.addMappedField(sourceField); mergeInto.addKey(targetNameMapper, sourceField, mergeFrom); } } } }
protected KeyLoadResult loadKeyResult(TreeBlock treeBlock, int offset, DataBlock dataBlock) throws JasDBStorageException { return keyInfo.getKeyFactory().loadKey(offset, dataBlock); }
protected DataBlock writeKey(TreeBlock treeBlock, Key key, DataBlock dataBlock) throws JasDBStorageException { return keyInfo.getKeyFactory().writeKey(key, dataBlock); }
private Key validateKey(KeyFactory factory, Key key) throws JasDBStorageException { if(key != null && !factory.supportsKey(key)) { return factory.convertKey(key); } else { return key; } }
private void calculateKeySize() { for(KeyFactory keyFactory : keyFactories) { diskSize += keyFactory.getKeySize(); memorySize += keyFactory.getMemorySize(); } }
@Override public long size() { long size = MemoryConstants.OBJECT_SIZE; if(keys != null) { size += MemoryConstants.ARRAY_SIZE + MemoryConstants.OBJECT_SIZE; for(Key key : keys) { size += key.size() + MemoryConstants.OBJECT_REF; } } return size; }
@Override public KeyLoadResult loadKey(int offset, DataBlock dataBlock) throws JasDBStorageException { return wrappedKeyFactory.loadKey(offset, dataBlock); }
@Override public boolean isMultiValueKey(IndexableItem indexableItem) throws JasDBStorageException { return wrappedKeyFactory.isMultiValueKey(indexableItem); }
@Override public Key convertKey(Key key) throws JasDBStorageException { return wrappedKeyFactory.convertKey(key); }
@Override public String getFieldName() { return wrappedKeyFactory.getFieldName(); } }
@Override public CompareResult compare(Key otherKey, CompareMethod method) { return new CompareResult(ALWAYS_EQUALS); } }
@Override public String toString() { return key.toString(); } }
@Override public String getKeyId() { return wrappedKeyFactory.getKeyId(); }
@Override public String asHeader() { return wrappedKeyFactory.asHeader(); }
@Override public String getKeyName() { return this.keyFactory.getFieldName(); }