00001
00002
00003 #include "readmetadata.h"
00004
00005 #include "trappervector.h"
00006 #include <ostream>
00007
00008 using namespace std;
00009
00010
00011
00012 ReadMetaData::ReadMetaData( const ReadMetaData& other ) : GeneralData(other)
00013 {
00014 readRecno = other.readRecno;
00015 name_ = other.name_;
00016 mate_ = other.mate_;
00017 matelen_ = other.matelen_;
00018 strand_ = other.strand_;
00019 beginGood_ = other.beginGood_;
00020 endGood_ = other.endGood_;
00021 tc_vec = other.tc_vec;
00022 }
00023
00024
00025 ReadMetaData::~ReadMetaData()
00026 {}
00027
00028 void ReadMetaData::print_debug_info()
00029 {
00030 cerr<<"This is class "<<uniqueName()<<endl;
00031 cerr<<"recno: "<<getRecno()<<endl;
00032 }
00033
00034 void ReadMetaData::readStream( QDataStream & stream )
00035 {
00036 QIODevice * dev = stream.device();
00037 Q_ASSERT( dev );
00038
00039
00040 stream>>readRecno;
00041 QString tmp;
00042 stream>>tmp;
00043 name_ = tmp.ascii();
00044 stream>>tmp;
00045 mate_ = tmp.ascii();
00046 stream>>matelen_;
00047 stream>>tmp;
00048 strand_ = tmp.ascii();
00049 stream>>beginGood_;
00050 stream>>endGood_;
00051 tc_vec.stlVector().clear();
00052 stream>>tc_vec;
00053 }
00054
00055 void ReadMetaData::writeStream( QDataStream & stream )
00056 {
00057 QIODevice * dev = stream.device();
00058 Q_ASSERT( dev );
00059 if ( ! ( IO_WriteOnly & dev->mode() ) )
00060 {
00061 cerr << "data stream should be writeonly" << endl;
00062 exit(1);
00063 }
00064
00065 stream<<readRecno;
00066
00067 QString tmp;
00068 tmp = name_;
00069 stream<<tmp;
00070 tmp = mate_;
00071 stream<<tmp;
00072 stream<<matelen_;
00073 tmp = strand_;
00074 stream<<tmp;
00075 stream<<beginGood_;
00076 stream<<endGood_;
00077 stream<<tc_vec;
00078 }
00079
00080 void ReadMetaData::readAttributes( const QXmlAttributes& attr )
00081 {
00082 if ( attr.value("name") != "" ) {
00083 name_ = attr.value("name").ascii();
00084 }
00085 if ( attr.value("mate") != "" ) {
00086 mate_ = attr.value("mate").ascii();
00087 }
00088 if ( attr.value("matelen") != "" ) {
00089 matelen_ = attr.value("matelen").toInt();
00090 }
00091 if ( attr.value("strand") != "" ) {
00092 strand_ = attr.value("strand").ascii();
00093 }
00094 if ( attr.value("beginGood") != "" ) {
00095 beginGood_ = attr.value("beginGood").toInt();
00096 }
00097 if ( attr.value("endGood") != "" ) {
00098 endGood_ = attr.value("endGood").toInt();
00099 }
00100 if ( attr.value("tc") != "" ) {
00101 QString str = attr.value("tc");
00102 tc_vec.readString(str);
00103 }
00104
00105 }
00106
00107 void ReadMetaData::writeXml( ostream& stream )
00108 {
00109 stream<<"<ReadMetaData "
00110 <<"name=\""<<name_<<"\" "
00111 <<"mate=\""<<mate_<<"\" "
00112 <<"matelen=\""<<matelen_<<"\" "
00113 <<"strand=\""<<strand_<<"\" "
00114 <<"beginGood=\""<<beginGood_<<"\" "
00115 <<"endGood=\""<<endGood_<<"\"";
00116 if ( tc_vec.stlVector().size() > 0 ) {
00117 stream<<" tc=\"";
00118 for( size_t i = 0; i < tc_vec.stlVector().size(); i++ ) {
00119 stream<<' '<<tc_vec.stlVector()[i];
00120 }
00121 stream<<"\"";
00122 }
00123 stream<<">\n";
00124 }
00125
00126 TrDb::IndexMap ReadMetaData::getIndexMap()
00127 {
00128
00129 TrDb::Index i1 = {
00130 &ReadMetaData::bt_compare_name,
00131 &ReadMetaData::getName,
00132 QString("name"),
00133 NULL
00134 };
00135 iMap.insert( make_pair( i1.name.ascii(), i1 ) );
00136
00137 return iMap;
00138 }
00139
00140 int ReadMetaData::bt_compare_name( DB * , const DBT *dbt1, const DBT *dbt2)
00141 {
00142
00143
00144 char* seqData1 = ( char* ) dbt1->data;
00145 char* seqData2 = ( char* ) dbt2->data;
00146
00147
00148
00149 return strcmp(seqData1, seqData2);
00150 }
00151
00152 int ReadMetaData::getName(Db * , const Dbt * ,
00153 const Dbt *pdata, Dbt *skey)
00154 {
00155
00156 memset(skey, 0, sizeof(Dbt));
00157
00158
00159 ReadMetaData tmp;
00160 Database::setFromDbt(pdata, &tmp);
00161 char* name = (char*)malloc(sizeof(char)*(tmp.name().length() + 1));
00162 strcpy(name, tmp.name().c_str());
00163 assert( name[ tmp.name().length() ] == '\0' );
00164 skey->set_flags( DB_DBT_APPMALLOC );
00165 skey->set_data( (void*)name );
00166 skey->set_size(sizeof(char)*(strlen(name) + 1) );
00167
00168
00169 return 0;
00170 }