001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.jexl2;
018
019
020 /**
021 * Helper class to carry in info such as a url/file name, line and column for
022 * debugging information reporting.
023 */
024 public class DebugInfo implements JexlInfo {
025 /** line number. */
026 private final int line;
027 /** column number. */
028 private final int column;
029 /** name. */
030 private final String name;
031 /**
032 * Create info.
033 * @param tn template name
034 * @param l line number
035 * @param c column
036 */
037 public DebugInfo(String tn, int l, int c) {
038 name = tn;
039 line = l;
040 column = c;
041 }
042
043 /**
044 * Formats this info in the form 'name@line:column'.
045 * @return the formatted info
046 */
047 @Override
048 public String toString() {
049 StringBuilder sb = new StringBuilder(name != null? name : "");
050 if (line > 0) {
051 sb.append("@");
052 sb.append(line);
053 if (column > 0) {
054 sb.append(":");
055 sb.append(column);
056 }
057 }
058 return sb.toString();
059 }
060
061 /** {@inheritDoc} */
062 public String debugString() {
063 return toString();
064 }
065
066 /** {@inheritDoc}
067 * @since 2.1
068 */
069 public DebugInfo debugInfo() {
070 return this;
071 }
072
073 /**
074 * Gets the file/script/url name.
075 * @return template name
076 */
077 public String getName() {
078 return name;
079 }
080
081 /**
082 * Gets the line number.
083 * @return line number.
084 */
085 public int getLine() {
086 return line;
087 }
088
089 /**
090 * Gets the column number.
091 * @return the column.
092 */
093 public int getColumn() {
094 return column;
095 }
096 }