001    /*
002     * Copyright 2010 the original author or authors.
003     * 
004     *  Licensed under the Apache License, Version 2.0 (the "License");
005     *  you may not use this file except in compliance with the License.
006     *  You may obtain a copy of the License at
007     *
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     *
010     *  Unless required by applicable law or agreed to in writing, software
011     *  distributed under the License is distributed on an "AS IS" BASIS,
012     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     *  See the License for the specific language governing permissions and
014     *  limitations under the License.
015     */
016    package com.hs.mail.imap.message;
017    
018    import java.util.Hashtable;
019    import java.util.Map;
020    
021    import com.hs.mail.exception.LookupException;
022    import com.hs.mail.imap.message.builder.ImapRequestBuilder;
023    import com.hs.mail.imap.message.request.ImapRequest;
024    import com.hs.mail.imap.parser.ParseException;
025    import com.hs.mail.imap.server.codec.ImapMessage;
026    
027    /**
028     * 
029     * @author Won Chul Doh
030     * @since Jan 28, 2010
031     *
032     */
033    public class ImapRequestFactory {
034            
035            public static ImapRequest createImapRequest(ImapMessage message)
036                            throws LookupException, ParseException {
037                    String tag = message.getTokens().remove().value;
038                    String command = message.getTokens().remove().value;
039                    ImapRequestBuilder builder = lookup(tag, command);
040                    return builder.createRequest(tag, command, message);
041            }
042            
043            public static ImapRequestBuilder lookup(String tag, String command) {
044                    ImapRequestBuilder builder = commandMap.get(command.toLowerCase());
045                    if (null == builder)
046                            throw new LookupException((tag == null ? "*" : tag)
047                                            + " BAD Unknown command: \"" + command + "\"");
048                    return builder;
049            }
050    
051            static private Map<String, ImapRequestBuilder> commandMap = new Hashtable<String, ImapRequestBuilder>();
052            static {
053                    commandMap.put("append",
054                                    new com.hs.mail.imap.message.builder.AppendRequestBuilder());
055                    commandMap.put("authenticate",
056                                    new com.hs.mail.imap.message.builder.AuthenticateRequestBuilder());
057                    commandMap.put("capability",
058                                    new com.hs.mail.imap.message.builder.CapabilityRequestBuilder());
059                    commandMap.put("check",
060                                    new com.hs.mail.imap.message.builder.CheckRequestBuilder());
061                    commandMap.put("close",
062                                    new com.hs.mail.imap.message.builder.CloseRequestBuilder());
063                    commandMap.put("copy",
064                                    new com.hs.mail.imap.message.builder.CopyRequestBuilder());
065                    commandMap.put("create",
066                                    new com.hs.mail.imap.message.builder.CreateRequestBuilder());
067                    commandMap.put("delete",
068                                    new com.hs.mail.imap.message.builder.DeleteRequestBuilder());
069                    commandMap.put("examine",
070                                    new com.hs.mail.imap.message.builder.ExamineRequestBuilder());
071                    commandMap.put("expunge",
072                                    new com.hs.mail.imap.message.builder.ExpungeRequestBuilder());
073                    commandMap.put("fetch",
074                                    new com.hs.mail.imap.message.builder.FetchRequestBuilder());
075                    commandMap.put("list",
076                                    new com.hs.mail.imap.message.builder.ListRequestBuilder());
077                    commandMap.put("login",
078                                    new com.hs.mail.imap.message.builder.LoginRequestBuilder());
079                    commandMap.put("logout",
080                                    new com.hs.mail.imap.message.builder.LogoutRequestBuilder());
081                    commandMap.put("lsub",
082                                    new com.hs.mail.imap.message.builder.LsubRequestBuilder());
083                    commandMap.put("noop",
084                                    new com.hs.mail.imap.message.builder.NoopRequestBuilder());
085                    commandMap.put("rename",
086                                    new com.hs.mail.imap.message.builder.RenameRequestBuilder());
087                    commandMap.put("search",
088                                    new com.hs.mail.imap.message.builder.SearchRequestBuilder());
089                    commandMap.put("select",
090                                    new com.hs.mail.imap.message.builder.SelectRequestBuilder());
091                    commandMap.put("status",
092                                    new com.hs.mail.imap.message.builder.StatusRequestBuilder());
093                    commandMap.put("store",
094                                    new com.hs.mail.imap.message.builder.StoreRequestBuilder());
095                    commandMap.put("subscribe",
096                                    new com.hs.mail.imap.message.builder.SubscribeRequestBuilder());
097                    commandMap.put("unsubscribe",
098                                    new com.hs.mail.imap.message.builder.UnsubscribeRequestBuilder());
099                    commandMap.put("uid", 
100                                    new com.hs.mail.imap.message.builder.UidRequestBuilder());
101                    commandMap.put("getquota",
102                                    new com.hs.mail.imap.message.builder.ext.GetQuotaRequestBuilder());
103                    commandMap.put("getquotaroot",
104                                    new com.hs.mail.imap.message.builder.ext.GetQuotaRootRequestBuilder());
105                    commandMap.put("namespace",
106                                    new com.hs.mail.imap.message.builder.ext.NamespaceRequestBuilder());
107                    commandMap.put("setquota",
108                                    new com.hs.mail.imap.message.builder.ext.SetQuotaRequestBuilder());
109                    commandMap.put("sort",
110                                    new com.hs.mail.imap.message.builder.ext.SortRequestBuilder());
111            }
112    
113    }