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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org