Author: btellier
Date: Thu Dec 17 15:11:07 2015
New Revision: 1720597

URL: http://svn.apache.org/viewvc?rev=1720597&view=rev
Log:
JAMES-1618 Adding spring wiring and configuration files for ManageSieve 
capability

Added:
    
james/project/trunk/dockerfiles/run/guice/destination/conf/managesieveserver.xml
    
james/project/trunk/dockerfiles/run/spring/destination/conf/managesieveserver.xml
    
james/project/trunk/server/app/src/main/resources/managesieveserver-template.xml
    
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
    
james/project/trunk/server/container/cassandra-guice/src/test/resources/managesieveserver.xml
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerMBean.java
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/resources/
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/resources/META-INF/
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/resources/META-INF/spring/
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/resources/META-INF/spring/managesieveserver-context.xml
Modified:
    james/project/trunk/protocols/managesieve/pom.xml
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
    
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
    james/project/trunk/protocols/pom.xml
    james/project/trunk/server/app/pom.xml
    james/project/trunk/server/container/cassandra-guice/pom.xml
    
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
    
james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
    james/project/trunk/server/pom.xml
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
    
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java

Added: 
james/project/trunk/dockerfiles/run/guice/destination/conf/managesieveserver.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/dockerfiles/run/guice/destination/conf/managesieveserver.xml?rev=1720597&view=auto
==============================================================================
--- 
james/project/trunk/dockerfiles/run/guice/destination/conf/managesieveserver.xml
 (added)
+++ 
james/project/trunk/dockerfiles/run/guice/destination/conf/managesieveserver.xml
 Thu Dec 17 15:11:07 2015
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!--
+  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.                                           
+ -->
+ 
+<!--
+   This template file can be used as example for James Server configuration
+   DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS
+-->
+ 
+<!-- See http://james.apache.org/server/3/config.html for usage -->
+
+<managesieveservers>
+
+   <managesieveserver enabled="false">
+
+     <jmxName>managesieveserver</jmxName>
+
+     <bind>0.0.0.0:4190</bind>
+
+     <connectionBacklog>200</connectionBacklog>
+
+     <tls socketTLS="false" startTLS="false">
+       <!-- To create a new keystore execute:
+        keytool -genkey -alias james -keyalg RSA -keystore 
/path/to/james/conf/keystore
+         -->
+       <keystore>file://conf/keystore</keystore>
+       <secret>james72laBalle</secret>
+       <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
+       <!-- The algorithm is optional and only needs to be specified when 
using something other
+        than the Sun JCE provider - You could use IbmX509 with IBM Java 
runtime. -->
+       <algorithm>SunX509</algorithm>
+     </tls>
+         
+        <!-- connection timeout in secconds -->
+        <connectiontimeout>360</connectiontimeout>
+
+        <!-- Set the maximum simultaneous incoming connections for this 
service -->
+        <connectionLimit>0</connectionLimit>
+         
+        <!-- Set the maximum simultaneous incoming connections per IP for this 
service -->
+        <connectionLimitPerIP>0</connectionLimitPerIP>
+        <maxmessagesize>0</maxmessagesize>
+        <addressBracketsEnforcement>true</addressBracketsEnforcement>
+  
+   </managesieveserver>
+
+</managesieveservers>
+
+

Added: 
james/project/trunk/dockerfiles/run/spring/destination/conf/managesieveserver.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/dockerfiles/run/spring/destination/conf/managesieveserver.xml?rev=1720597&view=auto
==============================================================================
--- 
james/project/trunk/dockerfiles/run/spring/destination/conf/managesieveserver.xml
 (added)
