Top Description Fields Constructors Methods
javax.activation

public Class DataHandler

Additional top-level classes in compilation unit: DataSourceDataContentHandler, ObjectDataContentHandler, DataHandlerDataSource.

extends Object
implements Transferable
Class Inheritance
All Implemented Interfaces
java.awt.datatransfer.Transferable
Imports
java.io.InputStream, .IOException, .OutputStream, .PipedInputStream, .PipedOutputStream, .OutputStreamWriter, java.net.URL, java.awt.datatransfer.Transferable, .DataFlavor, .UnsupportedFlavorException

The DataHandler class provides a consistent interface to data available in many different sources and formats. It manages simple stream to string conversions and related operations using DataContentHandlers. It provides access to commands that can operate on the data. The commands are found using a CommandMap.

DataHandler and the Transferable Interface

DataHandler implements the Transferable interface so that data can be used in AWT data transfer operations, such as cut and paste and drag and drop. The implementation of the Transferable interface relies on the availability of an installed DataContentHandler object corresponding to the MIME type of the data represented in the specific instance of the DataHandler.

DataHandler and CommandMaps

The DataHandler keeps track of the current CommandMap that it uses to service requests for commands (getCommand, getAllCommands, getPreferredCommands). Each instance of a DataHandler may have a CommandMap associated with it using the setCommandMap method. If a CommandMap was not set, DataHandler calls the getDefaultCommandMap method in CommandMap and uses the value it returns. See CommandMap for more information.

DataHandler and URLs

The current DataHandler implementation creates a private instance of URLDataSource when it is constructed with a URL.

See Also
javax.activation.CommandMap, javax.activation.DataContentHandler, javax.activation.DataSource, javax.activation.URLDataSource

Field Summary

Modifier and TypeField and Description
private CommandMap
private DataContentHandler
private DataSource
private static final DataFlavor[]
private static DataContentHandlerFactory
private DataContentHandler
private DataSource
private Object
private String
private DataContentHandlerFactory
private String
private DataFlavor[]

Constructor Summary

AccessConstructor and Description
public
DataHandler(DataSource
the DataSource
ds
)

Create a DataHandler instance referencing the specified DataSource.

public
DataHandler(Object
the Java Object
obj
,
String
the MIME type of the object
mimeType
)

Create a DataHandler instance representing an object of this MIME type.

public
DataHandler(URL
a URL object
url
)

Create a DataHandler instance referencing a URL.

Method Summary

Modifier and TypeMethod and Description
public CommandInfo[]

Returns:

the CommandInfo objects representing all the commands
getAllCommands
()

Return all the commands for this type of data.

private synchronized String
getBaseType()

Use the MimeType class to extract the MIME type/subtype, ignoring the parameters.

public Object

Returns:

the instantiated command object
getBean
(CommandInfo
the CommandInfo corresponding to a command
cmdinfo
)

A convenience method that takes a CommandInfo object and instantiates the corresponding command, usually a JavaBean component.

public CommandInfo

Returns:

the CommandInfo corresponding to the command
getCommand
(String
the command name
cmdName
)

Get the command cmdName.

private synchronized CommandMap
getCommandMap()

Return the CommandMap for this instance of DataHandler.

public Object

Returns:

the content.
getContent
()

Return the data in its preferred Object form.

public String

Returns:

the MIME type
getContentType
()

Return the MIME type of this object as retrieved from the source object.

private synchronized DataContentHandler

Returns:

the requested DataContentHandler
getDataContentHandler
()

Get the DataContentHandler for this DataHandler:

If a DataContentHandlerFactory is set, use it.

public DataSource

Returns:

a valid DataSource object for this DataHandler
getDataSource
()

Return the DataSource associated with this instance of DataHandler.

public InputStream

Returns:

the InputStream representing this data
getInputStream
()

Get the InputStream for this object.

public String

Returns:

the name of the object
getName
()

Return the name of the data object.

public OutputStream

Returns:

the OutputStream
getOutputStream
()

Get an OutputStream for this DataHandler to allow overwriting the underlying data.

public CommandInfo[]

Returns:

