001    /*******************************************************************************
002     * Portions created by Sebastian Thomschke are copyright (c) 2005-2011 Sebastian
003     * Thomschke.
004     * 
005     * All Rights Reserved. This program and the accompanying materials
006     * are made available under the terms of the Eclipse Public License v1.0
007     * which accompanies this distribution, and is available at
008     * http://www.eclipse.org/legal/epl-v10.html
009     * 
010     * Contributors:
011     *     Sebastian Thomschke - initial implementation.
012     *******************************************************************************/
013    package net.sf.oval.internal;
014    
015    import java.util.HashMap;
016    import java.util.Map;
017    import java.util.Map.Entry;
018    
019    import net.sf.oval.internal.util.StringUtils;
020    import net.sf.oval.logging.Logger;
021    import net.sf.oval.logging.LoggerFactory;
022    import net.sf.oval.logging.LoggerFactoryJDKImpl;
023    
024    /**
025     * @author Sebastian Thomschke
026     */
027    public final class Log
028    {
029            private static LoggerFactory loggerFactory = new LoggerFactoryJDKImpl();
030    
031            /* cannot use CollectionFactoryHolder.getFactory().createMap(32) here, since 
032             * the collection factory uses the Log itself which is not yet initialized
033             */
034            private static final Map<String, Log> LOG_REGISTRY = new HashMap<String, Log>(32);
035    
036            public static synchronized Log getLog(final Class< ? > clazz) throws IllegalArgumentException
037            {
038                    final String name = clazz.getName();
039                    final Log log = LOG_REGISTRY.get(name);
040                    if (log == null) return new Log(loggerFactory.createLogger(name));
041                    return log;
042            }
043    
044            /**
045             * @return the loggerFactory
046             */
047            public static LoggerFactory getLoggerFactory()
048            {
049                    synchronized (LOG_REGISTRY)
050                    {
051                            return loggerFactory;
052                    }
053            }
054    
055            /**
056             * @param loggerFactory the loggerFactory to set
057             */
058            public static void setLoggerFactory(final LoggerFactory loggerFactory) throws IllegalArgumentException
059            {
060                    synchronized (LOG_REGISTRY)
061                    {
062                            Log.loggerFactory = loggerFactory;
063                            for (final Entry<String, Log> entry : LOG_REGISTRY.entrySet())
064                                    entry.getValue().setLogger(loggerFactory.createLogger(entry.getKey()));
065                    }
066            }
067    
068            private Logger logger;
069    
070            /**
071             * private constructor to avoid external instantiation
072             */
073            private Log(final Logger logger)
074            {
075                    setLogger(logger);
076            }
077    
078            public void debug(final String msg)
079            {
080                    logger.debug(msg);
081            }
082    
083            public void debug(final String msgFormat, final Object arg1)
084            {
085                    if (logger.isDebug())
086                            logger.debug(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()));
087            }
088    
089            public void debug(final String msgFormat, final Object arg1, final Object arg2)
090            {
091                    if (logger.isDebug())
092                    {
093                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
094                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
095    
096                            logger.debug(msg);
097                    }
098            }
099    
100            public void debug(final String msgFormat, final Object arg1, final Object arg2, final Object arg3)
101            {
102                    if (logger.isDebug())
103                    {
104                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
105                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
106                            msg = StringUtils.replaceAll(msg, "{3}", arg3 == null ? "null" : arg3.toString());
107    
108                            logger.debug(msg);
109                    }
110            }
111    
112            public void debug(final String msgFormat, final Object arg1, final Object arg2, final Throwable t)
113            {
114                    if (logger.isDebug())
115                    {
116                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
117                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
118    
119                            logger.debug(msg, t);
120                    }
121            }
122    
123            public void debug(final String msgFormat, final Object arg1, final Throwable t)
124            {
125                    if (logger.isDebug())
126                            logger.debug(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()), t);
127            }
128    
129            public void debug(final String msg, final Throwable t)
130            {
131                    logger.debug(msg, t);
132            }
133    
134            public void error(final String msg)
135            {
136                    logger.error(msg);
137            }
138    
139            public void error(final String msgFormat, final Object arg1)
140            {
141                    if (logger.isError())
142                            logger.error(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()));
143            }
144    
145            public void error(final String msgFormat, final Object arg1, final Object arg2)
146            {
147                    if (logger.isError())
148                    {
149                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
150                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
151    
152                            logger.error(msg);
153                    }
154            }
155    
156            public void error(final String msgFormat, final Object arg1, final Object arg2, final Object arg3)
157            {
158                    if (logger.isError())
159                    {
160                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
161                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
162                            msg = StringUtils.replaceAll(msg, "{3}", arg3 == null ? "null" : arg3.toString());
163    
164                            logger.error(msg);
165                    }
166            }
167    
168            public void error(final String msgFormat, final Object arg1, final Object arg2, final Throwable t)
169            {
170                    if (logger.isError())
171                    {
172                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
173                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
174    
175                            logger.error(msg, t);
176                    }
177            }
178    
179            public void error(final String msgFormat, final Object arg1, final Throwable t)
180            {
181                    if (logger.isError())
182                            logger.error(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()), t);
183            }
184    
185            public void error(final String msg, final Throwable t)
186            {
187                    logger.error(msg, t);
188            }
189    
190            public void info(final String msg)
191            {
192                    logger.info(msg);
193            }
194    
195            public void info(final String msgFormat, final Object arg1)
196            {
197                    if (logger.isInfo())
198                            logger.info(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()));
199            }
200    
201            public void info(final String msgFormat, final Object arg1, final Object arg2)
202            {
203                    if (logger.isInfo())
204                    {
205                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
206                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
207    
208                            logger.info(msg);
209                    }
210            }
211    
212            public void info(final String msgFormat, final Object arg1, final Object arg2, final Object arg3)
213            {
214                    if (logger.isInfo())
215                    {
216                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
217                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
218                            msg = StringUtils.replaceAll(msg, "{3}", arg3 == null ? "null" : arg3.toString());
219    
220                            logger.info(msg);
221                    }
222            }
223    
224            public void info(final String msgFormat, final Object arg1, final Object arg2, final Throwable t)
225            {
226                    if (logger.isInfo())
227                    {
228                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
229                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
230    
231                            logger.info(msg, t);
232                    }
233            }
234    
235            public void info(final String msgFormat, final Object arg1, final Throwable t)
236            {
237                    if (logger.isInfo())
238                            logger.info(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()), t);
239            }
240    
241            public void info(final String msg, final Throwable t)
242            {
243                    logger.info(msg, t);
244            }
245    
246            public boolean isDebug()
247            {
248                    return logger.isDebug();
249            }
250    
251            public boolean isError()
252            {
253                    return logger.isError();
254            }
255    
256            public boolean isInfo()
257            {
258                    return logger.isInfo();
259            }
260    
261            public boolean isTrace()
262            {
263                    return logger.isTrace();
264            }
265    
266            public boolean isWarn()
267            {
268                    return logger.isWarn();
269            }
270    
271            private void setLogger(final Logger logger)
272            {
273                    this.logger = logger;
274            }
275    
276            public void trace(final String msg)
277            {
278                    logger.debug(msg);
279            }
280    
281            public void trace(final String msgFormat, final Object arg1)
282            {
283                    if (logger.isDebug())
284                            logger.trace(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()));
285            }
286    
287            public void trace(final String msgFormat, final Object arg1, final Object arg2)
288            {
289                    if (logger.isTrace())
290                    {
291                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
292                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
293    
294                            logger.trace(msg);
295                    }
296            }
297    
298            public void trace(final String msgFormat, final Object arg1, final Object arg2, final Object arg3)
299            {
300                    if (logger.isTrace())
301                    {
302                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
303                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
304                            msg = StringUtils.replaceAll(msg, "{3}", arg3 == null ? "null" : arg3.toString());
305    
306                            logger.trace(msg);
307                    }
308            }
309    
310            public void trace(final String msgFormat, final Object arg1, final Object arg2, final Throwable t)
311            {
312                    if (logger.isTrace())
313                    {
314                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
315                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
316    
317                            logger.trace(msg, t);
318                    }
319            }
320    
321            public void trace(final String msgFormat, final Object arg1, final Throwable t)
322            {
323                    if (logger.isDebug())
324                            logger.trace(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()), t);
325            }
326    
327            public void trace(final String msg, final Throwable t)
328            {
329                    logger.trace(msg, t);
330            }
331    
332            public void warn(final String msg)
333            {
334                    logger.warn(msg);
335            }
336    
337            public void warn(final String msgFormat, final Object arg1)
338            {
339                    if (logger.isWarn())
340                            logger.warn(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()));
341            }
342    
343            public void warn(final String msgFormat, final Object arg1, final Object arg2)
344            {
345                    if (logger.isWarn())
346                    {
347                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
348                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
349    
350                            logger.warn(msg);
351                    }
352            }
353    
354            public void warn(final String msgFormat, final Object arg1, final Object arg2, final Object arg3)
355            {
356                    if (logger.isWarn())
357                    {
358                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
359                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
360                            msg = StringUtils.replaceAll(msg, "{3}", arg3 == null ? "null" : arg3.toString());
361    
362                            logger.warn(msg);
363                    }
364            }
365    
366            public void warn(final String msgFormat, final Object arg1, final Object arg2, final Throwable t)
367            {
368                    if (logger.isWarn())
369                    {
370                            String msg = StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString());
371                            msg = StringUtils.replaceAll(msg, "{2}", arg2 == null ? "null" : arg2.toString());
372    
373                            logger.warn(msg, t);
374                    }
375            }
376    
377            public void warn(final String msgFormat, final Object arg1, final Throwable t)
378            {
379                    if (logger.isWarn())
380                            logger.warn(StringUtils.replaceAll(msgFormat, "{1}", arg1 == null ? "null" : arg1.toString()), t);
381            }
382    
383            public void warn(final String msg, final Throwable t)
384            {
385                    logger.warn(msg, t);
386            }
387    }