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.responder;
017    
018    import org.apache.commons.collections.CollectionUtils;
019    
020    import com.hs.mail.imap.message.response.StoreResponse;
021    import com.hs.mail.imap.message.response.UnsolicitedResponse;
022    
023    /**
024     * 
025     * @author Won Chul Doh
026     * @since Aug 1, 2010
027     * 
028     */
029    public class UnsolicitedResponder extends StoreResponder {
030    
031            public UnsolicitedResponder(Responder responder) {
032                    super(responder.getChannel(), responder.getRequest());
033            }
034    
035            public void respond(UnsolicitedResponse response) {
036                    if (response.isSizeChanged()) {
037                            // New message response
038                            untagged(response.getMessageCount() + " EXISTS\r\n");
039                            untagged(response.getRecentMessageCount() + " RECENT\r\n");
040                    } else {
041                            if (CollectionUtils.isNotEmpty(response.getExpungedMsns())) {
042                                    // Expunged messages
043                                    for (Integer msn : response.getExpungedMsns()) {
044                                            untagged(msn + " " + "EXPUNGE\r\n");
045                                    }
046                            }
047                            if (CollectionUtils.isNotEmpty(response.getFlagsResponses())) {
048                                    // Message updates
049                                    for (StoreResponse flagResponse : response.getFlagsResponses()) {
050                                            respond(flagResponse);
051                                    }
052                            }
053                    }
054            }
055    
056    }