1 /* 2 * This file is part of AceLogger. 3 * 4 * AceLogger is free software: you can redistribute it and/or modify it under the terms of the GNU 5 * Lesser General Public License as published by the Free Software Foundation, either version 3 of 6 * the License, or (at your option) any later version. 7 * 8 * AceLogger is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 9 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 10 * Lesser General Public License for more details. 11 * 12 * You should have received a copy of the GNU Lesser General Public License along with AceLogger. 13 * If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>. 14 */ 15 package net.sourceforge.acelogger.location; 16 17 import java.io.Serializable; 18 19 /** 20 * Stores location information for a log event. 21 * 22 * @author Zardi (https://sourceforge.net/users/daniel_zardi) 23 * @version 1.0.0 24 * @since 1.0.0 25 */ 26 public class LogEventLocation implements Serializable { 27 28 /** 29 * This constant is used when a serialized object is read to ensure that the object is 30 * compatible with the current version of this class. For more info on version changes see 31 * <a href="http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678"> 32 * Type Changes Affecting Serialization 33 * </a>. 34 */ 35 private static final long serialVersionUID = 1L; 36 37 /** 38 * The caller package name. 39 */ 40 private String packageName; 41 42 /** 43 * The caller class name. 44 */ 45 private String className; 46 47 /** 48 * The caller method name. 49 */ 50 private String methodName; 51 52 /** 53 * The caller line number. 54 */ 55 private String lineNumber; 56 57 /** 58 * The caller file name. 59 */ 60 private String fileName; 61 62 /** 63 * The caller thread name. 64 */ 65 private String threadName; 66 67 /** 68 * Constructs a new LogEventLocation without any information. 69 * 70 * @since 1.0.0 71 */ 72 public LogEventLocation() { 73 this("", ""); 74 } 75 76 /** 77 * Constructs a new LogEventLocation for a given class. 78 * 79 * @param source 80 * The callers class. 81 * @since 1.0.0 82 */ 83 public LogEventLocation(Class<?> source) { 84 this(source.getPackage().getName(), source.getSimpleName()); 85 if (source.getEnclosingClass() != null) { 86 setClassName(source.getEnclosingClass().getSimpleName().concat("$").concat(className)); 87 } 88 } 89 90 /** 91 * Constructs a new LogEventLocation for a given method and class. 92 * 93 * @param source 94 * The caller class. 95 * @param methodName 96 * The caller method. 97 * @since 1.0.0 98 */ 99 public LogEventLocation(Class<?> source, String methodName) { 100 this(source); 101 setMethodName(methodName); 102 } 103 104 /** 105 * Constructs a new LogEventLocation for a given package and class. 106 * 107 * @param packageName 108 * The caller package name. 109 * @param className 110 * The caller class name. 111 * @since 1.0.0 112 */ 113 public LogEventLocation(String packageName, String className) { 114 this(packageName, className, ""); 115 } 116 117 /** 118 * Constructs a new LogEventLocation for a given package, class and method. 119 * 120 * @param packageName 121 * The caller package name. 122 * @param className 123 * The caller class name. 124 * @param methodName 125 * The caller method name. 126 * @since 1.0.0 127 */ 128 public LogEventLocation(String packageName, String className, String methodName) { 129 this(packageName, className, methodName, ""); 130 } 131 132 /** 133 * Constructs a new LogEventLocation for a given package, class, method and file. 134 * 135 * @param packageName 136 * The caller package name. 137 * @param className 138 * The caller class name. 139 * @param methodName 140 * The caller method name. 141 * @param fileName 142 * The caller file name. 143 * @since 1.0.0 144 */ 145 public LogEventLocation(String packageName, String className, String methodName, 146 String fileName) { 147 this(packageName, className, methodName, fileName, 0); 148 } 149 150 /** 151 * Constructs a new LogEventLocation for a given package, class, method, file and line. 152 * 153 * @param packageName 154 * The caller package name. 155 * @param className 156 * The caller class name. 157 * @param methodName 158 * The caller method name. 159 * @param fileName 160 * The caller file name. 161 * @param lineNumber 162 * The caller line number. 163 * @since 1.0.0 164 */ 165 public LogEventLocation(String packageName, String className, String methodName, 166 String fileName, int lineNumber) { 167 this(packageName, className, methodName, fileName, lineNumber, ""); 168 } 169 170 /** 171 * Constructs a new LogEventLocation for a given package, class, method, file, line and thread. 172 * 173 * @param packageName 174 * The caller package name. 175 * @param className 176 * The caller class name. 177 * @param methodName 178 * The caller method name. 179 * @param fileName 180 * The caller file name. 181 * @param lineNumber 182 * The caller line number. 183 * @param threadName 184 * The caller thread name. 185 * @since 1.0.0 186 */ 187 public LogEventLocation(String packageName, String className, String methodName, 188 String fileName, int lineNumber, String threadName) { 189 setPackageName(packageName); 190 setClassName(className); 191 setMethodName(methodName); 192 setLineNumber(lineNumber); 193 setFileName(fileName); 194 setThreadName(threadName); 195 } 196 197 /** 198 * Gets the caller package name. 199 * 200 * @return The caller package name. 201 * @since 1.0.0 202 */ 203 public final String getPackageName() { 204 return packageName; 205 } 206 207 /** 208 * Sets the caller package name. If the name is <code>null</code>, the package will be 209 * identified by a empty string. 210 * 211 * @param packageName 212 * The caller package name. 213 * @since 1.0.0 214 */ 215 public final void setPackageName(String packageName) { 216 if (packageName == null) { 217 this.packageName = ""; 218 } else { 219 this.packageName = packageName; 220 } 221 } 222 223 /** 224 * Gets the caller class name. 225 * 226 * @return The caller class name. 227 * @since 1.0.0 228 */ 229 public final String getClassName() { 230 return className; 231 } 232 233 /** 234 * Sets the caller class name. If the name is <code>null</code>, the class will be identified by 235 * a empty string. 236 * 237 * @param className 238 * The caller class name. 239 * @since 1.0.0 240 */ 241 public final void setClassName(String className) { 242 if (className == null) { 243 this.className = ""; 244 } else { 245 this.className = className; 246 } 247 } 248 249 /** 250 * Gets the caller method name. 251 * 252 * @return The caller method name. 253 * @since 1.0.0 254 */ 255 public final String getMethodName() { 256 return methodName; 257 } 258 259 /** 260 * Sets the caller method name. If the name is <code>null</code>, the method will be identified 261 * by a empty string. 262 * 263 * @param methodName 264 * The caller method name. 265 * @since 1.0.0 266 */ 267 public final void setMethodName(String methodName) { 268 if (methodName == null) { 269 this.methodName = ""; 270 } else { 271 this.methodName = methodName; 272 } 273 } 274 275 /** 276 * Gets the caller line number. 277 * 278 * @return The caller line number. 279 * @since 1.0.0 280 */ 281 public final String getLineNumber() { 282 return lineNumber; 283 } 284 285 /** 286 * Sets the caller line number. 287 * 288 * @param lineNumber 289 * The caller line number. 290 * @since 1.0.0 291 */ 292 public final void setLineNumber(int lineNumber) { 293 this.lineNumber = String.valueOf(lineNumber); 294 } 295 296 /** 297 * Gets the caller file name. 298 * 299 * @return The caller file name. 300 * @since 1.0.0 301 */ 302 public final String getFileName() { 303 return fileName; 304 } 305 306 /** 307 * Sets the caller file name. If the name is <code>null</code>, the file will be identified by a 308 * empty string. 309 * 310 * @param fileName 311 * The caller file name. 312 * @since 1.0.0 313 */ 314 public final void setFileName(String fileName) { 315 if (fileName == null) { 316 this.fileName = ""; 317 } else { 318 this.fileName = fileName; 319 } 320 } 321 322 /** 323 * Gets the caller thread name. 324 * 325 * @return The caller thread name. 326 * @since 1.0.0 327 */ 328 public final String getThreadName() { 329 return threadName; 330 } 331 332 /** 333 * Sets the caller thread name. If the name is <code>null</code>, the thread will be identified 334 * by a empty string. 335 * 336 * @param threadName 337 * The caller thread name. 338 * @since 1.0.0 339 */ 340 public final void setThreadName(String threadName) { 341 if (threadName == null) { 342 this.threadName = ""; 343 } else { 344 this.threadName = threadName; 345 } 346 } 347 348 /** 349 * Gets the full qualified name of the callers class. 350 * 351 * @return The full qualified name of the callers class. 352 * @since 1.0.0 353 */ 354 public String getFullQualifiedName() { 355 String name = getClassName(); 356 if (getPackageName().length() > 0) { 357 name = getPackageName().concat(".").concat(name); 358 } 359 return name; 360 } 361 362 /** 363 * Gets a javadoc like name for the caller, this name resembles something like 364 * <i>caller.package.SomeClass#aMethod</i>. 365 * 366 * @return A javadoc like name for the caller. 367 * @since 1.0.0 368 */ 369 public String getJavadocLikeName() { 370 String name = getFullQualifiedName(); 371 if (getMethodName().length() > 0) { 372 name = name.concat("#").concat(getMethodName()); 373 } 374 return name; 375 } 376 377 /** 378 * Gets a string representing the file name and line number of the caller. If there is no 379 * information about them, an empty string is returned. The resulting string will resemble 380 * something like <i>(file.java:10)</i>. 381 * 382 * @return A string representing the file name and line number of the caller. 383 * @since 1.0.0 384 */ 385 public String getStackTraceLikeName() { 386 String name = ""; 387 if (getFileName().length() > 0 && getLineNumber().length() > 0) { 388 name = getFileName().concat(":").concat(getLineNumber()); 389 } 390 return name; 391 } 392 393 }