protected function filterList(array $nodes = array(), array $rules = array())
    {
        if (!empty($rules)) {
            foreach ($nodes as $node) {
                if (!$node instanceof AbstractNode) {
                    continue;
                }

                $props = $node->getInfo(false);
                $props = array_intersect_key($props, $rules);
                $match = true;

                foreach ($props as $key => $val) {
                    if ($val instanceof StringHelper) {
                        $match = $val->contains($rules[$key], true);
                    } else {
                        $match = $val == $rules[$key];
                    }

                    if ($match === false) {
                        unset($nodes[$node->getId()]);
                    }
                }
            }
        }

        return $nodes;
    }