/*
 * Copyright 2003-2007 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package groovy.ui


class HistoryRecord {
    String allText
    int selectionStart
    int selectionEnd
    String scriptName
    Object result
    Throwable exception

    public String getTextToRun(boolean useSelection) {
        if (useSelection && selectionStart != selectionEnd) {
            return allText[selectionStart ..< selectionEnd]
        }
        return allText
    }

    public Object getValue() {
        return exception ? exception : result
    }
}
