//Auto-generated by kalyptus. DO NOT EDIT.
namespace Akonadi {
    using Kimono;
    using System;
    using Qyoto;
    /// <remarks>
    ///  This class provides the functionality of registering and creating arbitrary Attributes for Entity
    ///  and its subclasses (e.g. Item and Collection).
    ///  @code
    ///  // register the type first
    ///  Akonadi.AttributeFactory.RegisterAttribute<SecrecyAttribute>();
    ///  ...
    ///  // use it anywhere else in the application
    ///  SecrecyAttribute attr = Akonadi.AttributeFactory.CreateAttribute( "secrecy" );
    ///  @endcode
    /// </remarks>        <author> Volker Krause <vkrause@kde.org>
    ///  </author>
    ///         <short> Provides the functionality of registering and creating arbitrary         entity attributes. </short>
    [SmokeClass("Akonadi::AttributeFactory")]
    public class AttributeFactory : Object, IDisposable {
        protected SmokeInvocation interceptor = null;
        private IntPtr smokeObject;
        protected AttributeFactory(Type dummy) {}
        protected void CreateProxy() {
            interceptor = new SmokeInvocation(typeof(AttributeFactory), this);
        }
        private static SmokeInvocation staticInterceptor = null;
        static AttributeFactory() {
            staticInterceptor = new SmokeInvocation(typeof(AttributeFactory), null);
        }
        public AttributeFactory() : this((Type) null) {
            CreateProxy();
            interceptor.Invoke("AttributeFactory", "AttributeFactory()", typeof(void));
        }
        ~AttributeFactory() {
            interceptor.Invoke("~AttributeFactory", "~AttributeFactory()", typeof(void));
        }
        public void Dispose() {
            interceptor.Invoke("~AttributeFactory", "~AttributeFactory()", typeof(void));
        }
        /// <remarks>
        ///  Creates an entity attribute object of the given type.
        /// <param> name="type" The attribute type.
        ///      </param></remarks>        <short>    Creates an entity attribute object of the given type.</short>
        public static Akonadi.Attribute CreateAttribute(QByteArray type) {
            return (Akonadi.Attribute) staticInterceptor.Invoke("createAttribute#", "createAttribute(const QByteArray&)", typeof(Akonadi.Attribute), typeof(QByteArray), type);
        }
    }
}
