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

#ifndef __javax_print_attribute_AttributeSetUtilities__
#define __javax_print_attribute_AttributeSetUtilities__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace print
    {
      namespace attribute
      {
          class Attribute;
          class AttributeSet;
          class AttributeSetUtilities;
          class DocAttributeSet;
          class PrintJobAttributeSet;
          class PrintRequestAttributeSet;
          class PrintServiceAttributeSet;
      }
    }
  }
}

class javax::print::attribute::AttributeSetUtilities : public ::java::lang::Object
{

  AttributeSetUtilities();
public:
  static ::javax::print::attribute::AttributeSet * synchronizedView(::javax::print::attribute::AttributeSet *);
  static ::javax::print::attribute::DocAttributeSet * synchronizedView(::javax::print::attribute::DocAttributeSet *);
  static ::javax::print::attribute::PrintJobAttributeSet * synchronizedView(::javax::print::attribute::PrintJobAttributeSet *);
  static ::javax::print::attribute::PrintRequestAttributeSet * synchronizedView(::javax::print::attribute::PrintRequestAttributeSet *);
  static ::javax::print::attribute::PrintServiceAttributeSet * synchronizedView(::javax::print::attribute::PrintServiceAttributeSet *);
  static ::javax::print::attribute::AttributeSet * unmodifiableView(::javax::print::attribute::AttributeSet *);
  static ::javax::print::attribute::DocAttributeSet * unmodifiableView(::javax::print::attribute::DocAttributeSet *);
  static ::javax::print::attribute::PrintJobAttributeSet * unmodifiableView(::javax::print::attribute::PrintJobAttributeSet *);
  static ::javax::print::attribute::PrintRequestAttributeSet * unmodifiableView(::javax::print::attribute::PrintRequestAttributeSet *);
  static ::javax::print::attribute::PrintServiceAttributeSet * unmodifiableView(::javax::print::attribute::PrintServiceAttributeSet *);
  static ::java::lang::Class * verifyAttributeCategory(::java::lang::Object *, ::java::lang::Class *);
  static ::javax::print::attribute::Attribute * verifyAttributeValue(::java::lang::Object *, ::java::lang::Class *);
  static void verifyCategoryForValue(::java::lang::Class *, ::javax::print::attribute::Attribute *);
  static ::java::lang::Class class$;
};

#endif // __javax_print_attribute_AttributeSetUtilities__
