001/*
002 * (C) Copyright 2006-2015 Nuxeo SA (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl-2.1.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     mguillaume
016 */
017
018package org.nuxeo.launcher.info;
019
020import java.io.PrintWriter;
021import java.io.StringWriter;
022import java.io.Writer;
023import java.text.DateFormat;
024import java.util.ArrayList;
025import java.util.Date;
026import java.util.List;
027
028import org.apache.commons.logging.impl.SimpleLog;
029
030public class MessageInfoLogger {
031
032    private List<MessageInfo> messages = new ArrayList<>();
033
034    public List<MessageInfo> getMessages() {
035        return messages;
036    }
037
038    public void printMessages() {
039        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
040        for (MessageInfo message : messages) {
041            System.out.println("[" + dateFormat.format(message.time) + "] " + message.level + " " + message.message);
042        }
043    }
044
045    public void log(String msg, int level) {
046        MessageInfo message = new MessageInfo();
047        message.time = new Date();
048        message.level = level;
049        message.message = msg;
050        messages.add(message);
051    }
052
053    public void debug(Object... args) {
054        for (Object arg : args) {
055            if (arg instanceof String) {
056                debug((String) arg);
057            } else if (arg instanceof Throwable) {
058                Writer stringWriter = new StringWriter();
059                PrintWriter stackWriter = new PrintWriter(stringWriter);
060                ((Throwable) arg).printStackTrace(stackWriter);
061                debug(stringWriter.toString());
062            } else {
063                debug(arg.toString());
064            }
065        }
066    }
067
068    public void debug(String msg) {
069        log(msg, SimpleLog.LOG_LEVEL_DEBUG);
070    }
071
072    public void info(Object... args) {
073        for (Object arg : args) {
074            if (arg instanceof String) {
075                info((String) arg);
076            } else if (arg instanceof Throwable) {
077                Writer stringWriter = new StringWriter();
078                PrintWriter stackWriter = new PrintWriter(stringWriter);
079                ((Throwable) arg).printStackTrace(stackWriter);
080                info(stringWriter.toString());
081            } else {
082                info(arg.toString());
083            }
084        }
085    }
086
087    public void info(String msg) {
088        log(msg, SimpleLog.LOG_LEVEL_INFO);
089    }
090
091    public void warn(Object... args) {
092        for (Object arg : args) {
093            if (arg instanceof String) {
094                warn((String) arg);
095            } else if (arg instanceof Throwable) {
096                Writer stringWriter = new StringWriter();
097                PrintWriter stackWriter = new PrintWriter(stringWriter);
098                ((Throwable) arg).printStackTrace(stackWriter);
099                warn(stringWriter.toString());
100            } else {
101                warn(arg.toString());
102            }
103        }
104    }
105
106    public void warn(String msg) {
107        log(msg, SimpleLog.LOG_LEVEL_WARN);
108    }
109
110    public void error(Object... args) {
111        for (Object arg : args) {
112            if (arg instanceof String) {
113                error((String) arg);
114            } else if (arg instanceof Throwable) {
115                Writer stringWriter = new StringWriter();
116                PrintWriter stackWriter = new PrintWriter(stringWriter);
117                ((Throwable) arg).printStackTrace(stackWriter);
118                error(stringWriter.toString());
119            } else {
120                error(arg.toString());
121            }
122        }
123    }
124
125    public void error(String msg) {
126        log(msg, SimpleLog.LOG_LEVEL_ERROR);
127    }
128
129}