View Javadoc

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.formatter;
16  
17  import java.io.PrintWriter;
18  import java.io.StringWriter;
19  
20  import net.sourceforge.acelogger.execution.LogController;
21  import net.sourceforge.acelogger.interpolator.TextInterpolator;
22  
23  /**
24   * Abstracts all common tasks for {@link Formatter}.
25   * 
26   * @author Zardi (https://sourceforge.net/users/daniel_zardi)
27   * @version 1.0.0
28   * @since 1.0.0
29   */
30  public abstract class BaseFormatter implements Formatter {
31  
32  	/**
33  	 * The identifier of this formatter.
34  	 */
35  	private String identifier;
36  
37  	/**
38  	 * The text interpolator used to format the messages.
39  	 */
40  	private TextInterpolator interpolator;
41  
42  	/**
43  	 * Constructs a new BaseFormatter with the supplied identifier.
44  	 * 
45  	 * @param identifier
46  	 *            The string that identifies this formatter.
47  	 * @param interpolator
48  	 *            The interpolator to be used by this formatter.
49  	 * @since 1.0.0
50  	 */
51  	public BaseFormatter(String identifier, TextInterpolator interpolator) {
52  		setIdentifier(identifier);
53  		setInterpolator(interpolator);
54  	}
55  
56  	/** {@inheritDoc} */
57  	public final String getIdentifier() {
58  		return identifier;
59  	}
60  
61  	/**
62  	 * Sets the string that identifies this object.
63  	 * 
64  	 * @param identifier
65  	 *            The identifier of this object.
66  	 * @since 1.0.0
67  	 */
68  	private void setIdentifier(String identifier) {
69  		this.identifier = identifier;
70  	}
71  
72  	/**
73  	 * Sets the string that identifies this object.
74  	 * 
75  	 * @param interpolator
76  	 *            The text interpolator used to format the messages.
77  	 * @since 1.0.0
78  	 */
79  	private void setInterpolator(TextInterpolator interpolator) {
80  		this.interpolator = interpolator;
81  	}
82  
83  	/**
84  	 * Formats a message filling it with the supplied parameters, this method is just a convenient
85  	 * way to format messages without the need to catch a {@link IllegalArgumentException}.
86  	 * 
87  	 * @param message
88  	 *            The message to be filled with parameters, the format is dependent of the
89  	 *            interpolator used.
90  	 * @param params
91  	 *            The parameters that will be used to fill-in the message.
92  	 * @see TextInterpolator#interpolate(String, Object...)
93  	 * @return A string representing the supplied messages filled with parameters.
94  	 * @since 1.0.0
95  	 */
96  	protected String formatMessage(String message, Object... params) {
97  		String formattedMessage = "";
98  		try {
99  			formattedMessage = interpolator.interpolate(message, params);
100 		} catch (IllegalArgumentException e) {
101 			LogController.getInternalLogger().error(
102 					"It was not possible to format \"{0}\" with [{1}]", e, message, params);
103 		}
104 		return formattedMessage;
105 	}
106 
107 	/**
108 	 * Formats a string representing a stack trace based on the passed Throwable.
109 	 * 
110 	 * @param cause
111 	 *            The throwable to get the stack trace.
112 	 * @return A string representing the stack trace of this throwable.
113 	 * @since 1.0.0
114 	 */
115 	protected String formatStackTrace(Throwable cause) {
116 		String formattedStack = "";
117 		if (cause != null) {
118 			StringWriter stackTraceDestination = new StringWriter();
119 			PrintWriter stackTraceWriter = new PrintWriter(stackTraceDestination);
120 			cause.printStackTrace(stackTraceWriter);
121 			stackTraceWriter.flush();
122 			stackTraceWriter.close();
123 			formattedStack = stackTraceDestination.toString();
124 		}
125 		return formattedStack;
126 	}
127 
128 }