00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "contactgroupsearchjob.h"
00023
00024 #include <akonadi/itemfetchscope.h>
00025
00026 using namespace Akonadi;
00027
00028 class ContactGroupSearchJob::Private
00029 {
00030 public:
00031 int mLimit;
00032 };
00033
00034 ContactGroupSearchJob::ContactGroupSearchJob( QObject * parent )
00035 : ItemSearchJob( QString(), parent ), d( new Private )
00036 {
00037 fetchScope().fetchFullPayload();
00038 d->mLimit = -1;
00039
00040
00041 ItemSearchJob::setQuery( QLatin1String( ""
00042 "prefix nco:<http://www.semanticdesktop.org/ontologies/2007/03/22/nco#>"
00043 "SELECT ?r WHERE { ?r a nco:ContactGroup }" ) );
00044 }
00045
00046 ContactGroupSearchJob::~ContactGroupSearchJob()
00047 {
00048 delete d;
00049 }
00050
00051 void ContactGroupSearchJob::setQuery( Criterion criterion, const QString &value )
00052 {
00053
00054
00055 setQuery( criterion, value, ExactMatch );
00056 }
00057
00058 void ContactGroupSearchJob::setQuery( Criterion criterion, const QString &value, Match match )
00059 {
00060 QString query = QString::fromLatin1(
00061 "prefix nco:<http://www.semanticdesktop.org/ontologies/2007/03/22/nco#>" );
00062
00063 QString matchString;
00064 switch ( match ) {
00065 case ExactMatch:
00066 matchString = QString::fromLatin1(
00067 " ?group nco:contactGroupName \"%1\"^^<http://www.w3.org/2001/XMLSchema#string>." );
00068 break;
00069 case ContainsMatch:
00070 matchString = QString::fromLatin1(
00071 " ?group nco:contactGroupName ?v . "
00072 " ?v bif:contains \"'%1'\"" );
00073 break;
00074 case StartsWithMatch:
00075 matchString = QString::fromLatin1(
00076 " ?group nco:contactGroupName ?v . "
00077 " ?v bif:contains \"'%1*'\"" );
00078 break;
00079 }
00080
00081 if ( criterion == Name ) {
00082 query += QString::fromLatin1(
00083 "SELECT DISTINCT ?group "
00084 "WHERE { "
00085 " graph ?g { "
00086 " ?group <" + akonadiItemIdUri().toEncoded() + "> ?itemId . " );
00087 query += matchString;
00088 query += QString::fromLatin1(
00089 " } "
00090 "}" );
00091 }
00092
00093 if ( d->mLimit != -1 )
00094 query += QString::fromLatin1( " LIMIT %1" ).arg( d->mLimit );
00095
00096 query = query.arg( value );
00097
00098 ItemSearchJob::setQuery( query );
00099 }
00100
00101 void ContactGroupSearchJob::setLimit( int limit )
00102 {
00103 d->mLimit = limit;
00104 }
00105
00106 KABC::ContactGroup::List ContactGroupSearchJob::contactGroups() const
00107 {
00108 KABC::ContactGroup::List contactGroups;
00109
00110 foreach ( const Item &item, items() ) {
00111 if ( item.hasPayload<KABC::ContactGroup>() )
00112 contactGroups.append( item.payload<KABC::ContactGroup>() );
00113 }
00114
00115 return contactGroups;
00116 }
00117
00118 #include "contactgroupsearchjob.moc"