void Filters::FilterList::Configure(){ TiXmlDocument *Doc = NULL; TiXmlElement *root,*config,*report,*group,*filter,*print; Doc = new TiXmlDocument(_filterFile); if( Doc->LoadFile() ){ root = Doc->FirstChildElement("Root"); report = root->FirstChildElement("Report"); for(group = report->FirstChildElement("Group"); group != NULL; group = group->NextSiblingElement("Group")){ FilterGroup *filterGroup = new FilterGroup(); for(filter = group->FirstChildElement("Filter"); filter != NULL; filter = filter->NextSiblingElement("Filter")){ std::string name; std::string oper; std::string val; std::string fname; if(filter->Attribute("operator")){ oper = filter->Attribute("operator"); } if(filter->Attribute("name")){ name = filter->Attribute("name"); } if(filter->Attribute("value")){ val = filter->Attribute("value"); } std::string type; Type2Name::GetInstance().GetType(name,type); GContainer::Container *newContainer = new GContainer::Container(name,type,val); filterGroup->AddFilter(new Filter(oper,newContainer)); } _allFilters.push_back(filterGroup); } delete Doc; } }
void Filters::Load() { status_t err; // figure out where the file should be BPath path; err = find_directory(B_USER_SETTINGS_DIRECTORY, &path, true); if (err != B_NO_ERROR) return; path.Append(FileNames::filtersFileName); // open the file BFile* file = new BFile(path.Path(), B_READ_ONLY); if (file->InitCheck() != B_NO_ERROR) { delete file; return; } // load the text off_t fileSize; file->GetSize(&fileSize); char* text = new char[fileSize]; file->ReadAt(0, text, fileSize); delete file; // parse it TextReader reader(string_slice(text, text + fileSize)); FilterGroup* curGroup = NULL; while (!reader.AtEOF()) { // get the groupName string_slice groupName = reader.NextTabField(); if (groupName.length() > 0) { curGroup = GetFilterGroup(groupName); if (curGroup == NULL) { curGroup = new FilterGroup(groupName); AddFilterGroup(curGroup); } reader.NextLine(); } // if none, this is a filter line (if it's not blank) else { string_slice filterLine = reader.NextLine(); if (filterLine.length() > 0 && curGroup != NULL) { Filter* filter = new Filter(); TextReader lineReader(filterLine); filter->ReadFrom(&lineReader); curGroup->AddFilter(filter); } } } // clean up delete text; }
void SettingsTest::testFilterGroups() { QList<FilterGroup> groups; FilterGroup group; group.setName("Test group"); FilterRule rule("test rule"); group.setFilterRules({rule}); groups.append(group); Settings settings; settings.setFilterGroups(groups); QVERIFY2(settings.filterGroups() == groups, "Failed save/restore filter groups"); }
void Filters::WriteFilterGroup(OrderedObject* object, void* data) { FilterGroup* filterGroup = (FilterGroup*) object; BFile* file = (BFile*) data; string_slice eol("\n"); // write the group name string_slice groupName = filterGroup->GroupName(); file->Write(groupName.begin(), groupName.length()); file->Write(eol.begin(), eol.length()); // write the filters int numFilters = filterGroup->NumFilters(); for (int i=0; i<numFilters; i++) filterGroup->FilterAt(i)->WriteToFile(file); }
bool FilterGroup::operator==(const FilterGroup &other) const { if (name() != other.name()) { return false; } if (filterRules() != other.filterRules()) { return false; } if (id() != other.id()) { return false; } return true; }