A solution for this could be to split the `readOriginalRow()` into multiple (which is a good idea anyway, since it apparently does multiple things), for example a method `hasAnythingToRead()` which returns true or false, based on whether there is anything to read and the `readOriginalRow()` does the actual reading. The code block commented on here, would then become:
```
if (originalRow == null) {
    if (!isAnythingToRead()) {
        return null /* we got to the end, endOfData() was called */
    } else {
        readOriginalRow()
    }
}
````
The advantage of this is that the code more clearly explains what happens.
(most probably the `hasAnythingToRead()` method can be named better)