00001
00017 #include "OSoLWriter.h"
00018 #include "OSOption.h"
00019 #include "OSgLWriter.h"
00020 #include "OSGeneral.h"
00021 #include "OSStringUtil.h"
00022 #include "OSParameters.h"
00023 #include "OSConfig.h"
00024 #include "OSBase64.h"
00025 #include "OSMathUtil.h"
00026 #include "OSOutput.h"
00027 #include <sstream>
00028 #include <iostream>
00029 #include <stdio.h>
00030
00031 using std::endl;
00032 using std::ostringstream;
00033
00034 OSoLWriter::OSoLWriter( )
00035 {
00036 m_bWriteBase64 = false;
00037 m_bWhiteSpace = false;
00038 }
00039
00040 OSoLWriter::~OSoLWriter()
00041 {
00042 }
00043
00044
00045 std::string OSoLWriter::writeOSoL( OSOption *theosoption)
00046 {
00047 m_OSOption = theosoption;
00048 std::ostringstream osolStr, outStr;
00049 #ifdef WIN_
00050 const char dirsep='\\';
00051 #else
00052 const char dirsep='/';
00053 #endif
00054
00055 std::string xsltDir;
00056 xsltDir = dirsep == '/' ? "../stylesheets/" : "..\\stylesheets\\";
00057
00058 xsltDir = "http://www.coin-or.org/OS/stylesheets/";
00059
00060 bool generalTagPrinted;
00061 #ifndef NDEBUG
00062 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "in OSoLWriter");
00063 #endif
00064
00065 if(m_OSOption == NULL) return osolStr.str();
00066 osolStr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" ;
00067 osolStr << "<?xml-stylesheet type=\"text/xsl\" href=\"";
00068 osolStr << xsltDir;
00069 osolStr << "OSoL.xslt\"?>";
00070 osolStr << endl;
00071 osolStr << "<osol xmlns=\"os.optimizationservices.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
00072 osolStr << "xsi:schemaLocation=\"os.optimizationservices.org http://www.optimizationservices.org/schemas/";
00073 osolStr << OS_SCHEMA_VERSION;
00074 osolStr << "/OSoL.xsd\" >" ;
00075 osolStr << endl;
00076
00077 #ifndef NDEBUG
00078 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "output <optionHeader>");
00079 #endif
00080 if(m_OSOption->optionHeader != NULL)
00081 {
00082 osolStr << "<optionHeader>" << endl;
00083 osolStr << writeGeneralFileHeader(m_OSOption->optionHeader, true);
00084 osolStr << "</optionHeader>" << endl;
00085 }
00086
00087 #ifndef NDEBUG
00088 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "output <general>");
00089 #endif
00090 if(m_OSOption->general != NULL)
00091 {
00092 generalTagPrinted = false;
00093 if (m_OSOption->general->serviceURI != "")
00094 {
00095 if (generalTagPrinted == false)
00096 {
00097 osolStr << "<general>" << endl;
00098 generalTagPrinted = true;
00099 }
00100 osolStr << "<serviceURI>" << m_OSOption->general->serviceURI << "</serviceURI>" << endl;
00101 }
00102 if (m_OSOption->general->serviceName != "")
00103 {
00104 if (generalTagPrinted == false)
00105 {
00106 osolStr << "<general>" << endl;
00107 generalTagPrinted = true;
00108 }
00109 osolStr << "<serviceName>" << m_OSOption->general->serviceName << "</serviceName>" << endl;
00110 }
00111 if (m_OSOption->general->instanceName != "")
00112 {
00113 if (generalTagPrinted == false)
00114 {
00115 osolStr << "<general>" << endl;
00116 generalTagPrinted = true;
00117 }
00118 osolStr << "<instanceName>" << m_OSOption->general->instanceName << "</instanceName>" << endl;
00119 }
00120 if (m_OSOption->general->instanceLocation != NULL)
00121 {
00122 if (generalTagPrinted == false)
00123 {
00124 osolStr << "<general>" << endl;
00125 generalTagPrinted = true;
00126 }
00127 if (m_OSOption->general->instanceLocation->locationType == "")
00128 {
00129 osolStr << "<instanceLocation>";
00130 }
00131 else
00132 {
00133 osolStr << "<instanceLocation locationType=\"" << m_OSOption->general->instanceLocation->locationType << "\">";
00134 };
00135 osolStr << m_OSOption->general->instanceLocation->value << "</instanceLocation>" << endl;
00136 }
00137 if (m_OSOption->general->jobID != "")
00138 {
00139 if (generalTagPrinted == false)
00140 {
00141 osolStr << "<general>" << endl;
00142 generalTagPrinted = true;
00143 }
00144 osolStr << "<jobID>" << m_OSOption->general->jobID << "</jobID>" << endl;
00145 }
00146 if (m_OSOption->general->solverToInvoke != "")
00147 {
00148 if (generalTagPrinted == false)
00149 {
00150 osolStr << "<general>" << endl;
00151 generalTagPrinted = true;
00152 }
00153 osolStr << "<solverToInvoke>" << m_OSOption->general->solverToInvoke << "</solverToInvoke>" << endl;
00154 }
00155 if (m_OSOption->general->license != "")
00156 {
00157 if (generalTagPrinted == false)
00158 {
00159 osolStr << "<general>" << endl;
00160 generalTagPrinted = true;
00161 }
00162 osolStr << "<license>" << m_OSOption->general->license << "</license>" << endl;
00163 }
00164 if (m_OSOption->general->userName != "")
00165 {
00166 if (generalTagPrinted == false)
00167 {
00168 osolStr << "<general>" << endl;
00169 generalTagPrinted = true;
00170 }
00171 osolStr << "<userName>" << m_OSOption->general->userName << "</userName>" << endl;
00172 }
00173 if (m_OSOption->general->password != "")
00174 {
00175 if (generalTagPrinted == false)
00176 {
00177 osolStr << "<general>" << endl;
00178 generalTagPrinted = true;
00179 }
00180 osolStr << "<password>" << m_OSOption->general->password << "</password>" << endl;
00181 }
00182 if (m_OSOption->general->contact != NULL)
00183 {
00184 if (generalTagPrinted == false)
00185 {
00186 osolStr << "<general>" << endl;
00187 generalTagPrinted = true;
00188 }
00189 if (m_OSOption->general->contact->transportType == "")
00190 {
00191 osolStr << "<contact>";
00192 }
00193 else
00194 {
00195 osolStr << "<contact transportType=\"" << m_OSOption->general->contact->transportType << "\">";
00196 };
00197 osolStr << m_OSOption->general->contact->value << "</contact>" << endl;
00198 }
00199 if (m_OSOption->general->otherOptions != NULL)
00200 {
00201 if (generalTagPrinted == false)
00202 {
00203 osolStr << "<general>" << endl;
00204 generalTagPrinted = true;
00205 }
00206 osolStr << "<otherOptions numberOfOtherOptions=\"";
00207 osolStr << m_OSOption->general->otherOptions->numberOfOtherOptions << "\">" << endl;
00208 for (int i=0; i < m_OSOption->general->otherOptions->numberOfOtherOptions; i++)
00209 {
00210 osolStr << "<other name=\"" << m_OSOption->general->otherOptions->other[i]->name << "\"";
00211 if (m_OSOption->general->otherOptions->other[i]->value != "")
00212 osolStr << " value=\"" << m_OSOption->general->otherOptions->other[i]->value << "\"";
00213 if (m_OSOption->general->otherOptions->other[i]->description != "")
00214 osolStr << " description=" << writeStringData(m_OSOption->general->otherOptions->other[i]->description);
00215 osolStr << "/>" << endl;
00216 }
00217 osolStr << "</otherOptions>" << endl;
00218 }
00219 if (generalTagPrinted == false)
00220 osolStr << "<general>" << endl;
00221
00222 osolStr << "</general>" << endl;
00223 #ifndef NDEBUG
00224 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "Done with <general> element");
00225 #endif
00226 };
00227
00231 if(m_OSOption->system != NULL)
00232 {
00233
00234 osolStr << "<system>" << endl;
00235 if (m_OSOption->system->minDiskSpace != NULL)
00236 {
00237 osolStr << "<minDiskSpace";
00238 if (m_OSOption->system->minDiskSpace->unit != "byte")
00239 osolStr << " unit=\"" << m_OSOption->system->minDiskSpace->unit << "\"";
00240 if (m_OSOption->system->minDiskSpace->description != "")
00241 osolStr << " description=" << writeStringData(m_OSOption->system->minDiskSpace->description);
00242 osolStr << ">";
00243 if (!OSIsnan(m_OSOption->system->minDiskSpace->value))
00244 osolStr << os_dtoa_format(m_OSOption->system->minDiskSpace->value);
00245 else
00246 osolStr << "NaN";
00247 osolStr << "</minDiskSpace>" << endl;
00248 }
00249 if (m_OSOption->system->minMemorySize != NULL)
00250 {
00251 osolStr << "<minMemorySize";
00252 if (m_OSOption->system->minMemorySize->unit != "byte")
00253 osolStr << " unit=\"" << m_OSOption->system->minMemorySize->unit << "\"";
00254 if (m_OSOption->system->minMemorySize->description != "")
00255 osolStr << " description=" << writeStringData(m_OSOption->system->minMemorySize->description);
00256 osolStr << ">";
00257 if (!OSIsnan(m_OSOption->system->minMemorySize->value))
00258 osolStr << os_dtoa_format(m_OSOption->system->minMemorySize->value);
00259 else
00260 osolStr << "NaN";
00261 osolStr << "</minMemorySize>" << endl;
00262 }
00263 if (m_OSOption->system->minCPUSpeed != NULL)
00264 {
00265 osolStr << "<minCPUSpeed";
00266 if (m_OSOption->system->minCPUSpeed->unit != "hertz")
00267 osolStr << " unit=\"" << m_OSOption->system->minCPUSpeed->unit << "\"";
00268 if (m_OSOption->system->minCPUSpeed->description != "")
00269 osolStr << " description=" << writeStringData(m_OSOption->system->minCPUSpeed->description);
00270 osolStr << ">";
00271 if (!OSIsnan(m_OSOption->system->minCPUSpeed->value))
00272 osolStr << os_dtoa_format(m_OSOption->system->minCPUSpeed->value);
00273 else
00274 osolStr << "NaN";
00275 osolStr << "</minCPUSpeed>" << endl;
00276 }
00277 if (m_OSOption->system->minCPUNumber != NULL)
00278 {
00279 osolStr << "<minCPUNumber";
00280 if (m_OSOption->system->minCPUNumber->description != "")
00281 osolStr << " description=" << writeStringData(m_OSOption->system->minCPUNumber->description);
00282 osolStr << ">";
00283 osolStr << m_OSOption->system->minCPUNumber->value << "</minCPUNumber>" << endl;
00284 };
00285 if (m_OSOption->system->otherOptions != NULL)
00286 {
00287 osolStr << "<otherOptions numberOfOtherOptions=\"";
00288 osolStr << m_OSOption->system->otherOptions->numberOfOtherOptions << "\">" << endl;
00289 for (int i=0; i < m_OSOption->system->otherOptions->numberOfOtherOptions; i++)
00290 {
00291 osolStr << "<other name=\"" << m_OSOption->system->otherOptions->other[i]->name << "\"";
00292 if (m_OSOption->system->otherOptions->other[i]->value != "")
00293 osolStr << " value=\"" << m_OSOption->system->otherOptions->other[i]->value << "\"";
00294 if (m_OSOption->system->otherOptions->other[i]->description != "")
00295 osolStr << " description=" << writeStringData(m_OSOption->system->otherOptions->other[i]->description);
00296 osolStr << "/>" << endl;
00297 }
00298 osolStr << "</otherOptions>" << endl;
00299 }
00300 osolStr << "</system>" << endl;
00301 #ifndef NDEBUG
00302 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "Done with <system> element");
00303 #endif
00304 }
00305
00309 if(m_OSOption->service != NULL)
00310 {
00311 osolStr << "<service>" << endl;
00312 if (m_OSOption->service->type != "")
00313 {
00314 osolStr << "<type>" << m_OSOption->service->type << "</type>" << endl;
00315 }
00316 if (m_OSOption->service->otherOptions != NULL)
00317 {
00318 osolStr << "<otherOptions numberOfOtherOptions=\"";
00319 osolStr << m_OSOption->service->otherOptions->numberOfOtherOptions << "\">" << endl;
00320 for (int i=0; i < m_OSOption->service->otherOptions->numberOfOtherOptions; i++)
00321 {
00322 osolStr << "<other name=\"" << m_OSOption->service->otherOptions->other[i]->name << "\"";
00323 if (m_OSOption->service->otherOptions->other[i]->value != "")
00324 osolStr << " value=\"" << m_OSOption->service->otherOptions->other[i]->value << "\"";
00325 if (m_OSOption->service->otherOptions->other[i]->description != "")
00326 osolStr << " description=" << writeStringData(m_OSOption->service->otherOptions->other[i]->description);
00327 osolStr << "/>" << endl;
00328 }
00329 osolStr << "</otherOptions>" << endl;
00330 }
00331 osolStr << "</service>" << endl;
00332 #ifndef NDEBUG
00333 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "Done with <service> element");
00334 #endif
00335 };
00336
00340 if(m_OSOption->job != NULL)
00341 {
00342 osolStr << "<job>" << endl;
00343 if (m_OSOption->job->maxTime != NULL)
00344 {
00345 if (m_OSOption->job->maxTime->unit == "")
00346 m_OSOption->job->maxTime->unit = "second";
00347 osolStr << "<maxTime unit=\"" << m_OSOption->job->maxTime->unit << "\">";
00348 if (!OSIsnan(m_OSOption->job->maxTime->value))
00349 osolStr << os_dtoa_format(m_OSOption->job->maxTime->value);
00350 else
00351 osolStr << "NaN";
00352 osolStr << "</maxTime>" << endl;
00353 }
00354 if (m_OSOption->job->requestedStartTime != "")
00355 osolStr << "<requestedStartTime>" << m_OSOption->job->requestedStartTime << "</requestedStartTime>" << endl;
00356 if (m_OSOption->job->dependencies != NULL)
00357 {
00358 osolStr << "<dependencies numberOfJobIDs=\"";
00359 osolStr << m_OSOption->job->dependencies->numberOfJobIDs << "\">" << endl;
00360 for (int i=0; i < m_OSOption->job->dependencies->numberOfJobIDs; i++)
00361 osolStr << "<jobID>" << m_OSOption->job->dependencies->jobID[i] << "</jobID>" << endl;
00362 osolStr << "</dependencies>" << endl;
00363 }
00364 if (m_OSOption->job->requiredDirectories != NULL)
00365 {
00366 osolStr << "<requiredDirectories numberOfPaths=\"";
00367 osolStr << m_OSOption->job->requiredDirectories->numberOfPaths << "\">" << endl;
00368 for (int i=0; i < m_OSOption->job->requiredDirectories->numberOfPaths; i++)
00369 osolStr << "<path>" << m_OSOption->job->requiredDirectories->path[i] << "</path>" << endl;
00370 osolStr << "</requiredDirectories>" << endl;
00371 }
00372 if (m_OSOption->job->requiredFiles != NULL)
00373 {
00374 osolStr << "<requiredFiles numberOfPaths=\"";
00375 osolStr << m_OSOption->job->requiredFiles->numberOfPaths << "\">" << endl;
00376 for (int i=0; i < m_OSOption->job->requiredFiles->numberOfPaths; i++)
00377 osolStr << "<path>" << m_OSOption->job->requiredFiles->path[i] << "</path>" << endl;
00378 osolStr << "</requiredFiles>" << endl;
00379 }
00380 if (m_OSOption->job->directoriesToMake != NULL)
00381 {
00382 osolStr << "<directoriesToMake numberOfPaths=\"";
00383 osolStr << m_OSOption->job->directoriesToMake->numberOfPaths << "\">" << endl;
00384 for (int i=0; i < m_OSOption->job->directoriesToMake->numberOfPaths; i++)
00385 osolStr << "<path>" << m_OSOption->job->directoriesToMake->path[i] << "</path>" << endl;
00386
00387 osolStr << "</directoriesToMake>" << endl;
00388 }
00389 if (m_OSOption->job->filesToMake != NULL)
00390 {
00391 osolStr << "<filesToMake numberOfPaths=\"";
00392 osolStr << m_OSOption->job->filesToMake->numberOfPaths << "\">" << endl;
00393 for (int i=0; i < m_OSOption->job->filesToMake->numberOfPaths; i++)
00394 osolStr << "<path>" << m_OSOption->job->filesToMake->path[i] << "</path>" << endl;
00395 osolStr << "</filesToMake>" << endl;
00396 }
00397 if (m_OSOption->job->inputDirectoriesToMove != NULL)
00398 {
00399 osolStr << "<inputDirectoriesToMove numberOfPathPairs=\"";
00400 osolStr << m_OSOption->job->inputDirectoriesToMove->numberOfPathPairs << "\">" << endl;
00401 for (int i=0; i < m_OSOption->job->inputDirectoriesToMove->numberOfPathPairs; i++)
00402 {
00403 osolStr << "<pathPair";
00404 osolStr << " from=\"" << m_OSOption->job->inputDirectoriesToMove->pathPair[i]->from << "\"";
00405 osolStr << " to=\"" << m_OSOption->job->inputDirectoriesToMove->pathPair[i]->to << "\"";
00406 if (m_OSOption->job->inputDirectoriesToMove->pathPair[i]->makeCopy)
00407 osolStr << " makeCopy=\"true\"";
00408 osolStr << "/>" << endl;
00409 }
00410 osolStr << "</inputDirectoriesToMove>" << endl;
00411 }
00412 if (m_OSOption->job->inputFilesToMove != NULL)
00413 {
00414 osolStr << "<inputFilesToMove numberOfPathPairs=\"";
00415 osolStr << m_OSOption->job->inputFilesToMove->numberOfPathPairs << "\">" << endl;
00416 for (int i=0; i < m_OSOption->job->inputFilesToMove->numberOfPathPairs; i++)
00417 {
00418 osolStr << "<pathPair";
00419 osolStr << " from=\"" << m_OSOption->job->inputFilesToMove->pathPair[i]->from << "\"";
00420 osolStr << " to=\"" << m_OSOption->job->inputFilesToMove->pathPair[i]->to << "\"";
00421 if (m_OSOption->job->inputFilesToMove->pathPair[i]->makeCopy)
00422 osolStr << " makeCopy=\"true\"";
00423 osolStr << "/>" << endl;
00424 }
00425 osolStr << "</inputFilesToMove>" << endl;
00426 }
00427 if (m_OSOption->job->outputFilesToMove != NULL)
00428 {
00429 osolStr << "<outputFilesToMove numberOfPathPairs=\"";
00430 osolStr << m_OSOption->job->outputFilesToMove->numberOfPathPairs << "\">" << endl;
00431 for (int i=0; i < m_OSOption->job->outputFilesToMove->numberOfPathPairs; i++)
00432 {
00433 osolStr << "<pathPair";
00434 osolStr << " from=\"" << m_OSOption->job->outputFilesToMove->pathPair[i]->from << "\"";
00435 osolStr << " to=\"" << m_OSOption->job->outputFilesToMove->pathPair[i]->to << "\"";
00436 if (m_OSOption->job->outputFilesToMove->pathPair[i]->makeCopy)
00437 osolStr << " makeCopy=\"true\"";
00438 osolStr << "/>" << endl;
00439 }
00440 osolStr << "</outputFilesToMove>" << endl;
00441 }
00442 if (m_OSOption->job->outputDirectoriesToMove != NULL)
00443 {
00444 osolStr << "<outputDirectoriesToMove numberOfPathPairs=\"";
00445 osolStr << m_OSOption->job->outputDirectoriesToMove->numberOfPathPairs << "\">" << endl;
00446 for (int i=0; i < m_OSOption->job->outputDirectoriesToMove->numberOfPathPairs; i++)
00447 {
00448 osolStr << "<pathPair";
00449 osolStr << " from=\"" << m_OSOption->job->outputDirectoriesToMove->pathPair[i]->from << "\"";
00450 osolStr << " to=\"" << m_OSOption->job->outputDirectoriesToMove->pathPair[i]->to << "\"";
00451 if (m_OSOption->job->outputDirectoriesToMove->pathPair[i]->makeCopy)
00452 osolStr << " makeCopy=\"true\"";
00453 osolStr << "/>" << endl;
00454 }
00455 osolStr << "</outputDirectoriesToMove>" << endl;
00456 }
00457 if (m_OSOption->job->filesToDelete != NULL)
00458 {
00459 osolStr << "<filesToDelete numberOfPaths=\"";
00460 osolStr << m_OSOption->job->filesToDelete->numberOfPaths << "\">" << endl;
00461 for (int i=0; i < m_OSOption->job->filesToDelete->numberOfPaths; i++)
00462 osolStr << "<path>" << m_OSOption->job->filesToDelete->path[i] << "</path>" << endl;
00463 osolStr << "</filesToDelete>" << endl;
00464 }
00465 if (m_OSOption->job->directoriesToDelete != NULL)
00466 {
00467 osolStr << "<directoriesToDelete numberOfPaths=\"";
00468 osolStr << m_OSOption->job->directoriesToDelete->numberOfPaths << "\">" << endl;
00469 for (int i=0; i < m_OSOption->job->directoriesToDelete->numberOfPaths; i++)
00470 osolStr << "<path>" << m_OSOption->job->directoriesToDelete->path[i] << "</path>" << endl;
00471 osolStr << "</directoriesToDelete>" << endl;
00472 }
00473 if (m_OSOption->job->processesToKill != NULL)
00474 {
00475 osolStr << "<processesToKill numberOfProcesses=\"";
00476 osolStr << m_OSOption->job->processesToKill->numberOfProcesses << "\">" << endl;
00477 for (int i=0; i < m_OSOption->job->processesToKill->numberOfProcesses; i++)
00478 osolStr << "<process>" << m_OSOption->job->processesToKill->process[i] << "</process>" << endl;
00479 osolStr << "</processesToKill>" << endl;
00480 }
00481 if (m_OSOption->job->otherOptions != NULL)
00482 {
00483 osolStr << "<otherOptions numberOfOtherOptions=\"";
00484 osolStr << m_OSOption->job->otherOptions->numberOfOtherOptions << "\">" << endl;
00485 for (int i=0; i < m_OSOption->job->otherOptions->numberOfOtherOptions; i++)
00486 {
00487 osolStr << "<other name=\"" << m_OSOption->job->otherOptions->other[i]->name << "\"";
00488 if (m_OSOption->job->otherOptions->other[i]->value != "")
00489 osolStr << " value=\"" << m_OSOption->job->otherOptions->other[i]->value << "\"";
00490 if (m_OSOption->job->otherOptions->other[i]->description != "")
00491 osolStr << " description=" << writeStringData(m_OSOption->job->otherOptions->other[i]->description);
00492 osolStr << "/>" << endl;
00493 }
00494 osolStr << "</otherOptions>" << endl;
00495 }
00496 osolStr << "</job>" << endl;
00497 #ifndef NDEBUG
00498 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "Done with <job> element");
00499 #endif
00500 };
00501
00505 if (m_OSOption->optimization != NULL)
00506 {
00507 osolStr << "<optimization";
00508 if (m_OSOption->optimization->numberOfVariables >= 0)
00509 osolStr << " numberOfVariables=\"" << m_OSOption->optimization->numberOfVariables << "\" ";
00510 if (m_OSOption->optimization->numberOfObjectives >= 0)
00511 osolStr << " numberOfObjectives=\"" << m_OSOption->optimization->numberOfObjectives << "\" ";
00512 if (m_OSOption->optimization->numberOfConstraints >= 0)
00513 osolStr << " numberOfConstraints=\"" << m_OSOption->optimization->numberOfConstraints << "\" ";
00514 osolStr << ">" << endl;
00515 if (m_OSOption->optimization->variables != NULL)
00516 {
00517 osolStr << "<variables";
00518 if (m_OSOption->optimization->variables->numberOfOtherVariableOptions > 0)
00519 osolStr << " numberOfOtherVariableOptions=\"" << m_OSOption->optimization->variables->numberOfOtherVariableOptions << "\"";
00520 osolStr << ">" << endl;
00521 #ifndef NDEBUG
00522 outStr.str("");
00523 outStr.clear();
00524 outStr << "initialVariableValues: "
00525 << (m_OSOption->optimization->variables->initialVariableValues != NULL) << endl;
00526 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, outStr.str());
00527 #endif
00528 if (m_OSOption->optimization->variables->initialVariableValues != NULL)
00529 {
00530 osolStr << "<initialVariableValues numberOfVar=\"";
00531 osolStr << m_OSOption->optimization->variables->initialVariableValues->numberOfVar << "\">" << endl;
00532 for (int i=0; i < m_OSOption->optimization->variables->initialVariableValues->numberOfVar; i++)
00533 {
00534 osolStr << "<var";
00535 osolStr << " idx=\"" << m_OSOption->optimization->variables->initialVariableValues->var[i]->idx << "\"";
00536 if (m_OSOption->optimization->variables->initialVariableValues->var[i]->name != "")
00537 osolStr << " name=" << writeStringData(m_OSOption->optimization->variables->initialVariableValues->var[i]->name);
00538 if (!OSIsnan(m_OSOption->optimization->variables->initialVariableValues->var[i]->value))
00539 {
00540 osolStr << " value=\"";
00541 osolStr << os_dtoa_format(m_OSOption->optimization->variables->initialVariableValues->var[i]->value);
00542 osolStr << "\"";
00543 }
00544 osolStr << "/>" << endl;
00545 }
00546 osolStr << "</initialVariableValues>" << endl;
00547 }
00548 #ifndef NDEBUG
00549 outStr.str("");
00550 outStr.clear();
00551 outStr << "initialVariableValuesString: "
00552 << (m_OSOption->optimization->variables->initialVariableValuesString != NULL) << endl;
00553 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "in OSoLWriter");
00554 #endif
00555 if (m_OSOption->optimization->variables->initialVariableValuesString != NULL)
00556 {
00557 osolStr << "<initialVariableValuesString numberOfVar=\"";
00558 osolStr << m_OSOption->optimization->variables->initialVariableValuesString->numberOfVar << "\">" << endl;
00559 for (int i=0; i < m_OSOption->optimization->variables->initialVariableValuesString->numberOfVar; i++)
00560 {
00561 osolStr << "<var";
00562 osolStr << " idx=\"" << m_OSOption->optimization->variables->initialVariableValuesString->var[i]->idx << "\"";
00563 if (m_OSOption->optimization->variables->initialVariableValuesString->var[i]->name != "")
00564 osolStr << " name=" << writeStringData(m_OSOption->optimization->variables->initialVariableValuesString->var[i]->name);
00565 osolStr << " value=\"" << m_OSOption->optimization->variables->initialVariableValuesString->var[i]->value << "\"";
00566 osolStr << "/>" << endl;
00567 }
00568 osolStr << "</initialVariableValuesString>" << endl;
00569 }
00570
00571 if (m_OSOption->optimization->variables->initialBasisStatus != NULL)
00572 {
00573 #ifndef NDEBUG
00574 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace,
00575 "output <variables> <basisStatus>");
00576 #endif
00577 osolStr << "<initialBasisStatus>" << endl;
00578 osolStr << writeBasisStatus(m_OSOption->optimization->variables->initialBasisStatus, m_bWhiteSpace, m_bWriteBase64);
00579 osolStr << "</initialBasisStatus>" << endl;
00580 }
00581
00582 #ifndef NDEBUG
00583 outStr.str("");
00584 outStr.clear();
00585 outStr << "integerVariableBranchingWeights: "
00586 << (m_OSOption->optimization->variables->integerVariableBranchingWeights != NULL) << endl;
00587 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, outStr.str());
00588 #endif
00589 if (m_OSOption->optimization->variables->integerVariableBranchingWeights != NULL)
00590 {
00591 osolStr << "<integerVariableBranchingWeights numberOfVar=\"";
00592 osolStr << m_OSOption->optimization->variables->integerVariableBranchingWeights->numberOfVar << "\">" << endl;
00593 for (int i=0; i < m_OSOption->optimization->variables->integerVariableBranchingWeights->numberOfVar; i++)
00594 {
00595 osolStr << "<var";
00596 osolStr << " idx=\"" << m_OSOption->optimization->variables->integerVariableBranchingWeights->var[i]->idx << "\"";
00597 if (m_OSOption->optimization->variables->integerVariableBranchingWeights->var[i]->name != "")
00598 osolStr << " name=" << writeStringData(m_OSOption->optimization->variables->integerVariableBranchingWeights->var[i]->name);
00599 if (!OSIsnan(m_OSOption->optimization->variables->integerVariableBranchingWeights->var[i]->value))
00600 {
00601 osolStr << " value=\"";
00602 osolStr << os_dtoa_format(m_OSOption->optimization->variables->integerVariableBranchingWeights->var[i]->value);
00603 osolStr << "\"";
00604 }
00605 osolStr << "/>" << endl;
00606 }
00607 osolStr << "</integerVariableBranchingWeights>" << endl;
00608 }
00609 #ifndef NDEBUG
00610 outStr.str("");
00611 outStr.clear();
00612 outStr << "sosVariableBranchingWeights: "
00613 << (m_OSOption->optimization->variables->sosVariableBranchingWeights != NULL) << endl;
00614 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, outStr.str());
00615 #endif
00616 if (m_OSOption->optimization->variables->sosVariableBranchingWeights != NULL)
00617 {
00618 osolStr << "<sosVariableBranchingWeights numberOfSOS=\"";
00619 #ifndef NDEBUG
00620 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "start: numberOfSOS");
00621 #endif
00622 osolStr << m_OSOption->optimization->variables->sosVariableBranchingWeights->numberOfSOS << "\">" << endl;
00623 for (int i=0; i < m_OSOption->optimization->variables->sosVariableBranchingWeights->numberOfSOS; i++)
00624 {
00625 osolStr << "<sos";
00626 #ifndef NDEBUG
00627 outStr.str("");
00628 outStr.clear();
00629 outStr << "sosIdx - nvar: "
00630 << m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->numberOfVar
00631 << endl;
00632 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_detailed_trace, outStr.str());
00633 #endif
00634 osolStr << " sosIdx=\"" << m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->sosIdx << "\"";
00635 osolStr << " numberOfVar=\"" << m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->numberOfVar << "\"";
00636 if (!OSIsnan(m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->groupWeight))
00637 {
00638 osolStr << " groupWeight=\"";
00639 osolStr << os_dtoa_format(m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->groupWeight);
00640 osolStr << "\">" << endl;
00641 }
00642 for (int j=0; j < m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->numberOfVar; j++)
00643 {
00644 osolStr << "<var";
00645 #ifndef NDEBUG
00646 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_detailed_trace, "idx");
00647 #endif
00648 osolStr << " idx=\"" << m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->var[j]->idx << "\"";
00649 if (m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->var[j]->name != "")
00650 osolStr << " name=" << writeStringData(m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->var[j]->name);
00651 if (!OSIsnan(m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->var[j]->value))
00652 {
00653 osolStr << " value=\"";
00654 osolStr << os_dtoa_format(m_OSOption->optimization->variables->sosVariableBranchingWeights->sos[i]->var[j]->value);
00655 osolStr << "\"";
00656 }
00657 osolStr << "/>" << endl;
00658 }
00659 osolStr << "</sos>" << endl;
00660 }
00661 osolStr << "</sosVariableBranchingWeights>" << endl;
00662 }
00663 #ifndef NDEBUG
00664 outStr.str("");
00665 outStr.clear();
00666 outStr << "Number of other variable options: "
00667 << m_OSOption->optimization->variables->numberOfOtherVariableOptions
00668 << std::endl;
00669 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_debug, outStr.str());
00670 #endif
00671
00672 for (int i=0; i < m_OSOption->optimization->variables->numberOfOtherVariableOptions; i++)
00673 {
00674 osolStr << "<other name=\"" << m_OSOption->optimization->variables->other[i]->name << "\"";
00675
00676 osolStr << " numberOfVar=\"" << m_OSOption->optimization->variables->other[i]->numberOfVar << "\"";
00677
00678 osolStr << " numberOfEnumerations=\"" << m_OSOption->optimization->variables->other[i]->numberOfEnumerations << "\"";
00679 if (m_OSOption->optimization->variables->other[i]->value != "")
00680 osolStr << " value=\"" << m_OSOption->optimization->variables->other[i]->value << "\"";
00681 if (m_OSOption->optimization->variables->other[i]->solver != "")
00682 osolStr << " solver=\"" << m_OSOption->optimization->variables->other[i]->solver << "\"";
00683 if (m_OSOption->optimization->variables->other[i]->category != "")
00684 osolStr << " category=\"" << m_OSOption->optimization->variables->other[i]->category << "\"";
00685 if (m_OSOption->optimization->variables->other[i]->type != "")
00686 osolStr << " type=\"" << m_OSOption->optimization->variables->other[i]->type << "\"";
00687 if (m_OSOption->optimization->variables->other[i]->description != "")
00688 osolStr << " description=" << writeStringData(m_OSOption->optimization->variables->other[i]->description);
00689 if (m_OSOption->optimization->variables->other[i]->varType != "")
00690 osolStr << " varType=\"" << m_OSOption->optimization->variables->other[i]->varType << "\"";
00691 if (m_OSOption->optimization->variables->other[i]->enumType != "")
00692 osolStr << " enumType=\"" << m_OSOption->optimization->variables->other[i]->enumType << "\"";
00693 osolStr << ">" << endl;
00694
00695 for (int j=0; j < m_OSOption->optimization->variables->other[i]->numberOfVar; j++)
00696 {
00697 osolStr << "<var idx=\"" << m_OSOption->optimization->variables->other[i]->var[j]->idx << "\"";
00698 if (m_OSOption->optimization->variables->other[i]->var[j]->name != "")
00699 osolStr << " name=" << writeStringData(m_OSOption->optimization->variables->other[i]->var[j]->name);
00700 if (m_OSOption->optimization->variables->other[i]->var[j]->value != "")
00701 osolStr << " value=\"" << m_OSOption->optimization->variables->other[i]->var[j]->value << "\"";
00702 if (m_OSOption->optimization->variables->other[i]->var[j]->lbValue != "")
00703 osolStr << " lbValue=\"" << m_OSOption->optimization->variables->other[i]->var[j]->lbValue << "\"";
00704 if (m_OSOption->optimization->variables->other[i]->var[j]->ubValue != "")
00705 osolStr << " ubValue=\"" << m_OSOption->optimization->variables->other[i]->var[j]->ubValue << "\"";
00706 osolStr << "/>" << endl;
00707 }
00708
00709 {
00710
00711 for (int j=0; j < m_OSOption->optimization->variables->other[i]->numberOfEnumerations; j++)
00712 osolStr << writeOtherOptionOrResultEnumeration(m_OSOption->optimization->variables->other[i]->enumeration[j], m_bWhiteSpace, m_bWriteBase64);
00713 }
00714 osolStr << "</other>" << endl;
00715 }
00716 osolStr << "</variables>" << endl;
00717 }
00718 if (m_OSOption->optimization->objectives != NULL)
00719 {
00720 osolStr << "<objectives";
00721
00722 osolStr << " numberOfOtherObjectiveOptions=\"" << m_OSOption->optimization->objectives->numberOfOtherObjectiveOptions << "\"";
00723 osolStr << ">" << endl;
00724 if (m_OSOption->optimization->objectives->initialObjectiveValues != NULL)
00725 {
00726 osolStr << "<initialObjectiveValues numberOfObj=\"";
00727 osolStr << m_OSOption->optimization->objectives->initialObjectiveValues->numberOfObj << "\">" << endl;
00728 for (int i=0; i < m_OSOption->optimization->objectives->initialObjectiveValues->numberOfObj; i++)
00729 {
00730 osolStr << "<obj";
00731 osolStr << " idx=\"" << m_OSOption->optimization->objectives->initialObjectiveValues->obj[i]->idx << "\"";
00732 if (m_OSOption->optimization->objectives->initialObjectiveValues->obj[i]->name != "")
00733 osolStr << " name=" << writeStringData(m_OSOption->optimization->objectives->initialObjectiveValues->obj[i]->name);
00734 if (!OSIsnan(m_OSOption->optimization->objectives->initialObjectiveValues->obj[i]->value))
00735 {
00736 osolStr << " value=\"";
00737 osolStr << os_dtoa_format(m_OSOption->optimization->objectives->initialObjectiveValues->obj[i]->value);
00738 osolStr << "\"";
00739 }
00740 osolStr << "/>" << endl;
00741 }
00742 osolStr << "</initialObjectiveValues>" << endl;
00743 }
00744 if (m_OSOption->optimization->objectives->initialObjectiveBounds != NULL)
00745 {
00746 osolStr << "<initialObjectiveBounds numberOfObj=\"";
00747 osolStr << m_OSOption->optimization->objectives->initialObjectiveBounds->numberOfObj << "\">" << endl;
00748 for (int i=0; i < m_OSOption->optimization->objectives->initialObjectiveBounds->numberOfObj; i++)
00749 {
00750 osolStr << "<obj";
00751 osolStr << " idx=\"" << m_OSOption->optimization->objectives->initialObjectiveBounds->obj[i]->idx << "\"";
00752 if (m_OSOption->optimization->objectives->initialObjectiveBounds->obj[i]->name != "")
00753 osolStr << " name=" << writeStringData(m_OSOption->optimization->objectives->initialObjectiveBounds->obj[i]->name);
00754 if (!OSIsnan(m_OSOption->optimization->objectives->initialObjectiveBounds->obj[i]->lbValue))
00755 {
00756 osolStr << " lbValue=\"";
00757 osolStr << os_dtoa_format(m_OSOption->optimization->objectives->initialObjectiveBounds->obj[i]->lbValue);
00758 osolStr << "\"";
00759 }
00760 if (!OSIsnan(m_OSOption->optimization->objectives->initialObjectiveBounds->obj[i]->ubValue))
00761 {
00762 osolStr << " ubValue=\"";
00763 osolStr << os_dtoa_format(m_OSOption->optimization->objectives->initialObjectiveBounds->obj[i]->ubValue);
00764 osolStr << "\"";
00765 }
00766 osolStr << "/>" << endl;
00767 }
00768 osolStr << "</initialObjectiveBounds>" << endl;
00769 }
00770
00771 if (m_OSOption->optimization->objectives->initialBasisStatus != NULL)
00772 {
00773 #ifndef NDEBUG
00774 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace,
00775 "output <objectives> <basisStatus>");
00776 #endif
00777 osolStr << "<initialBasisStatus>" << endl;
00778 osolStr << writeBasisStatus(m_OSOption->optimization->objectives->initialBasisStatus, m_bWhiteSpace, m_bWriteBase64);
00779 osolStr << "</initialBasisStatus>" << endl;
00780 }
00781
00782 #ifndef NDEBUG
00783 outStr.str("");
00784 outStr.clear();
00785 outStr << "Number of other objective options: "
00786 << m_OSOption->optimization->objectives->numberOfOtherObjectiveOptions << std::endl;
00787 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, outStr.str());
00788 #endif
00789
00790 for (int i=0; i < m_OSOption->optimization->objectives->numberOfOtherObjectiveOptions; i++)
00791 {
00792 osolStr << "<other name=\"" << m_OSOption->optimization->objectives->other[i]->name << "\"";
00793
00794 osolStr << " numberOfObj=\"" << m_OSOption->optimization->objectives->other[i]->numberOfObj << "\"";
00795
00796 osolStr << " numberOfEnumerations=\"" << m_OSOption->optimization->objectives->other[i]->numberOfEnumerations << "\"";
00797 if (m_OSOption->optimization->objectives->other[i]->value != "")
00798 osolStr << " value=\"" << m_OSOption->optimization->objectives->other[i]->value << "\"";
00799 if (m_OSOption->optimization->objectives->other[i]->solver != "")
00800 osolStr << " solver=\"" << m_OSOption->optimization->objectives->other[i]->solver << "\"";
00801 if (m_OSOption->optimization->objectives->other[i]->category != "")
00802 osolStr << " category=\"" << m_OSOption->optimization->objectives->other[i]->category << "\"";
00803 if (m_OSOption->optimization->objectives->other[i]->type != "")
00804 osolStr << " type=\"" << m_OSOption->optimization->objectives->other[i]->type << "\"";
00805 if (m_OSOption->optimization->objectives->other[i]->description != "")
00806 osolStr << " description=" << writeStringData(m_OSOption->optimization->objectives->other[i]->description);
00807 if (m_OSOption->optimization->objectives->other[i]->objType != "")
00808 osolStr << " objType=\"" << m_OSOption->optimization->objectives->other[i]->objType << "\"";
00809 if (m_OSOption->optimization->objectives->other[i]->enumType != "")
00810 osolStr << " enumType=\"" << m_OSOption->optimization->objectives->other[i]->enumType << "\"";
00811 osolStr << ">" << endl;
00812
00813 for (int j=0; j < m_OSOption->optimization->objectives->other[i]->numberOfObj; j++)
00814 {
00815 osolStr << "<obj idx=\"" << m_OSOption->optimization->objectives->other[i]->obj[j]->idx << "\"";
00816 if (m_OSOption->optimization->objectives->other[i]->obj[j]->name != "")
00817 osolStr << " name=" << writeStringData(m_OSOption->optimization->objectives->other[i]->obj[j]->name);
00818 if (m_OSOption->optimization->objectives->other[i]->obj[j]->value != "")
00819 osolStr << " value=\"" << m_OSOption->optimization->objectives->other[i]->obj[j]->value << "\"";
00820 osolStr << "/>" << endl;
00821 }
00822
00823 for (int j=0; j < m_OSOption->optimization->objectives->other[i]->numberOfEnumerations; j++)
00824 osolStr << writeOtherOptionOrResultEnumeration(m_OSOption->optimization->objectives->other[i]->enumeration[j], m_bWhiteSpace, m_bWriteBase64);
00825
00826 osolStr << "</other>" << endl;
00827 }
00828 osolStr << "</objectives>" << endl;
00829 }
00830 #ifndef NDEBUG
00831 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "Done with <objectives> element");
00832 #endif
00833 if (m_OSOption->optimization->constraints != NULL)
00834 {
00835 osolStr << "<constraints";
00836
00837 osolStr << " numberOfOtherConstraintOptions=\"" << m_OSOption->optimization->constraints->numberOfOtherConstraintOptions << "\"";
00838 osolStr << ">" << endl;
00839 if (m_OSOption->optimization->constraints->initialConstraintValues != NULL)
00840 {
00841 osolStr << "<initialConstraintValues numberOfCon=\"";
00842 osolStr << m_OSOption->optimization->constraints->initialConstraintValues->numberOfCon << "\">" << endl;
00843 for (int i=0; i < m_OSOption->optimization->constraints->initialConstraintValues->numberOfCon; i++)
00844 {
00845 osolStr << "<con";
00846 osolStr << " idx=\"" << m_OSOption->optimization->constraints->initialConstraintValues->con[i]->idx << "\"";
00847 if (m_OSOption->optimization->constraints->initialConstraintValues->con[i]->name != "")
00848 osolStr << " name=" << writeStringData(m_OSOption->optimization->constraints->initialConstraintValues->con[i]->name);
00849 if (!OSIsnan(m_OSOption->optimization->constraints->initialConstraintValues->con[i]->value))
00850 {
00851 osolStr << " value=\"";
00852 osolStr << os_dtoa_format(m_OSOption->optimization->constraints->initialConstraintValues->con[i]->value);
00853 osolStr << "\"";
00854 }
00855 osolStr << "/>" << endl;
00856 }
00857 osolStr << "</initialConstraintValues>" << endl;
00858 }
00859
00860 if (m_OSOption->optimization->constraints->initialDualValues != NULL)
00861 {
00862 osolStr << "<initialDualValues numberOfCon=\"";
00863 osolStr << m_OSOption->optimization->constraints->initialDualValues->numberOfCon << "\">" << endl;
00864 for (int i=0; i < m_OSOption->optimization->constraints->initialDualValues->numberOfCon; i++)
00865 {
00866 osolStr << "<con";
00867 osolStr << " idx=\"" << m_OSOption->optimization->constraints->initialDualValues->con[i]->idx << "\"";
00868 if (m_OSOption->optimization->constraints->initialDualValues->con[i]->name != "")
00869 osolStr << " name=" << writeStringData(m_OSOption->optimization->constraints->initialDualValues->con[i]->name);
00870 if (!OSIsnan(m_OSOption->optimization->constraints->initialDualValues->con[i]->lbDualValue))
00871 {
00872 osolStr << " lbDualValue=\"";
00873 osolStr << os_dtoa_format(m_OSOption->optimization->constraints->initialDualValues->con[i]->lbDualValue);
00874 osolStr << "\"";
00875 }
00876 if (!OSIsnan(m_OSOption->optimization->constraints->initialDualValues->con[i]->ubDualValue))
00877 {
00878 osolStr << " ubDualValue=\"";
00879 osolStr << os_dtoa_format(m_OSOption->optimization->constraints->initialDualValues->con[i]->ubDualValue);
00880 osolStr << "\"";
00881 }
00882 osolStr << "/>" << endl;
00883 }
00884 osolStr << "</initialDualValues>" << endl;
00885 }
00886
00887 if (m_OSOption->optimization->constraints->initialBasisStatus != NULL)
00888 {
00889 #ifndef NDEBUG
00890 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace,
00891 "output <constraints> <basisStatus>");
00892 #endif
00893 osolStr << "<initialBasisStatus>" << endl;
00894 osolStr << writeBasisStatus(m_OSOption->optimization->constraints->initialBasisStatus, m_bWhiteSpace, m_bWriteBase64);
00895 osolStr << "</initialBasisStatus>" << endl;
00896 }
00897
00898 #ifndef NDEBUG
00899 outStr.str("");
00900 outStr.clear();
00901 outStr << "Number of other constraint options: "
00902 << m_OSOption->optimization->constraints->numberOfOtherConstraintOptions
00903 << std::endl;
00904 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, outStr.str());
00905 #endif
00906
00907 for (int i=0; i < m_OSOption->optimization->constraints->numberOfOtherConstraintOptions; i++)
00908 {
00909 osolStr << "<other name=\"" << m_OSOption->optimization->constraints->other[i]->name << "\"";
00910
00911
00912 osolStr << " numberOfCon=\"" << m_OSOption->optimization->constraints->other[i]->numberOfCon << "\"";
00913
00914 osolStr << " numberOfEnumerations=\"" << m_OSOption->optimization->constraints->other[i]->numberOfEnumerations << "\"";
00915 if (m_OSOption->optimization->constraints->other[i]->value != "")
00916 osolStr << " value=\"" << m_OSOption->optimization->constraints->other[i]->value << "\"";
00917 if (m_OSOption->optimization->constraints->other[i]->solver != "")
00918 osolStr << " solver=\"" << m_OSOption->optimization->constraints->other[i]->solver << "\"";
00919 if (m_OSOption->optimization->constraints->other[i]->category != "")
00920 osolStr << " category=\"" << m_OSOption->optimization->constraints->other[i]->category << "\"";
00921 if (m_OSOption->optimization->constraints->other[i]->type != "")
00922 osolStr << " type=\"" << m_OSOption->optimization->constraints->other[i]->type << "\"";
00923 if (m_OSOption->optimization->constraints->other[i]->description != "")
00924 osolStr << " description=" << writeStringData(m_OSOption->optimization->constraints->other[i]->description);
00925 if (m_OSOption->optimization->constraints->other[i]->conType != "")
00926 osolStr << " conType=\"" << m_OSOption->optimization->constraints->other[i]->conType << "\"";
00927 if (m_OSOption->optimization->constraints->other[i]->enumType != "")
00928 osolStr << " enumType=\"" << m_OSOption->optimization->constraints->other[i]->enumType << "\"";
00929 osolStr << ">" << endl;
00930
00931 for (int j=0; j < m_OSOption->optimization->constraints->other[i]->numberOfCon; j++)
00932 {
00933 osolStr << "<con idx=\"" << m_OSOption->optimization->constraints->other[i]->con[j]->idx << "\"";
00934 if (m_OSOption->optimization->constraints->other[i]->con[j]->name != "")
00935 osolStr << " name=" << writeStringData(m_OSOption->optimization->constraints->other[i]->con[j]->name);
00936 if (m_OSOption->optimization->constraints->other[i]->con[j]->value != "")
00937 osolStr << " value=\"" << m_OSOption->optimization->constraints->other[i]->con[j]->value << "\"";
00938 if (m_OSOption->optimization->constraints->other[i]->con[j]->lbValue != "")
00939 osolStr << " lbValue=\"" << m_OSOption->optimization->constraints->other[i]->con[j]->lbValue << "\"";
00940 if (m_OSOption->optimization->constraints->other[i]->con[j]->ubValue != "")
00941 osolStr << " ubValue=\"" << m_OSOption->optimization->constraints->other[i]->con[j]->ubValue << "\"";
00942 osolStr << "/>" << endl;
00943 }
00944
00945 for (int j=0; j < m_OSOption->optimization->constraints->other[i]->numberOfEnumerations; j++)
00946 osolStr << writeOtherOptionOrResultEnumeration(m_OSOption->optimization->constraints->other[i]->enumeration[j], m_bWhiteSpace, m_bWriteBase64);
00947
00948 osolStr << "</other>" << endl;
00949 }
00950 osolStr << "</constraints>" << endl;
00951 }
00952 #ifndef NDEBUG
00953 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "Done with <constraint> element");
00954 #endif
00955 if (m_OSOption->optimization->solverOptions != NULL)
00956 {
00957
00958 {
00959 osolStr << "<solverOptions numberOfSolverOptions=\"";
00960 osolStr << m_OSOption->optimization->solverOptions->numberOfSolverOptions << "\">" << endl;
00961 for (int i=0; i < m_OSOption->optimization->solverOptions->numberOfSolverOptions; i++)
00962 {
00963 osolStr << "<solverOption name=\"" << m_OSOption->optimization->solverOptions->solverOption[i]->name << "\"";
00964 if (m_OSOption->optimization->solverOptions->solverOption[i]->value != "")
00965 osolStr << " value=\"" << m_OSOption->optimization->solverOptions->solverOption[i]->value << "\"";
00966 if (m_OSOption->optimization->solverOptions->solverOption[i]->solver != "")
00967 osolStr << " solver=\"" << m_OSOption->optimization->solverOptions->solverOption[i]->solver << "\"";
00968 if (m_OSOption->optimization->solverOptions->solverOption[i]->category != "")
00969 osolStr << " category=\"" << m_OSOption->optimization->solverOptions->solverOption[i]->category << "\"";
00970 if (m_OSOption->optimization->solverOptions->solverOption[i]->type != "")
00971 osolStr << " type=\"" << m_OSOption->optimization->solverOptions->solverOption[i]->type << "\"";
00972 if (m_OSOption->optimization->solverOptions->solverOption[i]->description != "")
00973 osolStr << " description=" << writeStringData(m_OSOption->optimization->solverOptions->solverOption[i]->description);
00974 if (m_OSOption->optimization->solverOptions->solverOption[i]->numberOfItems == 0)
00975 osolStr << "/>" << endl;
00976 else
00977 {
00978 osolStr << " numberOfItems=\"" << m_OSOption->optimization->solverOptions->solverOption[i]->numberOfItems << "\">";
00979 for (int k=0; k<m_OSOption->optimization->solverOptions->solverOption[i]->numberOfItems; k++)
00980 osolStr << "<item>" << m_OSOption->optimization->solverOptions->solverOption[i]->item[k] << "</item>" << endl;
00981 osolStr << "</solverOption>" << endl;
00982 }
00983 }
00984 osolStr << "</solverOptions>" << endl;
00985 }
00986 }
00987 osolStr << "</optimization>" << endl;
00988 };
00989 osolStr << "</osol>" << endl;
00990 #ifndef NDEBUG
00991 osoutput->OSPrint(ENUM_OUTPUT_AREA_OSoLwriter, ENUM_OUTPUT_LEVEL_trace, "Done with <optimization> element");
00992 #endif
00993 return osolStr.str();
00994 }
00995
00996
00997