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    }