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 }