mirror of
https://bitbucket.org/smil3y/kde-playground.git
synced 2025-02-23 18:32:51 +00:00
178 lines
4.6 KiB
C++
178 lines
4.6 KiB
C++
/*
|
|
Copyright (c) 2006 - 2008 Volker Krause <vkrause@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Library General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or (at your
|
|
option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
|
|
License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to the
|
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef AKONADI_ATTRIBUTE_H
|
|
#define AKONADI_ATTRIBUTE_H
|
|
|
|
#include "akonadi_export.h"
|
|
|
|
#include <QtCore/QList>
|
|
|
|
namespace Akonadi {
|
|
|
|
/**
|
|
* @short Provides interface for custom attributes for Entity.
|
|
*
|
|
* This class is an interface for custom attributes, that can be stored
|
|
* in an entity. Attributes should be meta data, e.g. ACLs, quotas etc.
|
|
* that are not part of the entities' data itself.
|
|
*
|
|
* Note that attributes are per user, i.e. when an attribute is added to
|
|
* an entity, it only applies to the current user.
|
|
*
|
|
* To provide custom attributes, you have to subclass from this interface
|
|
* and reimplement the pure virtual methods.
|
|
*
|
|
* @code
|
|
*
|
|
* class SecrecyAttribute : public Akonadi::Attribute
|
|
* {
|
|
* public:
|
|
* enum Secrecy
|
|
* {
|
|
* Public,
|
|
* Private,
|
|
* Confidential
|
|
* };
|
|
*
|
|
* SecrecyAttribute( Secrecy secrecy = Public )
|
|
* : mSecrecy( secrecy )
|
|
* {
|
|
* }
|
|
*
|
|
* void setSecrecy( Secrecy secrecy )
|
|
* {
|
|
* mSecrecy = secrecy;
|
|
* }
|
|
*
|
|
* Secrecy secrecy() const
|
|
* {
|
|
* return mSecrecy;
|
|
* }
|
|
*
|
|
* virtual QByteArray type() const
|
|
* {
|
|
* return "secrecy";
|
|
* }
|
|
*
|
|
* virtual Attribute* clone() const
|
|
* {
|
|
* return new SecrecyAttribute( mSecrecy );
|
|
* }
|
|
*
|
|
* virtual QByteArray serialized() const
|
|
* {
|
|
* switch ( mSecrecy ) {
|
|
* case Public: return "public"; break;
|
|
* case Private: return "private"; break;
|
|
* case Confidential: return "confidential"; break;
|
|
* }
|
|
* }
|
|
*
|
|
* virtual void deserialize( const QByteArray &data )
|
|
* {
|
|
* if ( data == "public" )
|
|
* mSecrecy = Public;
|
|
* else if ( data == "private" )
|
|
* mSecrecy = Private;
|
|
* else if ( data == "confidential" )
|
|
* mSecrecy = Confidential;
|
|
* }
|
|
* }
|
|
*
|
|
* @endcode
|
|
*
|
|
* Additionally, you need to register your attribute with Akonadi::AttributeFactory
|
|
* for automatic deserialization during retrieving of collecitons or items:
|
|
*
|
|
* @code
|
|
* AttributeFactory::registerAttribute<SecrecyAttribute>();
|
|
* @endcode
|
|
*
|
|
* Third party attributes need to be registered once by each application that uses
|
|
* them. So the above snippet needs to be in the resource that adds the attribute,
|
|
* and each application that uses the resource. This may be simplified in the future.
|
|
*
|
|
* The custom attributes can be used in the following way:
|
|
*
|
|
* @code
|
|
*
|
|
* Akonadi::Item item( "text/directory" );
|
|
* SecrecyAttribute* attr = item.attribute<SecrecyAttribute>( Item::AddIfMissing );
|
|
* attr->setSecrecy( SecrecyAttribute::Confidential );
|
|
*
|
|
* @endcode
|
|
*
|
|
* and
|
|
*
|
|
* @code
|
|
*
|
|
* Akonadi::Item item = ...
|
|
*
|
|
* if ( item.hasAttribute<SecrecyAttribute>() ) {
|
|
* SecrecyAttribute *attr = item.attribute<SecrecyAttribute>();
|
|
*
|
|
* SecrecyAttribute::Secrecy secrecy = attr->secrecy();
|
|
* ...
|
|
* }
|
|
* @endcode
|
|
*
|
|
* @author Volker Krause <vkrause@kde.org>
|
|
*/
|
|
class AKONADI_EXPORT Attribute
|
|
{
|
|
public:
|
|
/**
|
|
* Describes a list of attributes.
|
|
*/
|
|
typedef QList<Attribute *> List;
|
|
|
|
/**
|
|
* Returns the type of the attribute.
|
|
*/
|
|
virtual QByteArray type() const = 0;
|
|
|
|
/**
|
|
* Destroys this attribute.
|
|
*/
|
|
virtual ~Attribute();
|
|
|
|
/**
|
|
* Creates a copy of this attribute.
|
|
*/
|
|
virtual Attribute *clone() const = 0;
|
|
|
|
/**
|
|
* Returns a QByteArray representation of the attribute which will be
|
|
* storaged. This can be raw binary data, no encoding needs to be applied.
|
|
*/
|
|
virtual QByteArray serialized() const = 0;
|
|
|
|
/**
|
|
* Sets the data of this attribute, using the same encoding
|
|
* as returned by toByteArray().
|
|
*
|
|
* @param data The encoded attribute data.
|
|
*/
|
|
virtual void deserialize(const QByteArray &data) = 0;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|