1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 19 package org.apache.geronimo.javamail.store.pop3; 20 21 import javax.mail.Folder; 22 import javax.mail.Message; 23 import javax.mail.MessagingException; 24 import javax.mail.MethodNotSupportedException; 25 import javax.mail.Store; 26 27 import org.apache.geronimo.javamail.store.pop3.connection.POP3Connection; 28 29 /** 30 * An POP3 folder instance for the root of POP3 folder tree. This has 31 * some of the folder operations disabled. 32 */ 33 public class POP3RootFolder extends POP3Folder { 34 // the inbox folder is the only one that exists 35 protected Folder inbox; 36 37 /** 38 * Create a default POP3RootFolder attached to a specific Store instance. 39 * 40 * @param store The Store instance this is the root for. 41 */ 42 public POP3RootFolder(POP3Store store) { 43 // create a folder with a null string name and the default separator. 44 super(store, ""); 45 // this only holds folders 46 folderType = HOLDS_FOLDERS; 47 // this folder does exist 48 exists = true; 49 // no messages in this folder 50 msgCount = 0; 51 } 52 53 54 /** 55 * Get the parent. This is the root folder, which 56 * never has a parent. 57 * 58 * @return Always returns null. 59 */ 60 public Folder getParent() { 61 // we never have a parent folder 62 return null; 63 } 64 65 /** 66 * We have a separator because the root folder is "special". 67 */ 68 public char getSeparator() throws MessagingException { 69 return '/'; 70 } 71 72 /** 73 * Retrieve a list of folders that match a pattern. 74 * 75 * @param pattern The match pattern. 76 * 77 * @return An array of matching folders. 78 * @exception MessagingException 79 */ 80 public Folder[] list(String pattern) throws MessagingException { 81 // I'm not sure this is correct, but the Sun implementation appears to 82 // return a array containing the inbox regardless of what pattern was specified. 83 return new Folder[] { getInbox() }; 84 } 85 86 /** 87 * Get a folder of a given name from the root folder. 88 * The Sun implementation seems somewhat inconsistent 89 * here. The docs for Store claim that only INBOX is 90 * supported, but it will return a Folder instance for any 91 * name. On the other hand, the root folder raises 92 * an exception for anything but the INBOX. 93 * 94 * @param name The folder name (which must be "INBOX". 95 * 96 * @return The inbox folder instance. 97 * @exception MessagingException 98 */ 99 public Folder getFolder(String name) throws MessagingException { 100 if (!name.equalsIgnoreCase("INBOX")) { 101 throw new MessagingException("Only the INBOX folder is supported"); 102 } 103 // return the inbox folder 104 return getInbox(); 105 } 106 107 /** 108 * Override for the isOpen method. The root folder can 109 * never be opened. 110 * 111 * @return always returns false. 112 */ 113 public boolean isOpen() { 114 return false; 115 } 116 117 public void open(int mode) throws MessagingException { 118 throw new MessagingException("POP3 root folder cannot be opened"); 119 } 120 121 public void open(boolean expunge) throws MessagingException { 122 throw new MessagingException("POP3 root folder cannot be close"); 123 } 124 125 126 /** 127 * Retrieve the INBOX folder from the root. 128 * 129 * @return The Folder instance for the inbox. 130 * @exception MessagingException 131 */ 132 protected Folder getInbox() throws MessagingException { 133 // we're the only place that creates folders, and 134 // we only create the single instance. 135 if (inbox == null) { 136 inbox = new POP3Folder((POP3Store)store, "INBOX"); 137 } 138 return inbox; 139 } 140 } 141 142