/* * InputEditorPosition.java * * Copyright (C) 2009-12 by RStudio, Inc. * * Unless you have received this program directly from RStudio pursuant * to the terms of a commercial license agreement with RStudio, then * this program is licensed to you under the terms of version 3 of the * GNU Affero General Public License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. * */ package org.rstudio.studio.client.workbench.views.console.shell.editor; public abstract class InputEditorPosition implements Comparable<InputEditorPosition> { public InputEditorPosition(Object line, int position) { line_ = line; position_ = position; } public Object getLine() { return line_; } public int getPosition() { return position_; } public int compareTo(InputEditorPosition o) { if (o == null) return 1; int result = compareLineTo(o.getLine()); if (result == 0) result = getPosition() - o.getPosition(); return result; } @Override public int hashCode() { int hashCode = 0; if (line_ != null) hashCode = line_.hashCode() * 31; hashCode += position_; return hashCode; } @Override public boolean equals(Object obj) { if (obj == null) return false; if (!(obj instanceof InputEditorPosition)) return false; return compareTo((InputEditorPosition) obj) == 0; } @Override public String toString() { return "Position " + getPosition(); } protected abstract int compareLineTo(Object other); public abstract InputEditorPosition movePosition( int position, boolean relative); public abstract InputEditorPosition moveToNextLine(); public abstract InputEditorPosition moveToPreviousLine(); public abstract int getLineLength(); public abstract InputEditorPosition skipEmptyLines( boolean upwards, InputEditorPosition boundary); public abstract InputEditorPosition growToIncludeLines(String pattern, boolean upwards); private final Object line_; private final int position_; }