public IData getData(final long pDataKey) throws TTIOException {
        checkState(!mDelegate.isClosed(), "Transaction already closed");
        // Calculate bucket and data part for given dataKey.
        final long dataBucketKey = pDataKey >> IConstants.INDIRECT_BUCKET_COUNT[3];
        final int dataBucketOffset = dataBucketOffset(pDataKey);

        final LogKey key = new LogKey(false, IConstants.INDIRECT_BUCKET_COUNT.length, dataBucketKey);
        LogValue container = mLog.get(key);
        IData item = null;
        // Bucket was modified...
        if (container.getModified() != null) {
            // ..check if the real data was touched and set it or..
            if (((DataBucket)container.getModified()).getData(dataBucketOffset) == null) {
                item = ((DataBucket)container.getComplete()).getData(dataBucketOffset);
            }// ..take the data from the complete status of the page.
            else {
                item = ((DataBucket)container.getModified()).getData(dataBucketOffset);
            }
            checkNotNull(item, "Item must be set!");
            item = mDelegate.checkItemIfDeleted(item);
        }// ...bucket was modified within a former version,...
        else {
            // check the former version as..
            container = mFormerLog.get(key);
            // ..modified element within this version or...
            if (container.getModified() != null) {
                // ..check if the real data was touched and set it or..
                if (((DataBucket)container.getModified()).getData(dataBucketOffset) == null) {
                    item = clone(((DataBucket)container.getComplete())).getData(dataBucketOffset);
                }// ..take the data from the complete status of the page.
                else {
                    item = clone(((DataBucket)container.getComplete())).getData(dataBucketOffset);
                }
                checkNotNull(item, "Item must be set!");
                item = mDelegate.checkItemIfDeleted(item);
            }// bucket was modified long long before, read it normally.
            else {
                item = mDelegate.getData(pDataKey);
            }
        }
        return item;
    }
public IData getData ( final long pDataKey ) throws TTIOException { checkState ( ! mDelegate . isClosed ( ) , "Transaction already closed" ) ; final long dataBucketKey = pDataKey > > IConstants . INDIRECT_BUCKET_COUNT [ 3 ] ; final int dataBucketOffset = dataBucketOffset ( pDataKey ) ; final LogKey key = new LogKey ( false , IConstants . INDIRECT_BUCKET_COUNT . length , dataBucketKey ) ; LogValue container = mLog . get ( key ) ; IData item = null ; if ( container . getModified ( ) != null ) { if ( ( ( DataBucket ) container . getModified ( ) ) . getData ( dataBucketOffset ) == null ) { item = ( ( DataBucket ) container . getComplete ( ) ) . getData ( dataBucketOffset ) ; } else { item = ( ( DataBucket ) container . getModified ( ) ) . getData ( dataBucketOffset ) ; } checkNotNull ( item , "Item must be set!" ) ; item = mDelegate . checkItemIfDeleted ( item ) ; } else { container = mFormerLog . get ( key ) ; if ( container . getModified ( ) != null ) { if ( ( ( DataBucket ) container . getModified ( ) ) . getData ( dataBucketOffset ) == null ) { item = clone ( ( ( DataBucket ) container . getComplete ( ) ) ) . getData ( dataBucketOffset ) ; } else { item = clone ( ( ( DataBucket ) container . getComplete ( ) ) ) . getData ( dataBucketOffset ) ; } checkNotNull ( item , "Item must be set!" ) ; item = mDelegate . checkItemIfDeleted ( item ) ; } else { item = mDelegate . getData ( pDataKey ) ; } } return item ; }
{@inheritDoc}