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

#ifndef __javax_activation_ObjectDataContentHandler__
#define __javax_activation_ObjectDataContentHandler__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace datatransfer
      {
          class DataFlavor;
      }
    }
  }
  namespace javax
  {
    namespace activation
    {
        class DataContentHandler;
        class DataSource;
        class ObjectDataContentHandler;
    }
  }
}

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

public:
  ObjectDataContentHandler(::javax::activation::DataContentHandler *, ::java::lang::Object *, ::java::lang::String *);
  virtual ::java::lang::Object * getContent(::javax::activation::DataSource *);
  virtual ::javax::activation::DataContentHandler * getDCH();
  virtual ::java::lang::Object * getTransferData(::java::awt::datatransfer::DataFlavor *, ::javax::activation::DataSource *);
  virtual JArray< ::java::awt::datatransfer::DataFlavor * > * getTransferDataFlavors();
  virtual void writeTo(::java::lang::Object *, ::java::lang::String *, ::java::io::OutputStream *);
private:
  ::javax::activation::DataContentHandler * __attribute__((aligned(__alignof__( ::java::lang::Object)))) dch;
  ::java::lang::Object * object;
  ::java::lang::String * mimeType;
  JArray< ::java::awt::datatransfer::DataFlavor * > * flavors;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_activation_ObjectDataContentHandler__
