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.processor;
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.request.AppendRequest;
023 import com.hs.mail.imap.message.request.AuthenticateRequest;
024 import com.hs.mail.imap.message.request.CapabilityRequest;
025 import com.hs.mail.imap.message.request.CheckRequest;
026 import com.hs.mail.imap.message.request.CloseRequest;
027 import com.hs.mail.imap.message.request.CopyRequest;
028 import com.hs.mail.imap.message.request.CreateRequest;
029 import com.hs.mail.imap.message.request.DeleteRequest;
030 import com.hs.mail.imap.message.request.ExamineRequest;
031 import com.hs.mail.imap.message.request.ExpungeRequest;
032 import com.hs.mail.imap.message.request.FetchRequest;
033 import com.hs.mail.imap.message.request.ImapRequest;
034 import com.hs.mail.imap.message.request.ListRequest;
035 import com.hs.mail.imap.message.request.LoginRequest;
036 import com.hs.mail.imap.message.request.LogoutRequest;
037 import com.hs.mail.imap.message.request.LsubRequest;
038 import com.hs.mail.imap.message.request.NoopRequest;
039 import com.hs.mail.imap.message.request.RenameRequest;
040 import com.hs.mail.imap.message.request.SearchRequest;
041 import com.hs.mail.imap.message.request.SelectRequest;
042 import com.hs.mail.imap.message.request.StatusRequest;
043 import com.hs.mail.imap.message.request.StoreRequest;
044 import com.hs.mail.imap.message.request.SubscribeRequest;
045 import com.hs.mail.imap.message.request.UnsubscribeRequest;
046 import com.hs.mail.imap.message.request.ext.GetQuotaRequest;
047 import com.hs.mail.imap.message.request.ext.GetQuotaRootRequest;
048 import com.hs.mail.imap.message.request.ext.NamespaceRequest;
049 import com.hs.mail.imap.message.request.ext.SetQuotaRequest;
050 import com.hs.mail.imap.processor.ext.GetQuotaProcessor;
051 import com.hs.mail.imap.processor.ext.GetQuotaRootProcessor;
052 import com.hs.mail.imap.processor.ext.NamespaceProcessor;
053 import com.hs.mail.imap.processor.ext.SetQuotaProcessor;
054 import com.hs.mail.imap.processor.fetch.FetchProcessor;
055
056 /**
057 * <p>
058 * Factory class for IMAP command processor
059 * </p>
060 *
061 * @author Won Chul Doh
062 * @since Sep 3, 2010
063 *
064 */
065 public class ImapProcessorFactory {
066
067 public static void registerProcessors() {
068 registerProcess(AppendRequest.class, new AppendProcessor());
069 registerProcess(AuthenticateRequest.class, new AuthenticateProcessor());
070 registerProcess(CapabilityRequest.class, new CapabilityProcessor());
071 registerProcess(CheckRequest.class, new CheckProcessor());
072 registerProcess(CloseRequest.class, new CloseProcessor());
073 registerProcess(CopyRequest.class, new CopyProcessor());
074 registerProcess(CreateRequest.class, new CreateProcessor());
075 registerProcess(DeleteRequest.class, new DeleteProcessor());
076 registerProcess(ExamineRequest.class, new ExamineProcessor());
077 registerProcess(ExpungeRequest.class, new ExpungeProcessor());
078 registerProcess(FetchRequest.class, new FetchProcessor());
079 registerProcess(ListRequest.class, new ListProcessor());
080 registerProcess(LoginRequest.class, new LoginProcessor());
081 registerProcess(LogoutRequest.class, new LogoutProcessor());
082 registerProcess(LsubRequest.class, new LsubProcessor());
083 registerProcess(NoopRequest.class, new NoopProcessor());
084 registerProcess(RenameRequest.class, new RenameProcessor());
085 registerProcess(SearchRequest.class, new SearchProcessor());
086 registerProcess(SelectRequest.class, new SelectProcessor());
087 registerProcess(StatusRequest.class, new StatusProcessor());
088 registerProcess(StoreRequest.class, new StoreProcessor());
089 registerProcess(SubscribeRequest.class, new SubscribeProcessor());
090 registerProcess(UnsubscribeRequest.class, new UnsubscribeProcessor());
091 registerProcess(GetQuotaRequest.class, new GetQuotaProcessor());
092 registerProcess(GetQuotaRootRequest.class, new GetQuotaRootProcessor());
093 registerProcess(NamespaceRequest.class, new NamespaceProcessor());
094 registerProcess(SetQuotaRequest.class, new SetQuotaProcessor());
095 }
096
097 private static void registerProcess(Class<? extends ImapRequest> clazz,
098 ImapProcessor processor) {
099 processorMap.put(clazz.getName(), processor);
100 }
101
102 public static ImapProcessor createImapProcessor(ImapRequest request) {
103 ImapProcessor processor = processorMap
104 .get(request.getClass().getName());
105 if (null == processor)
106 throw new LookupException("");
107 return processor;
108 }
109
110 private static Map<String, ImapProcessor> processorMap = new Hashtable<String, ImapProcessor>();
111
112 }