Author: norman
Date: Sun Jan  1 12:12:30 2012
New Revision: 1226242

URL: http://svn.apache.org/viewvc?rev=1226242&view=rev
Log:
Move future classes to extra package

Added:
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponse.java
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponseImpl.java
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStartTlsResponse.java
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStreamResponseImpl.java
Removed:
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureResponse.java
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureResponseImpl.java
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureStreamResponseImpl.java
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/StartTlsFutureResponse.java
Modified:
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java
    
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java
    
james/protocols/trunk/api/src/test/java/org/apache/james/protocols/api/AbstractProtocolTransportTest.java
    
james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java

Modified: 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java?rev=1226242&r1=1226241&r2=1226242&view=diff
==============================================================================
--- 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java
 (original)
+++ 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java
 Sun Jan  1 12:12:30 2012
@@ -25,7 +25,8 @@ import java.util.List;
 import java.util.Queue;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import org.apache.james.protocols.api.FutureResponse.ResponseListener;
+import org.apache.james.protocols.api.future.FutureResponse;
+import org.apache.james.protocols.api.future.FutureResponse.ResponseListener;
 
 
 /**

Added: 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponse.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponse.java?rev=1226242&view=auto
==============================================================================
--- 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponse.java
 (added)
+++ 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponse.java
 Sun Jan  1 12:12:30 2012
@@ -0,0 +1,68 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.protocols.api.future;
+
+import org.apache.james.protocols.api.Response;
+
+/**
+ * An special {@link Response} which allows to populate it in an async 
fashion. It also allows to register listeners which will get notified once the 
+ * {@link FutureResponse} is ready
+ * 
+ *
+ */
+public interface FutureResponse extends Response{
+
+    /**
+     * Add a {@link ResponseListener} which will get notified once {@link 
#isReady()} is true
+     * 
+     * @param listener
+     */
+    public void addListener(ResponseListener listener);
+    
+    /**
+     * Remote a {@link ResponseListener}
+     * 
+     * @param listener
+     */
+    public void removeListener(ResponseListener listener);
+    
+    /**
+     * Return <code>true</code> once the {@link FutureResponse} is ready and 
calling any of the get methods will not block any more.
+     * 
+     * @return ready
+     */
+    public boolean isReady();
+    
+    
+    /**
+     * Listener which will get notified once the {@link 
FutureResponse#isReady()} returns <code>true</code>
+     * 
+     *
+     */
+    public interface ResponseListener {
+
+        /**
+         * The {@link FutureResponse} is ready for processing
+         * 
+         * @param response
+         */
+        public void onResponse(FutureResponse response);
+    }
+}

Added: 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponseImpl.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponseImpl.java?rev=1226242&view=auto
==============================================================================
--- 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponseImpl.java
 (added)
+++ 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureResponseImpl.java
 Sun Jan  1 12:12:30 2012
