NepomukDaemons
util.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "util.h"
00021
00022 #include <strigi/variant.h>
00023 #include <strigi/fieldtypes.h>
00024
00025 #include <QtCore/QUrl>
00026 #include <QtCore/QFile>
00027 #include <QtCore/QFileInfo>
00028 #include <QtCore/QUuid>
00029 #include <QtCore/QDebug>
00030
00031 #include <Soprano/Index/CLuceneIndex>
00032 #include <Soprano/Model>
00033 #include <Soprano/Vocabulary/RDF>
00034
00035
00036 #define STRIGI_NS "http://www.strigi.org/data#"
00037
00038 QUrl Strigi::Soprano::Util::fieldUri( const std::string& s )
00039 {
00040 QString qKey = QString::fromUtf8( s.c_str() );
00041 QUrl url;
00042
00043
00044 if ( qKey.contains( ":/" ) ) {
00045 url = qKey;
00046 }
00047 else {
00048 url = STRIGI_NS + qKey;
00049 }
00050
00051
00052 if ( url.isRelative() ) {
00053 url.setScheme( "http" );
00054 }
00055
00056 return url;
00057 }
00058
00059
00060 QUrl Strigi::Soprano::Util::fileUrl( const std::string& filename )
00061 {
00062 QUrl url = QUrl::fromLocalFile( QFileInfo( QString::fromUtf8( filename.c_str() ) ).absoluteFilePath() );
00063 url.setScheme( "file" );
00064 return url;
00065 }
00066
00067
00068 std::string Strigi::Soprano::Util::fieldName( const QUrl& uri )
00069 {
00070 QString s = uri.toString();
00071 if ( s.startsWith( STRIGI_NS ) ) {
00072 s = s.mid( strlen( STRIGI_NS ) );
00073 }
00074 return s.toUtf8().data();
00075 }
00076
00077
00078 TString Strigi::Soprano::Util::convertSearchField( const std::string& field )
00079 {
00080 if ( QString::fromUtf8( field.c_str() ) == ::Soprano::Index::CLuceneIndex::defaultSearchField() ) {
00081 return TString::fromUtf8( field.c_str() );
00082 }
00083 else if ( QString( field.c_str() ) == ::Soprano::Vocabulary::RDF::type().toString() ) {
00084
00085 static TString strigiType( "http://strigi.sourceforge.net/fields#rdf-string-type" );
00086 return strigiType;
00087 }
00088 else {
00089 return fieldUri( field ).toString();
00090 }
00091 }
00092
00093
00094 QUrl Strigi::Soprano::Util::uniqueUri( const QString& ns, ::Soprano::Model* model )
00095 {
00096 QUrl uri;
00097 do {
00098 QString uid = QUuid::createUuid().toString();
00099 uri = ( ns + uid.mid( 1, uid.length()-2 ) );
00100 } while ( model->containsAnyStatement( ::Soprano::Statement( uri, ::Soprano::Node(), ::Soprano::Node() ) ) );
00101 return uri;
00102 }
00103
00104
00105 Strigi::Variant Strigi::Soprano::Util::nodeToVariant( const ::Soprano::Node& node )
00106 {
00107 if ( node.isLiteral() ) {
00108 switch( node.literal().type() ) {
00109 case QVariant::Int:
00110 case QVariant::UInt:
00111 case QVariant::LongLong:
00112 case QVariant::ULongLong:
00113 return Strigi::Variant( node.literal().toInt() );
00114
00115 case QVariant::Bool:
00116 return Strigi::Variant( node.literal().toBool() );
00117
00118 default:
00119 return Strigi::Variant( node.literal().toString().toUtf8().data() );
00120 }
00121 }
00122 else {
00123 qWarning() << "(Soprano::Util::nodeToVariant) cannot convert non-literal node to variant.";
00124 return Strigi::Variant();
00125 }
00126 }