// SrmRequestFileStatus.cxx #include "dial_ws_srm/SrmRequestFileStatus.h" #include using std::string; using std::ostream; using dial::SrmFileMetadata; using dial::SrmRequestFileStatus; typedef SrmRequestFileStatus::State State; typedef SrmRequestFileStatus::Id Id; typedef SrmRequestFileStatus::Name Name; typedef SrmRequestFileStatus::Order Order; typedef SrmRequestFileStatus::Time Time; //********************************************************************* // Local definitions. //********************************************************************* namespace { // Time to string conversion. string stime(Time tim) { const char* fmt = "%Y %B %d %X"; char ctim[256]; strftime(ctim, 256, fmt, localtime(&tim)); return ctim; } } // end unnamed namespace //********************************************************************* // Methods. //********************************************************************* // Default constructor. SrmRequestFileStatus::SrmRequestFileStatus() { } //********************************************************************* // Constructor. SrmRequestFileStatus:: SrmRequestFileStatus(const GsoapRequestFileStatus& grs) : SrmFileMetadata(grs), m_fid(grs.fileId), m_qord(grs.queueOrder) { if ( grs.state != 0 ) m_state = *grs.state; if ( grs.TURL != 0 ) m_turl = *grs.TURL; if ( grs.sourceFilename != 0 ) m_src = *grs.sourceFilename; if ( grs.destFilename != 0 ) m_dest = *grs.destFilename; time(&m_tup); m_tready = grs.estSecondsToStart; if ( is_pending() && m_tready ) { m_tready += m_tup; } } //********************************************************************* // Validity. bool SrmRequestFileStatus::is_valid() const { bool ok = SrmFileMetadata::is_valid(); ok &= is_pending() || is_ready() || is_running() || is_done() || is_failed(); return ok; } //********************************************************************* // State. State SrmRequestFileStatus::state() const { return m_state; } //********************************************************************* // Is pending. bool SrmRequestFileStatus::is_pending() const { return m_state == "Pending"; } //********************************************************************* // Is ready. bool SrmRequestFileStatus::is_ready() const { return m_state == "Ready"; } //********************************************************************* // Is running. bool SrmRequestFileStatus::is_running() const { return m_state == "Running"; } //********************************************************************* // Is done. bool SrmRequestFileStatus::is_done() const { return m_state == "Done"; } //********************************************************************* // Is failed. bool SrmRequestFileStatus::is_failed() const { return m_state == "Failed"; } //********************************************************************* // File ID. Id SrmRequestFileStatus::file_id() const { return m_fid; } //********************************************************************* // TURL. Name SrmRequestFileStatus::turl() const { return m_turl; } //********************************************************************* // Ready time. Time SrmRequestFileStatus::update_time() const { return m_tup; } //********************************************************************* // Ready time. Time SrmRequestFileStatus::ready_time() const { return m_tready; } //********************************************************************* // Source file. Name SrmRequestFileStatus::source_file() const { return m_src; } //********************************************************************* // Destination file. Name SrmRequestFileStatus::destination_file() const { return m_dest; } //********************************************************************* // Queue order. Order SrmRequestFileStatus::queue_order() const { return m_qord; } //********************************************************************* // Free functions. //********************************************************************* // Output stream. ostream& operator<<(ostream& lhs, const dial::SrmRequestFileStatus& rhs) { Name state = rhs.state(); if ( ! rhs.is_valid() ) { lhs << "Invalid request file status (state "; if ( state.size() ) { lhs << "= \"" << state << "\")"; } else { lhs << "is undefined"; } return lhs; } lhs << "SRM request file status is " << state; rhs.ostr(lhs, false); lhs << "\n TURL: "; Name turl = rhs.turl(); if ( turl.size() ) { lhs << turl; } else { lhs << "is undefined"; } Time now; time(&now); lhs << "\n Current time: " << stime(now); lhs << "\n Update time: " << stime(rhs.update_time()); if ( rhs.is_pending() ) { lhs << "\n Ready time"; Time tr = rhs.ready_time(); if ( tr ) { lhs << ": " << stime(tr); } else { lhs << " is undefined"; } lhs << "\n Queue position: " << rhs.queue_order(); } return lhs; } //*********************************************************************