Go to the documentation of this file.00001 #include <fstream>
00002 #include <cstdlib>
00003 #include <iostream>
00004 #include <stdio.h>
00005 #include <stdexcept>
00006 #include <string>
00007
00008 #include "OnlineDB/Oracle/interface/Oracle.h"
00009
00010 #include "OnlineDB/EcalCondDB/interface/ODTTCciConfig.h"
00011
00012 using namespace std;
00013 using namespace oracle::occi;
00014
00015 ODTTCciConfig::ODTTCciConfig()
00016 {
00017 m_env = NULL;
00018 m_conn = NULL;
00019 m_writeStmt = NULL;
00020 m_readStmt = NULL;
00021 m_config_tag="";
00022 m_configuration_script="";
00023 m_configuration_script_params="";
00024 m_ID=0;
00025 clear();
00026 m_size=0;
00027 }
00028
00029 void ODTTCciConfig::clear(){
00030 std::cout <<"entering clear" << std::endl;
00031 m_ttcci_file="";
00032 m_configuration_script="";
00033 m_configuration_script_params="";
00034 m_trg_mode="";
00035 m_trg_sleep=0;
00036
00037 }
00038
00039 ODTTCciConfig::~ODTTCciConfig()
00040 {
00041 }
00042
00043 int ODTTCciConfig::fetchNextId() throw(std::runtime_error) {
00044
00045 int result=0;
00046 try {
00047 this->checkConnection();
00048
00049 m_readStmt = m_conn->createStatement();
00050 m_readStmt->setSQL("select ecal_ttcci_config_sq.NextVal from dual");
00051 ResultSet* rset = m_readStmt->executeQuery();
00052 while (rset->next ()){
00053 result= rset->getInt(1);
00054 }
00055 m_conn->terminateStatement(m_readStmt);
00056 return result;
00057
00058 } catch (SQLException &e) {
00059 throw(std::runtime_error("ODTTCciConfig::fetchNextId(): "+e.getMessage()));
00060 }
00061
00062 }
00063
00064
00065
00066
00067 void ODTTCciConfig::prepareWrite()
00068 throw(std::runtime_error)
00069 {
00070 this->checkConnection();
00071
00072 int next_id=fetchNextId();
00073
00074 try {
00075 m_writeStmt = m_conn->createStatement();
00076 m_writeStmt->setSQL("INSERT INTO ECAL_TTCci_CONFIGURATION (ttcci_configuration_id, ttcci_tag, "
00077 " TTCCI_configuration_file, TRG_MODE, TRG_SLEEP, Configuration, configuration_script, configuration_script_params ) "
00078 "VALUES (:1, :2, :3, :4, :5, :6, :7, :8 )");
00079 m_writeStmt->setInt(1, next_id);
00080 m_writeStmt->setString(2, getConfigTag());
00081 m_writeStmt->setString(3, getTTCciConfigurationFile());
00082 m_writeStmt->setString(4, getTrgMode());
00083 m_writeStmt->setInt(5, getTrgSleep());
00084 m_writeStmt->setString(7, getConfigurationScript());
00085 m_writeStmt->setString(8, getConfigurationScriptParams());
00086
00087
00088 oracle::occi::Clob clob(m_conn);
00089 clob.setEmpty();
00090 m_writeStmt->setClob(6,clob);
00091 m_writeStmt->executeUpdate ();
00092 m_ID=next_id;
00093
00094 m_conn->terminateStatement(m_writeStmt);
00095 std::cout<<"TTCci Clob inserted into CONFIGURATION with id="<<next_id<<std::endl;
00096
00097
00098 m_writeStmt = m_conn->createStatement();
00099 m_writeStmt->setSQL ("SELECT Configuration FROM ECAL_TTCci_CONFIGURATION WHERE"
00100 " ttcci_configuration_id=:1 FOR UPDATE");
00101
00102 std::cout<<"updating the clob 0"<<std::endl;
00103
00104
00105 } catch (SQLException &e) {
00106 throw(std::runtime_error("ODTTCciConfig::prepareWrite(): "+e.getMessage()));
00107 }
00108
00109 std::cout<<"updating the clob 1 "<<std::endl;
00110
00111 }
00112
00113 void ODTTCciConfig::setParameters(std::map<string,string> my_keys_map){
00114
00115
00116
00117
00118 for( std::map<std::string, std::string >::iterator ci=
00119 my_keys_map.begin(); ci!=my_keys_map.end(); ci++ ) {
00120
00121 if(ci->first== "TRG_MODE") setTrgMode(ci->second);
00122 if(ci->first== "TRG_SLEEP") setTrgSleep(atoi(ci->second.c_str()));
00123 if(ci->first== "TTCci_CONFIGURATION_ID") setConfigTag(ci->second);
00124 if(ci->first== "CONFIGURATION_SCRIPT" ) setConfigurationScript(ci->second);
00125 if(ci->first== "CONFIGURATION_SCRIPT_PARAMS" ) setConfigurationScriptParams(ci->second);
00126 if(ci->first== "CONFIGURATION_SCRIPT_PARAMETERS" ) setConfigurationScriptParams(ci->second);
00127 if(ci->first== "Configuration") {
00128 std::string fname=ci->second ;
00129 string str3;
00130 size_t pos, pose;
00131
00132 pos = fname.find("=");
00133 pose = fname.size();
00134 str3 = fname.substr (pos+1, pose-pos-2);
00135
00136 cout << "fname="<<fname<< " and reduced is: "<<str3 << endl;
00137 setTTCciConfigurationFile(str3 );
00138
00139
00140
00141 std::cout << "Going to read file: " << str3 << endl;
00142
00143 ifstream inpFile;
00144 inpFile.open(str3.c_str());
00145
00146
00147 int bufsize = 0;
00148 inpFile.seekg( 0,ios::end );
00149 bufsize = inpFile.tellg();
00150 std::cout <<" bufsize ="<<bufsize<< std::endl;
00151
00152 inpFile.seekg( 0,ios::beg );
00153
00154 inpFile.close();
00155 m_size=bufsize;
00156
00157 }
00158 }
00159
00160 }
00161
00162
00163 void ODTTCciConfig::writeDB()
00164 throw(std::runtime_error)
00165 {
00166
00167
00168 std::cout<<"updating the clob 2"<<std::endl;
00169
00170
00171 try {
00172
00173
00174 m_writeStmt->setInt(1, m_ID);
00175 ResultSet* rset = m_writeStmt->executeQuery();
00176
00177 while (rset->next ())
00178 {
00179 oracle::occi::Clob clob = rset->getClob (1);
00180 cout << "Opening the clob in read write mode" << endl;
00181 cout << "Populating the clob" << endl;
00182 populateClob (clob, getTTCciConfigurationFile(), m_size);
00183 int clobLength=clob.length ();
00184 cout << "Length of the clob is: " << clobLength << endl;
00185
00186 }
00187
00188 m_writeStmt->executeUpdate();
00189
00190 m_writeStmt->closeResultSet (rset);
00191
00192 } catch (SQLException &e) {
00193 throw(std::runtime_error("ODTTCciConfig::writeDB(): "+e.getMessage()));
00194 }
00195
00196 if (!this->fetchID()) {
00197 throw(std::runtime_error("ODTTCciConfig::writeDB: Failed to write"));
00198 }
00199
00200 }
00201
00202
00203
00204
00205
00206
00207 void ODTTCciConfig::fetchData(ODTTCciConfig * result)
00208 throw(std::runtime_error)
00209 {
00210 this->checkConnection();
00211 result->clear();
00212 if(result->getId()==0 && (result->getConfigTag()=="") ){
00213 throw(std::runtime_error("ODTTCciConfig::fetchData(): no Id defined for this ODTTCciConfig "));
00214 }
00215
00216 try {
00217
00218 m_readStmt->setSQL("SELECT * "
00219 "FROM ECAL_TTCci_CONFIGURATION "
00220 " where ( ttcci_configuration_id = :1 or ttcci_tag=:2 )" );
00221 m_readStmt->setInt(1, result->getId());
00222 m_readStmt->setString(2, result->getConfigTag());
00223 ResultSet* rset = m_readStmt->executeQuery();
00224
00225 rset->next();
00226
00227
00228 result->setId(rset->getInt(1));
00229 result->setConfigTag(rset->getString(2));
00230
00231
00232 result->setTTCciConfigurationFile(rset->getString(3));
00233 result->setTrgMode(rset->getString(4));
00234 result->setTrgSleep(rset->getInt(5));
00235
00236 result->setConfigurationScript(rset->getString(7));
00237 result->setConfigurationScriptParams(rset->getString(8));
00238
00239 Clob clob = rset->getClob (6);
00240 cout << "Opening the clob in Read only mode" << endl;
00241 clob.open (OCCI_LOB_READONLY);
00242 int clobLength=clob.length ();
00243 cout << "Length of the clob is: " << clobLength << endl;
00244 m_size=clobLength;
00245 unsigned char* buffer = readClob (clob, m_size);
00246 clob.close ();
00247 cout<< "the clob buffer is:"<<endl;
00248 for (int i = 0; i < clobLength; ++i)
00249 cout << (char) buffer[i];
00250 cout << endl;
00251
00252
00253 result->setTTCciClob(buffer );
00254
00255 } catch (SQLException &e) {
00256 throw(std::runtime_error("ODTTCciConfig::fetchData(): "+e.getMessage()));
00257 }
00258 }
00259
00260
00261
00262 int ODTTCciConfig::fetchID() throw(std::runtime_error)
00263 {
00264 if (m_ID!=0) {
00265 return m_ID;
00266 }
00267
00268 this->checkConnection();
00269
00270 try {
00271 Statement* stmt = m_conn->createStatement();
00272 stmt->setSQL("SELECT ttcci_configuration_id FROM ecal_ttcci_configuration "
00273 "WHERE ttcci_tag=:ttcci_tag "
00274 );
00275
00276 stmt->setString(1, getConfigTag() );
00277
00278 ResultSet* rset = stmt->executeQuery();
00279
00280 if (rset->next()) {
00281 m_ID = rset->getInt(1);
00282 } else {
00283 m_ID = 0;
00284 }
00285 m_conn->terminateStatement(stmt);
00286 } catch (SQLException &e) {
00287 throw(std::runtime_error("ODTTCciConfig::fetchID: "+e.getMessage()));
00288 }
00289 return m_ID;
00290 }