Package org.apache.james.mime4j.stream
Class MimeEntity
- java.lang.Object
-
- org.apache.james.mime4j.stream.MimeEntity
-
- All Implemented Interfaces:
EntityStateMachine
class MimeEntity extends java.lang.Object implements EntityStateMachine
-
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.ThreadLocal<java.lang.ref.SoftReference<BufferRecycler>>_recyclerRefprivate BodyDescriptorbodyprivate BodyDescriptorBuilderbodyDescBuilderprivate MimeConfigconfigprivate MimeBoundaryInputStreamcurrentMimePartStreamprivate LineReaderInputStreamAdaptordataStreamprivate booleanendOfHeaderprivate EntityStateendStateprivate Fieldfieldprivate FieldBuilderfieldBuilderprivate intheaderCountprivate BufferedLineReaderInputStreaminbufferprivate ByteArrayBufferlinebufprivate intlineCountprivate LineNumberSourcelineSourceprivate DecodeMonitormonitorprivate RecursionModerecursionModeprivate EntityStatestateprivate byte[]tmpbuf
-
Constructor Summary
Constructors Constructor Description MimeEntity(LineNumberSource lineSource, java.io.InputStream instream, BodyDescriptorBuilder bodyDescBuilder)MimeEntity(LineNumberSource lineSource, java.io.InputStream instream, FieldBuilder fieldBuilder, BodyDescriptorBuilder bodyDescBuilder)MimeEntity(LineNumberSource lineSource, java.io.InputStream instream, MimeConfig config, BodyDescriptorBuilder bodyDescBuilder)MimeEntity(LineNumberSource lineSource, java.io.InputStream instream, MimeConfig config, EntityState startState, EntityState endState, DecodeMonitor monitor, FieldBuilder fieldBuilder, BodyDescriptorBuilder bodyDescBuilder)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description EntityStateMachineadvance()Advances the state machine to the next state in the process of the MIME stream parsing.private voidadvanceToBoundary()private voidclearMimePartStream()private voidcreateMimePartStream()private java.io.InputStreamdecodedStream(java.io.InputStream instream)BodyDescriptorgetBodyDescriptor()Gets a descriptor for the current entity.static BufferRecyclergetBufferRecycler()java.io.InputStreamgetContentStream()Returns content stream of the entity body.private LineReaderInputStreamgetDataStream()java.io.InputStreamgetDecodedContentStream()Returns the decoded content stream of the entity body.FieldgetField()This method is valid, ifgetState()returnsEntityState.T_FIELD.private java.io.InputStreamgetLimitedContentStream()private intgetLineNumber()RecursionModegetRecursionMode()EntityStategetState()Return the current state of the entity.protected java.lang.Stringmessage(Event event)Creates an indicative message suitable for display based on the given event and the current state of the system.protected voidmonitor(Event event)protected booleannextField()private EntityStateMachinenextMessage()private EntityStateMachinenextMimeEntity()private EntityStateMachinenextMimeEntity(EntityState startState, EntityState endState, java.io.InputStream instream)private voidreadRawField()voidsetRecursionMode(RecursionMode recursionMode)Sets the current recursion mode.static java.lang.StringstateToString(EntityState state)Renders a state as a string suitable for logging.voidstop()voidstopSoft()java.lang.StringtoString()
-
-
-
Field Detail
-
_recyclerRef
protected static final java.lang.ThreadLocal<java.lang.ref.SoftReference<BufferRecycler>> _recyclerRef
-
endState
private final EntityState endState
-
config
private final MimeConfig config
-
monitor
private final DecodeMonitor monitor
-
fieldBuilder
private final FieldBuilder fieldBuilder
-
bodyDescBuilder
private final BodyDescriptorBuilder bodyDescBuilder
-
linebuf
private final ByteArrayBuffer linebuf
-
lineSource
private final LineNumberSource lineSource
-
inbuffer
private final BufferedLineReaderInputStream inbuffer
-
state
private EntityState state
-
lineCount
private int lineCount
-
endOfHeader
private boolean endOfHeader
-
headerCount
private int headerCount
-
field
private Field field
-
body
private BodyDescriptor body
-
recursionMode
private RecursionMode recursionMode
-
currentMimePartStream
private MimeBoundaryInputStream currentMimePartStream
-
dataStream
private LineReaderInputStreamAdaptor dataStream
-
tmpbuf
private byte[] tmpbuf
-
-
Constructor Detail
-
MimeEntity
MimeEntity(LineNumberSource lineSource, java.io.InputStream instream, MimeConfig config, EntityState startState, EntityState endState, DecodeMonitor monitor, FieldBuilder fieldBuilder, BodyDescriptorBuilder bodyDescBuilder)
-
MimeEntity
MimeEntity(LineNumberSource lineSource, java.io.InputStream instream, MimeConfig config, BodyDescriptorBuilder bodyDescBuilder)
-
MimeEntity
MimeEntity(LineNumberSource lineSource, java.io.InputStream instream, FieldBuilder fieldBuilder, BodyDescriptorBuilder bodyDescBuilder)
-
MimeEntity
MimeEntity(LineNumberSource lineSource, java.io.InputStream instream, BodyDescriptorBuilder bodyDescBuilder)
-
-
Method Detail
-
getBufferRecycler
public static BufferRecycler getBufferRecycler()
-
getState
public EntityState getState()
Description copied from interface:EntityStateMachineReturn the current state of the entity.- Specified by:
getStatein interfaceEntityStateMachine- Returns:
- current state
- See Also:
EntityState
-
getRecursionMode
public RecursionMode getRecursionMode()
-
setRecursionMode
public void setRecursionMode(RecursionMode recursionMode)
Description copied from interface:EntityStateMachineSets the current recursion mode. The recursion mode specifies the approach taken to parsing parts.RecursionMode.M_RAWmode does not parse the part at all.RecursionMode.M_RECURSEmode recursively parses each mail when anmessage/rfc822part is encounted;RecursionMode.M_NO_RECURSEdoes not.- Specified by:
setRecursionModein interfaceEntityStateMachine- See Also:
RecursionMode
-
stop
public void stop()
-
stopSoft
public void stopSoft()
-
getLineNumber
private int getLineNumber()
-
getDataStream
private LineReaderInputStream getDataStream()
-
message
protected java.lang.String message(Event event)
Creates an indicative message suitable for display based on the given event and the current state of the system.- Parameters:
event-Event, not null- Returns:
- message suitable for use as a message in an exception or for logging
-
monitor
protected void monitor(Event event) throws MimeException, java.io.IOException
- Throws:
MimeExceptionjava.io.IOException
-
readRawField
private void readRawField() throws java.io.IOException, MimeException- Throws:
java.io.IOExceptionMimeException
-
nextField
protected boolean nextField() throws MimeException, java.io.IOException- Throws:
MimeExceptionjava.io.IOException
-
advance
public EntityStateMachine advance() throws java.io.IOException, MimeException
Description copied from interface:EntityStateMachineAdvances the state machine to the next state in the process of the MIME stream parsing. This method may return an new state machine that represents an embedded entity, which must be parsed before the parsing process of the current entity can proceed.- Specified by:
advancein interfaceEntityStateMachine- Returns:
- a state machine of an embedded entity, if encountered,
nullotherwise. - Throws:
java.io.IOException- if an I/O error occurs.MimeException- if the message can not be processed due to the MIME specification violation.
-
createMimePartStream
private void createMimePartStream() throws MimeException, java.io.IOException- Throws:
MimeExceptionjava.io.IOException
-
clearMimePartStream
private void clearMimePartStream()
-
advanceToBoundary
private void advanceToBoundary() throws java.io.IOException- Throws:
java.io.IOException
-
nextMessage
private EntityStateMachine nextMessage()
-
decodedStream
private java.io.InputStream decodedStream(java.io.InputStream instream)
-
nextMimeEntity
private EntityStateMachine nextMimeEntity()
-
nextMimeEntity
private EntityStateMachine nextMimeEntity(EntityState startState, EntityState endState, java.io.InputStream instream)
-
getLimitedContentStream
private java.io.InputStream getLimitedContentStream()
-
getBodyDescriptor
public BodyDescriptor getBodyDescriptor()
Gets a descriptor for the current entity. This method is valid if
getState()returns:- Specified by:
getBodyDescriptorin interfaceEntityStateMachine- Returns:
BodyDescriptor, not nulls
-
getField
public Field getField()
This method is valid, ifgetState()returnsEntityState.T_FIELD.- Specified by:
getFieldin interfaceEntityStateMachine- Returns:
- String with the fields raw contents.
- Throws:
java.lang.IllegalStateException-getState()returns another value thanEntityState.T_FIELD.
-
getContentStream
public java.io.InputStream getContentStream()
Description copied from interface:EntityStateMachineReturns content stream of the entity body.- Specified by:
getContentStreamin interfaceEntityStateMachine- Returns:
- input stream
- See Also:
EntityStateMachine.getContentStream()
-
getDecodedContentStream
public java.io.InputStream getDecodedContentStream() throws java.lang.IllegalStateExceptionDescription copied from interface:EntityStateMachineReturns the decoded content stream of the entity body.- Specified by:
getDecodedContentStreamin interfaceEntityStateMachine- Returns:
- input stream
- Throws:
java.lang.IllegalStateException- if the content stream cannot be obtained at the current stage of the parsing process.- See Also:
EntityStateMachine.getDecodedContentStream()
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
stateToString
public static java.lang.String stateToString(EntityState state)
Renders a state as a string suitable for logging.- Parameters:
state-- Returns:
- rendered as string, not null
-
-