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.gatherer; 16 17 import net.sourceforge.acelogger.location.LogEventLocation; 18 import net.sourceforge.acelogger.location.resolver.CodeFrameResolver; 19 import net.sourceforge.acelogger.location.resolver.UserCodeFrameResolver; 20 21 /** 22 * Abstracts common tasks for LocationGatherer. 23 * 24 * @author Zardi (https://sourceforge.net/users/daniel_zardi) 25 * @version 1.0.0 26 * @since 1.0.0 27 */ 28 public abstract class BaseLocationGatherer implements LocationGatherer { 29 30 /** 31 * The identifier of this gatherer. 32 */ 33 private String identifier; 34 35 /** 36 * The CodeFrameResolver used to discover the caller location. 37 */ 38 private CodeFrameResolver codeFrameResolver; 39 40 /** 41 * Constructs a BaseLocationGatherer with the supplied identifier and a UserCodeFrameResolver as 42 * it's resolver. 43 * 44 * @param identifier 45 * A string that identifies this gatherer. 46 * @since 1.0.0 47 */ 48 public BaseLocationGatherer(String identifier) { 49 this(identifier, new UserCodeFrameResolver()); 50 } 51 52 /** 53 * Constructs a BaseLocationGatherer with the supplied identifier and resolver. 54 * 55 * @param identifier 56 * A string that identifies this gatherer. 57 * @param codeFrameResolver 58 * The resolver that should be used to generate caller information. 59 * @since 1.0.0 60 */ 61 public BaseLocationGatherer(String identifier, CodeFrameResolver codeFrameResolver) { 62 setIdentifier(identifier); 63 setCodeFrameResolver(codeFrameResolver); 64 } 65 66 /** {@inheritDoc} */ 67 public final String getIdentifier() { 68 return identifier; 69 } 70 71 /** 72 * Sets the string that identifies this object. 73 * 74 * @param identifier 75 * The identifier of this object. 76 * @since 1.0.0 77 */ 78 private void setIdentifier(String identifier) { 79 this.identifier = identifier; 80 } 81 82 /** 83 * Returns the CodeFrameResolver used by this gatherer. 84 * 85 * @return The resolver that is used to generate caller information. 86 * @since 1.0.0 87 */ 88 public final CodeFrameResolver getCodeFrameResolver() { 89 return codeFrameResolver; 90 } 91 92 /** 93 * Sets the CodeFrameResolver used by this gatherer. 94 * 95 * @param codeFrameResolver 96 * The resolver that should be used to generate caller information. 97 * @since 1.0.0 98 */ 99 private final void setCodeFrameResolver(CodeFrameResolver codeFrameResolver) { 100 this.codeFrameResolver = codeFrameResolver; 101 } 102 103 /** {@inheritDoc} */ 104 public LogEventLocation getCallLocation() { 105 return getCallLocation(Thread.currentThread()); 106 } 107 108 /** 109 * A short-hand to get the caller location. 110 * 111 * @param currentThread 112 * The thread that originated the call. 113 * @return The frame that originated the call. 114 * @since 1.0.0 115 */ 116 protected StackTraceElement getUserCodeFrame(Thread currentThread) { 117 return codeFrameResolver.getCodeFrame(currentThread); 118 } 119 120 }