Author: julien(a)jboss.com
Date: 2008-07-07 19:01:21 -0400 (Mon, 07 Jul 2008)
New Revision: 11338
Added:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Appender.java
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/AppenderWidget.java
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Level.java
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Logger.java
Modified:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/AgentContext.java
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/PresentationClientAgent.java
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/AjaxObject.java
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/AjaxWindow.java
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/MetaWidget.java
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/Bootstrap.java
Log:
move the appender widget inner class as an AppenderWidget class
Modified:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/AgentContext.java
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/AgentContext.java 2008-07-07
22:56:19 UTC (rev 11337)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/AgentContext.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -26,9 +26,7 @@
import org.jboss.portal.presentation.ajax.client.protocol.AjaxAction;
import org.jboss.portal.presentation.ajax.client.protocol.AjaxResponse;
import org.jboss.portal.presentation.ajax.client.model.AjaxObject;
-import org.jboss.portal.presentation.ajax.client.utils.Logger;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.rpc.ServiceDefTarget;
+import org.jboss.portal.presentation.ajax.client.utils.logging.Logger;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
Modified:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/PresentationClientAgent.java
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/PresentationClientAgent.java 2008-07-07
22:56:19 UTC (rev 11337)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/PresentationClientAgent.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -42,9 +42,10 @@
import org.jboss.portal.presentation.ajax.client.model.update.ModelUpdate;
import org.jboss.portal.presentation.ajax.client.model.AjaxObject;
import org.jboss.portal.presentation.ajax.client.utils.Bootstrap;
-import org.jboss.portal.presentation.ajax.client.utils.Appender;
-import org.jboss.portal.presentation.ajax.client.utils.Level;
-import org.jboss.portal.presentation.ajax.client.utils.Logger;
+import org.jboss.portal.presentation.ajax.client.utils.logging.Appender;
+import org.jboss.portal.presentation.ajax.client.utils.logging.Level;
+import org.jboss.portal.presentation.ajax.client.utils.logging.Logger;
+import org.jboss.portal.presentation.ajax.client.utils.logging.AppenderWidget;
import java.util.Map;
import java.util.HashMap;
@@ -79,7 +80,7 @@
RootPanel.get().add(main);
//
- SimpleAppender appender = new SimpleAppender();
+ AppenderWidget appender = new AppenderWidget();
main.add(appender);
Logger.registerAppender(appender);
log.info("Added logger");
@@ -133,130 +134,4 @@
//
proxy.ping(callback);
}
-
- private static class SimpleAppender extends VerticalPanel implements Appender,
ChangeListener, ClickListener
- {
-
- // width:auto; height:100px; overflow:hidden;
-
- /** . */
- private static final Level[] levels = {Level.ERROR, Level.INFO, Level.DEBUG,
Level.TRACE};
-
- /** . */
- private FlowPanel content;
-
- /** . */
- private HorizontalPanel controls;
-
- /** . */
- private ListBox levelBox;
-
- /** . */
- private Button clearButton;
-
- /** . */
- private Element topContainer;
-
- /** . */
- private Element childrenContainer;
-
- /** . */
- private DateTimeFormat format;
-
- /** . */
- private Level currentLevel = Level.INFO;
-
- private SimpleAppender()
- {
- controls = new HorizontalPanel();
- clearButton = new Button("Clear");
- levelBox = new ListBox();
- content = new FlowPanel();
- topContainer = content.getElement();
- childrenContainer = DOM.createDiv();
- format = DateTimeFormat.getFormat("HH:mm:ss:SSSS");
-
- //
- for (int i = 0;i < levels.length;i++)
- {
- levelBox.addItem(levels[i].getName());
- }
- levelBox.addChangeListener(this);
- levelBox.setSelectedIndex(1); // INFO
-
- //
- clearButton.addClickListener(this);
-
- //
- controls.add(levelBox);
- controls.add(clearButton);
-
- //
- DOM.appendChild(topContainer, childrenContainer);
-
- //
- add(controls);
- add(content);
-
- //
- // DOM.setStyleAttribute(container, "width", "auto");
- DOM.setStyleAttribute(topContainer, "height", "128px");
- DOM.setStyleAttribute(topContainer, "overflow", "scroll");
-
- //
- setStylePrimaryName("log");
- }
-
- public void onChange(Widget widget)
- {
- if (widget == levelBox)
- {
- currentLevel = levels[levelBox.getSelectedIndex()];
- }
- }
-
- public void onClick(Widget widget)
- {
- if (widget == clearButton)
- {
- clear();
- }
- }
-
- public void append(Level level, Date time, String category, String msg)
- {
- if (currentLevel.implies(level))
- {
- Element div = DOM.createDiv();
-
- //
- DOM.setInnerHTML(div, level + " " + format.format(time) + "
" + category + " " + msg);
-
- //
- DOM.appendChild(childrenContainer, div);
- DOM.setElementProperty(div, "className", "log-" +
currentLevel.getName());
-
- //
- autoscroll();
- }
- }
-
- public void clear()
- {
- DOM.removeChild(topContainer, childrenContainer);
- childrenContainer = DOM.createDiv();
- DOM.appendChild(topContainer, childrenContainer);
- autoscroll();
- }
-
- /**
- * Autoscroll to bottom
- */
- private void autoscroll()
- {
- String height = DOM.getElementProperty(topContainer, "scrollHeight");
- DOM.setElementProperty(topContainer, "scrollTop", height);
- }
-
- }
}
Modified:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/AjaxObject.java
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/AjaxObject.java 2008-07-07
22:56:19 UTC (rev 11337)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/AjaxObject.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -37,7 +37,7 @@
import org.jboss.portal.presentation.ajax.client.model.update.UpdateObject;
import org.jboss.portal.presentation.ajax.client.model.update.RemoveChild;
import org.jboss.portal.presentation.ajax.client.model.update.RemoveObject;
-import org.jboss.portal.presentation.ajax.client.utils.Logger;
+import org.jboss.portal.presentation.ajax.client.utils.logging.Logger;
import org.jboss.portal.presentation.ajax.client.AgentContext;
/**
Modified:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/AjaxWindow.java
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/AjaxWindow.java 2008-07-07
22:56:19 UTC (rev 11337)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/AjaxWindow.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -39,7 +39,7 @@
import org.jboss.portal.presentation.ajax.client.protocol.OpaqueWindowAction;
import org.jboss.portal.presentation.ajax.client.protocol.DestroyObjectAction;
import org.jboss.portal.presentation.ajax.client.utils.Tools;
-import org.jboss.portal.presentation.ajax.client.utils.Logger;
+import org.jboss.portal.presentation.ajax.client.utils.logging.Logger;
import java.util.Map;
import java.util.HashMap;
Modified:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/MetaWidget.java
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/MetaWidget.java 2008-07-07
22:56:19 UTC (rev 11337)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/model/MetaWidget.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -22,9 +22,6 @@
******************************************************************************/
package org.jboss.portal.presentation.ajax.client.model;
-import com.google.gwt.user.client.ui.SimplePanel;
-import com.google.gwt.user.client.ui.PopupPanel;
-import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
@@ -34,7 +31,7 @@
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Element;
-import org.jboss.portal.presentation.ajax.client.utils.Logger;
+import org.jboss.portal.presentation.ajax.client.utils.logging.Logger;
/**
* @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
Modified:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/Bootstrap.java
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/Bootstrap.java 2008-07-07
22:56:19 UTC (rev 11337)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/Bootstrap.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -26,10 +26,11 @@
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.Window;
import java.util.ArrayList;
+import org.jboss.portal.presentation.ajax.client.utils.logging.Logger;
+
/**
* @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
* @version $Revision: 630 $
Copied:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Appender.java
(from rev 11273,
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/Appender.java)
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Appender.java
(rev 0)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Appender.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -0,0 +1,36 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2008, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.presentation.ajax.client.utils.logging;
+
+import java.util.Date;
+
+/**
+ * @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
+ * @version $Revision: 630 $
+ */
+public interface Appender
+{
+
+ void append(Level level, Date time, String category, String msg);
+
+}
Added:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/AppenderWidget.java
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/AppenderWidget.java
(rev 0)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/AppenderWidget.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -0,0 +1,165 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2008, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.presentation.ajax.client.utils.logging;
+
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.i18n.client.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
+ * @version $Revision: 630 $
+ */
+public class AppenderWidget extends VerticalPanel implements Appender, ChangeListener,
ClickListener
+{
+ // width:auto; height:100px; overflow:hidden;
+
+ /** . */
+ private static final Level[] levels = {Level.ERROR, Level.INFO, Level.DEBUG,
Level.TRACE};
+
+ /** . */
+ private FlowPanel content;
+
+ /** . */
+ private HorizontalPanel controls;
+
+ /** . */
+ private ListBox levelBox;
+
+ /** . */
+ private Button clearButton;
+
+ /** . */
+ private Element topContainer;
+
+ /** . */
+ private Element childrenContainer;
+
+ /** . */
+ private DateTimeFormat format;
+
+ /** . */
+ private Level currentLevel = Level.INFO;
+
+ public AppenderWidget()
+ {
+ controls = new HorizontalPanel();
+ clearButton = new Button("Clear");
+ levelBox = new ListBox();
+ content = new FlowPanel();
+ topContainer = content.getElement();
+ childrenContainer = DOM.createDiv();
+ format = DateTimeFormat.getFormat("HH:mm:ss:SSSS");
+
+ //
+ for (int i = 0;i < levels.length;i++)
+ {
+ levelBox.addItem(levels[i].getName());
+ }
+ levelBox.addChangeListener(this);
+ levelBox.setSelectedIndex(1); // INFO
+
+ //
+ clearButton.addClickListener(this);
+
+ //
+ controls.add(levelBox);
+ controls.add(clearButton);
+
+ //
+ DOM.appendChild(topContainer, childrenContainer);
+
+ //
+ add(controls);
+ add(content);
+
+ //
+ // DOM.setStyleAttribute(container, "width", "auto");
+ DOM.setStyleAttribute(topContainer, "height", "128px");
+ DOM.setStyleAttribute(topContainer, "overflow", "scroll");
+
+ //
+ setStylePrimaryName("log");
+ }
+
+ public void onChange(Widget widget)
+ {
+ if (widget == levelBox)
+ {
+ currentLevel = levels[levelBox.getSelectedIndex()];
+ }
+ }
+
+ public void onClick(Widget widget)
+ {
+ if (widget == clearButton)
+ {
+ clear();
+ }
+ }
+
+ public void append(Level level, Date time, String category, String msg)
+ {
+ if (currentLevel.implies(level))
+ {
+ Element div = DOM.createDiv();
+
+ //
+ DOM.setInnerHTML(div, level + " " + format.format(time) + "
" + category + " " + msg);
+
+ //
+ DOM.appendChild(childrenContainer, div);
+ DOM.setElementProperty(div, "className", "log-" +
currentLevel.getName());
+
+ //
+ autoscroll();
+ }
+ }
+
+ public void clear()
+ {
+ DOM.removeChild(topContainer, childrenContainer);
+ childrenContainer = DOM.createDiv();
+ DOM.appendChild(topContainer, childrenContainer);
+ autoscroll();
+ }
+
+ /**
+ * Autoscroll to bottom
+ */
+ private void autoscroll()
+ {
+ String height = DOM.getElementProperty(topContainer, "scrollHeight");
+ DOM.setElementProperty(topContainer, "scrollTop", height);
+ }
+}
Copied:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Level.java
(from rev 11337,
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/Level.java)
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Level.java
(rev 0)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Level.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -0,0 +1,80 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2008, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.presentation.ajax.client.utils.logging;
+
+/**
+ * @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
+ * @version $Revision: 630 $
+ */
+public class Level
+{
+
+ /** . */
+ public static final Level TRACE = new Level(3, "TRACE");
+
+ /** . */
+ public static final Level DEBUG = new Level(2, "DEBUG");
+
+ /** . */
+ public static final Level INFO = new Level(1, "INFO");
+
+ /** . */
+ public static final Level ERROR = new Level(0, "ERROR");
+
+ /** . */
+ private final int index;
+
+ /** . */
+ private final String name;
+
+ /** . */
+ private final String toString;
+
+ private Level(int index, String name)
+ {
+ this.index = index;
+ this.name = name;
+ this.toString = "[" + name + "]";
+ }
+
+ public boolean implies(Level other)
+ {
+ if (other == null)
+ {
+ throw new IllegalArgumentException();
+ }
+
+ //
+ return index >= other.index;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public String toString()
+ {
+ return toString;
+ }
+}
Copied:
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Logger.java
(from rev 11273,
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/Logger.java)
===================================================================
---
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Logger.java
(rev 0)
+++
modules/presentation/trunk/ajax/src/main/java/org/jboss/portal/presentation/ajax/client/utils/logging/Logger.java 2008-07-07
23:01:21 UTC (rev 11338)
@@ -0,0 +1,168 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2008, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.presentation.ajax.client.utils.logging;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Date;
+
+/**
+ * @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
+ * @version $Revision: 630 $
+ */
+public final class Logger
+{
+
+ /** . */
+ private static final String PREFIX =
"org.jboss.portal.presentation.ajax.client.";
+
+ /** . */
+ private static final Map loggers = new HashMap();
+
+ /** . */
+ private static final Set appenders = new HashSet();
+
+ /**
+ * Returns a logger.
+ *
+ * @param category the logger category
+ * @return the logger
+ * @throws IllegalArgumentException if the clazz argument is null
+ */
+ public static Logger getLogger(String category) throws IllegalArgumentException
+ {
+ if (category == null)
+ {
+ throw new IllegalArgumentException("No null category accepted");
+ }
+
+ //
+ Logger logger = (Logger)loggers.get(category);
+
+ //
+ if (logger == null)
+ {
+ loggers.put(category, logger = new Logger(category));
+ }
+
+ //
+ return logger;
+ }
+
+ /**
+ * Returns a logger.
+ *
+ * @param clazz the logger key
+ * @return the logger
+ * @throws IllegalArgumentException if the clazz argument is null
+ */
+ public static Logger getLogger(Class clazz) throws IllegalArgumentException
+ {
+ if (clazz == null)
+ {
+ throw new IllegalArgumentException("No null clazz accepted");
+ }
+
+ //
+ String name = clazz.toString();
+ name = name.substring("class ".length());
+ if (name.startsWith(PREFIX))
+ {
+ name = name.substring(PREFIX.length());
+ }
+
+ //
+ return getLogger(name);
+ }
+
+ public static void registerAppender(Appender appender)
+ {
+ if (appender == null)
+ {
+ throw new IllegalArgumentException();
+ }
+
+ //
+ appenders.add(appender);
+ }
+
+ /** . */
+ private final String category;
+
+ private Logger(String category)
+ {
+ this.category = category;
+ }
+
+ public String getCategory()
+ {
+ return category;
+ }
+
+ public void log(Level level, String msg)
+ {
+ if (level == null)
+ {
+ throw new IllegalArgumentException("No null level");
+ }
+ if (msg == null)
+ {
+ throw new IllegalArgumentException("No null msg");
+ }
+
+ //
+ Date now = new Date();
+
+ //
+ for (Iterator i = appenders.iterator();i.hasNext();)
+ {
+ Appender appender = (Appender)i.next();
+
+ //
+ appender.append(level, now, category, msg);
+ }
+ }
+
+ public void info(String msg)
+ {
+ log(Level.INFO, msg);
+ }
+
+ public void error(String msg)
+ {
+ log(Level.ERROR, msg);
+ }
+
+ public void debug(String msg)
+ {
+ log(Level.DEBUG, msg);
+ }
+
+ public void trace(String msg)
+ {
+ log(Level.TRACE, msg);
+ }
+}