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

Reply via email to