001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *  http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing,
013     * software distributed under the License is distributed on an
014     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     * KIND, either express or implied.  See the License for the
016     * specific language governing permissions and limitations
017     * under the License.
018     */
019    
020    package javax.mail.event;
021    
022    import javax.mail.Folder;
023    
024    /**
025     * @version $Rev: 920714 $ $Date: 2010-03-09 01:55:49 -0500 (Tue, 09 Mar 2010) $
026     */
027    public class FolderEvent extends MailEvent {
028            
029            private static final long serialVersionUID = 5278131310563694307L;
030            
031        public static final int CREATED = 1;
032        public static final int DELETED = 2;
033        public static final int RENAMED = 3;
034    
035        protected transient Folder folder;
036        protected transient Folder newFolder;
037        protected int type;
038    
039        /**
040         * Constructor used for RENAMED events.
041         *
042         * @param source the source of the event
043         * @param oldFolder the folder that was renamed
044         * @param newFolder the folder with the new name
045         * @param type the event type
046         */
047        public FolderEvent(Object source, Folder oldFolder, Folder newFolder, int type) {
048            super(source);
049            folder = oldFolder;
050            this.newFolder = newFolder;
051            this.type = type;
052        }
053    
054        /**
055         * Constructor other events.
056         *
057         * @param source the source of the event
058         * @param folder the folder affected
059         * @param type the event type
060         */
061        public FolderEvent(Object source, Folder folder, int type) {
062            this(source, folder, null, type);
063        }
064    
065        public void dispatch(Object listener) {
066            FolderListener l = (FolderListener) listener;
067            switch (type) {
068            case CREATED:
069                l.folderCreated(this);
070                break;
071            case DELETED:
072                l.folderDeleted(this);
073                break;
074            case RENAMED:
075                l.folderRenamed(this);
076                break;
077            default:
078                throw new IllegalArgumentException("Invalid type " + type);
079            }
080        }
081    
082        /**
083         * Return the affected folder.
084         * @return the affected folder
085         */
086        public Folder getFolder() {
087            return folder;
088        }
089    
090        /**
091         * Return the new folder; only applicable to RENAMED events.
092         * @return the new folder
093         */
094        public Folder getNewFolder() {
095            return newFolder;
096        }
097    
098        /**
099         * Return the event type.
100         * @return the event type
101         */
102        public int getType() {
103            return type;
104        }
105    }