1
/****************************************************************
2
* Licensed to the Apache Software Foundation (ASF) under one *
3
* or more contributor license agreements. See the NOTICE file *
4
* distributed with this work for additional information *
5
* regarding copyright ownership. The ASF licenses this file *
6
* to you under the Apache License, Version 2.0 (the *
7
* "License"); you may not use this file except in compliance *
8
* with the License. You may obtain a copy of the License at *
10
* http://www.apache.org/licenses/LICENSE-2.0 *
12
* Unless required by applicable law or agreed to in writing, *
13
* software distributed under the License is distributed on an *
14
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
15
* KIND, either express or implied. See the License for the *
16
* specific language governing permissions and limitations *
17
* under the License. *
18
****************************************************************/
20
package org.apache.james.mime4j.parser;
22
import org.apache.james.mime4j.MimeException;
23
import org.apache.james.mime4j.descriptor.BodyDescriptor;
25
import java.io.IOException;
26
import java.io.InputStream;
29
* Represents the interal state of a MIME entity, which is being retrieved
30
* from an input stream by a MIME parser.
32
public interface EntityStateMachine {
35
* Return the current state of the entity.
39
* @return current state
44
* Sets the current recursion mode.
45
* The recursion mode specifies the approach taken to parsing parts.
46
* {@link RecursionMode#M_RAW} mode does not parse the part at all.
47
* {@link RecursionMode#M_RECURSE} mode recursively parses each mail
48
* when an <code>message/rfc822</code> part is encounted;
49
* {@link RecursionMode#M_NO_RECURSE} does not.
53
* @param recursionMode
55
void setRecursionMode(int recursionMode);
58
* Advances the state machine to the next state in the
59
* process of the MIME stream parsing. This method
60
* may return an new state machine that represents an embedded
61
* entity, which must be parsed before the parsing process of
62
* the current entity can proceed.
64
* @return a state machine of an embedded entity, if encountered,
65
* <code>null</code> otherwise.
67
* @throws IOException if an I/O error occurs.
68
* @throws MimeException if the message can not be processed due
69
* to the MIME specification violation.
71
EntityStateMachine advance() throws IOException, MimeException;
74
* Returns description of the entity body.
76
* @return body description
78
* @throws IllegalStateException if the body description cannot be
79
* obtained at the current stage of the parsing process.
81
BodyDescriptor getBodyDescriptor() throws IllegalStateException;
84
* Returns content stream of the entity body.
86
* @return input stream
88
* @throws IllegalStateException if the content stream cannot be
89
* obtained at the current stage of the parsing process.
91
InputStream getContentStream() throws IllegalStateException;
94
* Returns current header field.
96
* @return header field
98
* @throws IllegalStateException if a header field cannot be
99
* obtained at the current stage of the parsing process.
101
Field getField() throws IllegalStateException;