/home/coin/SVN-release/OS-2.0.0/OS/v2.0/OSrLWriter.cpp

Go to the documentation of this file.
00001 
00018 #define DEBUG
00019 
00020 
00021 
00022 
00023 #include "OSrLWriter.h"
00024 #include "OSResult.h"
00025 
00026 #include "OSDataStructures.h"
00027 #include "OSParameters.h" 
00028 #include "OSCommonUtil.h"
00029 #include "OSMathUtil.h"
00030 
00031   
00032 
00033 
00034 #include <sstream>   
00035 #include <iostream>  
00036 
00037 using std::cout;
00038 using std::endl;
00039 using std::ostringstream;
00040 
00041 OSrLWriter::OSrLWriter( ) {      
00042 }
00043 
00044 OSrLWriter::~OSrLWriter(){
00045 }
00046 
00047 
00048 /*char* OSrLWriter::writeOSrLWrap( OSResult *theosresult){
00049         std::string sTmp = writeOSrL( theosresult);
00050         char *ch;
00051     ch = new char[sTmp.size() + 1];
00052     strcpy(ch, sTmp.c_str());
00053         return ch;
00054 }
00055 */
00056 
00057 
00058 
00059 
00060  
00061 std::string OSrLWriter::writeOSrL( OSResult *theosresult){
00062         m_OSResult = theosresult;
00063         std::ostringstream outStr;  
00064         #ifdef WIN_
00065         const char      dirsep='\\';
00066         #else
00067         const char      dirsep='/';
00068         #endif
00069         // Set directory containing stylesheet files.
00070         std::string xsltDir;
00071     xsltDir = dirsep == '/' ? "../stylesheets/" : "..\\stylesheets\\";
00072     // always go with '/' -- it is a hypertext reference
00073     xsltDir = "../stylesheets/";
00074         int i, j;
00075 #ifdef DEBUG
00076         cout << "in OSrLWriter" << endl;
00077 #endif
00078         if(m_OSResult == NULL)  return outStr.str(); 
00079         outStr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" ; 
00080         outStr << "<?xml-stylesheet type=\"text/xsl\" href=\"";
00081         outStr << xsltDir;
00082         outStr << "OSrL.xslt\"?>";
00083         outStr << endl;
00084         outStr << "<osrl xmlns=\"os.optimizationservices.org\"   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
00085         outStr << "xsi:schemaLocation=\"os.optimizationservices.org http://www.optimizationservices.org/schemas/";
00086         outStr << OS_SCHEMA_VERSION;
00087         outStr << "/OSrL.xsd\" >" ;
00088         outStr << endl;
00089 #ifdef DEBUG
00090         cout << "output <general>" << endl;
00091 #endif
00092         if(m_OSResult->general != NULL){
00093                 outStr << "<general>" << endl;
00094                 if(m_OSResult->general->generalStatus != NULL){
00095                         outStr << "<generalStatus "    ;
00096                         if(m_OSResult->general->generalStatus->type.length() > 0){
00097                                 outStr << "type=\"";
00098                                 outStr << m_OSResult->general->generalStatus->type ;
00099                                 outStr << "\"";
00100                         }
00101                         if(m_OSResult->general->generalStatus->description.length() > 0){
00102                                 outStr << "type=\"";
00103                                 outStr << m_OSResult->general->generalStatus->description ;
00104                                 outStr << "\"";
00105                         }
00106                         outStr << "/>" << endl;
00107                 }               
00108                 
00109                 if(m_OSResult->general->serviceURI.length() > 0){
00110                         outStr << "<serviceURI>" + m_OSResult->general->serviceURI + "</serviceURI>"  << endl;
00111                 }
00112 
00113                 if(m_OSResult->general->serviceName.length() > 0){
00114                         outStr << "<serviceName>" + m_OSResult->general->serviceName + "</serviceName>"  << endl;
00115                 }
00116                 if(m_OSResult->general->instanceName.length() > 0){
00117                         outStr << "<instanceName>" + m_OSResult->general->instanceName  + "</instanceName>" << endl;
00118                 }
00119                 if(m_OSResult->general->jobID.length() > 0){
00120                         outStr << "<jobID>" + m_OSResult->general->jobID  + "</jobID>" << endl;
00121                 }
00122                 if(m_OSResult->general->message.length() > 0){
00123                         outStr << "<message>" + m_OSResult->general->message  + "</message>" << endl;
00124                 }
00125                 outStr << "</general>" << endl;
00126         }
00127 #ifdef DEBUG
00128         cout << "output <system>" << endl;
00129 #endif
00130         if(m_OSResult->system != NULL){
00131         }
00132 #ifdef DEBUG
00133         cout << "output <service>" << endl;
00134 #endif
00135         if(m_OSResult->service != NULL){
00136         }
00137 #ifdef DEBUG
00138         cout << "output <job>" << endl;
00139 #endif
00140         if(m_OSResult->job != NULL){
00141                 outStr << "<job>" << endl;
00142                 if (m_OSResult->job->timingInformation != NULL)
00143                         if (m_OSResult->job->timingInformation->numberOfTimes > 0)
00144                         {       outStr << "<timingInformation numberOfTimes=\"";
00145                                 outStr << m_OSResult->job->timingInformation->numberOfTimes << "\">" << endl;
00146                                 for (i=0; i<m_OSResult->job->timingInformation->numberOfTimes; i++)
00147                                 {       outStr << "<time ";
00148                                         if (m_OSResult->job->timingInformation->time[i]->type != "")
00149                                                 outStr << "type=\"" << m_OSResult->job->timingInformation->time[i]->type << "\" ";
00150                                         if (m_OSResult->job->timingInformation->time[i]->unit != "")
00151                                                 outStr << "unit=\"" << m_OSResult->job->timingInformation->time[i]->unit << "\" ";
00152                                         if (m_OSResult->job->timingInformation->time[i]->category != "")
00153                                                 outStr << "category=\"" << m_OSResult->job->timingInformation->time[i]->category << "\" ";
00154                                         if (m_OSResult->job->timingInformation->time[i]->description != "")
00155                                                 outStr << "description=\"" << m_OSResult->job->timingInformation->time[i]->description << "\" ";
00156                                         outStr << ">" << endl;
00157                                         outStr << os_dtoa_format(m_OSResult->job->timingInformation->time[i]->value);
00158                                         outStr << "</time>" << endl; 
00159                                 }
00160                                 outStr << "</timingInformation>" << endl;
00161                         }
00162                 outStr << "</job>" << endl;
00163         }
00164 #ifdef DEBUG
00165         cout << "output <optimization>" << endl;
00166 #endif
00167         if(m_OSResult->optimization != NULL && m_OSResult->optimization->numberOfSolutions > 0){
00168                 outStr << "<optimization " ;
00169                 outStr << "numberOfSolutions=\"";
00170                 outStr << m_OSResult->optimization->numberOfSolutions ;
00171                 outStr <<  "\"";
00172                 outStr << " numberOfVariables=\"";
00173                 outStr << m_OSResult->optimization->numberOfVariables ;
00174                 outStr <<  "\"";
00175                 outStr << " numberOfConstraints=\"";
00176                 outStr << m_OSResult->optimization->numberOfConstraints ;
00177                 outStr <<  "\"";
00178                 outStr << " numberOfObjectives=\"";
00179                 outStr << m_OSResult->optimization->numberOfObjectives ;
00180                 outStr << "\"" ;
00181                 outStr << ">" << endl;
00182                 // get solution information
00183                 for(i = 0; i < m_OSResult->optimization->numberOfSolutions; i++){
00184                         if(m_OSResult->optimization->solution[i] != NULL){
00185                                 outStr << "<solution" ;
00186                                 outStr << " targetObjectiveIdx=\"";
00187                                 outStr << m_OSResult->optimization->solution[i]->targetObjectiveIdx ;
00188                                 outStr << "\"" ;
00189                                 outStr << ">" << endl;
00190                                 if(m_OSResult->optimization->solution[i]->status != NULL){
00191                                         outStr << "<status";
00192                                         if(m_OSResult->optimization->solution[i]->status->type.length() > 0){
00193                                                 outStr << " type=\"";
00194                                                 outStr << m_OSResult->optimization->solution[i]->status->type;
00195                                                 outStr <<  "\"";
00196                                         }
00197                                         if(m_OSResult->optimization->solution[i]->status->description.length() > 0){
00198                                                 outStr << " description=\"";
00199                                                 outStr <<  m_OSResult->optimization->solution[i]->status->description;
00200                                                 outStr << "\"" ;
00201                                         }
00202                                         outStr << "/>" << endl;
00203                                 }
00204                                 if(m_OSResult->optimization->solution[i]->message != ""){
00205                                         outStr << "<message>" << endl;
00206                                         outStr << m_OSResult->optimization->solution[i]->message  << endl;
00207                                         outStr << "</message>" << endl;
00208                                 }
00209                                 if(m_OSResult->optimization->solution[i]->variables != NULL){
00210                                         outStr << "<variables ";
00211                                         if (m_OSResult->optimization->solution[i]->variables->numberOfOtherVariableResults > 0)
00212                                                 outStr << "numberOfOtherVariableResults=\"" << m_OSResult->optimization->solution[i]->variables->numberOfOtherVariableResults << "\""; 
00213                                         outStr << ">" << endl;
00214                                         if(m_OSResult->optimization->solution[i]->variables->values != NULL){
00215 #ifdef DEBUG
00216         cout << "output <variables> <values>" << endl;
00217 #endif
00218                                                 outStr << "<values numberOfVar=\"" << m_OSResult->optimization->solution[i]->variables->values->numberOfVar << "\">" << endl;
00219                                                 for(j = 0; j < m_OSResult->optimization->solution[i]->variables->values->numberOfVar; j++){
00220                                                         if(m_OSResult->optimization->solution[i]->variables->values->var[j] != NULL){
00221                                                                 outStr << "<var";
00222                                                                 outStr << " idx=\"";
00223                                                                 outStr << j ;
00224                                                                 outStr <<  "\">";
00225                                                                 outStr <<  os_dtoa_format( m_OSResult->optimization->solution[i]->variables->values->var[j]->value );
00226                                                                 outStr << "</var>" << endl;
00227                                                         }
00228                                                 }
00229                                                 outStr << "</values>" << endl;
00230                                         }
00231 #ifdef DEBUG
00232         cout << "output <variables> <other>" << endl;
00233 #endif
00234                                         if(m_OSResult->optimization->solution[i]->variables->other != NULL){
00235                                                 if(m_OSResult->optimization->solution[i]->variables->numberOfOtherVariableResults > 0){
00236                                                         for(int k = 0; k < m_OSResult->optimization->solution[i]->variables->numberOfOtherVariableResults; k++){
00237                                                                 cout << "<other" ;
00238                                                                 cout << " numberOfVar=\"";
00239                                                                 cout << m_OSResult->optimization->solution[i]->variables->other[k]->numberOfVar;
00240                                                                 cout << "\"" ;
00241                                                                 cout << " name=\"";
00242                                                                 cout << m_OSResult->optimization->solution[i]->variables->other[k]->name;
00243                                                                 cout << "\"" ;
00244                                                                 cout << " value=\"";
00245                                                                 cout << m_OSResult->optimization->solution[i]->variables->other[k]->value;
00246                                                                 cout << "\"" ;
00247                                                                 cout << " description=\"";
00248                                                                 cout << m_OSResult->optimization->solution[i]->variables->other[k]->description;
00249                                                                 cout << "\"" ;
00250                                                                 cout <<  ">" << endl;
00251 
00252                                                                 outStr << "<other" ;
00253                                                                 outStr << " numberOfVar=\"";
00254                                                                 outStr << m_OSResult->optimization->solution[i]->variables->other[k]->numberOfVar;
00255                                                                 outStr << "\"" ;
00256                                                                 if (m_OSResult->optimization->solution[i]->variables->other[k]->name != "")
00257                                                                 {
00258                                                                         outStr << " name=\"";
00259                                                                         outStr << m_OSResult->optimization->solution[i]->variables->other[k]->name;
00260                                                                         outStr << "\"" ;
00261                                                                 }
00262                                                                 if (m_OSResult->optimization->solution[i]->variables->other[k]->value != "")
00263                                                                 {
00264                                                                         outStr << " value=\"";
00265                                                                         outStr << m_OSResult->optimization->solution[i]->variables->other[k]->value;
00266                                                                         outStr << "\"" ;
00267                                                                 }
00268                                                                 if (m_OSResult->optimization->solution[i]->variables->other[k]->description != "")
00269                                                                 {
00270                                                                         outStr << " description=\"";
00271                                                                         outStr << m_OSResult->optimization->solution[i]->variables->other[k]->description;
00272                                                                         outStr << "\"" ;
00273                                                                 }
00274                                                                 outStr <<  ">" << endl;
00275                                                                 if(m_OSResult->optimization->solution[i]->variables->other[k]->var.size() > 0){
00276                                                                         for(j = 0; j < m_OSResult->optimization->solution[i]->variables->other[k]->numberOfVar; j++){
00277                                                                                 if(m_OSResult->optimization->solution[i]->variables->other[k]->var.size() > 0){
00278                                                                                         outStr << "<var";
00279                                                                                         outStr << " idx=\"";
00280                                                                                         outStr << j ;
00281                                                                                         outStr <<  "\">";
00282                                                                                         outStr <<    m_OSResult->optimization->solution[i]->variables->other[k]->var[j]->value;
00283                                                                                         outStr << "</var>" << endl;
00284                                                                                 }
00285                                                                         }
00286                                                                 }
00287                                                                 outStr << "</other>" << endl;
00288                                                         }
00289                                                 }
00290                                         } // end of if on other variables
00291                                         outStr << "</variables>" << endl;
00292                                 }
00293                                 //
00294                                 //
00295                                 //
00296                                 if(m_OSResult->optimization->solution[i]->objectives != NULL){
00297                                         outStr << "<objectives ";
00298                                         if (m_OSResult->optimization->solution[i]->objectives->numberOfOtherObjectiveResults > 0)
00299                                                 outStr << "numberOfOtherObjectiveResults=\"" << m_OSResult->optimization->solution[i]->objectives->numberOfOtherObjectiveResults << "\""; 
00300                                         outStr << ">" << endl;
00301 #ifdef DEBUG
00302         cout << "output <objectives> <values>" << endl;
00303 #endif
00304                                         if(m_OSResult->optimization->solution[i]->objectives->values != NULL){
00305                                                 outStr << "<values numberOfObj=\"" << m_OSResult->optimization->solution[i]->objectives->values->numberOfObj << "\">" << endl;
00306                                                 for(j = 0; j < m_OSResult->optimization->solution[i]->objectives->values->numberOfObj; j++){
00307                                                         if(m_OSResult->optimization->solution[i]->objectives->values->obj[j] != NULL){
00308                                                                 outStr << "<obj";
00309                                                                 outStr << " idx=\"";
00310                                                                 outStr << -(1 + j) ;
00311                                                                 outStr <<  "\">";
00312                                                                 outStr <<  os_dtoa_format( m_OSResult->optimization->solution[i]->objectives->values->obj[j]->value);
00313                                                                 outStr << "</obj>" << endl;
00314                                                         }
00315                                                 }
00316                                                 outStr << "</values>" << endl;
00317                                         }
00318 #ifdef DEBUG
00319         cout << "output <objectives> <other>" << endl;
00320 #endif
00321                                         if(m_OSResult->optimization->solution[i]->objectives->other != NULL){
00322                                                 if(m_OSResult->optimization->solution[i]->objectives->numberOfOtherObjectiveResults > 0){
00323                                                         for(int k = 0; k < m_OSResult->optimization->solution[i]->objectives->numberOfOtherObjectiveResults; k++){
00324                                                                 outStr << "<other" ;
00325                                                                 outStr << " name=\"";\
00326                                                                 outStr << m_OSResult->optimization->solution[i]->objectives->other[k]->name;
00327                                                                 outStr << "\"" ;
00328                                                                 outStr << " description=\"";
00329                                                                 outStr << m_OSResult->optimization->solution[i]->objectives->other[k]->description;
00330                                                                 outStr << "\"" ;
00331                                                                 outStr <<  ">" << endl;
00332                                                                 if(m_OSResult->optimization->solution[i]->objectives->other[k]->obj.size() > 0){
00333                                                                         for(j = 0; j < m_OSResult->optimization->solution[i]->objectives->other[k]->numberOfObj; j++){
00334                                                                                 if(m_OSResult->optimization->solution[i]->objectives->other[k]->obj.size() > 0){
00335                                                                                         outStr << "<obj";
00336                                                                                         outStr << " idx=\"";
00337                                                                                         outStr << j ;
00338                                                                                         outStr <<  "\">";
00339                                                                                         outStr <<   m_OSResult->optimization->solution[i]->objectives->other[k]->obj[j]->value;
00340                                                                                         outStr << "</obj>" << endl;
00341                                                                                 }
00342                                                                         }
00343                                                                 }
00344                                                                 outStr << "</other>" << endl;
00345                                                         }
00346                                                 }
00347                                         } // end of if on other objectives
00348                                         outStr << "</objectives>" << endl;
00349                                 }
00350                                 if(m_OSResult->optimization->solution[i]->constraints != NULL){
00351                                         outStr << "<constraints ";
00352                                         if (m_OSResult->optimization->solution[i]->constraints->numberOfOtherConstraintResults > 0)
00353                                                 outStr << "numberOfOtherConstraintResults=\"" << m_OSResult->optimization->solution[i]->constraints->numberOfOtherConstraintResults << "\""; 
00354                                         outStr << ">" << endl;
00355 #ifdef DEBUG
00356         cout << "output <constraints> <dualValues>" << endl;
00357 #endif
00358                                         if(m_OSResult->optimization->solution[i]->constraints->dualValues != NULL){
00359                                                 outStr << "<dualValues numberOfCon=\"" << m_OSResult->optimization->solution[i]->constraints->dualValues->numberOfCon << "\">" << endl;
00360                                                 for(j = 0; j < m_OSResult->optimization->solution[i]->constraints->dualValues->numberOfCon; j++){
00361                                                         if(m_OSResult->optimization->solution[i]->constraints->dualValues->con[j] != NULL){
00362                                                                 outStr << "<con";
00363                                                                 outStr << " idx=\"";
00364                                                                 outStr <<  j ;
00365                                                                 outStr <<  "\">";
00366                                                                 outStr <<  os_dtoa_format( m_OSResult->optimization->solution[i]->constraints->dualValues->con[j]->value);
00367                                                                 outStr << "</con>" << endl;
00368                                                         }
00369                                                 }
00370                                                 outStr << "</dualValues>" << endl;
00371                                         }
00372 #ifdef DEBUG
00373         cout << "output <constraints> <other>" << endl;
00374 #endif
00375                                         if(m_OSResult->optimization->solution[i]->constraints->other != NULL){
00376                                                 if(m_OSResult->optimization->solution[i]->constraints->numberOfOtherConstraintResults > 0){
00377                                                         for(int k = 0; k < m_OSResult->optimization->solution[i]->constraints->numberOfOtherConstraintResults; k++){
00378                                                                 outStr << "<other" ;
00379                                                                 outStr << " name=\"";\
00380                                                                 outStr << m_OSResult->optimization->solution[i]->constraints->other[k]->name;
00381                                                                 outStr << "\"" ;
00382                                                                 outStr << " description=\"";
00383                                                                 outStr << m_OSResult->optimization->solution[i]->constraints->other[k]->description;
00384                                                                 outStr << "\"" ;
00385                                                                 outStr <<  ">" << endl;
00386                                                                 if(m_OSResult->optimization->solution[i]->constraints->other[k]->con.size() > 0){
00387                                                                         for(j = 0; j < m_OSResult->optimization->solution[i]->constraints->other[k]->numberOfCon; j++){
00388                                                                                 if(m_OSResult->optimization->solution[i]->constraints->other[k]->con.size() > 0){
00389                                                                                         outStr << "<con";
00390                                                                                         outStr << " idx=\"";
00391                                                                                         outStr << j ;
00392                                                                                         outStr <<  "\">";
00393                                                                                         outStr <<  m_OSResult->optimization->solution[i]->constraints->other[k]->con[j]->value;
00394                                                                                         outStr << "</con>" << endl;
00395                                                                                 }
00396                                                                         }
00397                                                                 }
00398                                                                 outStr << "</other>" << endl;
00399                                                         }
00400                                                 }
00401                                         } // end of if on other constraints
00402                                         outStr << "</constraints>" << endl;
00403                                 }
00404                                 outStr << "</solution>" << endl;
00405                         }
00406                 } // end the solution for loop
00407                 outStr << "</optimization>" << endl;
00408         } // end if (optimization != NULL)
00409 #ifdef DEBUG
00410         cout << "done" << endl;
00411 #endif
00412         outStr << "</osrl>" << endl ;
00413         return outStr.str();
00414 }// end writeOSrL
00415 
00416 

Generated on Mon Aug 3 03:02:23 2009 by  doxygen 1.4.7