the CommandInfo objects representing the preferred commands
getPreferredCommands
()

Return the preferred commands for this type of data.

public Object

Returns:

the object
getTransferData
(DataFlavor
the requested flavor for the data
flavor
)

Implements java.awt.datatransfer.Transferable.getTransferData.

Returns an object that represents the data to be transferred.
public synchronized DataFlavor[]

Returns:

an array of data flavors in which this data can be transferred
getTransferDataFlavors
()

Implements java.awt.datatransfer.Transferable.getTransferDataFlavors.

Return the DataFlavors in which this data is available.
public boolean

Returns:

true if the data flavor is supported
isDataFlavorSupported
(DataFlavor
the requested flavor for the data
flavor
)

Implements java.awt.datatransfer.Transferable.isDataFlavorSupported.

Returns whether the specified data flavor is supported for this object.
public synchronized void
setCommandMap(CommandMap
the CommandMap to use in this DataHandler
commandMap
)

Set the CommandMap for use by this DataHandler.

public static synchronized void
setDataContentHandlerFactory(DataContentHandlerFactory
the DataContentHandlerFactory
newFactory
)

Sets the DataContentHandlerFactory.

public void
writeTo(OutputStream
the OutputStream to write to
os
)

Write the data to an OutputStream.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

currentCommandMapback to summary
private CommandMap currentCommandMap
dataContentHandlerback to summary
private DataContentHandler dataContentHandler
dataSourceback to summary
private DataSource dataSource
emptyFlavorsback to summary
private static final DataFlavor[] emptyFlavors
factoryback to summary
private static DataContentHandlerFactory factory
factoryDCHback to summary
private DataContentHandler factoryDCH
objDataSourceback to summary
private DataSource objDataSource
objectback to summary
private Object object
objectMimeTypeback to summary
private String objectMimeType
oldFactoryback to summary
private DataContentHandlerFactory oldFactory
shortTypeback to summary
private String shortType
transferFlavorsback to summary
private DataFlavor[] transferFlavors

Constructor Detail

DataHandlerback to summary
public DataHandler(DataSource ds)

Create a DataHandler instance referencing the specified DataSource. The data exists in a byte stream form. The DataSource will provide an InputStream to access the data.

Parameters
ds:DataSource

the DataSource

DataHandlerback to summary
public DataHandler(Object obj, String mimeType)

Create a DataHandler instance representing an object of this MIME type. This constructor is used when the application already has an in-memory representation of the data in the form of a Java Object.

Parameters
obj:Object

the Java Object

mimeType:String

the MIME type of the object

DataHandlerback to summary
public DataHandler(URL url)

Create a DataHandler instance referencing a URL. The DataHandler internally creates a URLDataSource instance to represent the URL.

Parameters
url:URL

a URL object

Method Detail

getAllCommandsback to summary
public CommandInfo[] getAllCommands()

Return all the commands for this type of data. This method returns an array containing all commands for the type of data represented by this DataHandler. The MIME type for the underlying data represented by this DataHandler is used to call through to the getAllCommands method of the CommandMap associated with this DataHandler.

Returns:CommandInfo[]

the CommandInfo objects representing all the commands

See Also
javax.activation.CommandMap#getAllCommands
getBaseTypeback to summary
private synchronized String getBaseType()

Use the MimeType class to extract the MIME type/subtype, ignoring the parameters. The type is cached.

getBeanback to summary
public Object getBean(CommandInfo cmdinfo)

A convenience method that takes a CommandInfo object and instantiates the corresponding command, usually a JavaBean component.

This method calls the CommandInfo's getCommandObject method with the ClassLoader used to load the javax.activation.DataHandler class itself.

Parameters
cmdinfo:CommandInfo

the CommandInfo corresponding to a command

Returns:Object

the instantiated command object

getCommandback to summary
public CommandInfo getCommand(String cmdName)

Get the command cmdName. Use the search semantics as defined by the CommandMap installed in this DataHandler. The MIME type for the underlying data represented by this DataHandler is used to call through to the getCommand method of the CommandMap associated with this DataHandler.

Parameters
cmdName:String

the command name

Returns:CommandInfo

