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

#ifndef __javax_print_DocFlavor__
#define __javax_print_DocFlavor__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace print
    {
        class DocFlavor;
    }
  }
}

class javax::print::DocFlavor : public ::java::lang::Object
{

public:
  DocFlavor(::java::lang::String *, ::java::lang::String *);
private:
  void parseMimeType(::java::lang::String *);
public:
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * getMediaSubtype();
  virtual ::java::lang::String * getMediaType();
  virtual ::java::lang::String * getMimeType();
  virtual ::java::lang::String * getParameter(::java::lang::String *);
  virtual ::java::lang::String * getRepresentationClassName();
  virtual jint hashCode();
  virtual ::java::lang::String * toString();
private:
  void readObject(::java::io::ObjectInputStream *);
  void writeObject(::java::io::ObjectOutputStream *);
  static const jlong serialVersionUID = -4512080796965449721LL;
public:
  static ::java::lang::String * hostEncoding;
private:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) mediaSubtype;
  ::java::lang::String * mediaType;
  ::java::util::TreeMap * params;
  ::java::lang::String * myClassName;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_print_DocFlavor__
