Hi guys, I just wanted to hear your opinions on the attached patch which introduces a Nepomuk:File class derived from Nepomuk::Resource. That new class has url() and dirResource() methods to handle file resources more conveniently.
Cheers, Sebastian
commit dbd582140dd30afad1a7850dbe505d311c94fc43 Author: Sebastian Trueg <[email protected]> Date: Thu Aug 5 13:45:56 2010 +0200 New Nepomuk::File resource providing convinience methods to handle file resources diff --git a/nepomuk/CMakeLists.txt b/nepomuk/CMakeLists.txt index 218bc72..775255d 100644 --- a/nepomuk/CMakeLists.txt +++ b/nepomuk/CMakeLists.txt @@ -28,6 +28,7 @@ set(nepomuk_core_SRCS core/dbusconnectionpool.cpp core/resource.cpp core/thing.cpp + core/file.cpp core/tag.cpp core/nepomukservice.cpp core/graphwrapper.cpp diff --git a/nepomuk/core/file.cpp b/nepomuk/core/file.cpp new file mode 100644 index 0000000..9cde19e --- /dev/null +++ b/nepomuk/core/file.cpp @@ -0,0 +1,63 @@ +/* + This file is part of the Nepomuk KDE project. + Copyright (C) 2010 Sebastian Trueg <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), which shall + act as a proxy defined in Section 6 of version 3 of the license. + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "file.h" +#include "variant.h" +#include "nie.h" +#include "nfo.h" + +Nepomuk::File::File( const KUrl& url, ResourceManager* manager ) + : Resource( url, Nepomuk::Vocabulary::NFO::FileDataObject(), manager ) +{ +} + + +Nepomuk::File::File( const Resource& other ) + : Resource( other ) +{ +} + + +Nepomuk::File::~File() +{ +} + + +Nepomuk::File& Nepomuk::File::operator=( const KUrl& url ) +{ +} + + +KUrl Nepomuk::File::url() const +{ + return property( Nepomuk::Vocabulary::NIE::url() ).toUrl(); +} + + +Nepomuk::File Nepomuk::File::dirResource() const +{ + if( isFile() ) { + return File( url().upUrl() ); + } + else { + return File(); + } +} diff --git a/nepomuk/core/file.h b/nepomuk/core/file.h new file mode 100644 index 0000000..928ae38 --- /dev/null +++ b/nepomuk/core/file.h @@ -0,0 +1,89 @@ +/* + This file is part of the Nepomuk KDE project. + Copyright (C) 2010 Sebastian Trueg <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), which shall + act as a proxy defined in Section 6 of version 3 of the license. + + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _NEPOMUK_FILE_H_ +#define _NEPOMUK_FILE_H_ + +#include "resource.h" +#include "nepomuk_export.h" + +namespace Nepomuk { + /** + * \class File file.h Nepomuk/File + * + * \brief A Nepomuk resource representing a file. + * + * %File is a convinience class which allows to easily handle file + * resources which are sort of a special case in %Nepomuk. + * + * \author Sebastian Trueg <[email protected]> + * + * \since 4.6 + */ + class NEPOMUK_EXPORT File : public Resource + { + public: + /** + * Create a new file resource. + * + * \param url The URL to the file. + * \param manager The resource manager to use. This allows to mix resources from different + * managers and, thus, different models. + */ + File( const KUrl& url = KUrl(), ResourceManager* manager = 0 ); + + /** + * Copy constructor. + */ + File( const Resource& other ); + + /** + * Desctructor + */ + ~File(); + + /** + * Assignment operator. + */ + File& operator=( const KUrl& url ); + + /** + * The URL of the file. Be aware that this differs from + * Resource::resourceUri() and is stored as nie:url + * in the %Nepomuk database. + * + * \return The URL of the file or an empty KUrl in case this + * resource does not represent a file. + */ + KUrl url() const; + + /** + * Returns the resource representing the containing folder, + * ie. the folder containing this file resource. + * + * \return The resource representing the folder or an invalid + * resource in case this resource is invalid or not a file. + */ + File dirResource() const; + }; +} + +#endif diff --git a/nepomuk/core/resource.cpp b/nepomuk/core/resource.cpp index 63d0473..942ee30 100644 --- a/nepomuk/core/resource.cpp +++ b/nepomuk/core/resource.cpp @@ -26,6 +26,7 @@ #include "tag.h" #include "pimo.h" #include "thing.h" +#include "file.h" #include "property.h" #include "nfo.h" #include "nie.h" @@ -867,6 +868,21 @@ void Nepomuk::Resource::increaseUsageCount() } +bool Nepomuk::Resource::isFile() const +{ + if( m_data ) + return m_data->isFile(); + else + return false; +} + + +Nepomuk::File Nepomuk::Resource::toFile() const +{ + return File( *this ); +} + + // static Nepomuk::Resource Nepomuk::Resource::fromResourceUri( const KUrl& uri, const Nepomuk::Types::Class& type, ResourceManager* manager ) { diff --git a/nepomuk/core/resource.h b/nepomuk/core/resource.h index 06bee57..97424f8 100644 --- a/nepomuk/core/resource.h +++ b/nepomuk/core/resource.h @@ -37,6 +37,7 @@ namespace Nepomuk { class Variant; class Tag; class Thing; + class File; namespace Types { class Property; } @@ -744,6 +745,23 @@ namespace Nepomuk { void increaseUsageCount(); /** + * \return \p true if this resource represents a file. Use toFile() to retrieve the + * corresponding file resource which provides convinience methods to handle file + * resources. + * + * \since 4.6 + */ + bool isFile() const; + + /** + * Convert this resource into a File resource to have access to the convinience methods + * provided by the File class. + * + * \since 4.6 + */ + File toFile() const; + + /** * Allows to quickly load a resource from its resource URI without any * additional checks. This is mostly used for optimized code within Nepomuk. *
_______________________________________________ Nepomuk mailing list [email protected] https://mail.kde.org/mailman/listinfo/nepomuk
