:param filter_rule: a list of filter rules
            e.g. filter_rule = [("dc:creator", "@rdf:resource",
                                 "https://test.url:9443/jts/users/me%40mail"),
                                ("dc:modified", None,
                                 "2013-08-28T02:06:26.516Z")
                                ]
            only the entry matches all the rules will be kept

def _handle_resource_entry(self, resource_name, entry,
                               projectarea_url=None, archived=False,
                               filter_rule=None):
        """
        :param filter_rule: a list of filter rules
            e.g. filter_rule = [("dc:creator", "@rdf:resource",
                                 "https://test.url:9443/jts/users/me%40mail"),
                                ("dc:modified", None,
                                 "2013-08-28T02:06:26.516Z")
                                ]
            only the entry matches all the rules will be kept
        """

        if projectarea_url is not None:
            try:
                if (entry.get("rtc_cm:projectArea")
                         .get("@rdf:resource")) != projectarea_url:
                    return None
            except AttributeError:
                pass

        if filter_rule is not None:
            # match all the filter rules
            for frule in filter_rule:
                fattr, rdf_resource, fvalue = frule
                try:
                    if rdf_resource is not None:
                        frule_value = entry.get(fattr).get(rdf_resource)
                    else:
                        frule_value = entry.get(fattr)

                    if frule_value != fvalue:
                        return None
                except AttributeError:
                    pass

        entry_archived = entry.get("rtc_cm:archived")
        if (entry_archived is not None and
                eval(entry_archived.capitalize()) != archived):
            return None

        if resource_name == "Subscriber":
            resource_cls = Member
        elif resource_name in ["Query", "RunQuery", "Parent", "Children"]:
            resource_cls = Workitem
        else:
            resource_cls = eval(resource_name)

        if resource_name in ["Workitem",
                             "Query",
                             "RunQuery",
                             "Parent",
                             "Children"]:
            resource_url = entry.get("@rdf:resource")
            resource_url = "/".join([self.url,
                                     "oslc/workitems",
                                     resource_url.split("/")[-1]])
        else:
            resource_url = entry.get("@rdf:resource")

        resource = resource_cls(resource_url,
                                self,
                                raw_data=entry)
        return resource