/* * @(#)DataSink.java 1.10 02/08/21 * * Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved. */ package javax.media; import java.io.IOException; /** * <code>DataSink</code> is the base interface for objects that * read media content delivered by a <code>DataSource</code> * and render the media to some destination. The destination is * specified with a <code>MediaLocator</code>. One example of a <CODE>DataSink</CODE> is a file * writer object that stores the media in a file. * <p> * A <CODE>DataSink</CODE> is created according to the factory mechanism used to create a <CODE>Player</CODE>. * @see Manager#createDataSink * @since JMF 2.0 */ public interface DataSink extends MediaHandler, Controls { /** * Sets the output <code>MediaLocator</code> for this <CODE>DataSink</CODE>. * This method should only be called once; an error is thrown if * the locator has already been set. * @param output A <code>MediaLocator</code> that describes where * the output of this <CODE>DataSink</CODE> goes. */ public void setOutputLocator(MediaLocator output); /** * Gets the output <code>MediaLocator</code> that describes where * the output of this <CODE>DataSink</CODE> goes. * @return The output <code>MediaLocator</code> for this * <code>DataSink</code>. */ public MediaLocator getOutputLocator(); /** * Initiates data transfer. * You must call <CODE>open</CODE> before calling the <CODE>start</CODE> method. * * @exception IOException If there are IO problems with the source * when <CODE>start</CODE> is called. */ public void start() throws IOException; /** * Stops the data transfer. * If the source has not been connected and started, * <CODE>stop</CODE> does nothing. * @exception IOException If there are IO problems with the source * when <CODE>stop</CODE> is called. */ public void stop() throws IOException; /** * Opens a connection to the destination described by * the output <CODE>MediaLocator</CODE>. This method * establishes a channel between this <CODE>DataSink</CODE> and its destination. * * @exception IOException If there are IO problems * when <CODE>open</CODE> is called. * @exception SecurityException If there are any security * violations while attempting to access the destination described * by the output <CODE>MediaLocator</CODE>. */ public void open() throws IOException, SecurityException; /** * Closes the connection to the destination described by the * output <CODE>MediaLocator</CODE>. * This method frees the resources used to maintain a * connection to the destination. * If no resources are in use, <CODE>close</CODE> is ignored. * If <CODE>stop</CODE> hasn't already been called, * calling <CODE>close</CODE> stops the data transfer. * A <CODE>DataSink</CODE> can no longer be used once it has been closed. */ public void close(); /* * Question : it isn't really an error to call getContentType() * even if connect() has not been called. */ /** * Gets a string that describes the content type of the media * that this <CODE>DataSink</CODE> is consuming. * @return A String that contains the name of the content-type. */ public String getContentType(); /** * Adds an event listener for events generated by this <CODE>DataSink</CODE>. * @param listener The <CODE>DataSinkListener</CODE> to add. */ public void addDataSinkListener(javax.media.datasink.DataSinkListener listener); /** * Removes the specified event listener from this <CODE>DataSink</CODE>. * @param listener The <CODE>DataSinkListener</CODE> to remove. */ public void removeDataSinkListener(javax.media.datasink.DataSinkListener listener); }