1345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein/* 2345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Copyright (C) 2008 The Android Open Source Project 3345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 4345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Licensed under the Apache License, Version 2.0 (the "License"); 5345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * you may not use this file except in compliance with the License. 6345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * You may obtain a copy of the License at 7345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 8345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * http://www.apache.org/licenses/LICENSE-2.0 9345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * 10345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Unless required by applicable law or agreed to in writing, software 11345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * distributed under the License is distributed on an "AS IS" BASIS, 12345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * See the License for the specific language governing permissions and 14345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * limitations under the License. 15345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 16345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 17345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sappersteinpackage com.android.emailcommon.mail; 18345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 19345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sappersteinimport java.util.ArrayList; 20345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 21345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein/** 22345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * <pre> 23345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * A FetchProfile is a list of items that should be downloaded in bulk for a set of messages. 24345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * FetchProfile can contain the following objects: 25345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * FetchProfile.Item: Described below. 26345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Message: Indicates that the body of the entire message should be fetched. 27345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Synonymous with FetchProfile.Item.BODY. 28345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Part: Indicates that the given Part should be fetched. The provider 29345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * is expected have previously created the given BodyPart and stored 30345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * any information it needs to download the content. 31345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * </pre> 32345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 33345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sappersteinpublic class FetchProfile extends ArrayList<Fetchable> { 34345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 35345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Default items available for pre-fetching. It should be expected that any 36345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * item fetched by using these items could potentially include all of the 37345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * previous items. 38345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 39345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public enum Item implements Fetchable { 40345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 41345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Download the flags of the message. 42345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 43345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein FLAGS, 44345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 45345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 46345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Download the envelope of the message. This should include at minimum 47345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * the size and the following headers: date, subject, from, content-type, to, cc 48345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 49345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein ENVELOPE, 50345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 51345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 52345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * Download the structure of the message. This maps directly to IMAP's BODYSTRUCTURE 53345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * and may map to other providers. 54345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * The provider should, if possible, fill in a properly formatted MIME structure in 55345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * the message without actually downloading any message data. If the provider is not 56345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * capable of this operation it should specifically set the body of the message to null 57345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * so that upper levels can detect that a full body download is needed. 58345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 59345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein STRUCTURE, 60345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 61345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 62345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * A sane portion of the entire message, cut off at a provider determined limit. 63345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * This should generaly be around 50kB. 64345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 65345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein BODY_SANE, 66345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 67345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 68345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * The entire message. 69345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 70345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein BODY, 71345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 72345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein 73345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein /** 74345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * @return the first {@link Part} in this collection, or null if it doesn't contain 75345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein * {@link Part}. 76345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein */ 77345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein public Part getFirstPart() { 78345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein for (Fetchable o : this) { 79345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein if (o instanceof Part) { 80345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein return (Part) o; 81345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 82345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 83345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein return null; 84345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein } 85345c43e12db42f6bdc0c15ac1c96af10164a458cAndrew Sapperstein} 86