00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2009-05-28 17:19:30 +0200 (Do, 28 Mai 2009) $ 00006 Version: $Revision $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 //Poco headers 00019 #include "Poco/Zip/Compress.h" 00020 00021 #include "mitkNavigationToolStorageSerializer.h" 00022 #include "mitkNavigationToolWriter.h" 00023 #include <mitkStandaloneDataStorage.h> 00024 #include <mitkSceneIO.h> 00025 #include <mitkStandardFileLocations.h> 00026 00027 mitk::NavigationToolStorageSerializer::NavigationToolStorageSerializer() 00028 { 00029 00030 } 00031 00032 mitk::NavigationToolStorageSerializer::~NavigationToolStorageSerializer() 00033 { 00034 00035 } 00036 00037 bool mitk::NavigationToolStorageSerializer::Serialize(std::string filename, mitk::NavigationToolStorage::Pointer storage) 00038 { 00039 //convert whole data to a mitk::DataStorage 00040 mitk::StandaloneDataStorage::Pointer saveStorage = mitk::StandaloneDataStorage::New(); 00041 mitk::NavigationToolWriter::Pointer myToolWriter = mitk::NavigationToolWriter::New(); 00042 00043 for(int i=0; i<storage->GetToolCount();i++) 00044 { 00045 mitk::DataNode::Pointer thisTool = myToolWriter->ConvertToDataNode(storage->GetTool(i)); 00046 saveStorage->Add(thisTool); 00047 } 00048 00049 //use SceneSerialization to save the DataStorage 00050 std::string DataStorageFileName = mitk::StandardFileLocations::GetInstance()->GetOptionDirectory() + "\\" + myToolWriter->GetFileWithoutPath(filename) + ".storage"; 00051 mitk::SceneIO::Pointer mySceneIO = mitk::SceneIO::New(); 00052 mySceneIO->SaveScene(saveStorage->GetAll(),saveStorage,DataStorageFileName); 00053 00054 //then put the storage and the toolfiles into a zip-archive 00055 std::ofstream file( filename.c_str(), std::ios::binary | std::ios::out); 00056 if (!file.good()) 00057 { 00058 m_ErrorMessage = "Could not open a zip file for writing: '" + filename + "'"; 00059 return false; 00060 } 00061 else 00062 { 00063 Poco::Zip::Compress zipper( file, true ); 00064 zipper.addFile(DataStorageFileName,myToolWriter->GetFileWithoutPath(DataStorageFileName)); 00065 for (int i=0; i<storage->GetToolCount();i++) 00066 { 00067 //check if filename already exits 00068 for (int j=0; j<i; j++) if (myToolWriter->GetFileWithoutPath(storage->GetTool(i)->GetCalibrationFile()) == myToolWriter->GetFileWithoutPath(storage->GetTool(j)->GetCalibrationFile())) break; 00069 zipper.addFile(storage->GetTool(i)->GetCalibrationFile(),myToolWriter->GetFileWithoutPath(storage->GetTool(i)->GetCalibrationFile())); 00070 } 00071 zipper.close(); 00072 } 00073 00074 return true; 00075 }