[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/base/nepomuk-kde/backupsync/service
From: Vishesh Handa <handa.vish () gmail ! com>
Date: 2010-06-05 18:10:11
Message-ID: 20100605181011.BE3C6AC8CE () svn ! kde ! org
[Download RAW message or body]
SVN commit 1134921 by vhanda:
* Fixed thread related crashes
* Moved external model from Identifier and Merger to IdentificationProcess and \
MergeRequest
* Changed Identifier's processed signal
* Fixed IdentificationProcess::convert bug
M +8 -3 backupsyncservice.cpp
M +30 -14 identificationprocess.cpp
M +7 -1 identificationprocess.h
M +11 -14 identifier.cpp
M +2 -4 identifier.h
M +16 -67 logfile.cpp
M +4 -0 logfile.h
M +6 -16 merger.cpp
M +2 -6 merger.h
M +35 -3 mergerequest.cpp
M +18 -1 mergerequest.h
M +3 -2 syncmanager.cpp
--- trunk/playground/base/nepomuk-kde/backupsync/service/backupsyncservice.cpp \
#1134920:1134921 @@ -24,6 +24,7 @@
#include "syncmanager.h"
#include "syncfile.h"
#include "backupmanager.h"
+#include "mergerequest.h"
#include "identificationfile.h"
#include "logfile.h"
@@ -40,13 +41,17 @@
m_merger = new Merger( this );
m_syncManager = new SyncManager( m_identifier, m_merger, this );
- //m_backupManager = new BackupManager( m_identifier, m_merger, this );
- //test();
+ m_backupManager = new BackupManager( m_identifier, m_merger, this );
+
+ //vHanda: Why doesn't this work?
+ qRegisterMetaType<Nepomuk::LogFile>("Nepomuk::LogFile");
+ qRegisterMetaType<Nepomuk::MergeRequest>("Nepomuk::MergeRequest");
}
Nepomuk::BackupSyncService::~BackupSyncService()
{
-
+ m_identifier->stop();
+ m_merger->stop();
}
void Nepomuk::BackupSyncService::test()
--- trunk/playground/base/nepomuk-kde/backupsync/service/identificationprocess.cpp \
#1134920:1134921 @@ -29,10 +29,12 @@
Nepomuk::IdentificationProcess::IdentificationProcess()
{
m_id = -1;
+ m_model = Nepomuk::ResourceManager::instance()->mainModel();
}
-Nepomuk::IdentificationProcess::IdentificationProcess(const Nepomuk::SyncFile & sf)
- : m_syncFile(sf)
+Nepomuk::IdentificationProcess::IdentificationProcess(const Nepomuk::SyncFile & sf, \
Soprano::Model* model) + : m_syncFile( sf ),
+ m_model( model )
{
m_id = NextId;
NextId++;
@@ -83,41 +85,48 @@
}
}
-
+//TODO: Refernce counting doesn't seem to be working
Nepomuk::LogFile Nepomuk::IdentificationProcess::convert()
{
LogFile & masterLogFile = m_syncFile.logFile();
- LogFile lf( masterLogFile );
- QList<Record>& records = lf.allRecords();
- QMutableListIterator<Record> it( records );
+ QList<Record> records;
+ QMutableListIterator<Record> it( masterLogFile.allRecords() );
while( it.hasNext() ) {
- Record& r = it.next();
- Soprano::Statement st = r.st;
+ Record r = it.next();
// Identify Subject
- QUrl newUri = hash[ st.subject().uri() ];
+ QUrl subUri = r.st.subject().uri();
+ if( subUri.scheme() == QLatin1String("nepomuk") ) {
+ QUrl newUri = hash[ subUri ];
if( newUri.isEmpty() ) {
- it.remove();
continue;
}
r.st.setSubject( Soprano::Node(newUri) );
+ }
+
// Identify object
- if( st.object().isResource() ) {
- QUrl newUri = hash[ st.object().uri() ];
+ if( r.st.object().isResource() ) {
+ QUrl objUri = r.st.object().uri();
+ if( objUri.scheme() == QLatin1String("nepomuk") ) {
+ QUrl newUri = hash[ objUri ];
if( newUri.isEmpty() ) {
- it.remove();
continue;
}
r.st.setObject( newUri );
}
+ }
+ records.push_back( r );
+
// Remove the statement from the master logfile
- masterLogFile.remove( r );
+ it.remove();
}
+ LogFile lf;
+ lf.allRecords() = records;
return lf;
}
@@ -133,3 +142,10 @@
return m_syncFile.logFile().empty();
}
+
+Soprano::Model* Nepomuk::IdentificationProcess::model() const
+{
+ return m_model;
+}
+
+
--- trunk/playground/base/nepomuk-kde/backupsync/service/identificationprocess.h \
#1134920:1134921 @@ -23,11 +23,13 @@
#include <QtCore/QUrl>
#include <QtCore/QMultiHash>
+#include <Nepomuk/ResourceManager>
#include "syncfile.h"
namespace Soprano {
class Node;
class Statement;
+ class Model;
}
namespace Nepomuk {
@@ -40,7 +42,8 @@
static int NextId;
public :
IdentificationProcess();
- IdentificationProcess( const SyncFile & sf );
+ IdentificationProcess( const SyncFile & sf,
+ Soprano::Model * model = \
Nepomuk::ResourceManager::instance()->mainModel() );
struct ResourceStruct {
QUrl uri;
@@ -63,9 +66,12 @@
bool done() const;
+ Soprano::Model * model() const;
+
private:
SyncFile m_syncFile;
int m_id;
+ Soprano::Model * m_model;
void load( QList<Soprano::Statement>& allStatements );
};
--- trunk/playground/base/nepomuk-kde/backupsync/service/identifier.cpp \
#1134920:1134921 @@ -19,6 +19,7 @@
#include "identifier.h"
#include "identificationprocess.h"
+#include "mergerequest.h"
#include <QtCore/QMutexLocker>
#include <QtCore/QHashIterator>
@@ -32,15 +33,13 @@
Nepomuk::Identifier::Identifier(QObject* parent): QThread(parent)
{
start();
-
- m_model = Nepomuk::ResourceManager::instance()->mainModel();
}
Nepomuk::Identifier::~Identifier()
{
- stop();
- quit();
+ //stop();
+ //quit();
}
@@ -87,8 +86,13 @@
identifyAll( ip );
LogFile lf = ip.convert();
- emit processed( lf );
+ if( !lf.empty() ) {
+ kDebug() << "sending MergeRequest";
+ MergeRequest mergeRequest( lf, ip.model() );
+ emit processed( mergeRequest );
+ }
+
if( !ip.done() ) {
QMutexLocker lock( &m_processMutex );
m_processes[ ip.id() ] = ip;
@@ -167,7 +171,7 @@
//
//Perform the query
//
- Soprano::QueryResultIterator iter = m_model->executeQuery( query, \
Soprano::Query::QueryLanguageSparql ); + Soprano::QueryResultIterator iter = \
ip.model()->executeQuery( query, Soprano::Query::QueryLanguageSparql );
if( iter.next() ) {
newUri = iter[ "r" ].uri();
@@ -201,7 +205,7 @@
QString query = QString( "select ?r where { ?r nie:url %1 . }" )
.arg( Soprano::Node( oldUri ).toN3() );
- Soprano::QueryResultIterator it = m_model->executeQuery( query, \
Soprano::Query::QueryLanguageSparql ); + Soprano::QueryResultIterator it = \
ip.model()->executeQuery( query, Soprano::Query::QueryLanguageSparql );
if( it.next() ) {
ip.hash[ oldUri ] = it["r"].uri();
@@ -223,11 +227,4 @@
return true;
}
-
-//TODO: Possible set mutexes for m_model
-void Nepomuk::Identifier::setModel(Soprano::Model* model)
-{
- m_model = model;
-}
-
#include "identifier.moc"
--- trunk/playground/base/nepomuk-kde/backupsync/service/identifier.h \
#1134920:1134921 @@ -38,6 +38,7 @@
class IdentificationProcess;
class SyncFile;
class LogFile;
+ class MergeRequest;
class Identifier : public QThread
{
@@ -51,7 +52,7 @@
Q_SIGNALS:
Q_SCRIPTABLE void identified( int id, const QUrl & oldUri, const QUrl & \
newUri ); Q_SCRIPTABLE void notIdentified( int id, const QUrl & uri );
- void processed( const LogFile & lf );
+ void processed( const MergeRequest & mergeRequests );
public Q_SLOTS:
int process( const SyncFile & sf );
@@ -64,7 +65,6 @@
Q_SCRIPTABLE bool identify( int id, const QUrl & oldUri, const QUrl & newUri \
);
void stop();
- void setModel( Soprano::Model * model );
protected:
virtual void run();
@@ -79,8 +79,6 @@
QHash< int, IdentificationProcess > m_processes;
QMutex m_processMutex;
- Soprano::Model * m_model;
-
void identify( IdentificationProcess & ip, const QUrl & uri );
void identifyAll( IdentificationProcess & ip );
};
--- trunk/playground/base/nepomuk-kde/backupsync/service/logfile.cpp #1134920:1134921
@@ -36,6 +36,7 @@
namespace {
+
//TODO: Use Soprano Parser Plugin
Soprano::Node fromN3(const QString & s)
{
@@ -135,6 +136,7 @@
//Log File
+
Nepomuk::LogFile::LogFile()
: d( new LogFileData )
{
@@ -149,6 +151,19 @@
}
+Nepomuk::LogFile::LogFile(const Nepomuk::LogFile& rhs)
+ : d( rhs.d )
+{
+ kDebug() << "Copy constructor";
+}
+
+
+Nepomuk::LogFile::~LogFile()
+{
+
+}
+
+
bool Nepomuk::LogFile::load()
{
return load( d->m_url );
@@ -335,70 +350,4 @@
m_Records = final;
sort();
}
-*/
-/*
-bool compare(const Record &l, const Record & r) {
- //Compares both. If comparable returns true.
- if( l.added != r.added )
- return false;
-
- if( l.st.subject() != r.st.subject() )
- return false;
- // Subject might not match on different systems as URI's are different.
- // need to run through the identifier first.
-
- if( l.st.predicate() != r.st.predicate() )
- return false;
-
- return true;
-}
-
-void resolve(QList<Record> & list)
-{
- Q_UNUSED(list);
- //Record & r1 = list[i];
- //Record & r2 = list[j];
-
- //if( r1.dateTime > r2.dateTime ) {
- //}
-}
-
-void LogFile::merge ( const LogFile& lf )
-{
- QList<Record> list;
- list.append(m_Records);
- list.append(lf.m_Records);
-
- QList<Record> temp;
- QList<Record> final;
- while( list.empty() == false )
- {
- Record r = list.front();
- list.pop_front();
-
- temp.push_back(r);
-
- QMutableListIterator<Record> j(list);
- while( j.hasNext() )
- {
- Record e = j.next();
- if( compare(r, e) ) {
- j.remove();
- temp.push_back(e);
- }
- }
-
- //Perform whatever resolution actions and add to final
- //qSort(temp);
- //final.push_back( temp.back() );
- resolve(temp);
- final.push_back( temp.front() );
-
- temp.clear();
- }
-
- //list contains merged after resolution.
- m_Records = list;
-}
-*/
-
+*/
\ No newline at end of file
--- trunk/playground/base/nepomuk-kde/backupsync/service/logfile.h #1134920:1134921
@@ -64,6 +64,8 @@
public :
LogFile();
LogFile( const QUrl& url );
+ LogFile( const LogFile & rhs );
+ virtual ~LogFile();
int size();
@@ -120,4 +122,6 @@
}
+Q_DECLARE_METATYPE( Nepomuk::LogFile );
+
#endif // LOGFILE_H
--- trunk/playground/base/nepomuk-kde/backupsync/service/merger.cpp #1134920:1134921
@@ -41,17 +41,15 @@
: QThread( parent )
{
start();
-
- setModel( Nepomuk::ResourceManager::instance()->mainModel() );
}
Nepomuk::Merger::~Merger()
{
- stop();
+ //stop();
// Doesn't quit just stop the event loop? Since there isn't any
// event loop this call is useless
- quit();
+ //quit();
}
@@ -62,13 +60,12 @@
}
-int Nepomuk::Merger::merge(const Nepomuk::LogFile& lf)
+int Nepomuk::Merger::merge(const Nepomuk::MergeRequest & mergeRequest )
{
m_queueMutex.lock();
- MergeRequest mr( lf );
- int id = mr.id();
- m_queue.enqueue( mr );
+ int id = mergeRequest.id();
+ m_queue.enqueue( mergeRequest );
m_queueMutex.unlock();
m_queueWaiter.wakeAll();
@@ -192,7 +189,7 @@
QUrl propertyUri = st.predicate().uri();
Soprano::Node object = st.object();
- Nepomuk::Resource res( resourceUri, QUrl(), m_resourceManger );
+ Nepomuk::Resource res( resourceUri, QUrl(), mr.resourceManager() );
if( r.added ) {
res.setProperty( propertyUri, Nepomuk::Variant::fromNode( object ) );
@@ -219,11 +216,4 @@
}
-void Nepomuk::Merger::setModel(Soprano::Model* model)
-{
- m_model = model;
- m_resourceManger = Nepomuk::ResourceManager::createManagerForModel( m_model );
-}
-
-
#include "merger.moc"
\ No newline at end of file
--- trunk/playground/base/nepomuk-kde/backupsync/service/merger.h #1134920:1134921
@@ -37,6 +37,7 @@
class LogFile;
class ResourceManager;
+ class MergeRequest;
class Merger : public QThread
{
@@ -49,11 +50,9 @@
void stop();
public Q_SLOTS:
- int merge( const LogFile & lf );
+ int merge( const MergeRequest & mergeRequest );
void merge( int id, const Record & theirRecord, const Record & ownRecord );
- void setModel( Soprano::Model * model );
-
Q_SIGNALS:
void notMerged( int id, const Record & theirRecord, const Record & ownRecord \
);
@@ -70,9 +69,6 @@
QHash<int, MergeRequest> m_processes;
QMutex m_processMutex;
- Soprano::Model * m_model;
- Nepomuk::ResourceManager* m_resourceManger;
-
void merge( MergeRequest & mr );
};
--- trunk/playground/base/nepomuk-kde/backupsync/service/mergerequest.cpp \
#1134920:1134921 @@ -37,22 +37,44 @@
}
-Nepomuk::MergeRequest::MergeRequest(const Nepomuk::LogFile& lf)
- : m_id( NextId++ )
+Nepomuk::MergeRequest::MergeRequest(const Nepomuk::LogFile& lf, Soprano::Model* \
model) + : m_id( NextId++ ),
+ m_model( model )
{
hash = makeHash( lf.allRecords() );
+ // The records are stored according to dateTime
- // The records are stored according to dateTime
+ const QList<Record>& allRecords = lf.allRecords();
+ if( !allRecords.empty() ) {
m_minDateTime = lf.allRecords().first().dateTime;
}
+ else {
+ //TODO: Set min date time
+ m_minDateTime = QDateTime( QDate( 2000, 1, 1), QTime() );
+ }
+ Nepomuk::ResourceManager * mainManager = Nepomuk::ResourceManager::instance();
+ if( model == mainManager->mainModel() ) {
+ m_resourceManager = mainManager;
+ }
+ else {
+ m_resourceManager = Nepomuk::ResourceManager::createManagerForModel( m_model \
); + }
+}
+
+
Nepomuk::MergeRequest::MergeRequest()
{
m_id = -1;
}
+Nepomuk::MergeRequest::~MergeRequest()
+{
+}
+
+
int Nepomuk::MergeRequest::id() const
{
return m_id;
@@ -70,4 +92,14 @@
return m_minDateTime;
}
+Soprano::Model* Nepomuk::MergeRequest::model() const
+{
+ return m_model;
+}
+
+Nepomuk::ResourceManager* Nepomuk::MergeRequest::resourceManager() const
+{
+ return m_resourceManager;
+}
+
--- trunk/playground/base/nepomuk-kde/backupsync/service/mergerequest.h \
#1134920:1134921 @@ -25,8 +25,14 @@
#include <QtCore/QMultiHash>
#include <QtCore/QDateTime>
+#include <Nepomuk/ResourceManager>
+
class Record;
+namespace Soprano {
+ class Model;
+}
+
namespace Nepomuk {
class LogFile;
@@ -34,8 +40,10 @@
class MergeRequest
{
public :
- MergeRequest( const LogFile & lf );
+ MergeRequest( const LogFile & lf,
+ Soprano::Model * model = \
Nepomuk::ResourceManager::instance()->mainModel() ); MergeRequest();
+ virtual ~MergeRequest();
typedef QPair<QUrl, QUrl> SPPair;
typedef QMultiHash<SPPair, Record> MergeHash;
@@ -47,16 +55,25 @@
MergeHash hash;
+ Soprano::Model * model() const;
+ Nepomuk::ResourceManager * resourceManager() const;
+
private :
int m_id;
static int NextId;
QDateTime m_minDateTime;
+ Soprano::Model * m_model;
+ Nepomuk::ResourceManager * m_resourceManager;
+
public :
static MergeHash makeHash( const QList<Record> & records );
};
}
+//Q_DECLARE_METATYPE( Nepomuk::MergeRequest );
+
+
#endif // MERGEREQUEST_H
--- trunk/playground/base/nepomuk-kde/backupsync/service/syncmanager.cpp \
#1134920:1134921 @@ -21,6 +21,7 @@
#include "identifier.h"
#include "merger.h"
#include "syncfile.h"
+#include "mergerequest.h"
#include <QtDBus/QDBusConnection>
@@ -29,8 +30,8 @@
m_identifier( ident ),
m_merger( merger )
{
- connect( m_identifier, SIGNAL( processed( LogFile ) ),
- m_merger, SLOT( merge( LogFile ) ) );
+ connect( m_identifier, SIGNAL( processed( MergeRequest ) ),
+ m_merger, SLOT( merge( MergeRequest ) ) );
// Register DBus Object
QDBusConnection con = QDBusConnection::sessionBus();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic