00001 #ifndef CLASS_SOFT_DB_CPP
00002 #define CLASS_SOFT_DB_CPP
00003
00004 #include <iostream.h>
00005 #include <qtextstream.h>
00006 #include <qfile.h>
00007 #include <qurloperator.h>
00008 #include <qptrvector.h>
00009 #include <qdom.h>
00010 #include "../header/database.h"
00011
00012 database::database()
00013 {
00014 QFile qf_Devel( "/home/peter/Projects/class-soft/src/config/class.xml" );
00015 QFile qf_Dist( "/etc/class-soft/class.xml" );
00016 QFile qf_User( "~/.class-soft/class.xml" );
00017 QString qs_XML( "" );
00018
00019 if( qf_Dist.exists() )
00020 {
00021 qf_Dist.open( IO_ReadOnly );
00022 QTextStream qts_WormReader( &qf_Dist );
00023 qs_XML = qts_WormReader.read();
00024 qf_Dist.close();
00025
00026 qdd_Xml.setContent( qs_XML );
00027 } else if( qf_User.exists() ) {
00028
00029 qf_User.open( IO_ReadOnly );
00030 QTextStream qts_WormReader( &qf_User );
00031 qs_XML = qts_WormReader.read();
00032 qf_User.close();
00033
00034 qdd_Xml.setContent( qs_XML );
00035
00036 } else if( qf_Devel.exists() )
00037 {
00038
00039 qf_Devel.open( IO_ReadOnly );
00040 QTextStream qts_WormReader( &qf_Devel );
00041 qs_XML = qts_WormReader.read();
00042 qf_Devel.close();
00043
00044 qdd_Xml.setContent( qs_XML );
00045
00046 } else {
00047 cerr << "Unable to open class.xml for read in database::database()!\n";
00048 exit(1);
00049 }
00050 }
00051
00052 database::database( const QString qs_Location )
00053 {
00054 QFile qf_Worms( qs_Location );
00055 QString qs_XML( "" );
00056
00057 if( qf_Worms.exists() )
00058 {
00059 qf_Worms.open( IO_ReadOnly );
00060 QTextStream qts_WormReader( &qf_Worms );
00061 qs_XML = qts_WormReader.read();
00062 qf_Worms.close();
00063
00064 qdd_Xml.setContent( qs_XML );
00065 } else {
00066 cerr << "Unable to open class.xml for read in database::database( \"" << qs_Location << "\"!\n";
00067 exit(1);
00068 }
00069 }
00070
00071 database::~database()
00072 {
00073
00074 }
00075
00076 QPtrVector<QString> database::get_software( const QString qs_Software )
00077 {
00078 QDomNodeList qdnl_List;
00079 QDomNode qdn_Item;
00080 QDomElement qde_Tag;
00081 QDomAttr qda_Package;
00082 QDomAttr qda_Other;
00083 QPtrVector<QString> qpv_Return( 5 );
00084 QString *qs_p_Temp;
00085 int x = 0;
00086
00087 qdnl_List = qdd_Xml.elementsByTagName( "software" );
00088
00089 qdn_Item = qdnl_List.item(x);
00090 qde_Tag = qdn_Item.toElement();
00091 qda_Package = qde_Tag.attributeNode( "package" );
00092 while( (qda_Package.value() != qs_Software) && (x < qdnl_List.count() - 1) )
00093 {
00094 x++;
00095 qdn_Item = qdnl_List.item(x);
00096 qde_Tag = qdn_Item.toElement();
00097 qda_Package = qde_Tag.attributeNode( "package" );
00098 }
00099
00100 if( qda_Package.value() == qs_Software )
00101 {
00102 qs_p_Temp = new QString( qda_Package.value() );
00103 qpv_Return.insert( 0, qs_p_Temp );
00104
00105 qda_Other = qde_Tag.attributeNode( "name" );
00106 qs_p_Temp = new QString( qda_Other.value() );
00107 qpv_Return.insert( 1, qs_p_Temp );
00108
00109 qda_Other = qde_Tag.attributeNode( "version" );
00110 qs_p_Temp = new QString( qda_Other.value() );
00111 qpv_Return.insert( 2, qs_p_Temp );
00112
00113 qda_Other = qde_Tag.attributeNode( "description" );
00114 qs_p_Temp = new QString( qda_Other.value() );
00115 qpv_Return.insert( 3, qs_p_Temp );
00116
00117 qda_Other = qde_Tag.attributeNode( "uri" );
00118 qs_p_Temp = new QString( qda_Other.value() );
00119 qpv_Return.insert( 4, qs_p_Temp );
00120 } else {
00121 qs_p_Temp = new QString( "" );
00122 for( x = 0; x < 5; x++ )
00123 qpv_Return.insert( x, qs_p_Temp );
00124 }
00125 return qpv_Return;
00126 }
00127
00128 QPtrVector<QString> database::get_class( const QString qs_Class )
00129 {
00130 QDomNodeList qdnl_List;
00131 QDomNode qdn_Item;
00132 QDomElement qde_Tag;
00133 QDomAttr qda_Division;
00134 QDomAttr qda_Number;
00135 QDomAttr qda_Other;
00136 QPtrVector<QString> qpv_Return(0);
00137 QString *qs_p_Temp;
00138 int x = 0;
00139
00140 qdnl_List = qdd_Xml.elementsByTagName( "class" );
00141
00142 qdn_Item = qdnl_List.item(x);
00143 qde_Tag = qdn_Item.toElement();
00144 qda_Division = qde_Tag.attributeNode( "division" );
00145 qda_Number = qde_Tag.attributeNode( "number" );
00146 while( (qda_Division.value() + qda_Number.value() != qs_Class) && (x < qdnl_List.count() - 1) )
00147 {
00148 x++;
00149 qdn_Item = qdnl_List.item(x);
00150 qde_Tag = qdn_Item.toElement();
00151 qda_Division = qde_Tag.attributeNode( "division" );
00152 qda_Number = qde_Tag.attributeNode( "number" );
00153 }
00154
00155 if( qda_Division.value() + qda_Number.value() == qs_Class )
00156 {
00157 qdnl_List = qdn_Item.childNodes();
00158 qpv_Return.resize(qdnl_List.count() + 1);
00159 qda_Other = qde_Tag.attributeNode( "name" );
00160 qs_p_Temp = new QString( qda_Other.value() );
00161 qpv_Return.insert( 0, qs_p_Temp );
00162 for( x = 0; x < qdnl_List.count(); x++ )
00163 {
00164 qdn_Item = qdnl_List.item(x);
00165 qde_Tag = qdn_Item.toElement();
00166 qda_Other = qde_Tag.attributeNode( "package" );
00167 qs_p_Temp = new QString( qda_Other.value() );
00168 qpv_Return.insert( x+1, qs_p_Temp );
00169 }
00170 }
00171
00172 return qpv_Return;
00173 }
00174
00175 QPtrVector<QString> database::search_class( const QString qs_String )
00176 {
00177 QDomNodeList qdnl_List;
00178 QDomNode qdn_Item;
00179 QDomElement qde_Tag;
00180 QDomAttr qda_Division;
00181 QDomAttr qda_Number;
00182 QDomAttr qda_Name;
00183 QPtrVector<QString> qpv_Return(1);
00184 QString *qs_p_Temp;
00185 int x = 0;
00186
00187 qs_p_Temp = new QString( "" );
00188 qpv_Return.insert( 0, qs_p_Temp );
00189
00190 qdnl_List = qdd_Xml.elementsByTagName( "class" );
00191 for( x = 0; x < qdnl_List.count(); x++ )
00192 {
00193 qdn_Item = qdnl_List.item(x);
00194 qde_Tag = qdn_Item.toElement();
00195 qda_Name = qde_Tag.attributeNode( "name" );
00196 if( 0 < (qda_Name.value()).contains( qs_String, false ) )
00197 {
00198 if( qpv_Return.size() != 1 || *(qpv_Return[0]) != "" )
00199 {
00200 qpv_Return.resize( qpv_Return.size() + 1 );
00201 }
00202 qs_p_Temp = new QString( qda_Division.value() + qda_Number.value() );
00203 qpv_Return.insert( qpv_Return.size() - 1, qs_p_Temp );
00204 }
00205 }
00206
00207 return qpv_Return;
00208 }
00209
00210 QPtrVector<QString> database::search_software( const QString qs_String )
00211 {
00212 QDomNodeList qdnl_List;
00213 QDomNode qdn_Item;
00214 QDomElement qde_Tag;
00215 QDomAttr qda_Division;
00216 QDomAttr qda_Number;
00217 QDomAttr qda_Name;
00218 QPtrVector<QString> qpv_Return(1);
00219 QString *qs_p_Temp;
00220 int x = 0;
00221
00222 qs_p_Temp = new QString( "" );
00223 qpv_Return.insert( 0, qs_p_Temp );
00224
00225 qdnl_List = qdd_Xml.elementsByTagName( "software" );
00226 for( x = 0; x < qdnl_List.count(); x++ )
00227 {
00228 qdn_Item = qdnl_List.item(x);
00229 qde_Tag = qdn_Item.toElement();
00230 qda_Name = qde_Tag.attributeNode( "package" );
00231 if( 0 < (qda_Name.value()).contains( qs_String, false ) )
00232 {
00233 if( qpv_Return.size() != 1 || *(qpv_Return[0]) != "" )
00234 {
00235 qpv_Return.resize( qpv_Return.size() + 1 );
00236 }
00237 qs_p_Temp = new QString( qda_Name.value() );
00238 qpv_Return.insert( qpv_Return.size() - 1, qs_p_Temp );
00239 }
00240 }
00241
00242 return qpv_Return;
00243 }
00244
00245 bool database::update( const QString qs_Url )
00246 {
00247
00248
00249 return false;
00250 }
00251
00252 QPtrVector<QString> database::get_all_classes()
00253 {
00254 QDomNodeList qdnl_List;
00255 QDomNode qdn_Item;
00256 QDomElement qde_Tag;
00257 QDomAttr qda_Division;
00258 QDomAttr qda_Number;
00259 QPtrVector<QString> qpv_Return(0);
00260 QString *qs_p_Temp;
00261 int x = 0;
00262
00263 qdnl_List = qdd_Xml.elementsByTagName( "class" );
00264 qpv_Return.resize( qdnl_List.count() );
00265 for( x = 0; x < qdnl_List.count(); x++ )
00266 {
00267 qdn_Item = qdnl_List.item(x);
00268 qde_Tag = qdn_Item.toElement();
00269 qda_Division = qde_Tag.attributeNode( "division" );
00270 qda_Number = qde_Tag.attributeNode( "number" );
00271
00272 qs_p_Temp = new QString( qda_Division.value() + qda_Number.value() );
00273 qpv_Return.insert( x, qs_p_Temp );
00274 }
00275
00276 return qpv_Return;
00277 }
00278
00279 QPtrVector<QString> database::get_all_software( QString qs_Class )
00280 {
00281 QDomNodeList qdnl_List;
00282 QDomNode qdn_Item;
00283 QDomElement qde_Tag;
00284 QDomAttr qda_Division;
00285 QDomAttr qda_Number;
00286 QDomAttr qda_Other;
00287 QPtrVector<QString> qpv_Return(0);
00288 QString *qs_p_Temp;
00289 int x = 0;
00290
00291 qdnl_List = qdd_Xml.elementsByTagName( "class" );
00292
00293 qdn_Item = qdnl_List.item(x);
00294 qde_Tag = qdn_Item.toElement();
00295 qda_Division = qde_Tag.attributeNode( "division" );
00296 qda_Number = qde_Tag.attributeNode( "number" );
00297 while( (qda_Division.value() + qda_Number.value() != qs_Class) && (x < qdnl_List.count() - 1) )
00298 {
00299 x++;
00300 qdn_Item = qdnl_List.item(x);
00301 qde_Tag = qdn_Item.toElement();
00302 qda_Division = qde_Tag.attributeNode( "division" );
00303 qda_Number = qde_Tag.attributeNode( "number" );
00304 }
00305
00306 if( qda_Division.value() + qda_Number.value() == qs_Class )
00307 {
00308 qdnl_List = qdn_Item.childNodes();
00309 qpv_Return.resize(qdnl_List.count());
00310 for( x = 0; x < qdnl_List.count(); x++ )
00311 {
00312 qdn_Item = qdnl_List.item(x);
00313 qde_Tag = qdn_Item.toElement();
00314 qda_Other = qde_Tag.attributeNode( "package" );
00315 qs_p_Temp = new QString( qda_Other.value() );
00316 qpv_Return.insert( x, qs_p_Temp );
00317 }
00318 }
00319
00320 return qpv_Return;
00321 }
00322
00323 #endif