clearTest.cpp

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   // In case the previous run didn't tidy up
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   // Removing this line makes it work
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 }

Generated on Mon Feb 6 14:01:17 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6