| GenericMediaFormat.java |
/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license. See terms of license at gnu.org.
*/
package javax.emb;
import java.io.InputStream;
import java.net.URL;
/**
* This class offers a generic implementation of the {@link MediaFormat}
* interface for use with all kinds of embedded media formats. Note that this
* class should not be used to represent non-embedded media formats, as it does
* not handle parent/child relationships. By registering instances of this
* class with the {@link MediaFormatRegistry}described in the followup
* section, various media formats can be supported in case no format specific
* support is available.
*
* <p>The public constant <code>DEFAULT_PROXY</code> contains an image that
* can be used as a default proxy for all kinds of media formats or in case the
* generation of a proxy fails for whatever reason.
*
* @version <tt>$Revision: 1.4 $</tt>
* @author <a href="mailto:ricardoarguello@users.sourceforge.net">Ricardo
* Argüello</a>
*/
public class GenericMediaFormat implements MediaFormat
{
// TODO: Implement a default proxy
public static final Media DEFAULT_PROXY = null;
/**
* Returns the content of the given media segment array's first element, or
* an empty byte array if no element is passed.
*
* @param mediaLocation the intended location of the media to be assembled.
* @param mediaSegments the segments that are to be assembled.
* @return the assembled content.
* @throws javax.emb.FormatSyntaxException if the given media segment array
* contains more than one element, or if an element is passed that
* contains a child link that is not <code>null</code>.
* @throws java.lang.NullPointerException if the given segment array is
* <code>null</code>.
* @throws javax.emb.ContentTooLargeException if the assembled content is
* larger than the maximum Java array size of 2 GB.
*/
public byte[] assembleContent(
URL mediaLocation,
MediaSegment[] mediaSegments)
throws MediaException
{
if (mediaSegments == null)
{
throw new NullPointerException();
}
if (mediaSegments.length == 0)
{
return new byte[0];
}
if (mediaSegments.length > 1)
{
throw new FormatSyntaxException("Media segment array contains more than one element.");
}
MediaSegment mediaSegment = mediaSegments[0];
if (mediaSegment.getChildLocation() != null)
{
throw new FormatSyntaxException("Element passed contains a child link that is not null.");
}
return mediaSegment.getContent();
}
/**
* Disassembles the given media content. As embedded media doesn – t contain
* any links and therefore consists of a single media segment, this generic
* implementation returns a one-element array of media segments, with a
* segment element composed of <code>null</code> as child location and the
* given media content as content.
*
* @param mediaLocation the location of the media to be disassembled.
* @param mediaContent the content to be disassembled.
* @return the segments.
* @throws java.lang.NullPointerException if the content passed is <code>null</code>.
*/
public MediaSegment[] disassembleContent(
URL mediaLocation,
byte[] mediaContent)
throws MediaException
{
if (mediaContent == null)
{
throw new NullPointerException();
}
MediaSegment mediaSegment = new MediaSegment();
mediaSegment.setContent(mediaContent);
return new MediaSegment[] { mediaSegment };
}
/**
* Returns an instance of class GenericMediaHeader, as this class cannot
* make any assumptions about header fields.
*
* @param content the content stream to extract the header from.
* @return the media header.
* @throws java.lang.NullPointerException if the value passed is <code>null</code>.
*/
public MediaHeader extractHeader(InputStream mediaContent)
throws MediaException
{
if (mediaContent == null)
{
throw new NullPointerException();
}
return new GenericMediaHeader();
}
/**
* Returns a default image that is suitable to represent all kinds of
* content.
*
* @param mediaContent the media content.
* @return the proxy.
* @throws javax.emb.MediaException if proxy can't be generated.
*/
public Media extractProxy(InputStream mediaContent) throws MediaException
{
// TODO: Return a generic surrogate image, use a static byte array.
return null;
}
/**
* Returns <code>Media.MIME_TYPE_UNKNOWN</code>, as this class cannot
* make any assumptions about mime types.
*
* @return <code>Media.MIME_TYPE_UNKNOWN</code>.
*/
public String getDefaultMimeType()
{
return Media.MIME_TYPE_UNKNOWN;
}
/**
* Returns <code>true</code>, as this class assumes media to be embedded.
*
* @return <code>true</code>.
*/
public boolean isEmbedded()
{
return true;
}
/**
* Returns <code>false</code>, as this class cannot make any assumptions
* about media to be streamable or not.
*
* @return <code>false</code>.
*/
public boolean isStreamingDesirable()
{
return false;
}
}| GenericMediaFormat.java |