changeset 251:2ea04b3f9141

support new queries and timeline info
author lbajardsilogic
date Thu, 12 Jun 2008 10:17:48 +0000
parents c12986afc03c
children 3e35ed5332cb
files data/fileio/AudioSourceInfoReader.cpp data/fileio/ModelReader.cpp data/fileio/ModelReader.h data/fileio/SparqlResultsReader.cpp data/model/AudioSourceInfoModel.cpp sv/main/EasaierSessionManager.cpp sv/main/MainWindow.cpp widgets/InfoWidget.cpp
diffstat 8 files changed, 286 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/data/fileio/AudioSourceInfoReader.cpp	Tue Jun 10 16:06:57 2008 +0000
+++ b/data/fileio/AudioSourceInfoReader.cpp	Thu Jun 12 10:17:48 2008 +0000
@@ -146,12 +146,12 @@
 
 	} else if (name == "result")
 	{
-		m_model->addInfo("composer", m_composer);
+		/*m_model->addInfo("composer", m_composer);
 		m_model->addInfo("arranger", m_arranger);
 		m_composer.clear();
 		m_arranger.clear();
 		m_composer.append(" -");
-		m_arranger.append(" -");
+		m_arranger.append(" -");*/
 	}
 
 	return true;
--- a/data/fileio/ModelReader.cpp	Tue Jun 10 16:06:57 2008 +0000
+++ b/data/fileio/ModelReader.cpp	Thu Jun 12 10:17:48 2008 +0000
@@ -62,7 +62,9 @@
     m_datasetSeparator(" "),
     m_inData(false),
 	m_inRow(false),
