Package org.restlet.util
Class WrapperRepresentation
- java.lang.Object
-
- org.restlet.representation.Variant
-
- org.restlet.representation.RepresentationInfo
-
- org.restlet.representation.Representation
-
- org.restlet.util.WrapperRepresentation
-
- Direct Known Subclasses:
BufferingRepresentation,DigesterRepresentation
public class WrapperRepresentation extends Representation
Representation wrapper. Useful for application developer who need to enrich the representation with application related properties and behavior.- Author:
- Jerome Louvel
- See Also:
- The decorator (aka wrapper) pattern
-
-
Field Summary
-
Fields inherited from class org.restlet.representation.Representation
UNKNOWN_SIZE
-
-
Constructor Summary
Constructors Constructor Description WrapperRepresentation(Representation wrappedRepresentation)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description longexhaust()Exhaust the content of the representation by reading it and silently discarding anything read.longgetAvailableSize()Returns the size effectively available.java.nio.channels.ReadableByteChannelgetChannel()Returns a channel with the representation's content.
If it is supported by a file, a read-only instance of FileChannel is returned.
This method is ensured to return a fresh channel for each invocation unless it is a transient representation, in which case null is returned.CharacterSetgetCharacterSet()Returns the character set or null if not applicable.DigestgetDigest()Returns the representation digest if any.
Note that when used with HTTP connectors, this property maps to the "Content-MD5" header.DispositiongetDisposition()Returns the disposition characteristics of the representation.java.util.List<Encoding>getEncodings()Returns the modifiable list of encodings applied to the entity-body.java.util.DategetExpirationDate()Returns the future date when this representation expire.java.util.List<Language>getLanguages()Returns the modifiable list of languages.ReferencegetLocationRef()Returns an optional location reference.MediaTypegetMediaType()Returns the media type.
Note that when used with HTTP connectors, this property maps to the "Content-Type" header.java.util.DategetModificationDate()Returns the last date when this representation was modified.RangegetRange()Returns the range where in the full content the partial content available should be applied.
Note that when used with HTTP connectors, this property maps to the "Content-Range" header.java.io.ReadergetReader()Returns a characters reader with the representation's content.longgetSize()Returns the total size in bytes if known, UNKNOWN_SIZE (-1) otherwise.java.io.InputStreamgetStream()Returns a stream with the representation's content.TaggetTag()Returns the tag.
Note that when used with HTTP connectors, this property maps to the "ETag" header.java.lang.StringgetText()Converts the representation to a string value.RepresentationgetWrappedRepresentation()Returns the wrapped representation.booleanisAvailable()Indicates if some fresh content is potentially available, without having to actually call one of the content manipulation method like getStream() that would actually consume it.booleanisTransient()Indicates if the representation's content is transient, which means that it can be obtained only once.voidrelease()Releases the representation and all associated objects like streams, channels or files which are used to produce its content, transient or not.voidsetAvailable(boolean isAvailable)Indicates if some fresh content is available.voidsetCharacterSet(CharacterSet characterSet)Sets the character set or null if not applicable.
Note that when used with HTTP connectors, this property maps to the "Content-Type" header.voidsetDigest(Digest digest)Sets the representation digest.
Note that when used with HTTP connectors, this property maps to the "Content-MD5" header.voidsetDisposition(Disposition disposition)Sets the disposition characteristics of the representation.voidsetEncodings(java.util.List<Encoding> encodings)Sets the list of encodings applied to the entity-body.
Note that when used with HTTP connectors, this property maps to the "Content-Encoding" header.voidsetExpirationDate(java.util.Date expirationDate)Sets the future date when this representation expire.voidsetLanguages(java.util.List<Language> languages)Sets the list of languages.
Note that when used with HTTP connectors, this property maps to the "Content-Language" header.voidsetLocationRef(java.lang.String locationUri)Sets the identifier from a URI string.
Note that when used with HTTP connectors, this property maps to the "Content-Location" header.voidsetLocationRef(Reference location)Sets the optional identifier.voidsetMediaType(MediaType mediaType)Sets the media type.
Note that when used with HTTP connectors, this property maps to the "Content-Type" header.voidsetModificationDate(java.util.Date modificationDate)Sets the last date when this representation was modified.voidsetRange(Range range)Sets the range where in the full content the partial content available should be applied.
Note that when used with HTTP connectors, this property maps to the "Content-Range" header.voidsetSize(long expectedSize)Sets the expected size in bytes if known, -1 otherwise.voidsetTag(Tag tag)Sets the tag.
Note that when used with HTTP connectors, this property maps to the "ETag" header.voidsetTransient(boolean isTransient)Indicates if the representation's content is transient.voidwrite(java.io.OutputStream outputStream)Writes the representation to a byte stream.voidwrite(java.io.Writer writer)Writes the representation to a characters writer.voidwrite(java.nio.channels.WritableByteChannel writableChannel)Writes the representation to a byte channel.-
Methods inherited from class org.restlet.representation.Representation
append, hasKnownSize, isEmpty
-
Methods inherited from class org.restlet.representation.Variant
createClientInfo, equals, hashCode, includes, isCompatible, toString
-
-
-
-
Constructor Detail
-
WrapperRepresentation
public WrapperRepresentation(Representation wrappedRepresentation)
Constructor.- Parameters:
wrappedRepresentation- The wrapped representation.
-
-
Method Detail
-
exhaust
public long exhaust() throws java.io.IOExceptionDescription copied from class:RepresentationExhaust the content of the representation by reading it and silently discarding anything read. By default, it relies onRepresentation.getStream()and closes the retrieved stream in the end.- Overrides:
exhaustin classRepresentation- Returns:
- The number of bytes consumed or -1 if unknown.
- Throws:
java.io.IOException
-
getAvailableSize
public long getAvailableSize()
Description copied from class:RepresentationReturns the size effectively available. This returns the same value asRepresentation.getSize()if no range is defined, otherwise it returns the size of the range usingRange.getSize().- Overrides:
getAvailableSizein classRepresentation- Returns:
- The available size.
-
getChannel
public java.nio.channels.ReadableByteChannel getChannel() throws java.io.IOExceptionDescription copied from class:RepresentationReturns a channel with the representation's content.
If it is supported by a file, a read-only instance of FileChannel is returned.
This method is ensured to return a fresh channel for each invocation unless it is a transient representation, in which case null is returned.- Specified by:
getChannelin classRepresentation- Returns:
- A channel with the representation's content.
- Throws:
java.io.IOException
-
getCharacterSet
public CharacterSet getCharacterSet()
Description copied from class:VariantReturns the character set or null if not applicable. Note that when used with HTTP connectors, this property maps to the "Content-Type" header.- Overrides:
getCharacterSetin classVariant- Returns:
- The character set or null if not applicable.
-
getDigest
public Digest getDigest()
Description copied from class:RepresentationReturns the representation digest if any.
Note that when used with HTTP connectors, this property maps to the "Content-MD5" header.- Overrides:
getDigestin classRepresentation- Returns:
- The representation digest or null.
-
getDisposition
public Disposition getDisposition()
Description copied from class:RepresentationReturns the disposition characteristics of the representation.- Overrides:
getDispositionin classRepresentation- Returns:
- The disposition characteristics of the representation.
-
getEncodings
public java.util.List<Encoding> getEncodings()
Description copied from class:VariantReturns the modifiable list of encodings applied to the entity-body. Creates a new instance if no one has been set. An "IllegalArgumentException" exception is thrown when adding a null encoding to this list.
Note that when used with HTTP connectors, this property maps to the "Content-Encoding" header.- Overrides:
getEncodingsin classVariant- Returns:
- The list of encodings applied to the entity-body.
-
getExpirationDate
public java.util.Date getExpirationDate()
Description copied from class:RepresentationReturns the future date when this representation expire. If this information is not known, returns null.
Note that when used with HTTP connectors, this property maps to the "Expires" header.- Overrides:
getExpirationDatein classRepresentation- Returns:
- The expiration date.
-
getLanguages
public java.util.List<Language> getLanguages()
Description copied from class:VariantReturns the modifiable list of languages. Creates a new instance if no one has been set. An "IllegalArgumentException" exception is thrown when adding a null language to this list.
Note that when used with HTTP connectors, this property maps to the "Content-Language" header.- Overrides:
getLanguagesin classVariant- Returns:
- The list of languages.
-
getLocationRef
public Reference getLocationRef()
Description copied from class:VariantReturns an optional location reference. This is useful when the representation is accessible from a location separate from the representation's resource URI, for example when content negotiation occurs.
Note that when used with HTTP connectors, this property maps to the "Content-Location" header.- Overrides:
getLocationRefin classVariant- Returns:
- The identifier.
-
getMediaType
public MediaType getMediaType()
Description copied from class:VariantReturns the media type.
Note that when used with HTTP connectors, this property maps to the "Content-Type" header.- Overrides:
getMediaTypein classVariant- Returns:
- The media type.
-
getModificationDate
public java.util.Date getModificationDate()
Description copied from class:RepresentationInfoReturns the last date when this representation was modified. If this information is not known, returns null.
Note that when used with HTTP connectors, this property maps to the "Last-Modified" header.- Overrides:
getModificationDatein classRepresentationInfo- Returns:
- The modification date.
-
getRange
public Range getRange()
Description copied from class:RepresentationReturns the range where in the full content the partial content available should be applied.
Note that when used with HTTP connectors, this property maps to the "Content-Range" header.- Overrides:
getRangein classRepresentation- Returns:
- The content range or null if the full content is available.
-
getReader
public java.io.Reader getReader() throws java.io.IOExceptionDescription copied from class:RepresentationReturns a characters reader with the representation's content. This method is ensured to return a fresh reader for each invocation unless it is a transient representation, in which case null is returned. If the representation has no character set defined, the system's default one will be used.- Specified by:
getReaderin classRepresentation- Returns:
- A reader with the representation's content.
- Throws:
java.io.IOException
-
getSize
public long getSize()
Description copied from class:RepresentationReturns the total size in bytes if known, UNKNOWN_SIZE (-1) otherwise. When ranges are used, this might not be the actual size available. For this purpose, you can use theRepresentation.getAvailableSize()method.
Note that when used with HTTP connectors, this property maps to the "Content-Length" header.- Overrides:
getSizein classRepresentation- Returns:
- The size in bytes if known, UNKNOWN_SIZE (-1) otherwise.
- See Also:
Representation.isEmpty()
-
getStream
public java.io.InputStream getStream() throws java.io.IOExceptionDescription copied from class:RepresentationReturns a stream with the representation's content. This method is ensured to return a fresh stream for each invocation unless it is a transient representation, in which case null is returned.- Specified by:
getStreamin classRepresentation- Returns:
- A stream with the representation's content.
- Throws:
java.io.IOException
-
getTag
public Tag getTag()
Description copied from class:RepresentationInfoReturns the tag.
Note that when used with HTTP connectors, this property maps to the "ETag" header.- Overrides:
getTagin classRepresentationInfo- Returns:
- The tag.
-
getText
public java.lang.String getText() throws java.io.IOExceptionDescription copied from class:RepresentationConverts the representation to a string value. Be careful when using this method as the conversion of large content to a string fully stored in memory can result in OutOfMemoryErrors being thrown.- Overrides:
getTextin classRepresentation- Returns:
- The representation as a string value.
- Throws:
java.io.IOException
-
getWrappedRepresentation
public Representation getWrappedRepresentation()
Returns the wrapped representation.- Returns:
- The wrapped representation.
-
isAvailable
public boolean isAvailable()
Description copied from class:RepresentationIndicates if some fresh content is potentially available, without having to actually call one of the content manipulation method like getStream() that would actually consume it. Note that when the size of a representation is 0 is a not considered available. However, sometimes the size isn't known until a read attempt is made, so availability doesn't guarantee a non empty content.
This is especially useful for transient representation whose content can only be accessed once and also when the size of the representation is not known in advance.- Overrides:
isAvailablein classRepresentation- Returns:
- True if some fresh content is available.
-
isTransient
public boolean isTransient()
Description copied from class:RepresentationIndicates if the representation's content is transient, which means that it can be obtained only once. This is often the case with representations transmitted via network sockets for example. In such case, if you need to read the content several times, you need to cache it first, for example into memory or into a file.- Overrides:
isTransientin classRepresentation- Returns:
- True if the representation's content is transient.
-
release
public void release()
Description copied from class:RepresentationReleases the representation and all associated objects like streams, channels or files which are used to produce its content, transient or not. This method must be systematically called when the representation is no longer intended to be used. The framework automatically calls back this method via its connectors on the server-side when sending responses with an entity and on the client-side when sending a request with an entity. By default, it calls theRepresentation.setAvailable(boolean)method with "false" as a value.
Note that for transient socket-bound representations, calling this method after consuming the whole content shouldn't prevent the reuse of underlying socket via persistent connections for example. However, if the content hasn't been read, or has been partially read, the impact should be to discard the remaining content and to close the underlying connections.
Therefore, if you are not interested in the content, or in the remaining content, you should first call theRepresentation.exhaust()method or if this could be too costly, you should instead explicitly abort the parent request and the underlying connections using theRequest.abort()method or a shortcut one likeServerResource.abort()orResponse.abort().- Overrides:
releasein classRepresentation
-
setAvailable
public void setAvailable(boolean isAvailable)
Description copied from class:RepresentationIndicates if some fresh content is available.- Overrides:
setAvailablein classRepresentation- Parameters:
isAvailable- True if some fresh content is available.
-
setCharacterSet
public void setCharacterSet(CharacterSet characterSet)
Description copied from class:VariantSets the character set or null if not applicable.
Note that when used with HTTP connectors, this property maps to the "Content-Type" header.- Overrides:
setCharacterSetin classVariant- Parameters:
characterSet- The character set or null if not applicable.
-
setDigest
public void setDigest(Digest digest)
Description copied from class:RepresentationSets the representation digest.
Note that when used with HTTP connectors, this property maps to the "Content-MD5" header.- Overrides:
setDigestin classRepresentation- Parameters:
digest- The representation digest.
-
setDisposition
public void setDisposition(Disposition disposition)
Description copied from class:RepresentationSets the disposition characteristics of the representation.- Overrides:
setDispositionin classRepresentation- Parameters:
disposition- The disposition characteristics of the representation.
-
setEncodings
public void setEncodings(java.util.List<Encoding> encodings)
Description copied from class:VariantSets the list of encodings applied to the entity-body.
Note that when used with HTTP connectors, this property maps to the "Content-Encoding" header.- Overrides:
setEncodingsin classVariant- Parameters:
encodings- The list of encodings applied to the entity-body.
-
setExpirationDate
public void setExpirationDate(java.util.Date expirationDate)
Description copied from class:RepresentationSets the future date when this representation expire. If this information is not known, pass null.
Note that when used with HTTP connectors, this property maps to the "Expires" header.- Overrides:
setExpirationDatein classRepresentation- Parameters:
expirationDate- The expiration date.
-
setLanguages
public void setLanguages(java.util.List<Language> languages)
Description copied from class:VariantSets the list of languages.
Note that when used with HTTP connectors, this property maps to the "Content-Language" header.- Overrides:
setLanguagesin classVariant- Parameters:
languages- The list of languages.
-
setLocationRef
public void setLocationRef(Reference location)
Description copied from class:VariantSets the optional identifier. This is useful when the representation is accessible from a location separate from the representation's resource URI, for example when content negotiation occurs.
Note that when used with HTTP connectors, this property maps to the "Content-Location" header.- Overrides:
setLocationRefin classVariant- Parameters:
location- The location reference.
-
setLocationRef
public void setLocationRef(java.lang.String locationUri)
Description copied from class:VariantSets the identifier from a URI string.
Note that when used with HTTP connectors, this property maps to the "Content-Location" header.- Overrides:
setLocationRefin classVariant- Parameters:
locationUri- The location URI to parse.
-
setMediaType
public void setMediaType(MediaType mediaType)
Description copied from class:VariantSets the media type.
Note that when used with HTTP connectors, this property maps to the "Content-Type" header.- Overrides:
setMediaTypein classVariant- Parameters:
mediaType- The media type.
-
setModificationDate
public void setModificationDate(java.util.Date modificationDate)
Description copied from class:RepresentationInfoSets the last date when this representation was modified. If this information is not known, pass null.
Note that when used with HTTP connectors, this property maps to the "Last-Modified" header.- Overrides:
setModificationDatein classRepresentationInfo- Parameters:
modificationDate- The modification date.
-
setRange
public void setRange(Range range)
Description copied from class:RepresentationSets the range where in the full content the partial content available should be applied.
Note that when used with HTTP connectors, this property maps to the "Content-Range" header.- Overrides:
setRangein classRepresentation- Parameters:
range- The content range.
-
setSize
public void setSize(long expectedSize)
Description copied from class:RepresentationSets the expected size in bytes if known, -1 otherwise. For this purpose, you can use theRepresentation.getAvailableSize()method.
Note that when used with HTTP connectors, this property maps to the "Content-Length" header.- Overrides:
setSizein classRepresentation- Parameters:
expectedSize- The expected size in bytes if known, -1 otherwise.
-
setTag
public void setTag(Tag tag)
Description copied from class:RepresentationInfoSets the tag.
Note that when used with HTTP connectors, this property maps to the "ETag" header.- Overrides:
setTagin classRepresentationInfo- Parameters:
tag- The tag.
-
setTransient
public void setTransient(boolean isTransient)
Description copied from class:RepresentationIndicates if the representation's content is transient.- Overrides:
setTransientin classRepresentation- Parameters:
isTransient- True if the representation's content is transient.
-
write
public void write(java.io.OutputStream outputStream) throws java.io.IOExceptionDescription copied from class:RepresentationWrites the representation to a byte stream. This method is ensured to write the full content for each invocation unless it is a transient representation, in which case an exception is thrown.
Note that the class implementing this method shouldn't flush or close the givenOutputStreamafter writing to it as this will be handled by the Restlet connectors automatically.- Specified by:
writein classRepresentation- Parameters:
outputStream- The output stream.- Throws:
java.io.IOException
-
write
public void write(java.io.Writer writer) throws java.io.IOExceptionDescription copied from class:RepresentationWrites the representation to a characters writer. This method is ensured to write the full content for each invocation unless it is a transient representation, in which case an exception is thrown.
Note that the class implementing this method shouldn't flush or close the givenWriterafter writing to it as this will be handled by the Restlet connectors automatically.- Specified by:
writein classRepresentation- Parameters:
writer- The characters writer.- Throws:
java.io.IOException
-
write
public void write(java.nio.channels.WritableByteChannel writableChannel) throws java.io.IOExceptionDescription copied from class:RepresentationWrites the representation to a byte channel. This method is ensured to write the full content for each invocation unless it is a transient representation, in which case an exception is thrown.- Specified by:
writein classRepresentation- Parameters:
writableChannel- A writable byte channel.- Throws:
java.io.IOException
-
-