Author: ggregory
Date: Fri Jan 31 21:50:43 2014
New Revision: 1563271

URL: http://svn.apache.org/r1563271
Log:
Use generics on AbstractOutputStreamAppender to define what kind of 
OutputStreamManager is being managed.

Added:
    
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
   (with props)
Modified:
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java
    
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java?rev=1563271&r1=1563270&r2=1563271&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
 Fri Jan 31 21:50:43 2014
@@ -27,8 +27,10 @@ import org.apache.logging.log4j.core.Log
 
 /**
  * Appends log events as bytes to a byte output stream. The stream encoding is 
defined in the layout.
+ * 
+ * @param <M> The kind of {@link OutputStreamManager} under management
  */
-public abstract class AbstractOutputStreamAppender extends AbstractAppender {
+public abstract class AbstractOutputStreamAppender<M extends 
OutputStreamManager> extends AbstractAppender {
 
     /**
      * Immediate flush means that the underlying writer or output stream
@@ -41,7 +43,7 @@ public abstract class AbstractOutputStre
      */
     protected final boolean immediateFlush;
 
-    private volatile OutputStreamManager manager;
+    private volatile M manager;
 
     private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
     private final Lock readLock = rwLock.readLock();
@@ -57,21 +59,26 @@ public abstract class AbstractOutputStre
      */
     protected AbstractOutputStreamAppender(final String name, final Layout<? 
extends Serializable> layout, final Filter filter,
                                            final boolean ignoreExceptions, 
final boolean immediateFlush,
-                                           final OutputStreamManager manager) {
+                                           final M manager) {
         super(name, filter, layout, ignoreExceptions);
         this.manager = manager;
         this.immediateFlush = immediateFlush;
     }
 
-    protected OutputStreamManager getManager() {
+    /**
+     * Gets the manager.
+     * 
+     * @return the manager.
+     */
+    public M getManager() {
         return manager;
     }
 
-    protected void replaceManager(final OutputStreamManager newManager) {
+    protected void replaceManager(final M newManager) {
 
         writeLock.lock();
         try {
-            final OutputStreamManager old = manager;
+            final M old = manager;
             manager = newManager;
             old.release();
         } finally {

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java?rev=1563271&r1=1563270&r2=1563271&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
 Fri Jan 31 21:50:43 2014
@@ -46,7 +46,7 @@ import org.apache.logging.log4j.util.Pro
  * default. OTOH, a Writer cannot print byte streams.
  */
 @Plugin(name = "Console", category = "Core", elementType = "appender", 
printObject = true)
-public final class ConsoleAppender extends AbstractOutputStreamAppender {
+public final class ConsoleAppender extends 
AbstractOutputStreamAppender<OutputStreamManager> {
 
     private static final String JANSI_CLASS = 
"org.fusesource.jansi.WindowsAnsiOutputStream";
     private static ConsoleManagerFactory factory = new ConsoleManagerFactory();

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java?rev=1563271&r1=1563270&r2=1563271&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
 Fri Jan 31 21:50:43 2014
@@ -37,7 +37,7 @@ import org.apache.logging.log4j.core.net
  * File Appender.
  */
 @Plugin(name = "File", category = "Core", elementType = "appender", 
printObject = true)
-public final class FileAppender extends AbstractOutputStreamAppender {
+public final class FileAppender extends 
AbstractOutputStreamAppender<FileManager> {
 
     private static final int DEFAULT_BUFFER_SIZE = 8192;
     private final String fileName;

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java?rev=1563271&r1=1563270&r2=1563271&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java
 Fri Jan 31 21:50:43 2014
@@ -38,7 +38,7 @@ import org.apache.logging.log4j.core.net
  * File Appender.
  */
 @Plugin(name = "RandomAccessFile", category = "Core", elementType = 
"appender", printObject = true)
-public final class RandomAccessFileAppender extends 
AbstractOutputStreamAppender {
+public final class RandomAccessFileAppender extends 
AbstractOutputStreamAppender<RandomAccessFileManager> {
 
     private final String fileName;
     private Object advertisement;

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java?rev=1563271&r1=1563270&r2=1563271&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
 Fri Jan 31 21:50:43 2014
@@ -42,7 +42,7 @@ import org.apache.logging.log4j.core.net
  * An appender that writes to files and can roll over at intervals.
  */
 @Plugin(name = "RollingFile", category = "Core", elementType = "appender", 
printObject = true)
-public final class RollingFileAppender extends AbstractOutputStreamAppender {
+public final class RollingFileAppender extends 
AbstractOutputStreamAppender<RollingFileManager> {
 
     private final String fileName;
     private final String filePattern;

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java?rev=1563271&r1=1563270&r2=1563271&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java
 Fri Jan 31 21:50:43 2014
@@ -44,7 +44,7 @@ import org.apache.logging.log4j.core.net
  * intervals.
  */
 @Plugin(name = "RollingRandomAccessFile", category = "Core", elementType = 
"appender", printObject = true)
-public final class RollingRandomAccessFileAppender extends 
AbstractOutputStreamAppender {
+public final class RollingRandomAccessFileAppender extends 
AbstractOutputStreamAppender<RollingFileManager> {
 
     private final String fileName;
     private final String filePattern;

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java?rev=1563271&r1=1563270&r2=1563271&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java
 Fri Jan 31 21:50:43 2014
@@ -41,7 +41,7 @@ import org.apache.logging.log4j.util.Eng
  * An Appender that delivers events over socket connections. Supports both TCP 
and UDP.
  */
 @Plugin(name = "Socket", category = "Core", elementType = "appender", 
printObject = true)
-public class SocketAppender extends AbstractOutputStreamAppender {
+public class SocketAppender extends 
AbstractOutputStreamAppender<AbstractSocketManager> {
     private Object advertisement;
     private final Advertiser advertiser;
 

Added: 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java?rev=1563271&view=auto
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
 (added)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
 Fri Jan 31 21:50:43 2014
@@ -0,0 +1,34 @@
+package org.apache.logging.log4j.core.appender.rolling;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.RollingFileAppender;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.Test;
+
+public class RollingFileAppenderAccessTest {
+
+    /**
+     * Not a real test, just make sure we can compile access to the typed 
manager.
+     * 
+     * @throws IOException
+     */
+    @Test
+    public void testAccessManager() throws IOException {
+        final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+        final Configuration config = ctx.getConfiguration();
+        final File file = File.createTempFile("RollingFileAppenderAccessTest", 
".tmp");
+        file.deleteOnExit();
+        final RollingFileAppender appender = 
RollingFileAppender.createAppender(file.getCanonicalPath(), "FilePattern",
+                null, "Name", null, null, 
OnStartupTriggeringPolicy.createPolicy(), null, null, null, null, null, null,
+                config);
+        final RollingFileManager manager = appender.getManager();
+        // Since the RolloverStrategy and TriggeringPolicy are immutable, we 
could also use generics to type their
+        // access.
+        manager.getRolloverStrategy();
+        manager.getTriggeringPolicy();
+    }
+}

Propchange: 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderAccessTest.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java?rev=1563271&r1=1563270&r2=1563271&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
 Fri Jan 31 21:50:43 2014
@@ -27,7 +27,7 @@ import org.apache.logging.log4j.core.fil
 /**
  *
  */
-public class InMemoryAppender extends AbstractOutputStreamAppender {
+public class InMemoryAppender extends 
AbstractOutputStreamAppender<InMemoryAppender.InMemoryManager> {
 
     public InMemoryAppender(final String name, final Layout<? extends 
Serializable> layout, final CompositeFilter filters,
                             final boolean ignoreExceptions) {
@@ -39,7 +39,7 @@ public class InMemoryAppender extends Ab
         return getManager().toString();
     }
 
-    private static class InMemoryManager extends OutputStreamManager {
+    static class InMemoryManager extends OutputStreamManager {
 
         public InMemoryManager(final String name, final Layout<? extends 
Serializable> layout) {
             super(new ByteArrayOutputStream(), name, layout);


Reply via email to