package com.openfarmanager.android.model; import com.openfarmanager.android.fragments.Viewer; import java.util.ArrayList; public class ViewerBigFileTextViewer implements TextBuffer { private ArrayList<String> mLines; private int mCurrentFragment; private int mSize = 0; private boolean mHasUpperFragment; private boolean mHasBottomFragment; @Override public String getLine(int lineNumber) { if (lineNumber == 0 && mHasUpperFragment) { return "..."; } else if (lineNumber == mSize - 1 && mHasBottomFragment) { return "..."; } if (mHasUpperFragment) { lineNumber--; } return mLines.get(lineNumber); } @Override public ArrayList<String> getTextLines() { return mLines; } @Override public int size() { return mSize; } @Override public void setLine(int lineNumber, String text) { } @Override public void appendEmptyLine() { } @Override public void swapData(ArrayList<String> strings) { // swap data is called as initial step, so upper lines will zero-fragment, current fragment is first. mCurrentFragment = 0; setLines(strings); } public void setLines(ArrayList<String> lines) { mLines = lines; mSize = mLines.size(); mHasUpperFragment = mCurrentFragment > 0; mHasBottomFragment = mLines.size() == Viewer.LINES_COUNT_FRAGMENT; if (mHasUpperFragment) { mSize++; } if (mHasBottomFragment) { mSize++; } } /** * Get next fragment and increment internal state of current fragment. * * @return incremented fragment. */ public int nextFragment() { return ++mCurrentFragment; } /** * Get previous fragment and decrement internal state of current fragment. * * @return decremented fragment */ public int previousFragment() { return --mCurrentFragment; } /** * Check if current fragment has upper parent, i.e. current fragment is not first in file. * * @return <code>true</code> if current fragment has upper fragment, <code>false</code> otherwise. */ public boolean hasUpperFragment() { return mHasUpperFragment; } /** * Check if current fragment has bottom fragmnet, i.e. current fragment is not last in file. * * @return <code>true</code> if current fragment has bottom fragment, <code>false</code> otherwise. */ public boolean hasBottomFragment() { return mHasBottomFragment; } }