// Module short cuts --- unsigned GetAttributes(const TCHAR* module, const IAttributeTypeVector & types, IAttributeVector & attributes, bool noRefresh=false, bool noBroadcast=false) const { clib::recursive_mutex::scoped_lock proc(m_mutex); typedef std::pair<std::_tstring, std::_tstring> CommentEclPair; typedef std::map<std::_tstring, CommentEclPair> AttrMap; AttrMap attrs; std::_tstring attributeLabel; std::_tstring attributeComment; std::_tstring attributeEcl; typedef std::vector<std::_tstring> split_vector_type; split_vector_type SplitVec; boost::algorithm::split(SplitVec, m_modFile, boost::algorithm::is_any_of("\r\n"), boost::algorithm::token_compress_on); for (split_vector_type::const_iterator itr = SplitVec.begin(); itr != SplitVec.end(); ++itr) { std::_tstring trimmedLine = *itr; boost::algorithm::trim(trimmedLine); if (boost::algorithm::istarts_with(trimmedLine, IMPORT_MARKER)) { if (attributeLabel.length() && attributeEcl.length()) { attrs[attributeLabel] = CommentEclPair(attributeComment, attributeEcl); } boost::algorithm::ireplace_first(trimmedLine, IMPORT_MARKER, _T("")); attributeLabel = trimmedLine; attributeComment.clear(); attributeEcl.clear(); } else if (boost::algorithm::istarts_with(trimmedLine, COMMENT_MARKER)) { boost::algorithm::ireplace_first(trimmedLine, COMMENT_MARKER, _T("")); attributeComment += trimmedLine + _T("\r\n"); } else { attributeEcl += *itr + _T("\r\n"); } } if (attributeLabel.length() && attributeEcl.length()) { attrs[attributeLabel] = CommentEclPair(attributeComment, attributeEcl); } for(AttrMap::iterator itr = attrs.begin(); itr != attrs.end(); ++itr) { int curPos = 0; CModuleHelper moduleHelper(itr->first); if (boost::algorithm::iequals(moduleHelper.GetModuleLabel(), module)) { StlLinked<IAttribute> attribute = CreateModFileAttribute(this, module, moduleHelper.GetAttributeLabel(), itr->second.second); attributes.push_back(attribute); } } std::sort(attributes.begin(), attributes.end(), IAttributeCompare()); return attributes.size(); }
//bool CBuilderDlg::DoFileOpen(const CString & sPathName) //{ // Help Alligning with BuilderDlg COmpare //} bool CAttributeDlg::DoSave(bool attrOnly) { CWaitCursor wait; CString ecl; m_view.GetText(ecl); CString id = m_attribute->GetID(); CString user = m_attribute->GetModifiedBy(); CString module = m_attribute->GetModuleQualifiedLabel(); CString attributeName = m_attribute->GetLabel(); IAttributeType* attrType = m_attribute->GetType(); CBookmarksFrame * pFrame = GetBookmarksFrame(); if (pFrame) { pFrame->ParseBookmarksEcl((LPCTSTR)ecl, (LPCTSTR)user, (LPCTSTR)id, (LPCTSTR)module, (LPCTSTR)attributeName, attrType); } if (m_attribute->SetText(ecl)) { // Save local item for history --- boost::filesystem::path path; GetIConfig(QUERYBUILDER_CFG)->GetEnvironmentFolder(path); path /= stringToPath(m_attribute->GetModuleQualifiedLabel()); boost::filesystem::create_directories(path); path /= stringToPath(m_attribute->GetLabel()); boost::filesystem::create_directories(path); CTime t = CTime::GetCurrentTime(); std::_tstring now = t.FormatGmt(_T("%Y-%m-%dT%H_%M_%SZ.ecl")); path /= stringToPath(now); CUnicodeFile file; file.Create(pathToWString(path).c_str()); file.Write(ecl); file.Close(); // --- --- --- m_view.SetSavePoint(); IAttributeVector attrs; Dali::CEclExceptionVector errors; m_attribute->PreProcess(PREPROCESS_SAVE, NULL, attrs, errors); SendMessage(CWM_SUBMITDONE, Dali::WUActionCheck, (LPARAM)&errors); if (attrs.size()) { if (!m_migrator) m_migrator = CreateIMigration(::AttachRepository(), false); m_migrator->Stop(); for(IAttributeVector::const_iterator itr = attrs.begin(); itr != attrs.end(); ++itr) m_migrator->AddToRep(m_attribute->GetModule()->GetRootModule(), itr->get()->GetAsHistory(), (boost::_tformat(_T("Preprocessed (%1%) from %2%.")) % PREPROCESS_LABEL[PREPROCESS_SAVE] % m_attribute->GetQualifiedLabel()).str().c_str(), true); m_migrator->Start(); SetTimer(0, 200); } return true; } return false; }