00001 #include <config/Configuration.h>
00002
00003 #include "DAL/Partition.h"
00004 #include "DAL/Crate.h"
00005
00006 template<typename T> void destroyListOfObjects(::Configuration &conf, std::vector<const T*> objects);
00007
00008 SCTDAL::Partition *createPartition();
00009 SCTDAL::Crate *createCrate(SCTDAL::Partition *);
00010
00011 void destroyPartitions();
00012 void destroyCrates();
00013
00014 std::string testFilename("clearTest.data.xml");
00015 Configuration conf("oksconfig");
00016
00017 int main() {
00018
00019 system(("rm .oks-lock-" + testFilename).c_str());
00020 system(("rm " + testFilename).c_str());
00021
00022 std::list<std::string> includes;
00023 includes.push_back("SCT.schema.xml");
00024
00025 if(conf.create("", testFilename, includes) == false) {
00026 std::cerr << "ERROR: failed to create file \'" << testFilename << "\'\n";
00027 conf.abort();
00028 }
00029
00030 SCTDAL::Partition *part = createPartition();
00031 createCrate(part);
00032
00033
00034 createPartition();
00035
00036 destroyPartitions();
00037 createCrate(0);
00038 }
00039
00040 SCTDAL::Partition *createPartition() {
00041 SCTDAL::Partition *partObj = const_cast<SCTDAL::Partition*>(conf.create<SCTDAL::Partition>(testFilename, ""));
00042 if(partObj == 0) {
00043 std::cerr << "ERROR: failed to create partition\n";
00044 conf.abort();
00045 return 0;
00046 }
00047
00048 partObj->set_id(10);
00049 conf.commit();
00050
00051 return partObj;
00052 }
00053
00054 SCTDAL::Crate *createCrate(SCTDAL::Partition *part) {
00055 SCTDAL::Crate * crtObj = const_cast<SCTDAL::Crate*>(conf.create<SCTDAL::Crate>(testFilename, ""));
00056 if(crtObj == 0) {
00057 std::cerr << "ERROR: failed to create crate\n";
00058 conf.abort();
00059 return 0;
00060 }
00061
00062 crtObj->set_id(10);
00063
00064 if(part) {
00065 std::vector<const SCTDAL::Crate *> crates(part->get_crates());
00066 crates.push_back(crtObj);
00067 part->set_crates(crates);
00068 }
00069
00070 conf.commit();
00071
00072 return crtObj;
00073 }
00074
00075 void destroyPartitions() {
00076 std::cout << "Destroying partitions\n";
00077 std::vector<const SCTDAL::Partition *> partObs ;
00078 conf.get<SCTDAL::Partition>(partObs);
00079 destroyListOfObjects<SCTDAL::Partition>(conf, partObs);
00080 }
00081
00082 template<typename T> void destroyListOfObjects(::Configuration &conf, std::vector<const T*> objects) {
00083 typedef std::vector<const T*> TVector;
00084
00085 std::cerr << "Destroying " << objects.size() << " objects\n";
00086
00087 for(typename TVector::iterator i = objects.begin(); i != objects.end(); i++) {
00088 conf.destroy(**i);
00089 }
00090
00091 conf.commit();
00092 }