001/*
002  GRANITE DATA SERVICES
003  Copyright (C) 2011 GRANITE DATA SERVICES S.A.S.
004
005  This file is part of Granite Data Services.
006
007  Granite Data Services is free software; you can redistribute it and/or modify
008  it under the terms of the GNU Library General Public License as published by
009  the Free Software Foundation; either version 2 of the License, or (at your
010  option) any later version.
011
012  Granite Data Services is distributed in the hope that it will be useful, but
013  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
015  for more details.
016
017  You should have received a copy of the GNU Library General Public License
018  along with this library; if not, see <http://www.gnu.org/licenses/>.
019*/
020
021package org.granite.builder;
022
023import org.eclipse.swt.SWT;
024import org.eclipse.swt.widgets.Display;
025import org.eclipse.ui.console.ConsolePlugin;
026import org.eclipse.ui.console.IConsole;
027import org.eclipse.ui.console.MessageConsole;
028import org.eclipse.ui.console.MessageConsoleStream;
029
030/**
031 * @author Franck WOLFF
032 */
033public class BuilderConsole {
034
035        public enum MessageType {
036                TITLE,
037                DEBUG,
038                INFO,
039                WARNING,
040                ERROR
041        }
042
043        private static final String INDENT = "  ";
044
045        private static MessageConsole console = null;
046        private static boolean debugEnabled = false;
047        
048        public static boolean isDebugEnabled() {
049                return debugEnabled;
050        }
051
052        public static void setDebugEnabled(boolean debugEnabled) {
053                BuilderConsole.debugEnabled = debugEnabled;
054        }
055
056        private static synchronized MessageConsole getConsole() {
057                if (console == null) {
058                        console = new MessageConsole("Granite", null);
059                        ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{console});
060                }
061                return console;
062        }
063        
064        private static MessageConsoleStream getConsoleStream(MessageType type) {                
065                int color = SWT.COLOR_BLACK;
066                int font = SWT.NORMAL;
067                
068                switch (type) {
069                        case DEBUG:
070                                color = SWT.COLOR_DARK_GREEN;
071                                font = SWT.ITALIC;
072                                break;
073                        case ERROR:
074                                color = SWT.COLOR_RED;
075                                break;
076                        case WARNING:
077                                color = SWT.COLOR_DARK_MAGENTA;
078                                break;
079                        case TITLE:
080                                color = SWT.COLOR_DARK_GRAY;
081                                font = SWT.BOLD | SWT.ITALIC;
082                                break;
083                        default:
084                                break;
085                }
086
087                MessageConsoleStream msgConsoleStream = getConsole().newMessageStream();
088                msgConsoleStream.setFontStyle(font);
089                msgConsoleStream.setColor(Display.getDefault().getSystemColor(color));
090                return msgConsoleStream;
091        }
092        
093        public static void println(String msg) {
094                println(msg, MessageType.INFO);
095        }
096        
097        public static void activate() {
098                Display.getDefault().syncExec(new Runnable() {
099                        @Override
100                        public void run() {
101                                getConsole().activate(); // show console view...
102                        }
103                });
104        }
105        
106        public static void println(final String msg, final MessageType type) {          
107                if (msg == null || (!debugEnabled && type == MessageType.DEBUG))
108                        return;
109                
110                Display.getDefault().syncExec(new Runnable() {
111                        @Override
112                        public void run() {
113                                if (type == MessageType.ERROR)
114                                        getConsole().activate(); // show console view...
115                                String qMsg = (type == MessageType.TITLE ? msg : INDENT + "[" + type + "] " + msg);
116                                getConsoleStream(type).println(qMsg);
117                        }
118                });
119        }
120}