the CommandInfo corresponding to the command

See Also
javax.activation.CommandMap#getCommand
getCommandMapback to summary
private synchronized CommandMap getCommandMap()

Return the CommandMap for this instance of DataHandler.

getContentback to summary
public Object getContent() throws IOException

Return the data in its preferred Object form.

If the DataHandler was instantiated with an object, return the object.

If the DataHandler was instantiated with a DataSource, this method uses a DataContentHandler to return the content object for the data represented by this DataHandler. If no DataContentHandler can be found for the the type of this data, the DataHandler returns an InputStream for the data.

Returns:Object

the content.

Exceptions
IOException:
if an IOException occurs during this operation.
getContentTypeback to summary
public String getContentType()

Return the MIME type of this object as retrieved from the source object. Note that this is the full type with parameters.

Returns:String

the MIME type

getDataContentHandlerback to summary
private synchronized DataContentHandler getDataContentHandler()

Get the DataContentHandler for this DataHandler:

If a DataContentHandlerFactory is set, use it. Otherwise look for an object to serve DCH in the following order:

1) if a factory is set, use it

2) if a CommandMap is set, use it

3) use the default CommandMap

In any case, wrap the real DataContentHandler with one of our own to handle any missing cases, fill in defaults, and to ensure that we always have a non-null DataContentHandler.

Returns:DataContentHandler

the requested DataContentHandler

getDataSourceback to summary
public DataSource getDataSource()

Return the DataSource associated with this instance of DataHandler.

For DataHandlers that have been instantiated with a DataSource, this method returns the DataSource that was used to create the DataHandler object. In other cases the DataHandler constructs a DataSource from the data used to construct the DataHandler. DataSources created for DataHandlers not instantiated with a DataSource are cached for performance reasons.

Returns:DataSource

a valid DataSource object for this DataHandler

getInputStreamback to summary
public InputStream getInputStream() throws IOException

Get the InputStream for this object.

For DataHandlers instantiated with a DataSource, the DataHandler calls the DataSource.getInputStream method and returns the result to the caller.

For DataHandlers instantiated with an Object, the DataHandler first attempts to find a DataContentHandler for the Object. If the DataHandler can not find a DataContentHandler for this MIME type, it throws an UnsupportedDataTypeException. If it is successful, it creates a pipe and a thread. The thread uses the DataContentHandler's writeTo method to write the stream data into one end of the pipe. The other end of the pipe is returned to the caller. Because a thread is created to copy the data, IOExceptions that may occur during the copy can not be propagated back to the caller. The result is an empty stream.

Returns:InputStream

the InputStream representing this data

Exceptions
IOException:
if an I/O error occurs
See Also
javax.activation.DataContentHandler#writeTo, javax.activation.UnsupportedDataTypeException
getNameback to summary
public String getName()

Return the name of the data object. If this DataHandler was created with a DataSource, this method calls through to the DataSource.getName method, otherwise it returns null.

Returns:String

the name of the object

getOutputStreamback to summary
public OutputStream getOutputStream() throws IOException

Get an OutputStream for this DataHandler to allow overwriting the underlying data. If the DataHandler was created with a DataSource, the DataSource's getOutputStream method is called. Otherwise, null is returned.

Returns:OutputStream

the OutputStream

Exceptions
IOException:
for failures creating the OutputStream
See Also
javax.activation.DataSource#getOutputStream, javax.activation.URLDataSource
getPreferredCommandsback to summary
public CommandInfo[] getPreferredCommands()

Return the preferred commands for this type of data. This method calls the getPreferredCommands method in the CommandMap associated with this instance of DataHandler. This method returns an array that represents a subset of available commands. In cases where multiple commands for the MIME type represented by this DataHandler are present, the installed CommandMap chooses the appropriate commands.

Returns:CommandInfo[]

the CommandInfo objects representing the preferred commands

See Also
javax.activation.CommandMap#getPreferredCommands
getTransferDataback to summary
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException

Implements java.awt.datatransfer.Transferable.getTransferData.

Returns an object that represents the data to be transferred. The class of the object returned is defined by the representation class of the data flavor.

For DataHandler's created with DataSources or URLs:

