You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by er...@apache.org on 2015/05/29 11:51:58 UTC

svn commit: r1682408 - in /james/server/trunk/container: filesystem-api/ filesystem-api/src/main/java/org/apache/james/filesystem/api/ filesystem-api/src/test/java/org/apache/james/filesystem/api/ spring/ spring/src/main/resources/META-INF/spring/

Author: eric
Date: Fri May 29 09:51:57 2015
New Revision: 1682408

URL: http://svn.apache.org/r1682408
Log:
Enable JSIEVE manager mailet, contributed by Benoit Tellier (JAMES-1579)

Modified:
    james/server/trunk/container/filesystem-api/pom.xml
    james/server/trunk/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/SieveFileRepository.java
    james/server/trunk/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/SieveFileRepositoryTestCase.java
    james/server/trunk/container/spring/pom.xml
    james/server/trunk/container/spring/src/main/resources/META-INF/spring/loaders-context.xml

Modified: james/server/trunk/container/filesystem-api/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/container/filesystem-api/pom.xml?rev=1682408&r1=1682407&r2=1682408&view=diff
==============================================================================
--- james/server/trunk/container/filesystem-api/pom.xml (original)
+++ james/server/trunk/container/filesystem-api/pom.xml Fri May 29 09:51:57 2015
@@ -73,23 +73,4 @@
         </plugins>
     </build>
 
-    <profiles>
-        <profile>
-            <id>noTest</id>
-            <activation>
-                <activeByDefault>true</activeByDefault>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <skipTests>true</skipTests>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
 </project>

Modified: james/server/trunk/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/SieveFileRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/SieveFileRepository.java?rev=1682408&r1=1682407&r2=1682408&view=diff
==============================================================================
--- james/server/trunk/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/SieveFileRepository.java (original)
+++ james/server/trunk/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/SieveFileRepository.java Fri May 29 09:51:57 2015
@@ -64,6 +64,7 @@ public class SieveFileRepository impleme
     private static final String FILE_NAME_ACTIVE = ".active";
     private static final List<String> SYSTEM_FILES = Arrays.asList(FILE_NAME_QUOTA, FILE_NAME_ACTIVE);
     private static final int MAX_BUFF_SIZE = 32768;
+    public static final String SIEVE_EXTENSION = ".sieve";
 
     private FileSystem _fileSystem = null;
     private final Object lock = new Object();
@@ -242,28 +243,19 @@ public class SieveFileRepository impleme
         } catch (ScriptNotFoundException ex) {
             // no op
         }
-        final File activeFile1 = activeFile;
         for (final File file : files) {
             if (!SYSTEM_FILES.contains(file.getName())) {
-                summaries.add(new ScriptSummary() {
-
-                    public String getName() {
-                        return file.getName();
-                    }
-
-                    public boolean isActive() {
-                        boolean isActive = false;
-                        if (null != activeFile1) {
-                            isActive = 0 == activeFile1.compareTo(file);
-                        }
-                        return isActive;
-                    }
-                });
+                summaries.add(new ScriptSummary(file.getName(), isActive(file, activeFile)));
             }
         }
         return summaries;
     }
 
