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 }