001 /**
002 *
003 * Copyright 2003-2004 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;
019
020 import java.util.ArrayList;
021 import java.util.List;
022
023 /**
024 * A FetchProfile defines a list of message attributes that a client wishes to prefetch
025 * from the server during a fetch operation.
026 *
027 * Clients can either specify individual headers, or can reference common profiles
028 * as defined by {@link FetchProfile.Item FetchProfile.Item}.
029 *
030 * @version $Rev: 125583 $ $Date: 2005-01-18 19:44:27 -0800 (Tue, 18 Jan 2005) $
031 */
032 public class FetchProfile {
033 /**
034 * Inner class that defines sets of headers that are commonly bundled together
035 * in a FetchProfile.
036 */
037 public static class Item {
038 /**
039 * Item for fetching information about the content of the message.
040 *
041 * This includes all the headers about the content including but not limited to:
042 * Content-Type, Content-Disposition, Content-Description, Size and Line-Count
043 */
044 public static final Item CONTENT_INFO = new Item("Content-Info");
045
046 /**
047 * Item for fetching information about the envelope of the message.
048 *
049 * This includes all the headers comprising the envelope including but not limited to:
050 * From, To, Cc, Bcc, Reply-To, Subject and Date
051 *
052 * For IMAP4, this should also include the ENVELOPE data item.
053 *
054 */
055 public static final Item ENVELOPE = new Item("Envelope");
056
057 /**
058 * Item for fetching information about message flags.
059 * Generall corresponds to the X-Flags header.
060 */
061 public static final Item FLAGS = new Item("Flags");
062
063 protected Item(String name) {
064 // hmmm, name is passed in but we are not allowed to provide accessors
065 // or to override equals/hashCode so what use is it?
066 }
067 }
068
069 // use Lists as we don't expect contains to be called often and the number of elements should be small
070 private final List items = new ArrayList();
071 private final List headers = new ArrayList();
072
073 /**
074 * Add a predefined profile of headers.
075 *
076 * @param item the profile to add
077 */
078 public void add(Item item) {
079 items.add(item);
080 }
081
082 /**
083 * Add a specific header.
084 * @param header the header whose value should be prefetched
085 */
086 public void add(String header) {
087 headers.add(header);
088 }
089
090 /**
091 * Determine if the given profile item is already included.
092 * @param item the profile to check for
093 * @return true if the profile item is already included
094 */
095 public boolean contains(Item item) {
096 return items.contains(item);
097 }
098
099 /**
100 * Determine if the specified header is already included.
101 * @param header the header to check for
102 * @return true if the header is already included
103 */
104 public boolean contains(String header) {
105 return headers.contains(header);
106 }
107
108 /**
109 * Get the profile items already included.
110 * @return the items already added to this profile
111 */
112 public Item[] getItems() {
113 return (Item[]) items.toArray(new Item[items.size()]);
114 }
115
116 /** Get the headers that have already been included.
117 * @return the headers already added to this profile
118 */
119 public String[] getHeaderNames() {
120 return (String[]) headers.toArray(new String[headers.size()]);
121 }
122 }