Exemplo n.º 1
0
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;
  }
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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");
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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;
}