+++ 
james/project/trunk/dockerfiles/run/spring/destination/conf/managesieveserver.xml
 Thu Dec 17 15:11:07 2015
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!--
+  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.                                           
+ -->
+ 
+<!--
+   This template file can be used as example for James Server configuration
+   DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS
+-->
+ 
+<!-- See http://james.apache.org/server/3/config.html for usage -->
+
+<managesieveservers>
+
+   <managesieveserver enabled="true">
+
+     <jmxName>managesieveserver</jmxName>
+
+     <bind>0.0.0.0:4190</bind>
+
+     <connectionBacklog>200</connectionBacklog>
+
+     <tls socketTLS="false" startTLS="false">
+       <!-- To create a new keystore execute:
+        keytool -genkey -alias james -keyalg RSA -keystore 
/path/to/james/conf/keystore
+         -->
+       <keystore>file://conf/keystore</keystore>
+       <secret>james72laBalle</secret>
+       <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
+       <!-- The algorithm is optional and only needs to be specified when 
using something other
+        than the Sun JCE provider - You could use IbmX509 with IBM Java 
runtime. -->
+       <algorithm>SunX509</algorithm>
+     </tls>
+         
+        <!-- connection timeout in secconds -->
+        <connectiontimeout>360</connectiontimeout>
+
+        <!-- Set the maximum simultaneous incoming connections for this 
service -->
+        <connectionLimit>0</connectionLimit>
+         
+        <!-- Set the maximum simultaneous incoming connections per IP for this 
service -->
+        <connectionLimitPerIP>0</connectionLimitPerIP>
+        <maxmessagesize>0</maxmessagesize>
+        <addressBracketsEnforcement>true</addressBracketsEnforcement>
+  
+   </managesieveserver>
+
+</managesieveservers>
+
+

Modified: james/project/trunk/protocols/managesieve/pom.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/pom.xml?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- james/project/trunk/protocols/managesieve/pom.xml (original)
+++ james/project/trunk/protocols/managesieve/pom.xml Thu Dec 17 15:11:07 2015
@@ -49,6 +49,10 @@
             <artifactId>commons-io</artifactId>
         </dependency>
         <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
 Thu Dec 17 15:11:07 2015
@@ -51,6 +51,7 @@ import org.apache.james.sieverepository.
 import org.apache.james.user.api.UsersRepository;
 
 import java.io.IOException;
+import javax.inject.Inject;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -70,6 +71,7 @@ public class CoreProcessor implements Co
     private final Map<Capabilities, String> capabilitiesBase;
     private final Map<SupportedMechanism, AuthenticationProcessor> 
authenticationProcessorMap;
 
