Author: btellier Date: Sat Nov 28 17:08:44 2015 New Revision: 1717000 URL: http://svn.apache.org/viewvc?rev=1717000&view=rev Log: MAILBOX-257 Add CLI capability to re-index documents
Added: james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java james/project/trunk/server/container/mailbox-adapter/pom.xml james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java?rev=1717000&r1=1716999&r2=1717000&view=diff ============================================================================== --- james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java (original) +++ james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java Sat Nov 28 17:08:44 2015 @@ -259,6 +259,12 @@ public class ServerCmd { case GETDEFAULTMAXMESSAGECOUNTQUOTA: System.out.println("Default Maximum message count Quota : " + formatMessageValue(probe.getDefaultMaxMessageCount())); break; + case REINDEXMAILBOX: + probe.reIndexMailbox(arguments[1], arguments[2], arguments[3]); + break; + case REINDEXALL: + probe.reIndexAll(); + break; default: throw new UnrecognizedCommandException(cmdType.getCommand()); } Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java?rev=1717000&r1=1716999&r2=1717000&view=diff ============================================================================== --- james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java (original) +++ james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java Sat Nov 28 17:08:44 2015 @@ -246,4 +246,8 @@ public interface ServerProbe extends Clo void setDefaultMaxMessageCount(long maxDefaultMessageCount) throws MailboxException; void setDefaultMaxStorage(long maxDefaultSize) throws MailboxException; + + void reIndexMailbox(String namespace, String user, String name) throws Exception; + + void reIndexAll() throws Exception; } Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java?rev=1717000&r1=1716999&r2=1717000&view=diff ============================================================================== --- james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java (original) +++ james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java Sat Nov 28 17:08:44 2015 @@ -33,6 +33,7 @@ import javax.management.remote.JMXServic import org.apache.james.adapter.mailbox.MailboxCopierManagementMBean; import org.apache.james.adapter.mailbox.MailboxManagerManagementMBean; import org.apache.james.adapter.mailbox.QuotaManagementMBean; +import org.apache.james.adapter.mailbox.ReIndexerManagementMBean; import org.apache.james.adapter.mailbox.SerializableQuota; import org.apache.james.cli.probe.ServerProbe; import org.apache.james.domainlist.api.DomainListManagementMBean; @@ -44,12 +45,13 @@ import org.apache.james.user.api.UsersRe public class JmxServerProbe implements ServerProbe { // TODO: Move this to somewhere else - public final static String DOMAINLIST_OBJECT_NAME = "org.apache.james:type=component,name=domainlist"; - public final static String VIRTUALUSERTABLE_OBJECT_NAME = "org.apache.james:type=component,name=recipientrewritetable"; - public final static String USERSREPOSITORY_OBJECT_NAME = "org.apache.james:type=component,name=usersrepository"; - public final static String MAILBOXCOPIER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxcopier"; - public final static String MAILBOXMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxmanagerbean"; - public final static String QUOTAMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=quotamanagerbean"; + private final static String DOMAINLIST_OBJECT_NAME = "org.apache.james:type=component,name=domainlist"; + private final static String VIRTUALUSERTABLE_OBJECT_NAME = "org.apache.james:type=component,name=recipientrewritetable"; + private final static String USERSREPOSITORY_OBJECT_NAME = "org.apache.james:type=component,name=usersrepository"; + private final static String MAILBOXCOPIER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxcopier"; + private final static String MAILBOXMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxmanagerbean"; + private final static String QUOTAMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=quotamanagerbean"; + private final static String REINDEXER_OBJECT_NAME = "org.apache.james:type=component,name=reindexerbean"; private JMXConnector jmxc; @@ -59,6 +61,7 @@ public class JmxServerProbe implements S private MailboxCopierManagementMBean mailboxCopierManagement; private MailboxManagerManagementMBean mailboxManagerManagement; private QuotaManagementMBean quotaManagement; + private ReIndexerManagementMBean reIndexerManagement; private static final String fmtUrl = "service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi"; private static final int defaultPort = 9999; @@ -119,6 +122,9 @@ public class JmxServerProbe implements S name = new ObjectName(QUOTAMANAGER_OBJECT_NAME); quotaManagement = MBeanServerInvocationHandler.newProxyInstance( mbeanServerConn, name, QuotaManagementMBean.class, true); + name = new ObjectName(REINDEXER_OBJECT_NAME); + reIndexerManagement = MBeanServerInvocationHandler.newProxyInstance( + mbeanServerConn, name, ReIndexerManagementMBean.class, true); } catch (MalformedObjectNameException e) { throw new RuntimeException("Invalid ObjectName? Please report this as a bug.", e); } @@ -170,7 +176,7 @@ public class JmxServerProbe implements S } @Override - public Map<String, Mappings> listMappings() throws Exception { + public Map<String, Mappings> listMappings() throws Exception { return virtualUserTableProxy.getAllMappings(); } @@ -185,7 +191,7 @@ public class JmxServerProbe implements S } @Override - public Mappings listUserDomainMappings(String user, String domain) throws Exception { + public Mappings listUserDomainMappings(String user, String domain) throws Exception { return virtualUserTableProxy.getUserDomainMappings(user, domain); } @@ -278,4 +284,14 @@ public class JmxServerProbe implements S public void setDefaultMaxStorage(long maxDefaultSize) throws MailboxException { quotaManagement.setDefaultMaxStorage(maxDefaultSize); } + + @Override + public void reIndexMailbox(String namespace, String user, String name) throws Exception { + reIndexerManagement.reIndex(namespace, user, name); + } + + @Override + public void reIndexAll() throws Exception { + reIndexerManagement.reIndex(); + } } Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java?rev=1717000&r1=1716999&r2=1717000&view=diff ============================================================================== --- james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java (original) +++ james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java Sat Nov 28 17:08:44 2015 @@ -51,7 +51,9 @@ public enum CmdType { SETDEFAULTMAXSTORAGEQUOTA("setdefaultmaxstoragequota", "max_storage"), SETDEFAULTMAXMESSAGECOUNTQUOTA("setdefaultmaxmessagecountquota", "max_message_count"), GETDEFAULTMAXSTORAGEQUOTA("getdefaultmaxstoragequota"), - GETDEFAULTMAXMESSAGECOUNTQUOTA("getdefaultmaxmessagecountquota"); + GETDEFAULTMAXMESSAGECOUNTQUOTA("getdefaultmaxmessagecountquota"), + REINDEXMAILBOX("reindexmailbox", "namespace", "user", "name"), + REINDEXALL("reindexall"); private final String command; private final String[] arguments; Modified: james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java?rev=1717000&r1=1716999&r2=1717000&view=diff ============================================================================== --- james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java (original) +++ james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java Sat Nov 28 17:08:44 2015 @@ -480,6 +480,35 @@ public class ServerCmdTest { control.verify(); } + @Test + public void reIndexAllQuotaCommandShouldWork() throws Exception { + String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.REINDEXALL.getCommand()}; + CommandLine commandLine = ServerCmd.parseCommandLine(arguments); + + serverProbe.reIndexAll(); + expectLastCall(); + + control.replay(); + testee.executeCommandLine(commandLine); + control.verify(); + } + + @Test + public void reIndexMailboxCommandShouldWork() throws Exception { + String namespace = "#private"; + String user = "btell...@apache.org"; + String name = "INBOX"; + String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.REINDEXMAILBOX.getCommand(), namespace, user, name}; + CommandLine commandLine = ServerCmd.parseCommandLine(arguments); + + serverProbe.reIndexMailbox(namespace, user, name); + expectLastCall(); + + control.replay(); + testee.executeCommandLine(commandLine); + control.verify(); + } + @Test(expected = InvalidArgumentNumberException.class) public void addDomainCommandShouldThrowOnMissingArguments() throws Exception { String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.ADDDOMAIN.getCommand()}; @@ -976,6 +1005,35 @@ public class ServerCmdTest { CommandLine commandLine = ServerCmd.parseCommandLine(arguments); control.replay(); + try { + testee.executeCommandLine(commandLine); + } finally { + control.verify(); + } + } + + @Test(expected = InvalidArgumentNumberException.class) + public void reIndexAllCommandShouldThrowOnAdditionalArguments() throws Exception { + String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.REINDEXALL.getCommand(), ADDITIONAL_ARGUMENT }; + CommandLine commandLine = ServerCmd.parseCommandLine(arguments); + + control.replay(); + try { + testee.executeCommandLine(commandLine); + } finally { + control.verify(); + } + } + + @Test(expected = InvalidArgumentNumberException.class) + public void reIndexMailboxCommandShouldThrowOnAdditionalArguments() throws Exception { + String user = "user@domain"; + String namespace = "#private"; + String name = "INBOX.test"; + String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.REINDEXMAILBOX.getCommand(), namespace, user, name, ADDITIONAL_ARGUMENT }; + CommandLine commandLine = ServerCmd.parseCommandLine(arguments); + + control.replay(); try { testee.executeCommandLine(commandLine); } finally { Modified: james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java?rev=1717000&r1=1716999&r2=1717000&view=diff ============================================================================== --- james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java (original) +++ james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java Sat Nov 28 17:08:44 2015 @@ -189,8 +189,13 @@ public class CmdTypeTest { } @Test - public void lookupGetQuotaRootShouldReturnEnumValue() { - assertThat(CmdType.lookup("getquotaroot")).isEqualTo(CmdType.GETQUOTAROOT); + public void lookupReIndexMailboxShouldReturnEnumValue() { + assertThat(CmdType.lookup("reindexall")).isEqualTo(CmdType.REINDEXALL); + } + + @Test + public void lookupReIndexAllShouldReturnEnumValue() { + assertThat(CmdType.lookup("reindexmailbox")).isEqualTo(CmdType.REINDEXMAILBOX); } @Test Modified: james/project/trunk/server/container/mailbox-adapter/pom.xml URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/mailbox-adapter/pom.xml?rev=1717000&r1=1716999&r2=1717000&view=diff ============================================================================== --- james/project/trunk/server/container/mailbox-adapter/pom.xml (original) +++ james/project/trunk/server/container/mailbox-adapter/pom.xml Sat Nov 28 17:08:44 2015 @@ -59,6 +59,10 @@ <artifactId>apache-james-mailbox-maildir</artifactId> </dependency> <dependency> + <groupId>org.apache.james</groupId> + <artifactId>apache-james-mailbox-tool</artifactId> + </dependency> + <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> Added: james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java?rev=1717000&view=auto ============================================================================== --- james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java (added) +++ james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java Sat Nov 28 17:08:44 2015 @@ -0,0 +1,43 @@ +/**************************************************************** + * 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.adapter.mailbox; + +import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.indexer.ReIndexer; +import org.apache.james.mailbox.model.MailboxPath; + +public class ReIndexerManagement implements ReIndexerManagementMBean { + + private final ReIndexer reIndexer; + + public ReIndexerManagement(ReIndexer reIndexer) { + this.reIndexer = reIndexer; + } + + @Override + public void reIndex(String namespace, String user, String name) throws MailboxException { + reIndexer.reIndex(new MailboxPath(namespace, user, name)); + } + + @Override + public void reIndex() throws MailboxException { + reIndexer.reIndex(); + } +} Added: james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java?rev=1717000&view=auto ============================================================================== --- james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java (added) +++ james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java Sat Nov 28 17:08:44 2015 @@ -0,0 +1,32 @@ +/**************************************************************** + * 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.adapter.mailbox; + +import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.indexer.ReIndexer; +import org.apache.james.mailbox.model.MailboxPath; + +public interface ReIndexerManagementMBean { + + void reIndex(String namespace, String user, String name) throws MailboxException; + + void reIndex() throws MailboxException; + +} 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=1717000&r1=1716999&r2=1717000&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 Sat Nov 28 17:08:44 2015 @@ -247,12 +247,13 @@ --> <entry key="org.apache.james:type=container,name=logprovider" value-ref="logprovider"/> <entry key="org.apache.james:type=component,name=quotamanagerbean" value-ref="quotamanagermanagement"/> + <entry key="org.apache.james:type=component,name=reindexerbean" value-ref="reindexermanagement"/> </map> </property> <property name="assembler"> <bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler"> <property name="managedInterfaces" - value="org.apache.james.fetchmail.FetchSchedulerMBean,org.apache.james.domainlist.api.DomainListManagementMBean,org.apache.james.dnsservice.api.DNSServiceMBean,org.apache.james.rrt.api.RecipientRewriteTableManagementMBean,org.apache.james.user.api.UsersRepositoryManagementMBean,org.apache.james.adapter.mailbox.MailboxManagerManagementMBean,org.apache.james.adapter.mailbox.MailboxCopierManagementMBean,org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean,org.apache.james.container.spring.lifecycle.LogProviderManagementMBean,org.apache.james.adapter.mailbox.QuotaManagementMBean"/> + value="org.apache.james.fetchmail.FetchSchedulerMBean,org.apache.james.domainlist.api.DomainListManagementMBean,org.apache.james.dnsservice.api.DNSServiceMBean,org.apache.james.rrt.api.RecipientRewriteTableManagementMBean,org.apache.james.user.api.UsersRepositoryManagementMBean,org.apache.james.adapter.mailbox.MailboxManagerManagementMBean,org.apache.james.adapter.mailbox.MailboxCopierManagementMBean,org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean,org.apache.james.container.spring.lifecycle.LogProviderManagementMBean,org.apache.james.adapter.mailbox.QuotaManagementMBean,org.apache.james.adapter.mailbox.ReIndexerManagementMBean"/> </bean> </property> </bean> @@ -267,6 +268,9 @@ <property name="quotaRootResolver" ref="quotaRootResolver"/> <property name="quotaManager" ref="quotaManager"/> </bean> + <bean id="reindexermanagement" class="org.apache.james.adapter.mailbox.ReIndexerManagement"> + <constructor-arg index="0" ref="reindexer"/> + </bean> <!-- <bean id="james23importermanagement" class="org.apache.james.container.spring.tool.James23ImporterManagement" /> --> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org