Skip to content
Snippets Groups Projects
Commit 97996a58 authored by stefan's avatar stefan
Browse files

FileLoader, modified Exception handling

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1869 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent bd144663
Branches
Tags
No related merge requests found
......@@ -64,51 +64,61 @@ LoaderManagerPtr FileLoader::loader_manager_ = LoaderManagerPtr();
FileLoader::FileLoader(){}
void FileLoader::LoadObject(const QString& file_name)
void FileLoader::LoadObject(const QString& filename)
{
gfx::GfxObjP obj;
if(file_name.endsWith(".py",Qt::CaseInsensitive)){
FileLoader::RunScript(file_name);
if(filename.endsWith(".py",Qt::CaseInsensitive)){
FileLoader::RunScript(filename);
}
else if(file_name.endsWith(".pdb",Qt::CaseInsensitive)||
file_name.endsWith(".ent",Qt::CaseInsensitive)||
file_name.endsWith(".pdb.gz",Qt::CaseInsensitive)||
file_name.endsWith(".ent.gz",Qt::CaseInsensitive)){
FileLoader::LoadPDB(file_name);
else if(filename.endsWith(".pdb",Qt::CaseInsensitive)||
filename.endsWith(".ent",Qt::CaseInsensitive)||
filename.endsWith(".pdb.gz",Qt::CaseInsensitive)||
filename.endsWith(".ent.gz",Qt::CaseInsensitive)){
FileLoader::LoadPDB(filename);
}
else{
obj=FileLoader::TryLoadEntity(file_name);
#if OST_IMG_ENABLED
if (!obj) {
try{
obj=FileLoader::TryLoadMap(file_name);
} catch (io::IOUnknownFormatException&) {
try{
obj=FileLoader::TryLoadEntity(filename);
#if OST_IMG_ENABLED
if (!obj) {
try{
obj=FileLoader::TryLoadMap(filename);
} catch (io::IOFileAlreadyLoadedException&) {
return;
}
}
#endif
if (!obj) {
obj=FileLoader::TryLoadSurface(filename);
}
if (!obj) {
obj=FileLoader::NoHandlerFound(filename);
}
if (!obj){
return;
}
FileLoader::AddToScene(filename, obj);
}catch (io::IOException& e) {
FileLoader::HandleError(e,IO_LOADING,filename);
}
#endif
if (!obj) {
obj=FileLoader::TryLoadSurface(file_name);
}
if (!obj) {
obj = FileLoader::NoHandlerFound(file_name);
}
if (!obj){
return;
}
try{
gfx::Scene::Instance().Add(obj);
}
catch (Message m) {
HandleError(m, obj);
}
}
}
void FileLoader::AddToScene(const QString& filename, gfx::GfxObjP obj)
{
try{
gfx::Scene::Instance().Add(obj);
if (gfx::Scene::Instance().GetRootNode()->GetChildCount()==1) {
gfx::Scene::Instance().SetCenter(obj->GetCenter());
}
}
catch (Message m) {
FileLoader::HandleError(m, GFX_ADD, filename, obj);
}
}
gfx::GfxObjP FileLoader::NoHandlerFound(const QString& filename){
gfx::GfxObjP FileLoader::NoHandlerFound(const QString& filename)
{
FileTypeDialog dialog(filename);
if(dialog.exec()){
if(dialog.GetEntityHandler()){
......@@ -123,13 +133,12 @@ gfx::GfxObjP FileLoader::NoHandlerFound(const QString& filename){
}
#endif
}
return gfx::GfxObjP();
}
void FileLoader::LoadFrom(const QString& id, const QString& site)
{
if(!loader_manager_.get())
if(!loader_manager_)
loader_manager_ = LoaderManagerPtr(new LoaderManager());
RemoteSiteLoader* remote_site = loader_manager_->GetRemoteSiteLoader(site);
if(remote_site){
......@@ -145,38 +154,58 @@ void FileLoader::LoadFrom(const QString& id, const QString& site)
LoaderManagerPtr FileLoader::GetLoaderManager()
{
if(!loader_manager_.get())
if(!loader_manager_)
loader_manager_ = LoaderManagerPtr(new LoaderManager());
return loader_manager_;
}
std::vector<String> FileLoader::GetSiteLoaderIdents()
{
if(!loader_manager_.get())
if(!loader_manager_)
loader_manager_ = LoaderManagerPtr(new LoaderManager());
return loader_manager_->GetSiteLoaderIdents();
}
void FileLoader::HandleError(Message m, gfx::GfxObjP obj){
QMessageBox messageBox(QMessageBox::Warning,
"Error while adding Node to Scene", m._mesg.c_str());
//Todo Add Rename Button
messageBox.setStandardButtons( QMessageBox::Yes | QMessageBox::Cancel);
messageBox.setButtonText(QMessageBox::Yes, "Reload");
int value = messageBox.exec();
switch(value){
case QMessageBox::Yes:
gfx::Scene::Instance().Remove(obj->GetName());
gfx::Scene::Instance().Add(obj);
break;
void FileLoader::HandleError(Message m, ErrorType type, const QString& filename, gfx::GfxObjP obj)
{
if(type==GFX_ADD || type==GFX_MULTIPLE_ADD){
QMessageBox message_box(QMessageBox::Warning,
"Error while adding Node to Scene", m._mesg.c_str());
if(type==GFX_ADD){
message_box.setStandardButtons( QMessageBox::Yes | QMessageBox::Cancel);
message_box.setButtonText(QMessageBox::Yes, "Reload");
int value = message_box.exec();
switch(value){
case QMessageBox::Yes:
gfx::Scene::Instance().Remove(obj->GetName());
gfx::Scene::Instance().Add(obj);
break;
}
}
else {
message_box.setStandardButtons(QMessageBox::Ok);
message_box.exec();
}
}
else if(type==IO_LOADING){
QMessageBox message_box(QMessageBox::Warning,
"Error while loading file", m._mesg.c_str());
message_box.setStandardButtons( QMessageBox::Yes | QMessageBox::Cancel);
message_box.setButtonText(QMessageBox::Yes, "Chose format");
int value = message_box.exec();
switch(value){
case QMessageBox::Yes:
FileLoader::NoHandlerFound(filename);
break;
}
}
}
gfx::GfxObjP FileLoader::TryLoadEntity(const QString& file_name, io::EntityIOHandlerP handler)
gfx::GfxObjP FileLoader::TryLoadEntity(const QString& filename, io::EntityIOHandlerP handler) throw (io::IOException)
{
if(!handler){
try{
handler = io::IOManager::Instance().FindEntityImportHandler(file_name.toStdString());
handler = io::IOManager::Instance().FindEntityImportHandler(filename.toStdString());
}
catch(io::IOUnknownFormatException e){
handler = io::EntityIOHandlerP();
......@@ -184,34 +213,26 @@ gfx::GfxObjP FileLoader::TryLoadEntity(const QString& file_name, io::EntityIOHan
}
if(handler){
if(dynamic_cast<io::EntityIOPDBHandler*>(handler.get())){
FileLoader::LoadPDB(file_name);
FileLoader::LoadPDB(filename);
}
else{
QFileInfo file_info(file_name);
QFileInfo file_info(filename);
mol::EntityHandle eh=mol::CreateEntity();
mol::XCSEditor xcs_lock=eh.RequestXCSEditor(mol::BUFFERED_EDIT);
try{
handler->Import(eh,file_name.toStdString());
if(handler->RequiresBuilder()) {
conop::BuilderP builder = conop::Conopology::Instance().GetBuilder();
conop::Conopology::Instance().ConnectAll(builder,eh,0);
}
gfx::GfxObjP obj(new gfx::Entity(file_info.baseName().toStdString(),eh));
return obj;
}
catch(io::IOException e){
QMessageBox messageBox(QMessageBox::Warning,
"Error while loading file", e._mesg.c_str());
messageBox.setStandardButtons( QMessageBox::Ok);
messageBox.exec();
handler->Import(eh,filename.toStdString());
if(handler->RequiresBuilder()) {
conop::BuilderP builder = conop::Conopology::Instance().GetBuilder();
conop::Conopology::Instance().ConnectAll(builder,eh,0);
}
gfx::GfxObjP obj(new gfx::Entity(file_info.baseName().toStdString(),eh));
return obj;
}
}
return gfx::GfxObjP();
}
#if OST_IMG_ENABLED
gfx::GfxObjP FileLoader::TryLoadMap(const QString& filename, io::MapIOHandlerPtr handler) throw(io::IOException,io::IOUnknownFormatException)
gfx::GfxObjP FileLoader::TryLoadMap(const QString& filename, io::MapIOHandlerPtr handler) throw(io::IOException, io::IOFileAlreadyLoadedException)
{
if(!handler){
try{
......@@ -223,47 +244,39 @@ gfx::GfxObjP FileLoader::TryLoadMap(const QString& filename, io::MapIOHandlerPtr
}
if(handler){
img::ImageHandle map = CreateImage(img::Extent(),img::REAL,img::SPATIAL);
try{
handler->Import(map,filename.toStdString(),io::UndefinedImageFormat());
ost::img::Extent ext = map.GetExtent();
if(ext.GetSize().GetDepth()>1){
QFileInfo file_info(filename);
gfx::MapIsoP map_iso(new gfx::MapIso(file_info.baseName().toStdString(),
map, 0.0));
map_iso->SetLevel(map_iso->GetMean());
return map_iso;
}
else if(ext.GetSize().GetDepth()==1){
//FIXME ImageHandle should not be destroyed at the end of method
//therefore hack with list
loaded_images_.append(map);
ost::img::gui::DataViewer* viewer = GostyApp::Instance()->CreateDataViewer(loaded_images_.last());
gui::GostyApp::Instance()->GetPerspective()->GetMainArea()->AddWidget(filename,viewer);
throw io::IOException("File already loaded");
}
}catch(io::IOException e){
QMessageBox messageBox(QMessageBox::Warning,
"Error while loading file", e._mesg.c_str());
messageBox.setStandardButtons( QMessageBox::Ok);
messageBox.exec();
handler->Import(map,filename.toStdString(),io::UndefinedImageFormat());
ost::img::Extent ext = map.GetExtent();
if(ext.GetSize().GetDepth()>1){
QFileInfo file_info(filename);
gfx::MapIsoP map_iso(new gfx::MapIso(file_info.baseName().toStdString(),
map, 0.0));
map_iso->SetLevel(map_iso->GetMean());
return map_iso;
}
else if(ext.GetSize().GetDepth()==1){
//FIXME ImageHandle should not be destroyed at the end of method
//therefore hack with list
loaded_images_.append(map);
ost::img::gui::DataViewer* viewer = GostyApp::Instance()->CreateDataViewer(loaded_images_.last());
gui::GostyApp::Instance()->GetPerspective()->GetMainArea()->AddWidget(filename,viewer);
throw io::IOFileAlreadyLoadedException("Loaded in DataViewer");
}
}
return gfx::GfxObjP();
}
#endif
gfx::GfxObjP FileLoader::TryLoadSurface(const QString& filename, io::SurfaceIOHandlerPtr handler)
gfx::GfxObjP FileLoader::TryLoadSurface(const QString& filename, io::SurfaceIOHandlerPtr handler) throw(io::IOException)
{
if(!handler){
try{
handler = io::IOManager::Instance().FindSurfaceImportHandler(filename.toStdString(),"msms");
handler = io::IOManager::Instance().FindSurfaceImportHandler(filename.toStdString(),"auto");
}
catch(io::IOUnknownFormatException e){
handler = io::SurfaceIOHandlerPtr();
}
}
if(handler){
try {
QFileInfo fi(filename);
QString path = fi.absolutePath().append(QDir::separator()).append(fi.completeBaseName());
mol::SurfaceHandle sh = mol::CreateSurface();
......@@ -275,9 +288,6 @@ gfx::GfxObjP FileLoader::TryLoadSurface(const QString& filename, io::SurfaceIOHa
gfx::SurfaceP gfx_surf(new gfx::Surface(fi.baseName().toStdString(),sh));
return gfx_surf;
}
}catch (io::IOException&) {
return gfx::GfxObjP();
}
}
return gfx::GfxObjP();
}
......@@ -314,7 +324,7 @@ void FileLoader::LoadPDB(const QString& filename)
gfx::Scene::Instance().Add(gfx_ent);
}
catch (Message m) {
HandleError(m, gfx_ent);
HandleError(m, GFX_ADD, filename, gfx_ent);
}
if (gfx::Scene::Instance().GetRootNode()->GetChildCount()==1) {
gfx::Scene::Instance().SetCenter(gfx_ent->GetCenter());
......@@ -328,13 +338,11 @@ void FileLoader::LoadPDB(const QString& filename)
}
}
catch (Message m) {
QMessageBox messageBox(QMessageBox::Warning,
"Error while adding Nodes to Scene", m._mesg.c_str());
messageBox.setStandardButtons( QMessageBox::Ok);
messageBox.exec();
FileLoader::HandleError(m,GFX_MULTIPLE_ADD,filename);
}
}
}
FileLoader::~FileLoader(){}
} }
......@@ -41,15 +41,23 @@ namespace ost { namespace gui {
class DLLEXPORT_OST_GUI FileLoader {
private:
enum ErrorType { DEFAULT = 0,
IO_LOADING,
GFX_ADD,
GFX_MULTIPLE_ADD
};
FileLoader();
static void HandleError(Message m, gfx::GfxObjP obj);
static gfx::GfxObjP TryLoadEntity(const QString& file_name, io::EntityIOHandlerP handler=io::EntityIOHandlerP());
static gfx::GfxObjP TryLoadEntity(const QString& filename, io::EntityIOHandlerP handler=io::EntityIOHandlerP()) throw (io::IOException);
static gfx::GfxObjP TryLoadSurface(const QString& filename, io::SurfaceIOHandlerPtr handler=io::SurfaceIOHandlerPtr()) throw (io::IOException);
#if OST_IMG_ENABLED
static gfx::GfxObjP TryLoadMap(const QString& filename, io::MapIOHandlerPtr handler=io::MapIOHandlerPtr()) throw(io::IOException,io::IOUnknownFormatException);
static gfx::GfxObjP TryLoadMap(const QString& filename, io::MapIOHandlerPtr handler=io::MapIOHandlerPtr()) throw (io::IOException, io::IOFileAlreadyLoadedException);
#endif
static gfx::GfxObjP TryLoadSurface(const QString& filename, io::SurfaceIOHandlerPtr handler=io::SurfaceIOHandlerPtr());
static void RunScript(const QString& filename);
static void LoadPDB(const QString& filename);
static void AddToScene(const QString& filename, gfx::GfxObjP obj);
static void HandleError(Message m, ErrorType type, const QString& filename, gfx::GfxObjP obj=gfx::GfxObjP());
static gfx::GfxObjP NoHandlerFound(const QString& filename);
virtual ~FileLoader();
......@@ -60,7 +68,7 @@ private:
#endif
public:
static void LoadObject(const QString& file_name);
static void LoadObject(const QString& filename);
static void LoadFrom(const QString& id, const QString& site=QString());
static std::vector<String> GetSiteLoaderIdents();
static LoaderManagerPtr GetLoaderManager();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment