X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FTools%2Fpadder%2Fmeshjob%2Fimpl%2FMeshJobManager_i.cxx;h=612906070fcc2cea2670c78ce35a77d85f553742;hp=d1760f2ab6566f740a918a5bbb26e96615267fda;hb=ee5cb3d25c6148c7de732339aa84653a45e81f7f;hpb=a6bc2b5a1c0a749e100e8a9de9be91c9bcc837a8 diff --git a/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx b/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx index d1760f2ab..612906070 100644 --- a/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx +++ b/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx @@ -67,6 +67,21 @@ static bool myStartsWith(const std::string& text,const std::string& token){ return (text.compare(0, token.length(), token) == 0); } +/*! + * This function returns true if the file exists on the local file + * system. + */ +#include +#include +static bool fexists(const char *filename) +{ + std::ifstream ifile(filename); + if ((bool)ifile && ifile.good()) { + return true; + } + return false; +} + // // ==================================================================== // Constructor/Destructor @@ -134,7 +149,16 @@ static std::string REMOTE_WORKDIR("/tmp/spadder.remote.workdir."+USER); * input data (list of filenames and groupnames) and returns the path * of the created file. This function is the one that knows the format * of the padder input file. If the input file format changes, then - * this function (and only this one) should be updated. + * this function (and only this one) should be updated. The file + * format is the following ([] means that the variable is optional): + * + * [ ] + * nbSteelBarMeshes + * + * + * ... + * + * */ const char * MeshJobManager_i::_writeDataFile(std::vector listConcreteMesh, std::vector listSteelBarMesh) { @@ -147,27 +171,29 @@ const char * MeshJobManager_i::_writeDataFile(std::vectorc_str()); - - // We first specify the concrete mesh data (filename and groupname) + + // Note that we use here the basename of the files because the files + // are supposed to be copied in the REMOTE_WORKDIR for execution. std::string line; + + // We first specify the concrete mesh data (filename and groupname) + if ( listConcreteMesh.size() > 0 ) { #ifdef WIN32 - char fname[ _MAX_FNAME ]; - _splitpath( listConcreteMesh[0].file_name, NULL, NULL, fname, NULL ); - char* bname = &fname[0]; + char fname[ _MAX_FNAME ]; + _splitpath( listConcreteMesh[0].file_name, NULL, NULL, fname, NULL ); + char* bname = &fname[0]; #else - char* bname = basename(listConcreteMesh[0].file_name); + char* bname = basename(listConcreteMesh[0].file_name); #endif - line = std::string(bname) + " " + std::string(listConcreteMesh[0].group_name); - dataFile << line.c_str() << std::endl; - // Note that we use here the basename because the files are supposed - // to be copied in the REMOTE_WORKDIR for execution. - - // The, we can specify the steelbar mesh data, starting by the + line = std::string(bname) + " " + std::string(listConcreteMesh[0].group_name); + dataFile << line.c_str() << std::endl; + } + // Then, we can specify the steelbar mesh data, starting by the // number of meshes - int nbSteelBarMesh=listSteelBarMesh.size(); - line = std::string("nbSteelbarMesh") + SEPARATOR + ToString(nbSteelBarMesh); + int nbSteelBarMeshes=listSteelBarMesh.size(); + line = std::string("nbSteelBarMeshes") + SEPARATOR + ToString(nbSteelBarMeshes); dataFile << line.c_str() << std::endl; - for (int i=0; iin_files.length(nbFiles); - jobParameters->in_files[0] = CORBA::string_dup(listConcreteMesh[0].file_name); - for (int i=0; iin_files[1+i] = CORBA::string_dup(listSteelBarMesh[i].file_name); + for (int i=0; iin_files[i] = CORBA::string_dup(listConcreteMesh[i].file_name); + } + for (int i=0; iin_files[nbcmesh+i] = CORBA::string_dup(listSteelBarMesh[i].file_name); } - jobParameters->in_files[1+listSteelBarMesh.size()] = CORBA::string_dup(dataFilename); + jobParameters->in_files[nbcmesh+nbsmesh] = CORBA::string_dup(dataFilename); // Note that all these input files will be copied in the - // REMOTE_WORKDIR on the remote host - - // Then, we have to specify the existance of an output - // filenames. The path is supposed to be a path on the remote - // resource, i.e. where the job is executed. + // REMOTE_WORKDIR on the remote host. At this step, they should + // all exist, so we can check their presence on the local + // filesystem. + for (int i=0; iin_files[i]) != true ) { + _lastErrorMessage = std::string("The input file ") + std::string(jobParameters->in_files[i]); + _lastErrorMessage+= std::string(" does not exists. Can't initialize the job"); + LOG(_lastErrorMessage); + return JOBID_UNDEFINED; + } + } + + // Then, we have to specify the existance of an output filename. The + // path is supposed to be a path on the remote resource, i.e. where + // the job is executed. jobParameters->out_files.length(1); std::string outputfile_name = std::string(jobPaths->remote_workdir)+"/"+OUTPUTFILE; jobParameters->out_files[0] = CORBA::string_dup(outputfile_name.c_str());