// --------------------------------------------------------------------------- TJSONArray * __fastcall TNoteJSON::NotesToJSON(std::vector<TNote*> *ANotes) { TJSONArray * jsonArray = new TJSONArray(); for(std::vector<TNote*>::iterator it = ANotes->begin(); it != ANotes->end(); it++) { jsonArray->Add(TNoteJSON::NoteToJSON(*it)); } return jsonArray; }
//--------------------------------------------------------------------------- //сохраняет текущий проект на диск void ProjectManager::saveProject(UnicodeString fileName) { //открываем файловым поток TFileStream *fs = new TFileStream(fileName, fmCreate); try { //заносим текущий проетк в JSON объект TJSONObject *js = new TJSONObject(); TJSONArray *criteriaNamesJSON = new TJSONArray(); TJSONArray *alternativeNamesJSON = new TJSONArray(); //добавляем имена критериев const vector<UnicodeString> &criteriaNames = getCurrentProject().getCriteriaNames(); vector<UnicodeString>::const_iterator iter; for (iter = criteriaNames.begin(); iter != criteriaNames.end(); ++iter) { criteriaNamesJSON->Add(*iter); } js->AddPair(L"criteriaNames", criteriaNamesJSON); //добавляем имена альтернатив const vector<UnicodeString> &alternativeNames = getCurrentProject().getAlternativeNames(); for (iter = alternativeNames.begin(); iter != alternativeNames.end(); ++iter) { alternativeNamesJSON->Add(*iter); } js->AddPair(L"alternativeNames", alternativeNamesJSON); //добавляем оценки критериев (баллы и рассчитаныый рейтинг(приоритеты)) Estimates &criteriaEstimates = currentProject->getCriteriaEstimates(); vector< vector<int> > &rates = criteriaEstimates.getRates(); vector<double> &priorities = criteriaEstimates.getPriorities(); TJSONObject *crteriaEstimatesJSON = new TJSONObject(); TJSONArray *crteriaEstimatesArray = new TJSONArray(); for (int i = 0; i < priorities.size(); ++i) { crteriaEstimatesArray->Add(FloatToStr(priorities[i])); } crteriaEstimatesJSON->AddPair(L"priorities", crteriaEstimatesArray); TJSONArray *crteriaRatesTable = new TJSONArray(); for (int i = 0; i < rates.size(); ++i) { vector<int> &v = rates[i]; TJSONArray *crteriaRatesRow = new TJSONArray(); for (int j = 0; j < v.size(); ++j) { crteriaRatesRow->Add(IntToStr(v[j])); } crteriaRatesTable->Add(crteriaRatesRow); } crteriaEstimatesJSON->AddPair(L"rates", crteriaRatesTable); js->AddPair(L"criteriaEstimates", crteriaEstimatesJSON); //добавляем оценки альтернатив vector<Estimates> alternativeEstimates = getCurrentProject().getAlternativeEstimates(); TJSONArray *tableData = new TJSONArray(); for (int i = 0; i < alternativeEstimates.size(); i++) { TJSONObject *alternativeEstimatesJSON = new TJSONObject(); TJSONArray *prioritiesJSON = new TJSONArray(); const vector<double> &priorities = alternativeEstimates[i].getPriorities(); for (int j = 0; j < priorities.size(); j++) { prioritiesJSON->Add(FloatToStr(priorities[j])); } alternativeEstimatesJSON->AddPair("priorities", prioritiesJSON); vector< vector<int> > &rates = alternativeEstimates[i].getRates(); TJSONArray *alternativeRatesTable = new TJSONArray(); for (int j = 0; j < rates.size(); ++j) { vector<int> &v = rates[j]; TJSONArray *alternativeRatesRow = new TJSONArray(); for (int k = 0; k < v.size(); ++k) { alternativeRatesRow->Add(IntToStr(v[k])); } alternativeRatesTable->Add(alternativeRatesRow); } alternativeEstimatesJSON->AddPair(L"rates", alternativeRatesTable); tableData->AddElement(alternativeEstimatesJSON); } js->AddPair(L"alternativeEstimates", tableData); //сохраняем имя и метод js->AddPair(L"projectName", getCurrentProject().getName()); js->AddPair(L"method", IntToStr(getCurrentProject().getMethod())); //сохраняем JSON объект в файл как строку UnicodeString projectJSON = js->ToString(); fs->Write(projectJSON.BytesOf(), projectJSON.Length()); js->Free(); //устанавливаем, что проект сохранён setIsCurrentProjectSaved(true); } __finally { fs->Free(); } }