@@ -0,0 +1,162 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.protocols.api.future;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.james.protocols.api.AbstractResponse;
+import org.apache.james.protocols.api.Response;
+import org.apache.james.protocols.api.logger.Logger;
+
+/**
+ * {@link FutureResponse} implementation which wraps a {@link 
AbstractResponse} implementation
+ * 
+ *
+ */
+public class FutureResponseImpl implements FutureResponse{
+    
+    private final Logger logger;
+
+    public FutureResponseImpl() {
+        this(null);
+    }
+    
+    public FutureResponseImpl(Logger logger) {
+        this.logger = logger;
+    }
+    
+    protected Response response;
+    private List<ResponseListener> listeners;
+    private int waiters;
+
+    protected final synchronized void checkReady() {
+        while (!isReady()) {
+            try {
+                waiters++;
+                wait();
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+            } finally {
+                waiters--;
+            }
+        }
+    }
+    /*
+     * (non-Javadoc)
+     * @see 
org.apache.james.protocols.api.FutureResponse#addListener(org.apache.james.protocols.api.FutureResponse.ResponseListener)
+     */
+    public synchronized void addListener(ResponseListener listener) {
+        if (isReady()) {
+            listener.onResponse(this);
+        } else {
+            if (listeners == null) {
+                listeners = new ArrayList<ResponseListener>();
+            }
+            listeners.add(listener);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see 
org.apache.james.protocols.api.FutureResponse#removeListener(org.apache.james.protocols.api.FutureResponse.ResponseListener)
+     */
+    public synchronized void removeListener(ResponseListener listener) {
+        if (!isReady()) {
+            if (listeners != null) {
+                listeners.remove(listener);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.FutureResponse#isReady()
+     */
+    public synchronized boolean isReady() {
+        return response != null;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.Response#getLines()
+     */
+    public List<CharSequence> getLines() {
+        checkReady();
+        return response.getLines();
+    }
+
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.Response#getRetCode()
+     */
+    public String getRetCode() {
+        checkReady();
+        return response.getRetCode();
+    }
+
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.Response#isEndSession()
+     */
+    public boolean isEndSession() {
+        checkReady();
+        return response.isEndSession();
+    }
+
+    @Override
+    public synchronized String toString() {
+        checkReady();
+        return response.toString();
+    }
+    
+    public void setResponse(Response response) {
+        boolean fire = false;
+        synchronized (this) {
+            if (!isReady()) {
+                this.response = response;
+                fire = listeners != null;
+
+                if (waiters > 0) {
+                    notifyAll();
+                }
+            }
+        }
+
+        if (fire) {
+            for (ResponseListener listener : listeners) {
+                try {
+                    listener.onResponse(this);
+                } catch (Throwable e) {
+                    if (logger != null) {
+                        logger.warn("An exception was thrown by the listener " 
+ listener, e);
+                    } else {
+                        e.printStackTrace();
+                    }
+                }
+            }
+            listeners = null;
+            
+        }
+    }
+
+}

Added: 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStartTlsResponse.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStartTlsResponse.java?rev=1226242&view=auto
==============================================================================
--- 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStartTlsResponse.java
 (added)
+++ 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStartTlsResponse.java
 Sun Jan  1 12:12:30 2012
@@ -0,0 +1,41 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.protocols.api.future;
+
+import org.apache.james.protocols.api.Response;
+import org.apache.james.protocols.api.StartTlsResponse;
+
+public class FutureStartTlsResponse extends FutureResponseImpl implements 
StartTlsResponse{
+
+
+    /**
+     * Set the {@link StartTlsResponse} to wrap. If a non {@link 
StartTlsResponse} is set this implementation will throw an {@link 
IllegalArgumentException}
+     * 
+     */
+    @Override
+    public void setResponse(Response response) {
+        if (response instanceof StartTlsResponse) {
+            super.setResponse(response);
+        } else {
+            throw new IllegalArgumentException("Response MUST be of type " + 
StartTlsResponse.class.getName());
+        }
+    }
+
+}

Added: 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStreamResponseImpl.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStreamResponseImpl.java?rev=1226242&view=auto
==============================================================================
--- 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStreamResponseImpl.java
 (added)
+++ 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/future/FutureStreamResponseImpl.java
 Sun Jan  1 12:12:30 2012
@@ -0,0 +1,51 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.protocols.api.future;
+
+import java.io.InputStream;
+
+import org.apache.james.protocols.api.Response;
+import org.apache.james.protocols.api.StreamResponse;
+
+public class FutureStreamResponseImpl extends FutureResponseImpl implements 
StreamResponse{
+
+    /**
+     * Set the {@link StreamResponse} to wrap. If a non {@link StreamResponse} 
is set this implementation will throw an {@link IllegalArgumentException}
+     * 
+     */
+    @Override
+    public void setResponse(Response response) {
+        if (response instanceof StreamResponse) {
+            super.setResponse(response);
+        } else {
+            throw new IllegalArgumentException("Response MUST be of type " + 
StreamResponse.class.getName());
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.StreamResponse#getStream()
+     */
+    public InputStream getStream() {
+        checkReady();
+        return ((StreamResponse) response).getStream();
+        
+    }
+}

Modified: 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java?rev=1226242&r1=1226241&r2=1226242&view=diff
==============================================================================
--- 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java
 (original)
+++ 
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java
 Sun Jan  1 12:12:30 2012
@@ -30,10 +30,10 @@ import java.util.List;
 import java.util.Locale;
 
 import org.apache.james.protocols.api.BaseRequest;
-import org.apache.james.protocols.api.FutureResponse;
 import org.apache.james.protocols.api.ProtocolSession;
 import org.apache.james.protocols.api.Request;
 import org.apache.james.protocols.api.Response;
+import org.apache.james.protocols.api.future.FutureResponse;
 
 
 

Modified: 
james/protocols/trunk/api/src/test/java/org/apache/james/protocols/api/AbstractProtocolTransportTest.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/test/java/org/apache/james/protocols/api/AbstractProtocolTransportTest.java?rev=1226242&r1=1226241&r2=1226242&view=diff
==============================================================================
--- 
james/protocols/trunk/api/src/test/java/org/apache/james/protocols/api/AbstractProtocolTransportTest.java
 (original)
+++ 
james/protocols/trunk/api/src/test/java/org/apache/james/protocols/api/AbstractProtocolTransportTest.java
 Sun Jan  1 12:12:30 2012
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
 
+import org.apache.james.protocols.api.future.FutureResponseImpl;
 import org.apache.james.protocols.api.handler.LineHandler;
 import org.junit.Test;
 

Modified: 
james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java?rev=1226242&r1=1226241&r2=1226242&view=diff
==============================================================================
--- 
james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
 (original)
+++ 
james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
 Sun Jan  1 12:12:30 2012
@@ -24,12 +24,12 @@ import java.util.List;
 import javax.net.ssl.SSLEngine;
 
 import org.apache.james.protocols.api.ProtocolSessionImpl;
-import org.apache.james.protocols.api.FutureResponse;
 import org.apache.james.protocols.api.Protocol;
 import org.apache.james.protocols.api.ProtocolSession;
 import org.apache.james.protocols.api.ProtocolTransport;
 import org.apache.james.protocols.api.Response;
 import org.apache.james.protocols.api.Encryption;
+import org.apache.james.protocols.api.future.FutureResponse;
 import org.apache.james.protocols.api.handler.ConnectHandler;
 import org.apache.james.protocols.api.handler.DisconnectHandler;
 import org.apache.james.protocols.api.handler.LineHandler;



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to