akonadi
collectionrightsattribute.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "collectionrightsattribute_p.h"
00021
00022 using namespace Akonadi;
00023
00024 static const char* s_accessRightsIdentifier = "AccessRights";
00025
00026 static Collection::Rights dataToRights( const QByteArray &data )
00027 {
00028 Collection::Rights rights = Collection::ReadOnly;
00029
00030 if ( data.isEmpty() )
00031 return Collection::ReadOnly;
00032
00033 if ( data.at( 0 ) == 'a' )
00034 return Collection::AllRights;
00035
00036 for ( int i = 0; i < data.count(); ++i ) {
00037 switch ( data.at( i ) ) {
00038 case 'w': rights |= Collection::CanChangeItem; break;
00039 case 'c': rights |= Collection::CanCreateItem; break;
00040 case 'd': rights |= Collection::CanDeleteItem; break;
00041 case 'l': rights |= Collection::CanLinkItem; break;
00042 case 'u': rights |= Collection::CanUnlinkItem; break;
00043 case 'W': rights |= Collection::CanChangeCollection; break;
00044 case 'C': rights |= Collection::CanCreateCollection; break;
00045 case 'D': rights |= Collection::CanDeleteCollection; break;
00046 }
00047 }
00048
00049 return rights;
00050 }
00051
00052 static QByteArray rightsToData( Collection::Rights &rights )
00053 {
00054 if ( rights == Collection::AllRights )
00055 return QByteArray( "a" );
00056
00057 QByteArray data;
00058 if ( rights & Collection::CanChangeItem )
00059 data.append( 'w' );
00060 if ( rights & Collection::CanCreateItem )
00061 data.append( 'c' );
00062 if ( rights & Collection::CanDeleteItem )
00063 data.append( 'd' );
00064 if ( rights & Collection::CanChangeCollection )
00065 data.append( 'W' );
00066 if ( rights & Collection::CanCreateCollection )
00067 data.append( 'C' );
00068 if ( rights & Collection::CanDeleteCollection )
00069 data.append( 'D' );
00070 if ( rights & Collection::CanLinkItem )
00071 data.append( 'l' );
00072 if ( rights & Collection::CanUnlinkItem )
00073 data.append( 'u' );
00074
00075 return data;
00076 }
00077
00081 class CollectionRightsAttribute::Private
00082 {
00083 public:
00084 QByteArray mData;
00085 };
00086
00087 CollectionRightsAttribute::CollectionRightsAttribute()
00088 : Attribute(), d( new Private )
00089 {
00090 }
00091
00092 CollectionRightsAttribute::~CollectionRightsAttribute()
00093 {
00094 delete d;
00095 }
00096
00097 void CollectionRightsAttribute::setRights( Collection::Rights rights )
00098 {
00099 d->mData = rightsToData( rights );
00100 }
00101
00102 Collection::Rights CollectionRightsAttribute::rights() const
00103 {
00104 return dataToRights( d->mData );
00105 }
00106
00107 CollectionRightsAttribute* CollectionRightsAttribute::clone() const
00108 {
00109 CollectionRightsAttribute *attr = new CollectionRightsAttribute();
00110 attr->d->mData = d->mData;
00111
00112 return attr;
00113 }
00114
00115 QByteArray CollectionRightsAttribute::type() const
00116 {
00117 return s_accessRightsIdentifier;
00118 }
00119
00120 QByteArray CollectionRightsAttribute::serialized() const
00121 {
00122 return d->mData;
00123 }
00124
00125 void CollectionRightsAttribute::deserialize( const QByteArray &data )
00126 {
00127 d->mData = data;
00128 }