00001 /*************************************************************************** 00002 ** 00003 ** This file is part of GeopsyCore. 00004 ** 00005 ** This library is free software; you can redistribute it and/or 00006 ** modify it under the terms of the GNU Lesser General Public 00007 ** License as published by the Free Software Foundation; either 00008 ** version 2.1 of the License, or (at your option) any later version. 00009 ** 00010 ** This file is distributed in the hope that it will be useful, but WITHOUT 00011 ** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00012 ** FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 00013 ** License for more details. 00014 ** 00015 ** You should have received a copy of the GNU Lesser General Public 00016 ** License along with this library; if not, write to the Free Software 00017 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00018 ** 00019 ** See http://www.geopsy.org for more information. 00020 ** 00021 ** Created : 2006-03-20 00022 ** Authors : 00023 ** Marc Wathelet 00024 ** Marc Wathelet (LGIT, Grenoble, France) 00025 ** 00026 ***************************************************************************/ 00027 00028 #ifndef SIGNALDB_H 00029 #define SIGNALDB_H 00030 00031 #include <QGpCoreTools.h> 00032 00033 #include "SubSignalPool.h" 00034 #include "MasterSignalGroup.h" 00035 #include "SignalFilePool.h" 00036 #include "SharedMetaData.h" 00037 #include "GeopsyCoreDLLExport.h" 00038 00039 namespace GeopsyCore { 00040 00041 #define SIGNALDB_CURRENT_VERSION 5 00042 00043 class SubSignalPool; 00044 class SignalGroup; 00045 00046 class GEOPSYCORE_EXPORT SignalDB : private SubSignalPool, public XMLClass, public XMLContext 00047 { 00048 TRANSLATIONS("SignalDB"); 00049 public: 00050 SignalDB(); 00051 ~SignalDB(); 00052 00053 virtual const QString& xml_tagName() const {return xmlSignalDBTag;} 00054 static const QString xmlSignalDBTag; 00055 00056 void saveAs(QString fileName=QString::null); 00057 void save(); 00058 bool open(QString fileName=QString::null); 00059 QDir newFilePath() const; 00060 void clear(); 00061 00062 bool exists() const {return !name().isEmpty();} 00063 QString name() const {return SubSignalPool::name();} 00064 void setName(const QString& n) {SubSignalPool::setName(n);} 00065 int version() const {return _version;} 00066 00067 bool contains(Signal * sig) const {return SubSignalPool::contains(sig);} 00068 Signal * signal(int id) const; 00069 void addSignal(Signal * sig); 00070 void addFile(SignalFile * file); 00071 SignalFilePool& filePool() {return _files;} 00072 const SubSignalPool& subPool() const {return *this;} 00073 00074 AbstractSignalGroup * findGroup(QString name) const; 00075 MasterSignalGroup * masterGroup() const {return _masterGroup;} 00076 bool isModified(); 00077 void removeFile(SignalFile * f); 00078 void removeSignal(Signal * sig) {SubSignalPool::remove(sig);} 00079 void signalDeleted(Signal * sig); 00080 00081 int uniqueId(int requestedId); 00082 int count() const {return SubSignalPool::count();} 00083 Signal * at(int index) const {return SubSignalPool::at(index);} 00084 00085 void addMetaData(MetaData * d) {_permanentSharedMetaData.add(d);} 00086 void removeMetaData(int id) {_permanentSharedMetaData.remove(id);} 00087 MetaData * metaData(int id) {return _permanentSharedMetaData.data(id);} 00088 const MetaData * metaData(int id) const {return _permanentSharedMetaData.data(id);} 00089 00090 MetaData * resolveMetaData(int index); 00091 protected: 00092 virtual void xml_writeProperties(XML_WRITEPROPERTIES_ARGS) const; 00093 virtual void xml_writeChildren(XML_WRITECHILDREN_ARGS) const; 00094 virtual bool xml_setProperty(XML_SETPROPERTY_ARGS); 00095 virtual XMLMember xml_member(XML_MEMBER_ARGS); 00096 void xml_polish(XML_POLISH_ARGS); 00097 private: 00098 bool add(SignalDB * o); 00099 bool saveTemporaryFiles(); 00100 bool saveTemporarySignals(); 00101 int countId(int id); 00102 void createAllSharedMetaData(); 00103 void collectAllSharedMetaData(); 00104 void releaseAllSharedMetaData(); 00105 bool openDBFileV12(QString fileName); 00106 bool openDBFileV2(FILE * f); 00107 void openGroupsV12(); 00108 00109 SignalFilePool _files; 00110 MasterSignalGroup * _masterGroup; 00111 int _newId; 00112 int _version; 00113 MetaDataMap _permanentSharedMetaData; 00114 SharedMetaData * _allSharedMetaData; 00115 }; 00116 00117 } // namespace GeopsyCore 00118 00119 #endif // SIGNALDB_H