kde-playground/kdepimlibs/kabc/resource.h
2015-04-14 21:49:29 +00:00

541 lines
15 KiB
C++

/*
This file is part of libkabc.
Copyright (c) 2001 Cornelius Schumacher <schumacher@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 KABC_RESOURCE_H
#define KABC_RESOURCE_H
#include "addressbook.h"
#include "distributionlist.h"
#include "plugin.h"
#include "kresources/resource.h"
namespace KABC {
/**
* @short Helper class for handling coordinated save of address books.
*
* This class is used as helper class for saving address book.
* @see requestSaveTicket(), save().
*/
class KABC_DEPRECATED_EXPORT Ticket
{
friend class Resource;
public:
/**
Destroys the Ticket instance.
*/
~Ticket();
/**
Returns the resource for which this ticket has been created.
@see Resource::createTicket()
*/
Resource *resource();
private:
Ticket( Resource *resource );
class Private;
Private *const d;
};
/**
* @internal
*/
class KABC_DEPRECATED_EXPORT Resource : public KRES::Resource
{
Q_OBJECT
public:
/**
@short Resource Iterator
This class provides an iterator for resource entries.
*/
class ConstIterator;
class KABC_DEPRECATED_EXPORT Iterator
{
friend class KABC::Resource::ConstIterator;
friend class KABC::Resource;
public:
/**
* Default constructor
*/
Iterator();
/**
* Copy constructor
*/
Iterator( const Iterator & );
virtual ~Iterator();
/**
* Assignment operator. Assignes the given iterator to
* @c *this.
*
* @return this iterator, @c *this
*/
virtual Iterator &operator=( const Iterator & );
/**
* Constant Dereference operator.
* @note For invalid iterators, the result is undefined.
*
* @return the @c const Addressee object the iterator points to.
*/
virtual const Addressee &operator*() const;
/**
* Dereference operator.
* @note For invalid iterators, the result is undefined.
*
* @return the Addressee object the iterator points to.
*/
virtual Addressee &operator*();
/**
* Preincrement operator. Advances the iterator by one.
*
* @return this iterator, @c *this
*/
virtual Iterator &operator++();
/**
* Postincrement operator. Advances the iterator by one.
* @note This function does not copy the iterator object.
*
* @return this iterator, @c *this
*/
virtual Iterator &operator++( int );
/**
* Predecrement operator. Decreases the iterator by one.
*
* @return this iterator, @c *this
*/
virtual Iterator &operator--();
/**
* Postdecrement operator. Decreases the iterator by one.
* @note This function does not copy the iterator object.
*
* @return this iterator, @c *this
*/
virtual Iterator &operator--( int );
/**
* Equality operator. Compares this iterator to @p it
*
* @param it the iterator to compare this iterator to
* @return @c true if both iterators are equal,
* @c false otherwise
*/
virtual bool operator==( const Iterator &it ) const;
/**
* Inequality operator. Compares this iterator to @p it
*
* @param it the iterator to compare this iterator to
* @return @c true if the iterators are not equal,
* @c false otherwise
*/
virtual bool operator!=( const Iterator &it ) const;
private:
class Private;
Private *const d;
};
/**
@short Resource Const Iterator
This class provides a const iterator for resource entries.
*/
class KABC_DEPRECATED_EXPORT ConstIterator
{
friend class KABC::Resource;
public:
/**
* Default constructor
*/
ConstIterator();
/**
* Copy constructor
*/
ConstIterator( const ConstIterator & );
#ifndef QT_STRICT_ITERATORS
/**
* Copy constructor. Constructs a ConstIterator from
* an non-@c const Iterator
*/
ConstIterator( const Iterator & );
#endif
virtual ~ConstIterator();
/**
* Assignment operator. Assignes the given iterator to
* @c *this.
*
* @return this iterator, @c *this
*/
virtual ConstIterator &operator=( const ConstIterator & );
/**
* Constant Dereference operator.
* @note For invalid iterators, the result is undefined.
* @note Unlike in Iterator, there is no non-constant
* dereference operator.
*
* @return the @c const Addressee object the iterator points to.
*/
virtual const Addressee &operator*() const;
/**
* Preincrement operator. Advances the iterator by one.
*
* @return this iterator, @c *this
*/
virtual ConstIterator &operator++();
/**
* Postincrement operator. Advances the iterator by one.
* @note This function does not copy the iterator object.
*
* @return this iterator, @c *this
*/
virtual ConstIterator &operator++( int );
/**
* Predecrement operator. Decreases the iterator by one.
*
* @return this iterator, @c *this
*/
virtual ConstIterator &operator--();
/**
* Postdecrement operator. Decreases the iterator by one.
* @note This function does not copy the iterator object.
*
* @return this iterator, @c *this
*/
virtual ConstIterator &operator--( int );
/**
* Equality operator. Compares this iterator to @p it
*
* @param it the iterator to compare this iterator to
* @return @c true if both iterators are equal,
* @c false otherwise
*/
virtual bool operator==( const ConstIterator &it ) const;
/**
* Inequality operator. Compares this iterator to @p it
*
* @param it the iterator to compare this iterator to
* @return @c true if the iterators are not equal,
* @c false otherwise
*/
virtual bool operator!=( const ConstIterator &it ) const;
private:
class Private;
Private *const d;
};
/**
* Typedef for STL style iterator
*/
typedef Iterator iterator;
/**
* Typedef for STL style iterator
*/
typedef ConstIterator const_iterator;
/**
Default constructor.
*/
Resource();
/**
Constructor.
@param group The configuration group where the derived classes can
read out their settings.
*/
Resource( const KConfigGroup &group );
/**
Destructor.
*/
virtual ~Resource();
/**
Returns an iterator pointing to the first addressee in the resource.
This iterator equals end() if the resource is empty.
*/
virtual ConstIterator begin() const;
ConstIterator constBegin() const { return begin(); }
/**
This is an overloaded member function, provided for convenience. It
behaves essentially like the above function.
*/
virtual Iterator begin();
/**
Returns an iterator pointing to the last addressee in the resource.
This iterator equals begin() if the resource is empty.
*/
virtual ConstIterator end() const;
ConstIterator constEnd() const { return end(); }
/**
This is an overloaded member function, provided for convenience. It
behaves essentially like the above function.
*/
virtual Iterator end();
/**
Returns a pointer to the addressbook.
*/
AddressBook *addressBook();
/**
Writes the resource specific config to file.
@param group The config section to write into
*/
virtual void writeConfig( KConfigGroup &group );
/**
Request a ticket, you have to pass through save() to
allow locking. The resource has to create its locks
in this function.
*/
virtual Ticket *requestSaveTicket() = 0;
/**
Releases the ticket previousely requested with requestSaveTicket().
The resource has to remove its locks in this function.
This function is also responsible for deleting the ticket.
@param ticket the save ticket acquired with requestSaveTicket()
*/
virtual void releaseSaveTicket( Ticket *ticket ) = 0;
/**
Loads all addressees synchronously.
@returns Whether the loading was successfully.
*/
virtual bool load() = 0;
/**
Loads all addressees asyncronously. You have to make sure that either
the loadingFinished() or loadingError() signal is emitted from within
this function.
The default implementation simply calls the synchronous load.
@return Whether the synchronous part of loading was successfully.
*/
virtual bool asyncLoad();
/**
Insert an addressee into the resource.
@param addr The addressee to add
*/
virtual void insertAddressee( const Addressee &addr );
/**
Removes an addressee from resource.
@param addr The addressee to remove
*/
virtual void removeAddressee( const Addressee &addr );
/**
Saves all addressees synchronously.
@param ticket You have to release the ticket later with
releaseSaveTicket() explicitly.
@return Whether the saving was successfully.
*/
virtual bool save( Ticket *ticket ) = 0;
/**
Saves all addressees asynchronously. You have to make sure that either
the savingFinished() or savingError() signal is emitted from within
this function.
The default implementation simply calls the synchronous save.
@param ticket You have to release the ticket later with
releaseSaveTicket() explicitly.
@return Whether the saving was successfully.
*/
virtual bool asyncSave( Ticket *ticket );
/**
Searches an addressee with the specified unique identifier.
@param uid The unique identifier you are looking for.
@return The addressee with the specified unique identifier or an
empty addressee.
*/
virtual Addressee findByUid( const QString &uid );
/**
Searches all addressees which match the specified name.
@param name The name you are looking for.
@return A list of all matching addressees.
*/
virtual Addressee::List findByName( const QString &name );
/**
Searches all addressees which match the specified email address.
@param email The email address you are looking for.
@return A list of all matching addressees.
*/
virtual Addressee::List findByEmail( const QString &email );
/**
Searches all addressees which belongs to the specified category.
@param category The category you are looking for.
@return A list of all matching addressees.
*/
virtual Addressee::List findByCategory( const QString &category );
/**
Removes all addressees and distribution lists from the resource.
*/
virtual void clear();
/**
Adds a distribution @p list into this resource.
@param list The list to insert.
*/
virtual void insertDistributionList( DistributionList *list );
/**
Removes a distribution @p list from this resource.
@param list The list to remove.
*/
virtual void removeDistributionList( DistributionList *list );
/**
Returns a distribution list for the given @p identifier or @c 0
@param identifier The ID of the list for look for.
*/
virtual DistributionList *findDistributionListByIdentifier( const QString &identifier );
/**
Returns a distribution list with the given @p name or @c 0
@param name The localized name of the list for look for.
@param caseSensitivity Whether to do string matching case sensitive or
case insensitive. Default is @c Qt::CaseSensitive
*/
virtual DistributionList *findDistributionListByName(
const QString &name,
Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive );
/**
Returns a list of all distribution lists of this resource.
*/
virtual QList<DistributionList*> allDistributionLists();
/**
Returns a list of names of all distribution lists of this resource.
Convenience function, equal to iterate over the list returned
by allDistributionLists()
*/
virtual QStringList allDistributionListNames() const;
/**
@internal
Sets the address book of the resource.
@param addr The address book to use
*/
void setAddressBook( AddressBook *addr );
Q_SIGNALS:
/**
This signal is emitted when the resource has finished the loading of all
addressees from the backend to the internal cache.
@param resource The pointer to the resource which emitted this signal.
*/
void loadingFinished( Resource *resource );
/**
This signal is emitted when an error occurred during loading the
addressees from the backend to the internal cache.
@param resource The pointer to the resource which emitted this signal.
@param msg A translated error message.
*/
void loadingError( Resource *resource, const QString &msg );
/**
This signal is emitted when the resource has finished the saving of all
addressees from the internal cache to the backend.
@param resource The pointer to the resource which emitted this signal.
*/
void savingFinished( Resource *resource );
/**
This signal is emitted when an error occurred during saving the
addressees from the internal cache to the backend.
@param resource The pointer to the resource which emitted this signal.
@param msg A translated error message.
*/
void savingError( Resource *resource, const QString &msg );
protected:
/**
Factory method, just creates and returns a new Ticket for the given resource.
Needed by subclasses since the constructor of Ticket is private and only
this base class is a friend, effectively limiting "new Ticket(this)" to
resource implementations.
*/
Ticket *createTicket( Resource * );
/**
A mapping from KABC UIDs to the respective addressee.
*/
Addressee::Map mAddrMap;
/**
A mapping from unique identifiers to the respective distribution list.
*/
DistributionListMap mDistListMap;
private:
class Private;
Private *const d;
};
}
#endif