The DataHandler attempts to locate a DataContentHandler for this MIME type. If one is found, the passed in DataFlavor and the type of the data are passed to its getTransferData method. If the DataHandler fails to locate a DataContentHandler and the flavor specifies this object's MIME type and the java.io.InputStream class, this object's InputStream is returned. Otherwise it throws an UnsupportedFlavorException.

For DataHandler's created with Objects:

The DataHandler attempts to locate a DataContentHandler for this MIME type. If one is found, the passed in DataFlavor and the type of the data are passed to its getTransferData method. If the DataHandler fails to locate a DataContentHandler and the flavor specifies this object's MIME type and its class, this DataHandler's referenced object is returned. Otherwise it throws an UnsupportedFlavorException.

Parameters
flavor:DataFlavor

the requested flavor for the data

Returns:Object

the object

Exceptions
UnsupportedFlavorException:
if the data could not be converted to the requested flavor
IOException:
if an I/O error occurs
See Also
javax.activation.ActivationDataFlavor
getTransferDataFlavorsback to summary
public synchronized DataFlavor[] getTransferDataFlavors()

Implements java.awt.datatransfer.Transferable.getTransferDataFlavors.

Return the DataFlavors in which this data is available.

Returns an array of DataFlavor objects indicating the flavors the data can be provided in. The array is usually ordered according to preference for providing the data, from most richly descriptive to least richly descriptive.

The DataHandler attempts to find a DataContentHandler that corresponds to the MIME type of the data. If one is located, the DataHandler calls the DataContentHandler's getTransferDataFlavors method.

If a DataContentHandler can not be located, and if the DataHandler was created with a DataSource (or URL), one DataFlavor is returned that represents this object's MIME type and the java.io.InputStream class. If the DataHandler was created with an object and a MIME type, getTransferDataFlavors returns one DataFlavor that represents this object's MIME type and the object's class.

Returns:DataFlavor[]

an array of data flavors in which this data can be transferred

See Also
javax.activation.DataContentHandler#getTransferDataFlavors
isDataFlavorSupportedback to summary
public boolean isDataFlavorSupported(DataFlavor flavor)

Implements java.awt.datatransfer.Transferable.isDataFlavorSupported.

Returns whether the specified data flavor is supported for this object.

This method iterates through the DataFlavors returned from getTransferDataFlavors, comparing each with the specified flavor.

Parameters
flavor:DataFlavor

the requested flavor for the data

Returns:boolean

true if the data flavor is supported

See Also
javax.activation.DataHandler#getTransferDataFlavors
setCommandMapback to summary
public synchronized void setCommandMap(CommandMap commandMap)

Set the CommandMap for use by this DataHandler. Setting it to null causes the CommandMap to revert to the CommandMap returned by the CommandMap.getDefaultCommandMap method. Changing the CommandMap, or setting it to null, clears out any data cached from the previous CommandMap.

Parameters
commandMap:CommandMap

the CommandMap to use in this DataHandler

See Also
javax.activation.CommandMap#setDefaultCommandMap
setDataContentHandlerFactoryback to summary
public static synchronized void setDataContentHandlerFactory(DataContentHandlerFactory newFactory)

Sets the DataContentHandlerFactory. The DataContentHandlerFactory is called first to find DataContentHandlers. The DataContentHandlerFactory can only be set once.

If the DataContentHandlerFactory has already been set, this method throws an Error.

Parameters
newFactory:DataContentHandlerFactory

the DataContentHandlerFactory

Exceptions
Error:
if the factory has already been defined.
See Also
javax.activation.DataContentHandlerFactory
writeToback to summary
public void writeTo(OutputStream os) throws IOException

Write the data to an OutputStream.

If the DataHandler was created with a DataSource, writeTo retrieves the InputStream and copies the bytes from the InputStream to the OutputStream passed in.

If the DataHandler was created with an object, writeTo retrieves the DataContentHandler for the object's type. If the DataContentHandler was found, it calls the writeTo method on the DataContentHandler.

Parameters
os:OutputStream

the OutputStream to write to

Exceptions
IOException:
if an I/O error occurs