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

#ifndef __javax_activation_FileDataSource__
#define __javax_activation_FileDataSource__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace activation
    {
        class FileDataSource;
        class FileTypeMap;
    }
  }
}

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

public:
  FileDataSource(::java::io::File *);
  FileDataSource(::java::lang::String *);
  virtual ::java::io::InputStream * getInputStream();
  virtual ::java::io::OutputStream * getOutputStream();
  virtual ::java::lang::String * getContentType();
  virtual ::java::lang::String * getName();
  virtual ::java::io::File * getFile();
  virtual void setFileTypeMap(::javax::activation::FileTypeMap *);
private:
  ::java::io::File * __attribute__((aligned(__alignof__( ::java::lang::Object)))) file;
  ::javax::activation::FileTypeMap * typeMap;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_activation_FileDataSource__
