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

#ifndef __javax_activation_CommandMap__
#define __javax_activation_CommandMap__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace activation
    {
        class CommandInfo;
        class CommandMap;
        class DataContentHandler;
        class DataSource;
    }
  }
}

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

public:
  CommandMap();
  static ::javax::activation::CommandMap * getDefaultCommandMap();
  static void setDefaultCommandMap(::javax::activation::CommandMap *);
  virtual JArray< ::javax::activation::CommandInfo * > * getPreferredCommands(::java::lang::String *) = 0;
  virtual JArray< ::javax::activation::CommandInfo * > * getAllCommands(::java::lang::String *) = 0;
  virtual ::javax::activation::CommandInfo * getCommand(::java::lang::String *, ::java::lang::String *) = 0;
  virtual ::javax::activation::DataContentHandler * createDataContentHandler(::java::lang::String *) = 0;
  virtual JArray< ::java::lang::String * > * getMimeTypes();
  virtual JArray< ::javax::activation::CommandInfo * > * getPreferredCommands(::java::lang::String *, ::javax::activation::DataSource *);
  virtual JArray< ::javax::activation::CommandInfo * > * getAllCommands(::java::lang::String *, ::javax::activation::DataSource *);
  virtual ::javax::activation::CommandInfo * getCommand(::java::lang::String *, ::java::lang::String *, ::javax::activation::DataSource *);
  virtual ::javax::activation::DataContentHandler * createDataContentHandler(::java::lang::String *, ::javax::activation::DataSource *);
private:
  static ::javax::activation::CommandMap * defaultCommandMap;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_activation_CommandMap__
