001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. 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 019 package org.apache.geronimo.javamail.store.pop3; 020 021 import javax.mail.Folder; 022 import javax.mail.Message; 023 import javax.mail.MessagingException; 024 import javax.mail.MethodNotSupportedException; 025 import javax.mail.Store; 026 027 import org.apache.geronimo.javamail.store.pop3.connection.POP3Connection; 028 029 /** 030 * An POP3 folder instance for the root of POP3 folder tree. This has 031 * some of the folder operations disabled. 032 */ 033 public class POP3RootFolder extends POP3Folder { 034 // the inbox folder is the only one that exists 035 protected Folder inbox; 036 037 /** 038 * Create a default POP3RootFolder attached to a specific Store instance. 039 * 040 * @param store The Store instance this is the root for. 041 */ 042 public POP3RootFolder(POP3Store store) { 043 // create a folder with a null string name and the default separator. 044 super(store, ""); 045 // this only holds folders 046 folderType = HOLDS_FOLDERS; 047 // this folder does exist 048 exists = true; 049 // no messages in this folder 050 msgCount = 0; 051 } 052 053 054 /** 055 * Get the parent. This is the root folder, which 056 * never has a parent. 057 * 058 * @return Always returns null. 059 */ 060 public Folder getParent() { 061 // we never have a parent folder 062 return null; 063 } 064 065 /** 066 * We have a separator because the root folder is "special". 067 */ 068 public char getSeparator() throws MessagingException { 069 return '/'; 070 } 071 072 /** 073 * Retrieve a list of folders that match a pattern. 074 * 075 * @param pattern The match pattern. 076 * 077 * @return An array of matching folders. 078 * @exception MessagingException 079 */ 080 public Folder[] list(String pattern) throws MessagingException { 081 // I'm not sure this is correct, but the Sun implementation appears to 082 // return a array containing the inbox regardless of what pattern was specified. 083 return new Folder[] { getInbox() }; 084 } 085 086 /** 087 * Get a folder of a given name from the root folder. 088 * The Sun implementation seems somewhat inconsistent 089 * here. The docs for Store claim that only INBOX is 090 * supported, but it will return a Folder instance for any 091 * name. On the other hand, the root folder raises 092 * an exception for anything but the INBOX. 093 * 094 * @param name The folder name (which must be "INBOX". 095 * 096 * @return The inbox folder instance. 097 * @exception MessagingException 098 */ 099 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