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: 467553 $ $Date: 2006-10-25 00:01:51 -0400 (Wed, 25 Oct 2006) $
026     */
027    public class FolderEvent extends MailEvent {
028        public static final int CREATED = 1;
029        public static final int DELETED = 2;
030        public static final int RENAMED = 3;
031    
032        protected transient Folder folder;
033        protected transient Folder newFolder;
034        protected int type;
035    
036        /**
037         * Constructor used for RENAMED events.
038         *
039         * @param source the source of the event
040         * @param oldFolder the folder that was renamed
041         * @param newFolder the folder with the new name
042         * @param type the event type
043         */
044        public FolderEvent(Object source, Folder oldFolder, Folder newFolder, int type) {
045            super(source);
046            folder = oldFolder;
047            this.newFolder = newFolder;
048            this.type = type;
049        }
050    
051        /**
052         * Constructor other events.
053         *
054         * @param source the source of the event
055         * @param folder the folder affected
056         * @param type the event type
057         */
058        public FolderEvent(Object source, Folder folder, int type) {
059            this(source, folder, null, type);
060        }
061    
062        public void dispatch(Object listener) {
063            FolderListener l = (FolderListener) listener;
064            switch (type) {
065            case CREATED:
066                l.folderCreated(this);
067                break;
068            case DELETED:
069                l.folderDeleted(this);
070                break;
071            case RENAMED:
072                l.folderRenamed(this);
073                break;
074            default:
075                throw new IllegalArgumentException("Invalid type " + type);
076            }
077        }
078    
079        /**
080         * Return the affected folder.
081         * @return the affected folder
082         */
083        public Folder getFolder() {
084            return folder;
085        }
086    
087        /**
088         * Return the new folder; only applicable to RENAMED events.
089         * @return the new folder
090         */
091        public Folder getNewFolder() {
092            return newFolder;
093        }
094    
095        /**
096         * Return the event type.
097         * @return the event type
098         */
099        public int getType() {
100            return type;
101        }
102    }