IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, removeMsaObject) { U2OpStatusImpl os; U2MsaDbi* msaDbi = SQLiteObjectDbiTestData::getMsaDbi(); // FIRST ALIGNMENT // Create an alignment U2DataId msaId = msaDbi->createMsaObject("", "Test name", BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), os); CHECK_NO_ERROR(os); // Add alignment info U2StringAttribute attr(msaId, "MSA1 info key", "MSA1 info value"); U2AttributeDbi* attrDbi = SQLiteObjectDbiTestData::getAttributeDbi(); attrDbi->createStringAttribute(attr, os); CHECK_NO_ERROR(os); // Create sequences U2SequenceDbi* sequenceDbi = SQLiteObjectDbiTestData::getSequenceDbi(); U2Sequence seq1; U2Sequence seq2; sequenceDbi->createSequenceObject(seq1, "", os); CHECK_NO_ERROR(os); sequenceDbi->createSequenceObject(seq2, "", os); CHECK_NO_ERROR(os); // Add rows U2MsaRow row1; row1.rowId = 0; row1.sequenceId = seq1.id; row1.gstart = 0; row1.gend = 5; U2MsaGap row1gap1(0, 2); U2MsaGap row1gap2(3, 1); QList<U2MsaGap> row1gaps; row1gaps << row1gap1 << row1gap2; row1.gaps = row1gaps; U2MsaRow row2; row2.rowId = 1; row2.sequenceId = seq2.id; row2.gstart = 2; row2.gend = 4; U2MsaGap row2gap(1, 2); QList<U2MsaGap> row2gaps; row2gaps << row2gap; row2.gaps = row2gaps; QList<U2MsaRow> rows; rows << row1 << row2; msaDbi->addRows(msaId, rows, os); CHECK_NO_ERROR(os); // SECOND ALIGNMENT // Create an alignment U2DataId msaId2 = msaDbi->createMsaObject("", "Test name 2", BaseDNAAlphabetIds::AMINO_DEFAULT(), os); CHECK_NO_ERROR(os); // Add alignment info U2StringAttribute attr2(msaId2, "MSA2 info key", "MSA2 info value"); attrDbi->createStringAttribute(attr2, os); CHECK_NO_ERROR(os); // Create sequences U2Sequence al2Seq; sequenceDbi->createSequenceObject(al2Seq, "", os); CHECK_NO_ERROR(os); // Add rows U2MsaRow al2Row; al2Row.rowId = 0; al2Row.sequenceId = al2Seq.id; al2Row.gstart = 0; al2Row.gend = 15; U2MsaGap al2RowGap(1, 12); QList<U2MsaGap> al2RowGaps; al2RowGaps << al2RowGap; al2Row.gaps = al2RowGaps; QList<U2MsaRow> al2Rows; al2Rows << al2Row; msaDbi->addRows(msaId2, al2Rows, os); CHECK_NO_ERROR(os); // REMOVE THE FIRST ALIGNMENT OBJECT SQLiteObjectDbi* sqliteObjectDbi = SQLiteObjectDbiTestData::getSQLiteObjectDbi(); sqliteObjectDbi->removeObject(msaId, os); // VERIFY THAT THERE IS ONLY THE SECOND ALIGNMENT'S RECORDS LEFT IN TABLES SQLiteDbi* sqliteDbi = SQLiteObjectDbiTestData::getSQLiteDbi(); // "Attribute" SQLiteReadQuery qAttr("SELECT COUNT(*) FROM Attribute WHERE name = ?1", sqliteDbi->getDbRef(), os); qAttr.bindString(1, "MSA1 info key"); qint64 msa1AttrNum = qAttr.selectInt64(); CHECK_EQUAL(0, msa1AttrNum, "MSA1 attributes number"); qAttr.reset(true); qAttr.bindString(1, "MSA2 info key"); qint64 msa2AttrNum = qAttr.selectInt64(); CHECK_EQUAL(1, msa2AttrNum, "MSA2 attributes number"); // "StringAttribute" SQLiteReadQuery qStringAttr("SELECT COUNT(*) FROM StringAttribute WHERE value = ?1", sqliteDbi->getDbRef(), os); qStringAttr.bindString(1, "MSA1 info value"); qint64 msa1StrAttrNum = qStringAttr.selectInt64(); CHECK_EQUAL(0, msa1StrAttrNum, "MSA1 string attributes number"); qStringAttr.reset(true); qStringAttr.bindString(1, "MSA2 info value"); qint64 msa2StrAttrNum = qStringAttr.selectInt64(); CHECK_EQUAL(1, msa2StrAttrNum, "MSA2 string attributes number"); // "MsaRow" SQLiteReadQuery qMsaRow("SELECT COUNT(*) FROM MsaRow WHERE msa = ?1", sqliteDbi->getDbRef(), os); qMsaRow.bindDataId(1, msaId); qint64 msa1Rows = qMsaRow.selectInt64(); CHECK_EQUAL(0, msa1Rows, "number of rows in MSA1"); qMsaRow.reset(true); qMsaRow.bindDataId(1, msaId2); qint64 msa2Rows = qMsaRow.selectInt64(); CHECK_EQUAL(1, msa2Rows, "number of rows in MSA2"); // "MsaRowGap" SQLiteReadQuery qMsaRowGap("SELECT COUNT(*) FROM MsaRowGap WHERE msa = ?1", sqliteDbi->getDbRef(), os); qMsaRowGap.bindDataId(1, msaId); qint64 msa1Gaps = qMsaRowGap.selectInt64(); CHECK_EQUAL(0, msa1Gaps, "number of gaps in MSA1 rows"); qMsaRowGap.reset(true); qMsaRowGap.bindDataId(1, msaId2); qint64 msa2Gaps = qMsaRowGap.selectInt64(); CHECK_EQUAL(1, msa2Gaps, "number of gaps in MSA2 rows"); // "Sequence" SQLiteReadQuery qSeq("SELECT COUNT(*) FROM Sequence WHERE object = ?1", sqliteDbi->getDbRef(), os); qSeq.bindDataId(1, seq1.id); qint64 msa1seq1 = qSeq.selectInt64(); CHECK_EQUAL(0, msa1seq1, "seq1 of msa1"); qSeq.reset(true); qSeq.bindDataId(1, seq2.id); qint64 msa1seq2 = qSeq.selectInt64(); CHECK_EQUAL(0, msa1seq2, "seq2 of msa1"); qSeq.reset(true); qSeq.bindDataId(1, al2Seq.id); qint64 msa2seq = qSeq.selectInt64(); CHECK_EQUAL(1, msa2seq, "seq of msa2"); // "Msa" SQLiteReadQuery qMsa("SELECT COUNT(*) FROM Msa WHERE object = ?1", sqliteDbi->getDbRef(), os); qMsa.bindDataId(1, msaId); qint64 msa1records = qMsa.selectInt64(); CHECK_EQUAL(0, msa1records, "number of MSA1 records"); qMsa.reset(true); qMsa.bindDataId(1, msaId2); qint64 msa2records = qMsa.selectInt64(); CHECK_EQUAL(1, msa2records, "number of MSA2 records"); // "Object" SQLiteReadQuery qObj("SELECT COUNT(*) FROM Object WHERE id = ?1", sqliteDbi->getDbRef(), os); qObj.bindDataId(1, msaId); qint64 msa1objects = qObj.selectInt64(); CHECK_EQUAL(0, msa1objects, "number of MSA1 objects"); qObj.reset(true); qObj.bindDataId(1, msaId2); qint64 msa2objects = qObj.selectInt64(); CHECK_EQUAL(1, msa2objects, "number of MSA2 objects"); // Remove the second alignment sqliteObjectDbi->removeObject(msaId2, os); }
void TUIOSender::frame() { QString str_ID,str_x,str_y; // for use in debug window QString aliveCursors = "",aliveObjects = "" ; if(!transmitSocket) { std::cout << "Socket Not Initialized " << "\n" ; return; } int currentTime = mywin->t.elapsed() ; int dt = lastTime - currentTime ; lastTime = currentTime ; char pbuffer[OUTPUT_BUFFER_SIZE]; // for set messages char qbuffer[OUTPUT_BUFFER_SIZE]; // for alive and fseq message char qObjbuffer[OUTPUT_BUFFER_SIZE]; // for alive and fseq message osc::OutboundPacketStream p( pbuffer, OUTPUT_BUFFER_SIZE ); osc::OutboundPacketStream q( qbuffer, OUTPUT_BUFFER_SIZE ); osc::OutboundPacketStream qObj( qObjbuffer, OUTPUT_BUFFER_SIZE ); p.Clear(); p << osc::BeginBundle(); q.Clear(); q << osc::BeginBundle(); qObj.Clear(); qObj << osc::BeginBundle(); q << osc::BeginMessage( "/tuio/2Dcur" ) << "alive" ; qObj << osc::BeginMessage( "/tuio/2Dobj" ) << "alive" ; if (Verbose) std::cout << "Table is active \t" << mywin->table->OSCdata->active<<"\n" ; if (mywin->table->OSCdata->active ) { TouchData *d = mywin->table->OSCdata ; if (mywin->table->OSCdata->packetUpdate) { float dx = d->X - d->LX ; float dy = d->Y - d->LY ; float m = sqrtf((dx*dx) + (dy*dy)); p << osc::BeginMessage( "/tuio/2Dcur" ) << "set" << d->ID << (d->X)/mywin->table->w << (d->Y)/mywin->table->h << dx/mywin->table->w << dy/mywin->table->h << m << osc::EndMessage; mywin->myDebug->setCursorList->addItem("Cursor Set "+ str_ID.setNum(d->ID) + " X " + str_x.setNum(d->X) + " Y " + str_y.setNum(d->Y)); mywin->myDebug->setCursorList->scrollToBottom(); d->LX = d->X ; d->LY = d->Y ; if (Verbose) std::cout << "Table Crsor set" << "\n" ; mywin->table->OSCdata->packetUpdate = false ; } q << d->ID ; aliveCursors += " " ; aliveCursors += str_ID.setNum(d->ID) ; } QList<QGraphicsItem *> list = mywin->scene->items(5,5,mywin->table->w,mywin->table->h,Qt::IntersectsItemShape); while (!(list.isEmpty())) { QGraphicsItem *localItem = list.takeFirst(); Tangible_Type *myTangible = dynamic_cast<Tangible_Type*>(localItem); if ( !myTangible ) continue; TouchData *d = myTangible->OSCdata ; if (Verbose) std::cout << "Packet Update" << d->packetUpdate << "\n" ; if ( d->packetUpdate ) { float dx = d->X - d->LX ; float dy = d->Y - d->LY ; float m = sqrtf((dx*dx) + (dy*dy)); if ( myTangible->tangible_type == 3 ) { p << osc::BeginMessage( "/tuio/2Dcur" ) ; p << "set" << d->ID << (d->X)/mywin->table->w << (d->Y)/mywin->table->h << dx << dy << m << osc::EndMessage; mywin->myDebug->setCursorList->addItem("Cursor Set "+ str_ID.setNum(d->ID) + " X " + str_x.setNum(d->X) + " Y " + str_y.setNum(d->Y)); mywin->myDebug->setCursorList->scrollToBottom(); if (Verbose) std::cout << "Animation Cursor Set " << "\n" ; } else if ( myTangible->tangible_type == 1 || myTangible->tangible_type == 2 ) { float n = 0 ; float speed = m/dt; float accel = (speed - lastSpeed)/dt ; lastSpeed = speed ; float newm = sqrtf(m/2); //qDebug() << newm << endl ; p << osc::BeginMessage( "/tuio/2Dobj" ) ; p << "set" << d->ID << d->tagID << (d->X)/mywin->table->w << (d->Y)/mywin->table->h << d->angle << newm << newm << n << accel << n << osc::EndMessage; mywin->myDebug->setObjectList->addItem("Object Set "+ str_ID.setNum(d->ID) + " X " + str_x.setNum(d->X) + " Y " + str_y.setNum(d->Y)); mywin->myDebug->setObjectList->scrollToBottom(); if (Verbose) std::cout << "Animation Object Set " << "\n" ; } d->LX = d->X ; d->LY = d->Y ; d->packetUpdate = false ; } if ( myTangible->tangible_type == 3 ) { //q << osc::BeginMessage( "/tuio/2Dcur" ) ; q << d->ID ; aliveCursors += " " ; aliveCursors += str_ID.setNum(d->ID) ; } else if ( myTangible->tangible_type == 1 || myTangible->tangible_type == 2 ) { qObj << d->ID ; aliveObjects += " " ; aliveObjects += str_ID.setNum(d->ID) ; } } mywin->myDebug->aliveObjectList->addItem("Alive Objects " + aliveObjects); mywin->myDebug->aliveObjectList->scrollToBottom(); mywin->myDebug->aliveCursorList->addItem("Alive Cursors " + aliveCursors); mywin->myDebug->aliveCursorList->scrollToBottom(); q << osc::EndMessage; qObj << osc::EndMessage; fseq++; mywin->myDebug->fseqLabel->setText("Fseq : " + str_x.setNum(fseq)); p << osc::BeginMessage( "/tuio/2Dcur" ) << "fseq" << fseq << osc::EndMessage; p << osc::EndBundle; q << osc::EndBundle; //std::cout << "P is ready " << p.IsReady() << "\n" ; //std::cout << "Q is ready " << q.IsReady() << "\n" ; if(q.IsReady()) transmitSocket->Send( q.Data(), q.Size() ); if(p.IsReady()) transmitSocket->Send( p.Data(), p.Size() ); }