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

#ifndef __java_util_prefs_Preferences__
#define __java_util_prefs_Preferences__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class Permission;
    }
  }
}

class java::util::prefs::Preferences : public ::java::lang::Object
{

public: // actually protected
  Preferences();
public:
  static ::java::util::prefs::Preferences * systemRoot();
  static ::java::util::prefs::Preferences * userRoot();
private:
  static ::java::util::prefs::PreferencesFactory * getFactory();
public:
  static ::java::util::prefs::Preferences * systemNodeForPackage(::java::lang::Class *);
  static ::java::util::prefs::Preferences * userNodeForPackage(::java::lang::Class *);
private:
  static ::java::util::prefs::Preferences * nodeForPackage(::java::lang::Class *, ::java::util::prefs::Preferences *);
public:
  static void importPreferences(::java::io::InputStream *);
  virtual ::java::lang::String * absolutePath() = 0;
  virtual jboolean isUserNode() = 0;
  virtual ::java::lang::String * name() = 0;
  virtual ::java::lang::String * toString() = 0;
  virtual JArray< ::java::lang::String * > * childrenNames() = 0;
  virtual ::java::util::prefs::Preferences * node(::java::lang::String *) = 0;
  virtual jboolean nodeExists(::java::lang::String *) = 0;
  virtual ::java::util::prefs::Preferences * parent() = 0;
  virtual void exportNode(::java::io::OutputStream *) = 0;
  virtual void exportSubtree(::java::io::OutputStream *) = 0;
  virtual JArray< ::java::lang::String * > * keys() = 0;
  virtual ::java::lang::String * get(::java::lang::String *, ::java::lang::String *) = 0;
  virtual jboolean getBoolean(::java::lang::String *, jboolean) = 0;
  virtual JArray< jbyte > * getByteArray(::java::lang::String *, JArray< jbyte > *) = 0;
  virtual jdouble getDouble(::java::lang::String *, jdouble) = 0;
  virtual jfloat getFloat(::java::lang::String *, jfloat) = 0;
  virtual jint getInt(::java::lang::String *, jint) = 0;
  virtual jlong getLong(::java::lang::String *, jlong) = 0;
  virtual void put(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void putBoolean(::java::lang::String *, jboolean) = 0;
  virtual void putByteArray(::java::lang::String *, JArray< jbyte > *) = 0;
  virtual void putDouble(::java::lang::String *, jdouble) = 0;
  virtual void putFloat(::java::lang::String *, jfloat) = 0;
  virtual void putInt(::java::lang::String *, jint) = 0;
  virtual void putLong(::java::lang::String *, jlong) = 0;
  virtual void remove(::java::lang::String *) = 0;
  virtual void clear() = 0;
  virtual void flush() = 0;
  virtual void sync() = 0;
  virtual void removeNode() = 0;
  virtual void addNodeChangeListener(::java::util::prefs::NodeChangeListener *) = 0;
  virtual void addPreferenceChangeListener(::java::util::prefs::PreferenceChangeListener *) = 0;
  virtual void removeNodeChangeListener(::java::util::prefs::NodeChangeListener *) = 0;
  virtual void removePreferenceChangeListener(::java::util::prefs::PreferenceChangeListener *) = 0;
private:
  static ::java::lang::String * defaultFactoryClass;
  static ::java::security::Permission * prefsPermission;
  static ::java::util::prefs::PreferencesFactory * factory;
public:
  static const jint MAX_NAME_LENGTH = 80;
  static const jint MAX_KEY_LENGTH = 80;
  static const jint MAX_VALUE_LENGTH = 8192;
  static ::java::lang::Class class$;
};

#endif // __java_util_prefs_Preferences__
