
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __javax_activation_DataHandler__
#define __javax_activation_DataHandler__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace datatransfer
      {
          class DataFlavor;
      }
    }
    namespace net
    {
        class URL;
    }
  }
  namespace javax
  {
    namespace activation
    {
        class CommandInfo;
        class CommandMap;
        class DataContentHandler;
        class DataContentHandlerFactory;
        class DataHandler;
        class DataSource;
    }
  }
}

class javax::activation::DataHandler : public ::java::lang::Object
{

public:
  DataHandler(::javax::activation::DataSource *);
  DataHandler(::java::lang::Object *, ::java::lang::String *);
  DataHandler(::java::net::URL *);
  virtual ::javax::activation::DataSource * getDataSource();
  virtual ::java::lang::String * getName();
  virtual ::java::lang::String * getContentType();
  virtual ::java::io::InputStream * getInputStream();
  virtual void writeTo(::java::io::OutputStream *);
  virtual ::java::io::OutputStream * getOutputStream();
  virtual JArray< ::java::awt::datatransfer::DataFlavor * > * getTransferDataFlavors();
  virtual jboolean isDataFlavorSupported(::java::awt::datatransfer::DataFlavor *);
  virtual ::java::lang::Object * getTransferData(::java::awt::datatransfer::DataFlavor *);
  virtual void setCommandMap(::javax::activation::CommandMap *);
  virtual JArray< ::javax::activation::CommandInfo * > * getPreferredCommands();
  virtual JArray< ::javax::activation::CommandInfo * > * getAllCommands();
  virtual ::javax::activation::CommandInfo * getCommand(::java::lang::String *);
  virtual ::java::lang::Object * getContent();
  virtual ::java::lang::Object * getBean(::javax::activation::CommandInfo *);
  static void setDataContentHandlerFactory(::javax::activation::DataContentHandlerFactory *);
private:
  ::java::lang::String * getShortType();
  ::javax::activation::CommandMap * getCommandMap();
  ::javax::activation::DataContentHandler * getDataContentHandler();
  static JArray< ::java::awt::datatransfer::DataFlavor * > * NO_FLAVORS;
  static ::javax::activation::DataContentHandlerFactory * factory;
  ::javax::activation::DataSource * __attribute__((aligned(__alignof__( ::java::lang::Object)))) dataSource;
  ::javax::activation::DataSource * objDataSource;
  ::java::lang::Object * object;
  ::java::lang::String * objectMimeType;
  ::javax::activation::CommandMap * currentCommandMap;
  JArray< ::java::awt::datatransfer::DataFlavor * > * transferFlavors;
  ::javax::activation::DataContentHandler * dataContentHandler;
  ::javax::activation::DataContentHandler * factoryDCH;
  ::javax::activation::DataContentHandlerFactory * oldFactory;
  ::java::lang::String * shortType;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_activation_DataHandler__
