void ImportProject::init ( const ParameterList& paramList ) { string fpath = paramList.getStringValue ( "upload_temp_filepath" ); string user = paramList.getStringValue ( "user" ); if ( user == "root" ) { genUnlink ( fpath ); throw runtime_error ( "Root user can't create projects." ); } UserInfo* userInfo = MySQLPPSDDBase::instance ().getUserInfo ( user ); if ( !userInfo ) { genUnlink ( fpath ); throw runtime_error ( "Unknown user." ); } userID = userInfo->getUserID (); if ( !newProjectName.empty () && MySQLPPSDDBase::instance ().checkProject ( userID, newProjectName ) ) { genUnlink ( fpath ); throw runtime_error ( "Project already exists." ); } reposit = new UserRepository ( "batchtag", userInfo->getDirectoryName () ); // Where to put files given a user. Also creates the directories. uploadName = genPreprocessFile ( fpath ); }
void batchSubmission ( ostream& os, ParameterList& paramList ) { init_html ( os, "Batch Submission" ); if ( paramList.empty () ) { ErrorHandler::genError ()->error ( "No parameters passed to Prospector program.\n" ); } string user = paramList.getStringValue ( "user" ); os << "<p>Creating Prospector files.</p>" << endl; string searchKey = genRandomString ( 16 ); // Selects a unique string for the search string searchName = paramList.getStringValue ( "search_name" ); // Program (eg batchtag) string uploadFpath = paramList.getStringValue ( "upload_data_filepath" ); // This is the full path name of the uploaded file as named by PP string resultsName = paramList.getStringValue ( "output_filename" ); bool searchKeyProblem; try { checkConstantAndVariableModCompatibility ( ¶mList ); } catch ( runtime_error e ) { // Catch database login problems genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( e ); } try { searchKeyProblem = MySQLPPSDDBase::instance ().checkSearchKey ( searchKey );// Checks it is unique } catch ( runtime_error e ) { // Catch database login problems genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( e ); } if ( searchKeyProblem ) { genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "Search key not unique.\n" );// The search key has to be unique to carry on. } if ( resultsName.empty () ) { genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "No results name has been chosen.\n" ); } string password; bool passwordFlag = paramList.getValue ( "password", password ); UserInfo* userInfo = MySQLPPSDDBase::instance ().getUserInfo ( user ); if ( !userInfo || ( passwordFlag && userInfo->getPassword () != password ) ) { // Get the user information genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "Unknown user and/or password.\n" ); } if ( user == "root" ) { // Get the user information genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "Root user can't do searches.\n" ); } if ( userInfo->getIsGuest () ) { genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "Guest users can't do searches.\n" ); } if ( !InfoParams::instance ().getBoolValue ( "btag_daemon_remote" ) ) { try { startDaemonIfNecessary (); } catch ( runtime_error e ) { genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( e ); } } string userID = userInfo->getUserID (); Repository* reposit = new UserRepository ( searchName, userInfo->getDirectoryName () ); // Where to put files given a user. Also creates the directories. string projectName; if ( uploadFpath.empty () ) { // The project already exists projectName = paramList.getStringValue ( "project_name" ); // From a form with a project name option. } else { string uploadFname = paramList.getStringValue ( "upload_data_filename" ); // This is the original file name. string instrument = paramList.getStringValue ( "instrument_name" ); uploadFname = genFilenameFromPath ( uploadFname ); // IE gives the full path whereas Mozilla give the filename (what we want) projectName = getProjectName ( uploadFname ); // The project is named after the uploaded file. This has to be unique. if ( projectName.length () > 58 ) { genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "The project name " + projectName + " is too long.\n" ); } if ( MySQLPPSDDBase::instance ().checkProject ( userID, projectName ) ) { genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "Project already exists.\n" ); } paramList.setValue ( "data_source", "List of Files" ); paramList.setValue ( "project_name", projectName ); paramList.removeName ( "upload_data_filename" ); paramList.removeName ( "upload_data_filepath" ); string uploadName = genPreprocessFile ( uploadFpath ); if ( uploadName == uploadFpath || isCompressedUpload ( uploadName ) ) { // If the file hasn't been preprocessed or it has just been uncompressed it must be a single file string shortName = genShortFilenameFromPath ( uploadName ); string newDir = genDirectoryFromPath ( uploadName ) + SLASH + shortName; if ( newDir == uploadName ) { newDir += "_1"; } genCreateDirectory ( newDir ); string newUploadName; if ( isCompressedUpload ( uploadName ) ) newUploadName = newDir + SLASH + genShortFilenameFromPath ( uploadFname ); else newUploadName = newDir + SLASH + uploadFname; genRename ( uploadName, newUploadName ); uploadName = newDir; } PPProject ppp ( userInfo->getMaxMSMSSpectra (), userInfo->getAllowRaw (), projectName, uploadName, searchKey, reposit, MSMSDataSetInfo::setChargeRange ( ¶mList ) ); if ( ppp.initialised () ) { int err = genRename ( uploadName, reposit->getFullDataPath () + SLASH + searchKey ); if ( err ) { genUnlink ( uploadName ); string e = gen_itoa ( err ); ErrorHandler::genError ()->error ( "Failed to move uploaded file to repository.\nError code = " + e + "\n" ); } ppp.createProjectFile ( reposit->getFullProjectPath () + SLASH + projectName + ".xml" ); string projectPath = reposit->getProjectPath (); MySQLPPSDDBase::instance ().submitProject ( userID, projectName, projectName + ".xml", reposit->getProjectPath (), instrument ); } else { string err = ppp.getErrMessage (); if ( ppp.getDeleteFlag () ) { // Known error - delete the upload directory genUnlinkDirectory ( uploadName ); } if ( err.empty () ) ErrorHandler::genError ()->error ( "Upload file has an invalid format.\n" ); else ErrorHandler::genError ()->error ( err + "\n" ); } } paramList.removeName ( "user" ); paramList.removeName ( "password" ); paramList.removeName ( "project_name" ); paramList.removeName ( "output_filename" ); // Search results file. paramList.removeName ( "msms_mod_AA_list" ); // These options are used to load the variable mods paramList.removeName ( "msms_mod_AA_types" ); // and shouldn't be saved. paramList.removeName ( "mod_AA_limit" ); paramList.removeName ( "mod_AA_file" ); paramList.removeName ( "motif_offset" ); paramList.removeName ( "motif" ); string projectID = MySQLPPSDDBase::instance ().getProjectID ( userID, projectName ); if ( projectID.empty () ) { genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "Project doesn't exist.\n" ); } if ( MySQLPPSDDBase::instance ().checkResults ( userID, projectID, resultsName ) ) { genUnlink ( uploadFpath ); ErrorHandler::genError ()->error ( "Results file of this name already exists for this project.\n" ); } paramList.XMLParameterFile ( reposit->getFullResultsPath () + SLASH + searchKey + ".xml" ); // This is the search parameter file MySQLPPSDDBase::instance ().submitSearch ( searchKey, projectID, resultsName, searchKey + ".xml", reposit->getResultsPath () ); MySQLPPSDDBase::instance ().updateProjectRecordUpdated ( projectID ); genSleep ( 5000 ); ParameterList pList ( "jobStatus", false, false, false, false, false ); pList.addName ( "search_key", searchKey ); refreshJavascript ( os, 0, pList.getURL (), true ); }