+    @Inject
     public CoreProcessor(SieveRepository repository, UsersRepository 
usersRepository, SieveParser parser) {
         this.sieveRepository = repository;
         this.parser = parser;

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
 Thu Dec 17 15:11:07 2015
@@ -36,7 +36,11 @@ public class Parser implements SievePars
     
     private static final List<String> EMPTY_WARNINGS = new 
ArrayList<String>(0);
     
-    private SieveFactory sieveFactory = null;
+    private SieveFactory sieveFactory;
+
+    public Parser() throws Exception {
+        setConfigurationManager(new ConfigurationManager());
+    }
 
     public Parser(ConfigurationManager manager) {
         setConfigurationManager(manager);

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
 Thu Dec 17 15:11:07 2015
@@ -29,6 +29,7 @@ import org.apache.james.managesieve.api.
 import org.apache.james.managesieve.api.commands.CoreCommands;
 import org.apache.james.managesieve.util.ParserUtils;
 
+import javax.inject.Inject;
 import java.util.Iterator;
 
 /**
@@ -38,6 +39,7 @@ public class ArgumentParser {
     
     private final CoreCommands core;
 
+    @Inject
     public ArgumentParser(CoreCommands core) {
         this.core = core;
     }

Modified: 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
 (original)
+++ 
james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
 Thu Dec 17 15:11:07 2015
@@ -25,6 +25,8 @@ import org.apache.james.managesieve.api.
 import org.apache.james.managesieve.api.SessionTerminatedException;
 import org.apache.james.sieverepository.api.exception.SieveRepositoryException;
 
+import javax.inject.Inject;
+
 public class ManageSieveProcessor {
 
     public static final String AUTHENTICATE = "AUTHENTICATE";
@@ -45,6 +47,7 @@ public class ManageSieveProcessor {
 
     private final ArgumentParser argumentParser;
 
+    @Inject
     public ManageSieveProcessor(ArgumentParser argumentParser) {
         this.argumentParser = argumentParser;
     }

Modified: james/project/trunk/protocols/pom.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/protocols/pom.xml?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- james/project/trunk/protocols/pom.xml (original)
+++ james/project/trunk/protocols/pom.xml Thu Dec 17 15:11:07 2015
@@ -162,6 +162,11 @@
                 <version>${netty.version}</version>
             </dependency>
             <dependency>
+                <groupId>javax.inject</groupId>
+                <artifactId>javax.inject</artifactId>
+                <version>1</version>
+            </dependency>
+            <dependency>
                 <groupId>org.apache.james</groupId>
                 <artifactId>apache-james-mailbox-api</artifactId>
                 <version>${mailbox.version}</version>

Modified: james/project/trunk/server/app/pom.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/app/pom.xml?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- james/project/trunk/server/app/pom.xml (original)
+++ james/project/trunk/server/app/pom.xml Thu Dec 17 15:11:07 2015
@@ -314,6 +314,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
+            <artifactId>james-server-protocols-managesieve</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.james</groupId>
             <artifactId>james-server-protocols-pop3</artifactId>
             <scope>runtime</scope>
             <exclusions>

Added: 
james/project/trunk/server/app/src/main/resources/managesieveserver-template.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/app/src/main/resources/managesieveserver-template.xml?rev=1720597&view=auto
==============================================================================
--- 
james/project/trunk/server/app/src/main/resources/managesieveserver-template.xml
 (added)
+++ 
james/project/trunk/server/app/src/main/resources/managesieveserver-template.xml
 Thu Dec 17 15:11:07 2015
@@ -0,0 +1,95 @@
+<?xml version="1.0"?>
+<!--
+  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.                                           
+ -->
+ 
+<!--
+   This template file can be used as example for James Server configuration
+   DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS
+-->
+ 
+<!-- See http://james.apache.org/server/3/config.html for usage -->
+
+<managesieveservers>
+
+   <managesieveserver enabled="false">
+
+     <jmxName>managesieveserver</jmxName>
+
+     <!-- Configure this to bind to a specific inetaddress -->
+     <!-- Please NOTE: you should add this IP also to your 
RemoteAddrNotInNetwork -->
+     <!-- in order to avoid relay check for locallly generated bounces -->
+     <!-- 
+            Port 4190 is the well-known/IANA registered port for ManageSieve.
+            -->
+     <bind>0.0.0.0:4190</bind>
+
+     <connectionBacklog>200</connectionBacklog>
+
+     <!-- Set to true to support STARTTLS or TLS for the Socket.
+           To use this you need to copy sunjce_provider.jar to /path/james/lib 
directory.
+      -->
+     <tls socketTLS="false" startTLS="false">
+       <!-- To create a new keystore execute:
+        keytool -genkey -alias james -keyalg RSA -keystore 
/path/to/james/conf/keystore
+         -->
+       <keystore>file://conf/keystore</keystore>
+       <secret>yoursecret</secret>
+       <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
+       <!-- The algorithm is optional and only needs to be specified when 
using something other
+        than the Sun JCE provider - You could use IbmX509 with IBM Java 
runtime. -->
+       <algorithm>SunX509</algorithm>
+     </tls>
+         
+        <!-- connection timeout in secconds -->
+        <connectiontimeout>360</connectiontimeout>
+
+        <!-- Set the maximum simultaneous incoming connections for this 
service -->
+        <connectionLimit>0</connectionLimit>
+         
+        <!-- Set the maximum simultaneous incoming connections per IP for this 
service -->
+        <connectionLimitPerIP>0</connectionLimitPerIP>
+
+        <!--  Uncomment this if you want to verify sender addresses, ensuring 
that -->
+        <!--  the sender address matches the user who has authenticated. -->
+        <!--  This prevents a user of your mail server from acting as someone 
else -->
+        <!--  If unspecified, default value is true -->
+        <!--
+        <verifyIdentity>true</verifyIdentity>
+         -->
+
+        <!--  This sets the maximum allowed message size (in kilobytes) for 
this -->
+        <!--  ManageSieve service. If unspecified, the value defaults to 0, 
which means no limit. -->
+        <maxmessagesize>0</maxmessagesize>
+         
+        <!--  This sets wether to enforce the use of HELO/EHLO salutation 
before a -->
+        <!--  MAIL command is accepted. If unspecified, the value defaults to 
true -->
+        <!-- 
+        <heloEhloEnforcement>true</heloEhloEnforcement>
+         -->
+         
+        <!-- WARNING: This is Non-RFC compliant (default value: true) -->
+        <!-- See: http://wiki.apache.org/james/StandardsComplianceStatement -->
+        <!-- TODO: CHANGE TO OFFICIAL URL LATER -->
+        <addressBracketsEnforcement>true</addressBracketsEnforcement>
+  
+   </managesieveserver>
+
+</managesieveservers>
+
+

Modified: james/project/trunk/server/container/cassandra-guice/pom.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/pom.xml?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- james/project/trunk/server/container/cassandra-guice/pom.xml (original)
+++ james/project/trunk/server/container/cassandra-guice/pom.xml Thu Dec 17 
15:11:07 2015
@@ -323,6 +323,10 @@
                 </dependency>
                 <dependency>
                     <groupId>${project.groupId}</groupId>
+                    <artifactId>james-server-protocols-managesieve</artifactId>
+                </dependency>
+                <dependency>
+                    <groupId>${project.groupId}</groupId>
                     <artifactId>james-server-protocols-pop3</artifactId>
                 </dependency>
                 <dependency>

Modified: 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
 (original)
+++ 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
 Thu Dec 17 15:11:07 2015
@@ -29,6 +29,7 @@ import org.apache.james.modules.mailbox.
 import org.apache.james.modules.protocols.IMAPServerModule;
 import org.apache.james.modules.protocols.JMAPServerModule;
 import org.apache.james.modules.protocols.LMTPServerModule;
+import org.apache.james.modules.protocols.ManageSieveServerModule;
 import org.apache.james.modules.protocols.POP3ServerModule;
 import org.apache.james.modules.protocols.ProtocolHandlerModule;
 import org.apache.james.modules.protocols.SMTPServerModule;
@@ -62,6 +63,7 @@ public class CassandraJamesServerMain {
             new POP3ServerModule(),
             new SMTPServerModule(),
             new LMTPServerModule(),
+            new ManageSieveServerModule(),
             new ActiveMQQueueModule(),
             new SieveModule(),
             new MailStoreRepositoryModule(),

Added: 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java?rev=1720597&view=auto
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
 (added)
+++ 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
 Thu Dec 17 15:11:07 2015
@@ -0,0 +1,62 @@
+/****************************************************************
+ * 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.modules.protocols;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.google.inject.multibindings.Multibinder;
+import org.apache.james.managesieve.api.commands.CoreCommands;
+import org.apache.james.managesieve.core.CoreProcessor;
+import org.apache.james.managesieveserver.netty.ManageSieveServerFactory;
+import org.apache.james.utils.ConfigurationPerformer;
+import org.apache.james.utils.ConfigurationProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ManageSieveServerModule extends AbstractModule {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ManageSieveServerModule.class);
+
+    @Override
+    protected void configure() {
+        bind(CoreCommands.class).to(CoreProcessor.class);
+        Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(ManageSieveModuleConfigurationPerformer.class);
+    }
+
+    @Singleton
+    public static class ManageSieveModuleConfigurationPerformer implements 
ConfigurationPerformer {
+
+        private final ConfigurationProvider configurationProvider;
+        private final ManageSieveServerFactory manageSieveServerFactory;
+
+        @Inject
+        public ManageSieveModuleConfigurationPerformer(ConfigurationProvider 
configurationProvider, ManageSieveServerFactory manageSieveServerFactory) {
+            this.configurationProvider = configurationProvider;
+            this.manageSieveServerFactory = manageSieveServerFactory;
+        }
+
+        @Override
+        public void initModule() throws Exception {
+            manageSieveServerFactory.setLog(LOGGER);
+            
manageSieveServerFactory.configure(configurationProvider.getConfiguration("managesieveserver"));
+            manageSieveServerFactory.init();
+        }
+    }
+}
\ No newline at end of file

Added: 
james/project/trunk/server/container/cassandra-guice/src/test/resources/managesieveserver.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/test/resources/managesieveserver.xml?rev=1720597&view=auto
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/src/test/resources/managesieveserver.xml
 (added)
+++ 
james/project/trunk/server/container/cassandra-guice/src/test/resources/managesieveserver.xml
 Thu Dec 17 15:11:07 2015
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!--
+  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.                                           
+ -->
+ 
+<!--
+   This template file can be used as example for James Server configuration
+   DO NOT USE IT AS SUCH AND ADAPT IT TO YOUR NEEDS
+-->
+ 
+<!-- See http://james.apache.org/server/3/config.html for usage -->
+
+<managesieveservers>
+
+   <managesieveserver enabled="true">
+
+     <jmxName>managesieveserver</jmxName>
+
+     <bind>0.0.0.0:4190</bind>
+
+     <connectionBacklog>200</connectionBacklog>
+
+     <tls socketTLS="false" startTLS="false">
+       <!-- To create a new keystore execute:
+        keytool -genkey -alias james -keyalg RSA -keystore 
/path/to/james/conf/keystore
+         -->
+       <keystore>file://conf/keystore</keystore>
+       <secret>james72laBalle</secret>
+       <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
+       <!-- The algorithm is optional and only needs to be specified when 
using something other
+        than the Sun JCE provider - You could use IbmX509 with IBM Java 
runtime. -->
+       <algorithm>SunX509</algorithm>
+     </tls>
+         
+        <!-- connection timeout in secconds -->
+        <connectiontimeout>360</connectiontimeout>
+
+        <!-- Set the maximum simultaneous incoming connections for this 
service -->
+        <connectionLimit>0</connectionLimit>
+         
+        <!-- Set the maximum simultaneous incoming connections per IP for this 
service -->
+        <connectionLimitPerIP>0</connectionLimitPerIP>
+        <maxmessagesize>0</maxmessagesize>
+        <addressBracketsEnforcement>true</addressBracketsEnforcement>
+  
+   </managesieveserver>
+
+</managesieveservers>
+
+

Modified: 
james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- 
james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
 (original)
+++ 
james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
 Thu Dec 17 15:11:07 2015
@@ -104,6 +104,10 @@
     <!-- IMAP4 Server -->
     <import resource="classpath:META-INF/spring/imapserver-context.xml"/>
 
+    <!-- IMAP4 Server -->
+    <import 
resource="classpath:META-INF/spring/managesieveserver-context.xml"/>
+
+
     <!--
     ===========================================================================
        Indexer

Modified: james/project/trunk/server/pom.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/pom.xml?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- james/project/trunk/server/pom.xml (original)
+++ james/project/trunk/server/pom.xml Thu Dec 17 15:11:07 2015
@@ -652,6 +652,11 @@
             </dependency>
 
             <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>james-server-protocols-managesieve</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
                 <groupId>org.apache.james</groupId>
                 <artifactId>james-server-protocols-smtp</artifactId>
                 <version>${project.version}</version>

Modified: 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
 (original)
+++ 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
 Thu Dec 17 15:11:07 2015
@@ -44,7 +44,7 @@ import javax.net.ssl.SSLEngine;
 
 import static org.jboss.netty.channel.Channels.pipeline;
 
-public class ManageSieveServer extends AbstractConfigurableAsyncServer {
+public class ManageSieveServer extends AbstractConfigurableAsyncServer 
implements ManageSieveServerMBean {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ManageSieveServer.class);
 

Modified: 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java?rev=1720597&r1=1720596&r2=1720597&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java
 (original)
+++ 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java
 Thu Dec 17 15:11:07 2015
@@ -21,6 +21,7 @@ package org.apache.james.managesieveserv
 
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.managesieve.api.SieveParser;
 import org.apache.james.managesieve.core.CoreProcessor;
 import org.apache.james.managesieve.jsieve.Parser;
 import org.apache.james.managesieve.transcode.ArgumentParser;
@@ -31,6 +32,7 @@ import org.apache.james.sieverepository.
 import org.apache.james.user.api.UsersRepository;
 import org.slf4j.Logger;
 
+import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 import java.util.ArrayList;
 import java.util.List;
@@ -39,15 +41,34 @@ public class ManageSieveServerFactory ex
 
     private FileSystem fileSystem;
     private ManageSieveProcessor manageSieveProcessor;
+    private SieveRepository sieveRepository;
+    private UsersRepository usersRepository;
+    private Parser sieveParser;
 
     @Inject
-    public void setManageSieveProcessor(ManageSieveProcessor 
manageSieveProcessor) {
-        this.manageSieveProcessor = manageSieveProcessor;
+    public void setFileSystem(FileSystem fileSystem) {
+        this.fileSystem = fileSystem;
     }
 
     @Inject
-    public void setFileSystem(FileSystem fileSystem) {
-        this.fileSystem = fileSystem;
+    public void setSieveRepository(SieveRepository sieveRepository) {
+        this.sieveRepository = sieveRepository;
+    }
+
+    @Inject
+    public void setUsersRepository(UsersRepository usersRepository) {
+        this.usersRepository = usersRepository;
+    }
+
+    @Inject
+    public void setParser(Parser sieveParser) {
+        this.sieveParser = sieveParser;
+    }
+
+    @PostConstruct
+    public void init() throws Exception {
+        manageSieveProcessor = new ManageSieveProcessor(new ArgumentParser(new 
CoreProcessor(sieveRepository, usersRepository, sieveParser)));
+        super.init();
     }
 
     @Override

Added: 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerMBean.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerMBean.java?rev=1720597&view=auto
==============================================================================
--- 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerMBean.java
 (added)
+++ 
james/project/trunk/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerMBean.java
 Thu Dec 17 15:11:07 2015
@@ -0,0 +1,25 @@
+/****************************************************************
+ * 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.managesieveserver.netty;
+
+import org.apache.james.protocols.lib.jmx.ServerMBean;
+
+public interface ManageSieveServerMBean extends ServerMBean {
+}

Added: 
james/project/trunk/server/protocols/protocols-managesieve/src/main/resources/META-INF/spring/managesieveserver-context.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/protocols-managesieve/src/main/resources/META-INF/spring/managesieveserver-context.xml?rev=1720597&view=auto
==============================================================================
--- 
james/project/trunk/server/protocols/protocols-managesieve/src/main/resources/META-INF/spring/managesieveserver-context.xml
 (added)
+++ 
james/project/trunk/server/protocols/protocols-managesieve/src/main/resources/META-INF/spring/managesieveserver-context.xml
 Thu Dec 17 15:11:07 2015
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    ! 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. !
+-->
+
+
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd";>
+
+    <bean id="managesieveserver" 
class="org.apache.james.managesieveserver.netty.ManageSieveServerFactory">
+        <property name="fileSystem" ref="filesystem"/>
+        <property name="sieveRepository" ref="sieverepository"/>
+        <property name="usersRepository" ref="usersrepository"/>
+        <property name="parser" ref="sieveparser"/>
+    </bean>
+
+</beans>




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

Reply via email to