@Override
public void insertKey(Key key) throws JasDBStorageException {
if(isLeave) {
addKey(key);
modified = true;
if(treeNodes.size() > persister.getMaxKeys()) {
List<TreeNode>[] leaveValues = treeNodes.split();
List<TreeNode> leftLeaves = leaveValues[0];
List<TreeNode> rightLeaves = leaveValues[1];
treeNodes.reset();
LeaveBlockImpl leftLeaveBlock = (LeaveBlockImpl) persister.createBlock(BlockTypes.LEAVEBLOCK, getPosition());
LeaveBlockImpl rightLeaveBlock = (LeaveBlockImpl) persister.createBlock(BlockTypes.LEAVEBLOCK, getPosition());
leftLeaveBlock.setNext(rightLeaveBlock.getPosition());
rightLeaveBlock.setPrevious(leftLeaveBlock.getPosition());
addKeys(leftLeaves, leftLeaveBlock);
addKeys(rightLeaves, rightLeaveBlock);
Key promoteKey = leftLeaves.get(leftLeaves.size() - 1).getKey();
TreeNode rootNode = new TreeNode(promoteKey, leftLeaveBlock.getPosition(), rightLeaveBlock.getPosition());
treeNodes.put(promoteKey, rootNode);
isLeave = false;
RootBlockFactory.writeHeader(getDataBlock(), false);
}
} else {
throw new JasDBStorageException("Unable to store key, root is not a leave");
}
}