+    private boolean isActive(File file, File activeFile) {
+        return null != activeFile
+            && activeFile.equals(file);
+    }
+
     @Override
     public void putScript(final String user, final String name, final String content)
             throws UserNotFoundException, StorageException, QuotaExceededException {
@@ -284,11 +276,10 @@ public class SieveFileRepository impleme
             if (newFile.exists()) {
                 throw new DuplicateException("User: " + user + "Script: " + newName);
             }
-            boolean isActive = isActiveFile(user, oldFile);
             try {
                 FileUtils.copyFile(oldFile, newFile);
-                if (isActive) {
-                    setActiveFile(newFile, true);
+                if (isActiveFile(user, oldFile)) {
+                    setActiveFile(newFile, user, true);
                 }
                 FileUtils.forceDelete(oldFile);
             } catch (IOException ex) {
@@ -317,17 +308,17 @@ public class SieveFileRepository impleme
             File oldActive = null;
             try {
                 oldActive = getActiveFile(user);
-                setActiveFile(oldActive, false);
+                setActiveFile(oldActive, user, false);
             } catch (ScriptNotFoundException ex) {
                 // This is permissible
             }
             // Turn on the new active script if not an empty name
             if ((null != name) && (!name.trim().isEmpty())) {
                 try {
-                    setActiveFile(getScriptFile(user, name), true);
+                    setActiveFile(getScriptFile(user, name), user, true);
                 } catch (ScriptNotFoundException ex) {
                     if (null != oldActive) {
-                        setActiveFile(oldActive, true);
+                        setActiveFile(oldActive, user, true);
                     }
                     throw ex;
                 }
@@ -368,23 +359,29 @@ public class SieveFileRepository impleme
     }
 
     protected boolean isActiveFile(String user, File file) throws UserNotFoundException {
-        boolean isActive = false;
         try {
-            isActive = 0 == getActiveFile(user).compareTo(file);
+            return 0 == getActiveFile(user).compareTo(file);
         } catch (ScriptNotFoundException ex) {
-            // no op;
+            return false;
         }
-        return isActive;
     }
 
-    protected void setActiveFile(File activeFile, boolean isActive) throws StorageException {
-        File file = new File(activeFile.getParentFile(), FILE_NAME_ACTIVE);
+    protected void setActiveFile(File scriptToBeActivated, String userName, boolean isActive) throws StorageException {
+        File personalScriptDirectory = scriptToBeActivated.getParentFile();
+        File sieveBaseDirectory = personalScriptDirectory.getParentFile();
+        File activeScriptPersistenceFile = new File(personalScriptDirectory, FILE_NAME_ACTIVE);
+        File activeScriptCopy = new File(sieveBaseDirectory, userName + SIEVE_EXTENSION);
         if (isActive) {
-            String content = activeFile.getName();
-            toFile(file, content);
+            toFile(activeScriptPersistenceFile, scriptToBeActivated.getName());
+            try {
+                FileUtils.copyFile(scriptToBeActivated, activeScriptCopy);
+            } catch (IOException exception) {
+                throw new StorageException("Can not copy active script to make it accessible for sieve utils", exception);
+            }
         } else {
             try {
-                FileUtils.forceDelete(file);
+                FileUtils.forceDelete(activeScriptPersistenceFile);
+                FileUtils.forceDelete(activeScriptCopy);
             } catch (IOException ex) {
                 throw new StorageException(ex);
             }
@@ -392,7 +389,7 @@ public class SieveFileRepository impleme
     }
 
     protected File getScriptFile(String user, String name) throws UserNotFoundException,
-            ScriptNotFoundException {
+        ScriptNotFoundException {
         File file = new File(getUserDirectory(user), name);
         if (!file.exists()) {
             throw new ScriptNotFoundException("User: " + user + "Script: " + name);

Modified: james/server/trunk/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/SieveFileRepositoryTestCase.java
URL: http://svn.apache.org/viewvc/james/server/trunk/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/SieveFileRepositoryTestCase.java?rev=1682408&r1=1682407&r2=1682408&view=diff
==============================================================================
--- james/server/trunk/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/SieveFileRepositoryTestCase.java (original)
+++ james/server/trunk/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/SieveFileRepositoryTestCase.java Fri May 29 09:51:57 2015
@@ -262,10 +262,8 @@ public class SieveFileRepositoryTestCase
         repo.putScript(user, scriptName1, content1);
         summaries = repo.listScripts(user);
         assertEquals(2, summaries.size());
-        assertEquals(scriptName, summaries.get(0).getName());
-        assertTrue(summaries.get(0).isActive());
-        assertEquals(scriptName1, summaries.get(1).getName());
-        assertTrue(!summaries.get(1).isActive());
+        assertTrue(summaries.contains(new ScriptSummary(scriptName, true)));
+        assertTrue(summaries.contains(new ScriptSummary(scriptName1, false)));
     }
 
     /**

Modified: james/server/trunk/container/spring/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/container/spring/pom.xml?rev=1682408&r1=1682407&r2=1682408&view=diff
==============================================================================
--- james/server/trunk/container/spring/pom.xml (original)
+++ james/server/trunk/container/spring/pom.xml Fri May 29 09:51:57 2015
@@ -73,6 +73,16 @@
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
+            <artifactId>apache-jsieve-manager-mailet</artifactId>
+            <version>0.6-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.james</groupId>
+            <artifactId>apache-jsieve-manager-jsieve</artifactId>
+            <version>0.6-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.james</groupId>
             <artifactId>apache-mailet-api</artifactId>
         </dependency>
         <dependency>

Modified: james/server/trunk/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/container/spring/src/main/resources/META-INF/spring/loaders-context.xml?rev=1682408&r1=1682407&r2=1682408&view=diff
==============================================================================
--- james/server/trunk/container/spring/src/main/resources/META-INF/spring/loaders-context.xml (original)
+++ james/server/trunk/container/spring/src/main/resources/META-INF/spring/loaders-context.xml Fri May 29 09:51:57 2015
@@ -123,4 +123,14 @@
     <!--<bean id="filesystem" class="org.apache.james.container.spring.filesystem.FileSystemImpl" autowire="byName"/>-->
     <bean id="filesystem" class="org.apache.james.container.spring.filesystem.ResourceLoaderFileSystem"/>
 
+    <bean id="sieverepository" class="org.apache.james.filesystem.api.SieveFileRepository">
+        <constructor-arg index="0" ref="filesystem"/>
+    </bean>
+
+    <bean id="sieveparser" class="org.apache.james.managesieve.jsieve.Parser">
+        <property name="configurationManager" ref="configurationmanager"/>
+    </bean>
+
+    <bean id="configurationmanager" class="org.apache.jsieve.ConfigurationManager"/>
+
 </beans>



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