/*******************************************************************************
* Copyright (c) 2010 György Orosz.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* György Orosz - initial API and implementation
******************************************************************************/
package org.erlide.wrangler.refactoring.util;
import org.erlide.util.erlang.OtpErlang;
import com.ericsson.otp.erlang.OtpErlangInt;
import com.ericsson.otp.erlang.OtpErlangLong;
import com.ericsson.otp.erlang.OtpErlangRangeException;
import com.ericsson.otp.erlang.OtpErlangTuple;
/**
* Selection range in text documents.
*
* @author Gyorgy Orosz
* @version %I%, %G%
*/
public class Range implements IRange {
protected int startLine, startCol, endLine, endCol;
/**
* Constructor with range starting and ending positions
*
* @param startLine
* start line
* @param startCol
* start column
* @param endLine
* end line
* @param endCol
* end column
*/
public Range(final int startLine, final int startCol, final int endLine,
final int endCol) {
this.startLine = startLine;
this.startCol = startCol;
this.endLine = endLine;
this.endCol = endCol;
}
/**
* Constructor with position in an Erlang tuple
*
* @param position
* {{StartingLine, StartingColumn},{EndingLine, EndingColumn}}
* @throws OtpErlangRangeException
* if the given tuple is not well formed
*/
public Range(final OtpErlangTuple position) throws OtpErlangRangeException {
this((OtpErlangTuple) position.elementAt(0),
(OtpErlangTuple) position.elementAt(1));
}
/**
* Constructor with positions in Erlang tuples
*
* @param startPos
* {StartingLine, StartingColumn}
* @param endPos
* {EndingLine, EndingColumn}
* @throws OtpErlangRangeException
* if the given tuples are not well-formed
*/
public Range(final OtpErlangTuple startPos, final OtpErlangTuple endPos)
throws OtpErlangRangeException {
this(((OtpErlangLong) startPos.elementAt(0)).intValue(),
((OtpErlangLong) startPos.elementAt(1)).intValue(),
((OtpErlangLong) endPos.elementAt(0)).intValue(),
((OtpErlangLong) endPos.elementAt(1)).intValue());
}
@Override
public int getEndCol() {
return endCol;
}
@Override
public int getEndLine() {
return endLine;
}
@Override
public int getStartCol() {
return startCol;
}
@Override
public int getStartLine() {
return startLine;
}
@Override
public OtpErlangTuple getStartPos() {
return OtpErlang.mkTuple(new OtpErlangInt(startLine), new OtpErlangInt(startCol));
}
@Override
public OtpErlangTuple getEndPos() {
return OtpErlang.mkTuple(new OtpErlangInt(endLine), new OtpErlangInt(endCol));
}
@Override
public String toString() {
return "{" + getStartLine() + "," + getStartCol() + "}" + "-" + "{" + getEndLine()
+ "," + getEndCol() + "}";
}
@Override
public OtpErlangTuple getPos() {
return OtpErlang.mkTuple(getStartPos(), getEndPos());
}
}