blob: 3fc533b527241e47f9fd402899c915720ad7f76d [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed 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.cocoon.mail;
import java.util.HashMap;
import java.util.Map;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.cocoon.mail.command.AbstractMailCommand;
/**
* Build an AbstractMailCommand from MailContext.
* <p>
* As a user requests a command, the command is mapped to an MailCommand instance.
* The registration of MailCommand, and the resolution of a command string to
* a command instance are the tasks of this class.
* </p>
*
* @author Bernhard Huber
* @since 28. Dezember 2002
* @version CVS $Id: MailCommandBuilder.java,v 1.4 2004/03/05 13:02:00 bdelacretaz Exp $
*/
public class MailCommandBuilder extends AbstractLogEnabled {
// global factory settings
private Map cmdMap;
/**
*Constructor for the MailCommandBuilder object
*/
public MailCommandBuilder() {
configure();
}
/**
* Build a mail command.
*
*@param mailContext Description of the Parameter
*@return Description of the Return Value
*/
public AbstractMailCommand buildAbstractMailCommand(MailContext mailContext) {
AbstractMailCommand ama = null;
try {
// request parameter say "what"
String cmd = mailContext.getParameter("cmd");
if (cmd == null) {
cmd = (String)mailContext.get( MailContext.MAIL_CURRENT_WORKING_COMMAND_ENTRY );
}
Class clazz = getClassForCommand(cmd);
if (clazz != null) {
ama = (AbstractMailCommand) clazz.newInstance();
// enable logging of the mail command
if (ama instanceof LogEnabled) {
((LogEnabled) ama).enableLogging(getLogger());
}
// contextualize the mail command
if (ama instanceof Contextualizable) {
((Contextualizable) ama).contextualize(mailContext);
}
return ama;
} else {
getLogger().error("Cmd " + String.valueOf(cmd) + " is invalid");
}
} catch (Exception e) {
String message = "Cannto build AbstractMailCommand";
getLogger().error(message, e);
}
return ama;
}
/**
* get Class for a command
*
* @param cmd the command
* @return Class associated with cmd, or null iff cmd is not mapped to any class
*/
protected Class getClassForCommand( String cmd ) {
Class clazz = (Class)cmdMap.get( cmd );
return clazz;
}
/**
* test if command is mapped to a Command class
*
* @param cmd the command
* @return true iff command is mapped to a Class, otherwise return false
*/
public boolean isCommandMapped( String cmd ) {
return cmdMap.containsKey( cmd );
}
/**
* configure the cmd to mail command class mapping.
* <p>
* New commands are registered here. A command name is associated with
* each command class.
* </p>
*/
public void configure() {
cmdMap = new HashMap();
cmdMap.put("cat-folder", MailCommandManager.MailFolderCatCommand.class);
cmdMap.put("refresh-folder", MailCommandManager.MailRefreshFolderCommand.class);
cmdMap.put("list-folder", MailCommandManager.MailListFolderCommand.class);
cmdMap.put("list-folder-messages", MailCommandManager.MailListMessagesCommand.class);
cmdMap.put("search-folder-messages", MailCommandManager.MailSearchMessagesCommand.class);
cmdMap.put("cat-message-by-uid", MailCommandManager.MailCatMessageByUIDCommand.class);
cmdMap.put("cat-message-by-id", MailCommandManager.MailCatMessageByIdCommand.class);
cmdMap.put("cat-attachment-of-message-by-id", MailCommandManager.MailCatAttachmentMessageByIdCommand.class);
}
}