Chainsaw updates
 - It's now possible to directly load events stored in a zip file created when saving events to a file with a zip extension
 - Now hiding the receivers panel by default
 - Reduced the default size of the details pane
 - Updated logpanel details, welcome tab and release notes panes to use system fonts and size


git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/companions/receivers/trunk@930644 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java b/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
index b36ffb6..6b8fdfd 100644
--- a/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
+++ b/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
@@ -19,6 +19,7 @@
 
 import java.awt.Component;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.io.StringReader;
@@ -29,6 +30,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Vector;
+import java.util.zip.ZipInputStream;
 
 import javax.swing.ProgressMonitorInputStream;
 import javax.xml.parsers.DocumentBuilder;
@@ -89,6 +91,8 @@
      */
   private Component owner = null;
 
+  private static final String ENCODING = "UTF-8";
+
     /**
      * Create new instance.
      * @param o owner
@@ -177,14 +181,23 @@
    * @throws IOException if IO error during processing.
    */
   public Vector decode(final URL url) throws IOException {
-    LineNumberReader reader = null;
+    LineNumberReader reader;
+    boolean isZipFile = url.getPath().toLowerCase().endsWith(".zip");
+    InputStream inputStream;
+    if (isZipFile) {
+        inputStream = new ZipInputStream(url.openStream());
+        //move stream to next entry so we can read it
+        ((ZipInputStream)inputStream).getNextEntry();
+    } else {
+        inputStream = url.openStream();
+    }
     if (owner != null) {
         reader = new LineNumberReader(
                 new InputStreamReader(
                         new ProgressMonitorInputStream(owner,
-                                "Loading " + url , url.openStream())));
+                                "Loading " + url , inputStream), ENCODING));
     } else {
-        reader = new LineNumberReader(new InputStreamReader(url.openStream()));
+        reader = new LineNumberReader(new InputStreamReader(inputStream, ENCODING));
     }
     Vector v = new Vector();
 
diff --git a/src/main/java/org/apache/log4j/xml/XMLDecoder.java b/src/main/java/org/apache/log4j/xml/XMLDecoder.java
index 13aa495..62cae3a 100644
--- a/src/main/java/org/apache/log4j/xml/XMLDecoder.java
+++ b/src/main/java/org/apache/log4j/xml/XMLDecoder.java
@@ -19,6 +19,7 @@
 
 import java.awt.Component;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.io.StringReader;
@@ -28,6 +29,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Vector;
+import java.util.zip.ZipInputStream;
 
 import javax.swing.ProgressMonitorInputStream;
 import javax.xml.parsers.DocumentBuilder;
@@ -184,12 +186,22 @@
    */
   public Vector decode(final URL url) throws IOException {
     LineNumberReader reader;
-    if (owner != null) {
-      reader = new LineNumberReader(new InputStreamReader(
-              new ProgressMonitorInputStream(owner,
-                      "Loading " + url , url.openStream()), ENCODING));
+    boolean isZipFile = url.getPath().toLowerCase().endsWith(".zip");
+    InputStream inputStream;
+    if (isZipFile) {
+        inputStream = new ZipInputStream(url.openStream());
+        //move stream to next entry so we can read it
+        ((ZipInputStream)inputStream).getNextEntry();
     } else {
-      reader = new LineNumberReader(new InputStreamReader(url.openStream(), ENCODING));
+        inputStream = url.openStream();
+    }
+    if (owner != null) {
+        reader = new LineNumberReader(
+                new InputStreamReader(
+                        new ProgressMonitorInputStream(owner,
+                                "Loading " + url , inputStream), ENCODING));
+    } else {
+        reader = new LineNumberReader(new InputStreamReader(inputStream, ENCODING));
     }
 
     Vector v = new Vector();