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 }