Log Console improvements
diff --git a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/internal/logconsole/LogConsoleManager.java b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/internal/logconsole/LogConsoleManager.java
index 0752225..c8ca6f1 100644
--- a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/internal/logconsole/LogConsoleManager.java
+++ b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/internal/logconsole/LogConsoleManager.java
@@ -11,7 +11,9 @@
  *******************************************************************************/
 package org.eclipse.dltk.internal.logconsole;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.eclipse.dltk.logconsole.ILogConsole;
@@ -24,7 +26,7 @@
 		return getConsole(consoleType, null);
 	}
 
-	private static final LogConsoleType DEFAULT_CONSOLE_TYPE = new LogConsoleType(
+	protected static final LogConsoleType DEFAULT_CONSOLE_TYPE = new LogConsoleType(
 			"org.eclipse.dltk.logconsole.DEFAULT");
 
 	private static class ConsoleKey {
@@ -99,4 +101,16 @@
 		return new NopLogConsole(key.consoleType, key.identifier);
 	}
 
+	public ILogConsole[] list(LogConsoleType consoleType) {
+		final List<ILogConsole> result = new ArrayList<ILogConsole>();
+		synchronized (lock) {
+			for (Map.Entry<ConsoleKey, ILogConsole> entry : consoles.entrySet()) {
+				if (consoleType.equals(entry.getKey().consoleType)) {
+					result.add(entry.getValue());
+				}
+			}
+		}
+		return result.toArray(new ILogConsole[result.size()]);
+	}
+
 }
diff --git a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/internal/logconsole/NopLogConsole.java b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/internal/logconsole/NopLogConsole.java
index 3695421..8507f0f 100644
--- a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/internal/logconsole/NopLogConsole.java
+++ b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/internal/logconsole/NopLogConsole.java
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.dltk.internal.logconsole;
 
+import org.eclipse.dltk.logconsole.ILogCategory;
 import org.eclipse.dltk.logconsole.ILogConsoleStream;
 import org.eclipse.dltk.logconsole.LogConsoleType;
 import org.eclipse.dltk.logconsole.impl.AbstractLogConsole;
@@ -24,4 +25,7 @@
 	public void println(ILogConsoleStream stream, Object message) {
 	}
 
+	public void println(ILogCategory category, Object message) {
+	}
+
 }
diff --git a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogCategory.java b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogCategory.java
new file mode 100644
index 0000000..48a39dc
--- /dev/null
+++ b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogCategory.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2011 NumberFour AG
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     NumberFour AG - initial API and Implementation (Alex Panchenko)
+ *******************************************************************************/
+package org.eclipse.dltk.logconsole;
+
+public interface ILogCategory {
+
+	String name();
+
+	ILogConsoleStream stream();
+
+}
diff --git a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogConsole.java b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogConsole.java
index 000ba79..59c7252 100644
--- a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogConsole.java
+++ b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogConsole.java
@@ -60,6 +60,15 @@
 	void println(ILogConsoleStream stream, Object message);
 
 	/**
+	 * Prints the message
+	 * 
+	 * @param stream
+	 * @param message
+	 * @since 4.0
+	 */
+	void println(ILogCategory category, Object message);
+
+	/**
 	 * Activates this console - makes it visible to the user
 	 */
 	void activate();
diff --git a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogConsoleManager.java b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogConsoleManager.java
index c2edeab..4259489 100644
--- a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogConsoleManager.java
+++ b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/ILogConsoleManager.java
@@ -38,4 +38,13 @@
 	 * @return
 	 */
 	ILogConsole getConsole(LogConsoleType consoleType, Object identifier);
+
+	/**
+	 * Lists all the consoles of the specified type.
+	 * 
+	 * @param logConsoleType
+	 * @return array of consoles, if there are no matching consoles empty array
+	 *         is returned
+	 */
+	ILogConsole[] list(LogConsoleType logConsoleType);
 }
diff --git a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/LogConsoleType.java b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/LogConsoleType.java
index a1c1cdf..2cc411a 100644
--- a/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/LogConsoleType.java
+++ b/core/plugins/org.eclipse.dltk.logconsole/src/org/eclipse/dltk/logconsole/LogConsoleType.java
@@ -59,4 +59,8 @@
 		return LogConsolePlugin.getConsoleManager()
 				.getConsole(this, identifier);
 	}
+
+	public ILogConsole[] list() {
+		return LogConsolePlugin.getConsoleManager().list(this);
+	}
 }