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