Author: norman
Date: Mon Aug 10 19:38:31 2009
New Revision: 802913

URL: http://svn.apache.org/viewvc?rev=802913&view=rev
Log:
start to fix listener bindings

Modified:
    
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
    
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java
    
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java
    
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java

Modified: 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
URL: 
http://svn.apache.org/viewvc/james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java?rev=802913&r1=802912&r2=802913&view=diff
==============================================================================
--- 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
 (original)
+++ 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
 Mon Aug 10 19:38:31 2009
@@ -30,6 +30,8 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.james.smtpserver.core.CoreCmdHandlerLoader;
+import org.apache.james.smtpserver.core.HeloCmdHandler;
+import org.apache.james.smtpserver.core.PostHeloListener;
 import org.apache.james.smtpserver.core.SendMailHandler;
 import org.apache.james.smtpserver.core.UnknownCmdHandler;
 
@@ -52,6 +54,7 @@
     private HashMap commandHandlerMap = new HashMap();
     private ArrayList messageHandlers = new ArrayList();
     private ArrayList connectHandlers = new ArrayList();
+    private ArrayList listeners = new ArrayList();
 
     private final CommandHandler unknownHandler = new UnknownCmdHandler();
     private ServiceManager serviceManager;
@@ -119,6 +122,30 @@
                         addHandler(null, SendMailHandler.class.getName()));
             }
         }
+        
+        if (configuration != null) {
+            Configuration[] children = configuration.getChildren("listener");
+            ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();
+
+      
+            // load the configured listener
+            if (children != null) {
+                for (int i = 0; i < children.length; i++) {
+                    String className = children[i].getAttribute("class");
+                    if (className != null) { 
+                        // load the listener
+                        loadClass(classLoader, className, children[i]);
+                        
+                    }
+                }
+
+                // load the BaseCmdHandler and SendMailHandler
+                loadClass(classLoader, CoreCmdHandlerLoader.class.getName(),
+                        addHandler(null, 
CoreCmdHandlerLoader.class.getName()));
+                loadClass(classLoader, SendMailHandler.class.getName(),
+                        addHandler(null, SendMailHandler.class.getName()));
+            }
+        }
 
         // the size must be greater than 1 because we added UnknownCmdHandler 
to
         // the map
@@ -173,6 +200,7 @@
               ContainerUtil.initialize(h2.next());
             }
         }
+        bindListeners();
     }
 
     /**
@@ -261,6 +289,13 @@
                     getLogger().info("Added MessageHandler: " + className);
                 }
             }
+            
+            if (handler instanceof PostHeloListener) {
+               listeners.add(handler);
+                if (getLogger().isInfoEnabled()) {
+                    getLogger().info("Added PostHeloListener: " + className);
+                }
+            }
         } catch (ClassNotFoundException ex) {
             if (getLogger().isErrorEnabled()) {
                 getLogger().error("Failed to add Commandhandler: " + className,
@@ -291,6 +326,27 @@
                     + className, e);
         }
     }
+    
+    private void bindListeners() {
+       Iterator it = commandHandlerMap.entrySet().iterator();
+       while(it.hasNext()) {
+               Object obj = it.next();
+               Iterator listenerIt = listeners.iterator();
+               
+               if (obj instanceof HeloCmdHandler) {
+                       while (listenerIt.hasNext()) {
+                               Object listener = listenerIt.next();
+                               if (listener instanceof PostHeloListener) {
+                                       ((HeloCmdHandler) 
obj).addListener((PostHeloListener) listener);
+                                       if (getLogger().isInfoEnabled()) {
+                                               getLogger().info("Bind 
PostHeloListener " + listener.getClass().getName() + " to handler " + 
obj.getClass().getName());
+                                       }
+
+                               }
+                       }
+               }
+       }
+    }
 
     /**
      * Return a DefaultConfiguration build on the given command name and 
classname
@@ -306,6 +362,7 @@
         return cmdConf;
     }
 
+    
     /**
      * Add it to map (key as command name, value is an array list of 
commandhandlers)
      *

Modified: 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java
URL: 
http://svn.apache.org/viewvc/james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java?rev=802913&r1=802912&r2=802913&view=diff
==============================================================================
--- 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java
 (original)
+++ 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java
 Mon Aug 10 19:38:31 2009
@@ -13,8 +13,12 @@
     }
     
     public void setListener(List<Listener> listeners) {
-       listeners.addAll(this.listeners);
        this.listeners = listeners;
+       listeners.add(getLastListener());
+    }
+    
+    public void addListener(Listener listener) {
+       listeners.add(listeners.size() -1,listener);
     }
     
     protected abstract Listener getLastListener();

Modified: 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java
URL: 
http://svn.apache.org/viewvc/james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java?rev=802913&r1=802912&r2=802913&view=diff
==============================================================================
--- 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java
 (original)
+++ 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java
 Mon Aug 10 19:38:31 2009
@@ -77,8 +77,7 @@
 
        @Override
        protected PostDataListener getLastListener() {
-               // TODO Auto-generated method stub
-               return null;
+               return this;
        }
 
        public String onData(SMTPSession session, Mail mail) {

Modified: 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
URL: 
http://svn.apache.org/viewvc/james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java?rev=802913&r1=802912&r2=802913&view=diff
==============================================================================
--- 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
 (original)
+++ 
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
 Mon Aug 10 19:38:31 2009
@@ -184,9 +184,7 @@
 
 
         if (m_heloResolv || m_ehloResolv) {
-            DefaultConfiguration d = createHandler(
-                    ResolvableEhloHeloHandler.class.getName(), null);
-            d.setAttribute("command", "EHLO,HELO,RCPT");
+            DefaultConfiguration d = 
createListener(ResolvableEhloHeloHandler.class.getName());
             d.addChild(Util.getValuedConfiguration("checkAuthNetworks",
                     m_checkAuthNetworks + ""));
             config.addChild(d);
@@ -232,5 +230,11 @@
         d.setAttribute("class", className);
         return d;
     }
-    
+   
+    private DefaultConfiguration createListener(String className) {
+        DefaultConfiguration d = new DefaultConfiguration("handler");
+        
+        d.setAttribute("class", className);
+        return d;
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to