-    m_rowNumber(0)
+    m_rowNumber(0),
+	m_inBinding(false),
+	m_sampleRate(44100)
 {}
 
 bool ModelHandler::startElement(const QString &namespaceURI, const QString &localName,
@@ -73,17 +75,7 @@
 
     bool ok = false;
 
-    // Valid element names:
-    //
-    // easaier
-    // data
-    // dataset
-    // model
-    // point
-    // row
-	// interval
-    
-    if (name == "easaier") {
+    /*if (name == "easaier") {
 
 		// nothing needed
 		ok = true;
@@ -122,7 +114,42 @@
 	
 		ok = addIntervalToDataset(attributes);
 
-    } 
+    } */
+
+	if (name == "sparql") {
+
+		// nothing needed
+		ok = true;
+
+    } else if (name == "head") {
+
+		// nothing needed
+		ok = true;
+
+    } else if (name == "variable") {
+
+		// nothing needed
+		ok = true;
+    
+    } else if (name == "results") {
+	
+		// nothing needed
+		ok = true;
+
+    } else if (name == "result") {
+	
+		//m_resultsWidget->newResult();
+		ok = true;
+
+    } else if (name == "binding") {
+	
+		m_curBindingName = attributes.value("name");
+		ok = true;
+
+    } else if ( (name == "uri") || (name == "literal") ) {
+		m_inBinding = true;	
+		ok = true;
+	}
 
     if (!ok) {
 		std::cerr << "WARNING: ModelReader-XML: Failed to completely process element \""
@@ -135,7 +162,7 @@
 bool ModelHandler::endElement(const QString &namespaceURI, const QString &localName,
 						const QString &qName)
 {
-	QString name = qName.toLower();
+	/*QString name = qName.toLower();
 
     if (name == "dataset") 
 	{
@@ -156,21 +183,43 @@
 	else if (name == "row") 
 	{
 		m_inRow = false;
-    } 
+    } */
+	QString name = qName.toLower();
+
+	if ( (name == "uri") || (name == "literal") )
+	{
+		m_inBinding = false;
+		m_curBindingName = "";
+
+	} else if (name == "result")
+	{
+		/*m_resultsWidget->addInfo("composer", m_composer);
+		m_resultsWidget->addInfo("arranger", m_arranger);
+		m_composer.clear();
+		m_arranger.clear();
+		m_composer.append(" -");
+		m_arranger.append(" -");*/
+
+		addNewData();
+	}
 
     return true;
 }
 
 bool ModelHandler::characters(const QString &str)
 {
-	bool ok = false;
+	/*bool ok = false;
 
     if (m_inRow) {
 		ok = readRowData(str);
 		if (!ok) {
 			std::cerr << "WARNING: ModelReader-XML: Failed to read row data content for row " << m_rowNumber << std::endl;
 		}
-    }
+    }*/
+	if (m_inBinding)
+	{
+		m_info[m_curBindingName] = str;
+	}
 
     return true;
 }
@@ -197,6 +246,179 @@
     return QXmlDefaultHandler::fatalError(exception);
 }
 
+void ModelHandler::addNewData()
+{
+	m_layer = 0;
+	m_model = 0;
+
+	if (m_info.find("beginsAt") != m_info.end())
+	{
+		addDataInterval();
+	} else if (m_info.find("at") != m_info.end())
+	{
+		addDataTimeInstants();
+	}
+
+	m_info.clear();
+}
+
+void ModelHandler::addDataInterval()
+{
+	std::map<QString, QString>::iterator iter;
+	
+	std::map<QString, QString>::iterator iterEventLabel = m_info.find("event_label");
+	if (iterEventLabel == m_info.end())
+		return;
+
+	QString eventLabel = iterEventLabel->second;
+
+	std::set<Layer *> layers = m_document->getLayers();
+	std::set<Layer *>::iterator iterLayer;
+	bool findLayer = false;
+
+	for (iterLayer=layers.begin(); iterLayer != layers.end(); iterLayer++)
+	{
+		if ((*iterLayer)->objectName() == eventLabel)
+		{
+			m_layer = (*iterLayer);
+			findLayer = true;
+			m_model = m_layer->getModel();
+		}
+	}
+
+	if (!findLayer)
+	{
+		//create layer
+		m_layer = m_document->createLayer(LayerFactory::getInstance()->getLayerTypeForName("interval"));
+
+		if (!m_layer) {
+			std::cerr << "WARNING: modelreader-XML: Failed to add layer of type interval" << std::endl;
+			return ;
+		}
+		m_layer->setObjectName(eventLabel);
+		
+		m_layer->setModelName(eventLabel);
+		//m_layer->setModelId(m_id);
+		
+		//create model	
+		IntervalModel * model = new IntervalModel(m_sampleRate, 1, true);
+		m_model = model;
+		m_model->setObjectName(eventLabel);
+
+		//link model, layer document and view
+		if (m_model && m_layer)
+		{
+			m_document->addImportedModel(m_model);
+			m_document->setModel(m_layer, m_model);
+		}
+		if (m_pane && m_layer)
+		{
+			m_document->addLayerToView(m_pane, m_layer);
+		}
+	}	
+		
+	//add interval
+	IntervalModel *im = dynamic_cast<IntervalModel*> (m_model);
+	if (im)
+	{
+		//start
+		iter = m_info.find("beginsAt");
+		if (iter == m_info.end())
+			return;
+		QString beginAt = iter->second;
+		long start = beginAt.mid(2, beginAt.length()-3).toDouble()*m_sampleRate;
+		//end
+		iter = m_info.find("duration");
+		if (iter == m_info.end())
+			return;
+		QString duration = iter->second;
+		long end = duration.mid(2, duration.length()-3).toDouble()*m_sampleRate;
+		//label
+		QString label = "";
+		for (iter = m_info.begin(); iter != m_info.end(); iter++)
+		{
+			QString propertylabel = iter->first;
+			if ((propertylabel != "beginsAt") && (propertylabel != "duration") && 
+				(propertylabel != "event_label") && (propertylabel != "signal") )
+				label += iter->second + " - ";
+		}
+		//value
+		float value = 0.5;
+		im->addInterval(start, end, label, value);
+	}
+}
+
+void ModelHandler::addDataTimeInstants()
+{
+	std::map<QString, QString>::iterator iter;
+
+	std::map<QString, QString>::iterator iterEventLabel = m_info.find("event_label");
+	if (iterEventLabel == m_info.end())
+		return;
+
+	QString eventLabel = iterEventLabel->second;
+
+	std::set<Layer *> layers = m_document->getLayers();
+	std::set<Layer *>::iterator iterLayer;
+	bool findLayer = false;
+
+	for (iterLayer=layers.begin(); iterLayer != layers.end(); iterLayer++)
+	{
+		if ((*iterLayer)->objectName() == eventLabel)
+		{
+			m_layer = (*iterLayer);
+			findLayer = true;
+			m_model = m_layer->getModel();
+		}
+	}
+
+	if (!findLayer)
+	{
+		//create layer
+		m_layer = m_document->createLayer(LayerFactory::getInstance()->getLayerTypeForName("timeinstants"));
+
+		if (!m_layer) {
+			std::cerr << "WARNING: modelreader-XML: Failed to add layer of type timeinstants" << std::endl;
+			return ;
+		}
+		m_layer->setObjectName(eventLabel);
+
+		m_layer->setModelName(eventLabel);
+		//m_layer->setModelId(m_id);
+		
+		//create model
+		SparseOneDimensionalModel *model = new SparseOneDimensionalModel(m_sampleRate, 512);
+		m_model = model;
+		m_model->setObjectName(eventLabel);
+		
+		//link model, layer document and view
+		if (m_model && m_layer)
+		{
+			m_document->addImportedModel(m_model);
+			m_document->setModel(m_layer, m_model);
+		}
+		if (m_pane && m_layer)
+		{
+			m_document->addLayerToView(m_pane, m_layer);
+		}
+	}
+
+	//add point
+	SparseOneDimensionalModel *sodm = dynamic_cast<SparseOneDimensionalModel *>	(m_model);
+    if (sodm) 
+	{
+		//frame
+		iter = m_info.find("at");
+		if (iter == m_info.end())
+			return;
+		QString at = iter->second;
+		long frame = at.toDouble()*m_sampleRate;
+
+		sodm->addPoint(SparseOneDimensionalModel::Point(frame, ""));
+    }
+
+}
+
 #define READ_MANDATORY(TYPE, NAME, CONVERSION)		      \
     TYPE NAME = attributes.value(#NAME).trimmed().CONVERSION(&ok); \
     if (!ok) { \
--- a/data/fileio/ModelReader.h	Tue Jun 10 16:06:57 2008 +0000
+++ b/data/fileio/ModelReader.h	Thu Jun 12 10:17:48 2008 +0000
@@ -51,6 +51,10 @@
 	bool error(const QXmlParseException &exception);
 	bool fatalError(const QXmlParseException &exception);
 
+	void addNewData();
+	void addDataInterval();
+	void addDataTimeInstants();
+
 	bool readModel(const QXmlAttributes &attributes);
 	bool readDatasetStart(const QXmlAttributes &attributes);
 	bool readRowData(const QString &text);
@@ -74,7 +78,13 @@
 
 	QString		m_datasetSeparator;
 
-	QString m_modelName;
+	QString		m_modelName;
+
+	bool		m_inBinding;
+	QString		m_curBindingName;
+	std::map<QString, QString>	m_info;
+
+	int			m_sampleRate;
 
 };
 
--- a/data/fileio/SparqlResultsReader.cpp	Tue Jun 10 16:06:57 2008 +0000
+++ b/data/fileio/SparqlResultsReader.cpp	Thu Jun 12 10:17:48 2008 +0000
@@ -120,12 +120,12 @@
 
 	} else if (name == "result")
 	{
-		m_resultsWidget->addInfo("composer", m_composer);
+		/*m_resultsWidget->addInfo("composer", m_composer);
 		m_resultsWidget->addInfo("arranger", m_arranger);
 		m_composer.clear();
 		m_arranger.clear();
 		m_composer.append(" -");
-		m_arranger.append(" -");
+		m_arranger.append(" -");*/
 
 		m_resultsWidget->saveCurResult();
 	}
@@ -137,7 +137,7 @@
 {
 	if (m_inBinding)
 	{
-		if (m_curBindingName.contains("composer"))
+		/*if (m_curBindingName.contains("composer"))
 		{
 			m_composer.append(" " + str);
 		}
@@ -146,9 +146,9 @@
 			m_arranger.append(" " + str);
 		}
 		else 
-		{
+		{*/
 			m_resultsWidget->addInfo(m_curBindingName, str);
-		}
+		//}
 	}
 
     return true;
--- a/data/model/AudioSourceInfoModel.cpp	Tue Jun 10 16:06:57 2008 +0000
+++ b/data/model/AudioSourceInfoModel.cpp	Thu Jun 12 10:17:48 2008 +0000
@@ -28,7 +28,9 @@
 	{
 		QStringList* infolist = info->second;
 		if (!(infolist->contains(value)))
+		{
 			infolist->push_back(value);
+		}
 	}
 	else
 	{
--- a/sv/main/EasaierSessionManager.cpp	Tue Jun 10 16:06:57 2008 +0000
+++ b/sv/main/EasaierSessionManager.cpp	Thu Jun 12 10:17:48 2008 +0000
@@ -488,9 +488,11 @@
 
 void EasaierSessionManager::importMetadata(const QString& filename, Pane* pane)
 {
-	QString query = m_httpClient->getServletName() + "?theme=getFile&fileName="+filename;
+	QString query = m_httpClient->getServletName() + "?theme=getTimeLine&signal="+m_document->getAudioSourceInfoFileName()+"&event_label="+filename;
 
-	loadFile( query, filename, LoadedFile::METADATA);
+	QString file = "metadata/" + filename + ".txt";
+
+	loadFile( query, file, LoadedFile::METADATA);
 
 	m_currentPane = pane;
 }
--- a/sv/main/MainWindow.cpp	Tue Jun 10 16:06:57 2008 +0000
+++ b/sv/main/MainWindow.cpp	Thu Jun 12 10:17:48 2008 +0000
@@ -4086,7 +4086,7 @@
     if (pane) {
 	Layer *layer = pane->getSelectedLayer();
 	if (layer) {
-	    m_document->removeLayerFromView(pane, layer);
+		m_document->/*deleteLayer(layer);*/removeLayerFromView(pane, layer);
 	}
     }
     updateMenuStates();
--- a/widgets/InfoWidget.cpp	Tue Jun 10 16:06:57 2008 +0000
+++ b/widgets/InfoWidget.cpp	Thu Jun 12 10:17:48 2008 +0000
@@ -131,12 +131,28 @@
 				row++;
 			} 
 		}*/
-		
-		proper = new QLabel(iterInfo->first);
-		value = new QLabel(iterInfo->second->join(" "));
-		//connect the main window to the linkActivated signal
-		//connect(value, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierLayer(QString)));
-			
+		if (iterInfo->first == "event_label")
+		{
+			proper = new QLabel(iterInfo->first);
+			value = new QLabel(iterInfo->second->join(" - "));	
+			QString label;
+			QStringList::const_iterator constIterator;
+			for (constIterator = iterInfo->second->constBegin(); constIterator != iterInfo->second->constEnd(); ++constIterator)
+			{
+				label += "<a href=\"";
+				label += *constIterator;
+				label += "\">";
+				label += *constIterator;
+				label += "</a> - ";
+			}
+			value->setText(label);
+			//connect the main window to the linkActivated signal
+			connect(value, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierLayer(QString)));
+		}
+		else {
+			proper = new QLabel(iterInfo->first);
+			value = new QLabel(iterInfo->second->join(" - "));	
+		}
 		m_infoLayout->addWidget(proper, row, 2,1,1);
 		m_infoLayout->addWidget(value, row, 4,1,1);
 		row++;