changeset 247:bf7e98ee11f4

Fix post of data to the backend
author lbarthelemy
date Mon, 02 Jun 2008 08:01:16 +0000
parents f6da1c3c9708
children 37b7f4ec5a17
files sv/main/EasaierSessionManager.cpp sv/main/EasaierSessionManager.h
diffstat 2 files changed, 571 insertions(+), 476 deletions(-) [+]
line wrap: on
line diff
--- a/sv/main/EasaierSessionManager.cpp	Fri Mar 28 16:08:21 2008 +0000
+++ b/sv/main/EasaierSessionManager.cpp	Mon Jun 02 08:01:16 2008 +0000
@@ -1,462 +1,555 @@
-/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
-
-/*	Sound Access	
-		EASAIER client application.	
-		Silogic 2007. Laure Bajard. 
-	
-	This program is free software; you can redistribute it and/or    
-	modify it under the terms of the GNU General Public License as    
-	published by the Free Software Foundation; either version 2 of the    
-	License, or (at your option) any later version.  See the file    
-	COPYING included with this distribution for more information.
-*/
-
-#include "EasaierSessionManager.h"
-
-#include <QUrl>
-#include <QMessageBox>
-#include <QTextStream>
-#include <iostream>
-#include <QStatusBar>
-#include <vector>
-
-#include <QApplication>
-#include <Qt>
-#include <QUrl>
-
-#include "layer/Layer.h"
-#include "base/TempDirectory.h"
-#include "data/fileio/AudioSourceInfoReader.h"
-#include "data/fileio/ModelReader.h"
-#include "data/fileio/QueryConfigReader.h"
-#include "data/fileio/SparqlResultsReader.h"
-#include "data/fileio/SparqlRelatedMediaReader.h"
-#include "data/fileio/VideoFileReaderFactory.h"
-#include "data/model/WaveFileModel.h"
-#include "main/MainWindow.h"
-#include "widgets/QueryResultsWidget.h"
-#include "widgets/RelatedMediaWidget.h"
-#include "base/PropertyContainer.h"
-#include "data/fileio/AudioFileReaderFactory.h"
-
-EasaierSessionManager::EasaierSessionManager(HttpClient* httpClient) : QObject(),
-	m_fileName(""),
-	m_httpClient(httpClient),
-	m_document(0),
-	m_audioSourceInfoModel(0),
-	m_queryModel(0),
-	m_currentPane(0)
-{
-	connect(m_httpClient, SIGNAL(requestFinished(int, bool)), this, SLOT(fileLoaded(int, bool)));
-}
-
-EasaierSessionManager::~EasaierSessionManager()
-{
-	closeSession();
-	m_httpClient = 0;
-}
-
-bool EasaierSessionManager::newSession()
-{
-	closeSession();
-
-	m_queryModel = new QueryModel();
-	QString filename = "/data/query/queryfield.xml";
-	QString query = m_httpClient->getServletName() + "?theme=getFile&fileName=data/query/queryfield.xml";
-	loadFile(query, filename, LoadedFile::QUERY_CONFIG);
-
-	return true;
-}
-
-bool EasaierSessionManager::openSession(Document *document)
-{
-	newSession();
-
-	m_fileName = document->getAudioSourceInfoFileName();
-	m_document = document;
-
-	QString params = "&identification=" + m_fileName;
-
-	QString query = m_httpClient->getServletName() + "?theme=infoFile"+params;
-	QString filename = "/easaier/servlet/infoFile";
-	loadFile(query, filename, LoadedFile::AUDIO_SOURCE_INFO);
-
-	//get related media
-	query = m_httpClient->getServletName() + "?theme=relatedMedia" + params;
-	filename = "/easaier/servlet/relatedMedia";
-	loadFile(query, filename, LoadedFile::RELATED_MEDIA_LIST);
-
-	return true;
-}
-
-bool EasaierSessionManager::openAudioInfoFile(Document *document)
-{
-	closeFile();
-
-	m_fileName = document->getAudioSourceInfoFileName();
-	m_document = document;
-
-	QString params = "&identification=" + m_fileName;
-
-	//get infofile
-	QString query = m_httpClient->getServletName() + "?theme=infoFile" + params;
-
-	QString filename = "/easaier/servlet/infoFile";
-
-	loadFile(query, filename, LoadedFile::AUDIO_SOURCE_INFO);
-	
-	//get related media
-
-	query = m_httpClient->getServletName() + "?theme=relatedMedia" + params;
-	filename = "/easaier/servlet/relatedMedia";
-	loadFile(query, filename, LoadedFile::RELATED_MEDIA_LIST);
-
-	return true;
-}
-
-void EasaierSessionManager::closeFile()
-{
-	m_audioSourceInfoModel = 0;
-
-	while (!m_loadFile.empty())
-	{
-		m_loadFile.begin()->second->close();
-		delete m_loadFile.begin()->second;
-	    m_loadFile.erase(m_loadFile.begin());
-	}
-
-	m_modelLoaded.clear();
-}
-
-void EasaierSessionManager::closeSession()
-{
-	closeFile();
-
-	m_fileName = "";
-	m_document = 0;
-	
-	if (m_queryModel)
-	{
-		delete m_queryModel;
-		m_queryModel = 0;
-	}
-}
-
-void EasaierSessionManager::loadFile(const QString& queryAux, const QString& filename, LoadedFile::FileType type)
-{
-	if ((queryAux == 0) || (filename == 0))
-		return;
-
-	if (m_httpClient->getHost() == "")
-		return;
-
-	QUrl url(queryAux);
-	QString query = QString(url.toEncoded());
-
-	QString directory = filename.left(filename.lastIndexOf("/"));
-	QString file = filename.right(filename.length() - filename.lastIndexOf("/"));
-
-	if (directory.left(1) == "/")
-	{
-		directory.remove(0, 1);
-	}
-
-	//create the subdirectory in local
-	QString localPath = TempDirectory::getInstance()->getSubDirectoryPath(directory);
-	localPath.append(file);
-
-	LoadedFile* newFile = new LoadedFile(localPath);
-	newFile->setFileType(type);
-	newFile->setUri(filename);
-
-	int index = m_httpClient->get(query, newFile);
-
-	std::cerr << "Ask for file : GET " << query.toStdString() << " - index : " << index << std::endl;
-
-	m_loadFile[index] = newFile;
-
-	if (type == LoadedFile::QUERY_RESULTS)
-		MainWindow::instance()->statusBar()->showMessage(tr("Querying database..."));
-	else if (type == LoadedFile::QUERY_CONFIG)
-		MainWindow::instance()->statusBar()->showMessage(tr("Asking for query config..."));
-	else
-		MainWindow::instance()->statusBar()->showMessage(tr("Loading File : %1").arg(filename));
-}
-
-void EasaierSessionManager::fileLoaded(int index, bool error)
-{
-	QString errorString = m_httpClient->errorString();
-	std::map<int , LoadedFile*>::iterator iter = m_loadFile.find(index);
-	if (iter == m_loadFile.end())
-	{
-		std::cerr << "fileLoaded() : file " << index << " not found. " << std::endl;
-		return;
-	}
-	if (error)
-	{
-		QApplication::restoreOverrideCursor();
-		QMessageBox::critical(MainWindow::instance(), tr("Download Failed"), m_httpClient->errorString());
-		return; 
-	}
-	bool read = false;
-	
-	//retreive loaded file
-	LoadedFile* loadedFile = iter->second;
-	loadedFile->close();
-	
-	//save type and filename for reading
-	LoadedFile::FileType type = loadedFile->getFileType();
-	QString filename = loadedFile->fileName();
-	QString uri = loadedFile->getUri();
-
-	//delete de file and erase from the loaded file queue
-	delete loadedFile;
-	m_loadFile.erase(iter);
-	loadedFile = 0;
-
-	std::cerr << "fileLoaded() : file loaded, start to read file " << index << std::endl;
-
-	if ((type == LoadedFile::QUERY_RESULTS) || (type == LoadedFile::QUERY_CONFIG))
-	{
-		MainWindow::instance()->statusBar()->clearMessage();
-	}
-	else
-	{
-		QString name = filename.right(filename.length() - filename.lastIndexOf("/"));
-		MainWindow::instance()->statusBar()->showMessage(tr("File Loaded : %1").arg(name), 3000);
-	}
-
-	//read and load (in m_document) the file according to its type 
-	switch (type) {
-
-		case LoadedFile::AUDIO_SOURCE_INFO :
-		{
-		    m_audioSourceInfoModel = new AudioSourceInfoModel();
-			AudioSourceInfoReader audioSourceInfoReader(m_audioSourceInfoModel);
-			read = audioSourceInfoReader.parse(filename);
-			if (read)
-			{
-				m_document->setAudioSourceInfoModel(m_audioSourceInfoModel);
-				loadRelatedModel();
-			}
-		    break;
-		}
-		case LoadedFile::MODEL :
-		{
-			QString modelName = m_audioSourceInfoModel->getKey(uri);
-
-			read = addModelToLayers(modelName, filename);
-
-		    break;
-		}
-		case LoadedFile::METADATA :
-		{
-			ModelReader modelReader(m_document,0, m_currentPane);
-			read = modelReader.parse(filename);
-
-		    break;
-		}
-		case LoadedFile::QUERY_CONFIG :
-		{
-			QueryConfigReader reader(m_queryModel);
-			bool ok = reader.parse(filename);
-
-			if (ok)
-				emit queryModelLoaded(m_queryModel);
-
-			read = ok;
-		    break;
-		}
-		case LoadedFile::QUERY_RESULTS :
-		{
-			QueryResultsWidget* resultsWidget = MainWindow::instance()->getQueryResultsWidget();
-			resultsWidget->reset();
-
-			if (resultsWidget)
-			{
-				SparqlResultsReader reader(resultsWidget);
-				read = reader.parse(filename);
-			}
-		    break;
-		}
-		case LoadedFile::RELATED_MEDIA_LIST :
-		{
-			std::list<QString> relMediaList;
-			SparqlRelatedMediaReader reader(&relMediaList);
-			read = reader.parse(filename);
-			importRelatedMedia(&relMediaList);
-			break;
-		}
-		case LoadedFile::RELATED_MEDIA :
-		{
-			read = true;
-			RelatedMediaWidget* relMediaWidget = MainWindow::instance()->getRelatedMediaWidget();
-			relMediaWidget->addRelatedMedia(filename);
-			break;
-		}
-		default: break;
-	}
-
-	//if the file could not be read by any reader
-	if (!read)
-	{
-		QFile file(filename);
-		if (file.open(QFile::ReadOnly)) {
-			QApplication::restoreOverrideCursor();
-			QMessageBox::critical(MainWindow::instance(), tr("Download Error"), file.readAll());
-		}
-	}
-	else {
-		std::cerr << "fileLoaded() : " << index << " all successful. " << std::endl;
-	}
-	QApplication::restoreOverrideCursor();
-}
-
-void EasaierSessionManager::loadRelatedModel()
-{
-	std::set<Layer *> layers = m_document->getLayers();
-	std::set<Layer *>::iterator iter;
-
-	std::set<QString> loadedModel;
-
-	for (iter=layers.begin(); iter != layers.end(); iter++)
-	{
-		Layer * layer = *iter;
-
-		QString modelName	= layer->getModelName();
-		if (modelName != "")
-		{
-			QString modelId		= QString::number(layer->getModelId());
-			//modelName.append(modelId);
-
-		} else if (layer->getLayerPresentationName() == "Waveform")
-		{
-			//modelName = "http://purl.org/dc/elements/1.1/source";
-			modelName = "available_as";
-			int modelId = 1;
-			layer->setModelName(modelName);
-			layer->setModelId(modelId);
-			//modelName.append(QString::number(modelId));
-		} 
-		
-		if (modelName != "")
-		{
-			QString uri = m_audioSourceInfoModel->getInfo(modelName)->at(0);
-			
-			QString query = m_httpClient->getServletName() + "?theme=getFile&fileName="+uri;
-
-			std::set<QString>::iterator iterModel = m_modelLoaded.find(uri);
-
-			if (iterModel == m_modelLoaded.end())
-			{
-				m_modelLoaded.insert(uri);
-				loadFile(query, uri, LoadedFile::MODEL);
-			}
-		}
-	}
-}
-
-bool EasaierSessionManager::addModelToLayers(const QString& name, const QString& filename)
-{
-	std::set<Layer *> layers = m_document->getLayers();
-	std::set<Layer *>::iterator iter;
-
-	std::map<QString, Model *> addedModel;
-
-	bool ok = false;
-
-	for (iter=layers.begin(); iter != layers.end(); iter++)
-	{
-		Layer * layer = *iter;
-
-		QString modelName	= layer->getModelName();
-		QString modelId		= QString::number(layer->getModelId());
-
-		//modelName.append(modelId);
-		modelName = modelName.toLower();
-
-		if (modelName == name)
-		{
-			std::map<QString, Model *>::iterator iterModel;
-			iterModel = addedModel.find(modelName);
-
-			if (iterModel == addedModel.end())
-			{
-				QString extension = filename.right(filename.length()-filename.lastIndexOf(".")-1);
-				if (AudioFileReaderFactory::isKnownExtensions(extension))
-				{
-					WaveFileModel *model = new WaveFileModel(filename);
-					m_document->setMainModel(model);
-					addedModel[modelName] = (Model* ) model;
-					ok = true;
-					emit audioFileLoaded();
-				}
-#ifdef HAVE_VIDEO
-				else if (VideoFileReaderFactory::isKnownExtensions(extension)) 
-				{
-					ok = !(MainWindow::instance()->openVideoFile(filename, MainWindow::ReplaceMainModel));
-					emit audioFileLoaded();
-				}
-#endif
-				else
-				{
-					ModelReader modelReader(m_document, layer);
-					ok = modelReader.parse(filename);
-				}
-			}
-			else
-			{
-				Model* model = iterModel->second;
-				m_document->addImportedModel(model);
-				m_document->setModel(layer, model);
-			}
-		}
-	}
-
-	return ok;
-}
-
-void EasaierSessionManager::importMetadata(const QString& filename, Pane* pane)
-{
-	QString query = m_httpClient->getServletName() + "?theme=getFile&fileName="+filename;
-
-	loadFile( query, filename, LoadedFile::METADATA);
-
-	m_currentPane = pane;
-}
-
-void EasaierSessionManager::importRelatedMedia(std::list<QString> *relMediaList)
-{
-	QString filename;
-	QString query;
-
-	std::list<QString>::iterator iter;
-	for (iter = relMediaList->begin(); iter != relMediaList->end(); iter++)
-	{
-		filename = *iter;
-
-		query = m_httpClient->getServletName() + "?theme=getFile&fileName=" + filename;
-
-		loadFile( query, filename, LoadedFile::RELATED_MEDIA);
-	}
-}
-
-void EasaierSessionManager::queryDatabase(const QString& themeName)
-{
-	
-	QueryThemeModel *themeModel = (m_queryModel->getThemes()).find(themeName)->second;
-	QString params = "";
-	if(themeModel!=0){
-		PropertyContainer::PropertyList propertyList = themeModel->getProperties();
-		for(int i=0; i< ((int) propertyList.size());i++){
-			params+= "&"+propertyList[i] + "="+themeModel->getPropertyValue(propertyList[i]);
-		}
-	}
-	QString query = m_httpClient->getServletName() + "?theme="+themeName+""+params;
-	QString filename = "/easaier/servlet/"+themeName;
-	
-
-	QApplication::setOverrideCursor( Qt::WaitCursor );
-	loadFile(query, filename, LoadedFile::QUERY_RESULTS);
-	
-}
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*	Sound Access	
+		EASAIER client application.	
+		Silogic 2007. Laure Bajard. 
+	
+	This program is free software; you can redistribute it and/or    
+	modify it under the terms of the GNU General Public License as    
+	published by the Free Software Foundation; either version 2 of the    
+	License, or (at your option) any later version.  See the file    
+	COPYING included with this distribution for more information.
+*/
+
+#include "EasaierSessionManager.h"
+
+#include <QUrl>
+#include <QMessageBox>
+#include <QTextStream>
+#include <iostream>
+#include <QStatusBar>
+#include <vector>
+
+#include <QApplication>
+#include <Qt>
+#include <QUrl>
+
+#include "layer/Layer.h"
+#include "base/TempDirectory.h"
+#include "data/fileio/AudioSourceInfoReader.h"
+#include "data/fileio/ModelReader.h"
+#include "data/fileio/QueryConfigReader.h"
+#include "data/fileio/SparqlResultsReader.h"
+#include "data/fileio/SparqlRelatedMediaReader.h"
+#include "data/fileio/VideoFileReaderFactory.h"
+#include "data/model/WaveFileModel.h"
+#include "main/MainWindow.h"
+#include "widgets/QueryResultsWidget.h"
+#include "widgets/RelatedMediaWidget.h"
+#include "base/PropertyContainer.h"
+#include "data/fileio/AudioFileReaderFactory.h"
+
+EasaierSessionManager::EasaierSessionManager(HttpClient* httpClient) : QObject(),
+	m_fileName(""),
+	m_httpClient(httpClient),
+	m_document(0),
+	m_audioSourceInfoModel(0),
+	m_queryModel(0),
+	m_currentPane(0)
+{
+	connect(m_httpClient, SIGNAL(requestFinished(int, bool)), this, SLOT(fileLoaded(int, bool)));
+}
+
+EasaierSessionManager::~EasaierSessionManager()
+{
+	closeSession();
+	m_httpClient = 0;
+}
+
+bool EasaierSessionManager::newSession()
+{
+	closeSession();
+
+	m_queryModel = new QueryModel();
+	QString filename = "/data/query/queryfield.xml";
+	QString query = m_httpClient->getServletName() + "?theme=getFile&fileName=data/query/queryfield.xml";
+	loadFile(query, filename, LoadedFile::QUERY_CONFIG);
+
+	return true;
+}
+
+bool EasaierSessionManager::openSession(Document *document)
+{
+	newSession();
+
+	m_fileName = document->getAudioSourceInfoFileName();
+	m_document = document;
+
+	QString params = "&identification=" + m_fileName;
+
+	QString query = m_httpClient->getServletName() + "?theme=infoFile"+params;
+	QString filename = "/easaier/servlet/infoFile";
+	loadFile(query, filename, LoadedFile::AUDIO_SOURCE_INFO);
+
+	//get related media
+	query = m_httpClient->getServletName() + "?theme=relatedMedia" + params;
+	filename = "/easaier/servlet/relatedMedia";
+	loadFile(query, filename, LoadedFile::RELATED_MEDIA_LIST);
+
+	return true;
+}
+
+bool EasaierSessionManager::openAudioInfoFile(Document *document)
+{
+	closeFile();
+
+	m_fileName = document->getAudioSourceInfoFileName();
+	m_document = document;
+
+	QString params = "&identification=" + m_fileName;
+
+	//get infofile
+	QString query = m_httpClient->getServletName() + "?theme=infoFile" + params;
+
+	QString filename = "/easaier/servlet/infoFile";
+
+	loadFile(query, filename, LoadedFile::AUDIO_SOURCE_INFO);
+	
+	//get related media
+
+	query = m_httpClient->getServletName() + "?theme=relatedMedia" + params;
+	filename = "/easaier/servlet/relatedMedia";
+	loadFile(query, filename, LoadedFile::RELATED_MEDIA_LIST);
+
+	return true;
+}
+
+void EasaierSessionManager::closeFile()
+{
+	m_audioSourceInfoModel = 0;
+
+	while (!m_loadFile.empty())
+	{
+		m_loadFile.begin()->second->close();
+		delete m_loadFile.begin()->second;
+	    m_loadFile.erase(m_loadFile.begin());
+	}
+
+	m_modelLoaded.clear();
+}
+
+void EasaierSessionManager::closeSession()
+{
+	closeFile();
+
+	m_fileName = "";
+	m_document = 0;
+	
+	if (m_queryModel)
+	{
+		delete m_queryModel;
+		m_queryModel = 0;
+	}
+}
+
+void EasaierSessionManager::loadFile(const QString& queryAux, const QString& filename, LoadedFile::FileType type, const QString& postPath)
+{
+	QFile * postFile = 0;
+
+	if ((queryAux == 0) || (filename == 0))
+		return;
+
+	if (m_httpClient->getHost() == "")
+		return;
+
+	QUrl url(queryAux);
+	QString query = QString(url.toEncoded());
+
+	QString directory = filename.left(filename.lastIndexOf("/"));
+	QString file = filename.right(filename.length() - filename.lastIndexOf("/"));
+
+	if (directory.left(1) == "/")
+	{
+		directory.remove(0, 1);
+	}
+
+	//create the subdirectory in local
+	QString localPath = TempDirectory::getInstance()->getSubDirectoryPath(directory);
+	localPath.append(file);
+
+	LoadedFile* newFile = new LoadedFile(localPath);
+	newFile->setFileType(type);
+	newFile->setUri(filename);
+
+	if (postPath != "")
+	{
+		postFile = new QFile(postPath);
+	}
+	int index;
+	index =  m_httpClient->get(query,newFile );
+
+	std::cerr << "Ask for file : GET " << query.toStdString() << " - index : " << index << std::endl;
+
+	m_loadFile[index] = newFile;
+
+	if (type == LoadedFile::QUERY_RESULTS)
+		MainWindow::instance()->statusBar()->showMessage(tr("Querying database..."));
+	else if (type == LoadedFile::QUERY_CONFIG)
+		MainWindow::instance()->statusBar()->showMessage(tr("Asking for query config..."));
+	else
+		MainWindow::instance()->statusBar()->showMessage(tr("Loading File : %1").arg(filename));
+}
+
+void EasaierSessionManager::loadFile(const QByteArray& payload , const QString& filename, LoadedFile::FileType type, const QString& postPath)
+{
+	QFile * postFile = 0;
+
+	if (m_httpClient->getHost() == "")
+		return;
+
+
+	QString directory = filename.left(filename.lastIndexOf("/"));
+	QString file = filename.right(filename.length() - filename.lastIndexOf("/"));
+
+	if (directory.left(1) == "/")
+	{
+		directory.remove(0, 1);
+	}
+
+	//create the subdirectory in local
+	QString localPath = TempDirectory::getInstance()->getSubDirectoryPath(directory);
+	localPath.append(file);
+
+	LoadedFile* newFile = new LoadedFile(localPath);
+	newFile->setFileType(type);
+	newFile->setUri(filename);
+
+	int index;
+
+	// build the header
+	QHttpRequestHeader header("POST", "/easaier/RetrieverService");
+    header.setValue("Host", "192.168.0.115"); //"easaier.silogic.fr");
+	header.setValue("Port", "8080"); //"9875");
+    header.setContentType("multipart/form-data, boundary=7d44e178b0434");
+    header.setValue("Cache-Control", "no-cache");    
+	header.setValue("Accept","*/*"); 
+    header.setContentLength(payload.length());
+	//
+
+	index =  m_httpClient->request(header, payload, newFile);
+
+	std::cerr << "Ask for file : POST " << " - index : " << index << std::endl;
+
+	m_loadFile[index] = newFile;
+
+	if (type == LoadedFile::QUERY_RESULTS)
+		MainWindow::instance()->statusBar()->showMessage(tr("Querying database..."));
+	else if (type == LoadedFile::QUERY_CONFIG)
+		MainWindow::instance()->statusBar()->showMessage(tr("Asking for query config..."));
+	else
+		MainWindow::instance()->statusBar()->showMessage(tr("Loading File : %1").arg(filename));
+}
+
+void EasaierSessionManager::fileLoaded(int index, bool error)
+{
+	QString errorString = m_httpClient->errorString();
+	std::map<int , LoadedFile*>::iterator iter = m_loadFile.find(index);
+	if (iter == m_loadFile.end())
+	{
+		std::cerr << "fileLoaded() : file " << index << " not found. " << std::endl;
+		return;
+	}
+	if (error)
+	{
+		QApplication::restoreOverrideCursor();
+		QMessageBox::critical(MainWindow::instance(), tr("Download Failed"), m_httpClient->errorString());
+		return; 
+	}
+	bool read = false;
+	
+	//retreive loaded file
+	LoadedFile* loadedFile = iter->second;
+	loadedFile->close();
+	
+	//save type and filename for reading
+	LoadedFile::FileType type = loadedFile->getFileType();
+	QString filename = loadedFile->fileName();
+	QString uri = loadedFile->getUri();
+
+	//delete de file and erase from the loaded file queue
+	delete loadedFile;
+	m_loadFile.erase(iter);
+	loadedFile = 0;
+
+	std::cerr << "fileLoaded() : file loaded, start to read file " << index << std::endl;
+
+	if ((type == LoadedFile::QUERY_RESULTS) || (type == LoadedFile::QUERY_CONFIG))
+	{
+		MainWindow::instance()->statusBar()->clearMessage();
+	}
+	else
+	{
+		QString name = filename.right(filename.length() - filename.lastIndexOf("/"));
+		MainWindow::instance()->statusBar()->showMessage(tr("File Loaded : %1").arg(name), 3000);
+	}
+
+	//read and load (in m_document) the file according to its type 
+	switch (type) {
+
+		case LoadedFile::AUDIO_SOURCE_INFO :
+		{
+		    m_audioSourceInfoModel = new AudioSourceInfoModel();
+			AudioSourceInfoReader audioSourceInfoReader(m_audioSourceInfoModel);
+			read = audioSourceInfoReader.parse(filename);
+			if (read)
+			{
+				m_document->setAudioSourceInfoModel(m_audioSourceInfoModel);
+				loadRelatedModel();
+			}
+		    break;
+		}
+		case LoadedFile::MODEL :
+		{
+			QString modelName = m_audioSourceInfoModel->getKey(uri);
+
+			read = addModelToLayers(modelName, filename);
+
+		    break;
+		}
+		case LoadedFile::METADATA :
+		{
+			ModelReader modelReader(m_document,0, m_currentPane);
+			read = modelReader.parse(filename);
+
+		    break;
+		}
+		case LoadedFile::QUERY_CONFIG :
+		{
+			QueryConfigReader reader(m_queryModel);
+			bool ok = reader.parse(filename);
+
+			if (ok)
+				emit queryModelLoaded(m_queryModel);
+
+			read = ok;
+		    break;
+		}
+		case LoadedFile::QUERY_RESULTS :
+		{
+			QueryResultsWidget* resultsWidget = MainWindow::instance()->getQueryResultsWidget();
+			resultsWidget->reset();
+
+			if (resultsWidget)
+			{
+				SparqlResultsReader reader(resultsWidget);
+				read = reader.parse(filename);
+			}
+		    break;
+		}
+		case LoadedFile::RELATED_MEDIA_LIST :
+		{
+			std::list<QString> relMediaList;
+			SparqlRelatedMediaReader reader(&relMediaList);
+			read = reader.parse(filename);
+			importRelatedMedia(&relMediaList);
+			break;
+		}
+		case LoadedFile::RELATED_MEDIA :
+		{
+			read = true;
+			RelatedMediaWidget* relMediaWidget = MainWindow::instance()->getRelatedMediaWidget();
+			relMediaWidget->addRelatedMedia(filename);
+			break;
+		}
+		default: break;
+	}
+
+	//if the file could not be read by any reader
+	if (!read)
+	{
+		QFile file(filename);
+		if (file.open(QFile::ReadOnly)) {
+			QApplication::restoreOverrideCursor();
+			QMessageBox::critical(MainWindow::instance(), tr("Download Error"), file.readAll());
+		}
+	}
+	else {
+		std::cerr << "fileLoaded() : " << index << " all successful. " << std::endl;
+	}
+	QApplication::restoreOverrideCursor();
+}
+
+void EasaierSessionManager::loadRelatedModel()
+{
+	std::set<Layer *> layers = m_document->getLayers();
+	std::set<Layer *>::iterator iter;
+
+	std::set<QString> loadedModel;
+
+	for (iter=layers.begin(); iter != layers.end(); iter++)
+	{
+		Layer * layer = *iter;
+
+		QString modelName	= layer->getModelName();
+		if (modelName != "")
+		{
+			QString modelId		= QString::number(layer->getModelId());
+			//modelName.append(modelId);
+
+		} else if (layer->getLayerPresentationName() == "Waveform")
+		{
+			//modelName = "http://purl.org/dc/elements/1.1/source";
+			modelName = "available_as";
+			int modelId = 1;
+			layer->setModelName(modelName);
+			layer->setModelId(modelId);
+			//modelName.append(QString::number(modelId));
+		} 
+		
+		if (modelName != "")
+		{
+			QString uri = m_audioSourceInfoModel->getInfo(modelName)->at(0);
+			
+			QString query = m_httpClient->getServletName() + "?theme=getFile&fileName="+uri;
+
+			std::set<QString>::iterator iterModel = m_modelLoaded.find(uri);
+
+			if (iterModel == m_modelLoaded.end())
+			{
+				m_modelLoaded.insert(uri);
+				loadFile(query, uri, LoadedFile::MODEL);
+			}
+		}
+	}
+}
+
+bool EasaierSessionManager::addModelToLayers(const QString& name, const QString& filename)
+{
+	std::set<Layer *> layers = m_document->getLayers();
+	std::set<Layer *>::iterator iter;
+
+	std::map<QString, Model *> addedModel;
+
+	bool ok = false;
+
+	for (iter=layers.begin(); iter != layers.end(); iter++)
+	{
+		Layer * layer = *iter;
+
+		QString modelName	= layer->getModelName();
+		QString modelId		= QString::number(layer->getModelId());
+
+		//modelName.append(modelId);
+		modelName = modelName.toLower();
+
+		if (modelName == name)
+		{
+			std::map<QString, Model *>::iterator iterModel;
+			iterModel = addedModel.find(modelName);
+
+			if (iterModel == addedModel.end())
+			{
+				QString extension = filename.right(filename.length()-filename.lastIndexOf(".")-1);
+				if (AudioFileReaderFactory::isKnownExtensions(extension))
+				{
+					WaveFileModel *model = new WaveFileModel(filename);
+					m_document->setMainModel(model);
+					addedModel[modelName] = (Model* ) model;
+					ok = true;
+					emit audioFileLoaded();
+				}
+#ifdef HAVE_VIDEO
+				else if (VideoFileReaderFactory::isKnownExtensions(extension)) 
+				{
+					ok = !(MainWindow::instance()->openVideoFile(filename, MainWindow::ReplaceMainModel));
+					emit audioFileLoaded();
+				}
+#endif
+				else
+				{
+					ModelReader modelReader(m_document, layer);
+					ok = modelReader.parse(filename);
+				}
+			}
+			else
+			{
+				Model* model = iterModel->second;
+				m_document->addImportedModel(model);
+				m_document->setModel(layer, model);
+			}
+		}
+	}
+
+	return ok;
+}
+
+void EasaierSessionManager::importMetadata(const QString& filename, Pane* pane)
+{
+	QString query = m_httpClient->getServletName() + "?theme=getFile&fileName="+filename;
+
+	loadFile( query, filename, LoadedFile::METADATA);
+
+	m_currentPane = pane;
+}
+
+void EasaierSessionManager::importRelatedMedia(std::list<QString> *relMediaList)
+{
+	QString filename;
+	QString query;
+
+	std::list<QString>::iterator iter;
+	for (iter = relMediaList->begin(); iter != relMediaList->end(); iter++)
+	{
+		filename = *iter;
+
+		query = m_httpClient->getServletName() + "?theme=getFile&fileName=" + filename;
+
+		loadFile( query, filename, LoadedFile::RELATED_MEDIA);
+	}
+}
+
+void EasaierSessionManager::queryDatabase(const QString& themeName)
+{
+	
+	QueryThemeModel *themeModel = (m_queryModel->getThemes()).find(themeName)->second;
+	QString postFilePath = "";
+
+	//for the post
+	QString boundary="7d44e178b0434";
+	QString endline="\r\n";
+	QString start_delim="--"+boundary+endline;
+	QString cont_disp_str="Content-Disposition: form-data; ";
+
+	QByteArray *payload = new QByteArray();
+	QDataStream data_stream(payload, QFile::WriteOnly | QFile::Unbuffered);
+	/////////
+
+	QString param = start_delim + cont_disp_str + "name=" + "\"theme\""+endline+endline+themeName+endline;
+	data_stream.writeRawData(param.toStdString().c_str(),param.toStdString().length());
+
+	if(themeModel!=0){
+
+		PropertyContainer::PropertyList propertyList = themeModel->getProperties();
+		for(int i=0; i< ((int) propertyList.size());i++){
+			if (themeModel->getPropertyType(propertyList[i]) == PropertyContainer::FileProperty)
+			{
+				postFilePath = themeModel->getPropertyValue(propertyList[i]);
+				if(postFilePath!=""){
+					QString only_filename = postFilePath.section( '/', -1 );
+					QString param = start_delim + cont_disp_str + "name=" + "\""+propertyList[i]+"\""+"; filename="+"\""+only_filename+"\""+endline+"Content-Type: application/octet-stream"+endline+endline;
+					data_stream.writeRawData(param.toStdString().c_str(),param.toStdString().length());
+					
+					QFile file(postFilePath);
+					long int i=0;
+					char *s=new char[file.size()+2];
+					
+					while (!file.atEnd()) {
+						QByteArray line = file.readLine();
+						data_stream.writeRawData(line.data(),line.length());
+					}
+					file.close();
+				}
+			}
+			else{
+				QString param = start_delim + cont_disp_str + "name=" + "\""+propertyList[i]+"\""+endline+endline+themeModel->getPropertyValue(propertyList[i])+endline;
+				data_stream.writeRawData(param.toStdString().c_str(),param.toStdString().length());
+			}
+		}
+		QString stop_delim=endline+"--"+boundary+"--"+endline;
+		data_stream.writeRawData(stop_delim.toStdString().c_str(),stop_delim.toStdString().length());
+	}
+	QString filename = "/easaier/servlet/"+themeName;
+	
+	QApplication::setOverrideCursor( Qt::WaitCursor );
+	loadFile(*payload, filename, LoadedFile::QUERY_RESULTS, postFilePath);
+}
--- a/sv/main/EasaierSessionManager.h	Fri Mar 28 16:08:21 2008 +0000
+++ b/sv/main/EasaierSessionManager.h	Mon Jun 02 08:01:16 2008 +0000
@@ -1,16 +1,16 @@
-/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
-
-/*	Sound Access	
-		EASAIER client application.	
-		Silogic 2007. Laure Bajard. 
-	
-	This program is free software; you can redistribute it and/or    
-	modify it under the terms of the GNU General Public License as    
-	published by the Free Software Foundation; either version 2 of the    
-	License, or (at your option) any later version.  See the file    
-	COPYING included with this distribution for more information.
-*/
-
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*	Sound Access	
+		EASAIER client application.	
+		Silogic 2007. Laure Bajard. 
+	
+	This program is free software; you can redistribute it and/or    
+	modify it under the terms of the GNU General Public License as    
+	published by the Free Software Foundation; either version 2 of the    
+	License, or (at your option) any later version.  See the file    
+	COPYING included with this distribution for more information.
+*/
+
 #ifndef _EASAIER_SESSION_MANAGER_H_
 #define _EASAIER_SESSION_MANAGER_H_
 
@@ -67,7 +67,9 @@
 
 	inline void setHttpClient(HttpClient* httpClient) {m_httpClient = httpClient;}
 
-	void loadFile(const QString& query, const QString& filename, LoadedFile::FileType type);
+	void loadFile(const QString& query, const QString& filename, LoadedFile::FileType type, const QString& postPath="");
+	
+	void loadFile(const QByteArray& payload, const QString& filename, LoadedFile::FileType type, const QString& postPath="");
 
 	bool newSession();
 	void closeSession();