def _on_add_group_dialog_ok(self, name, url_pattern, source):
     # TODO: Validate user input:
     #       * Is name or url_pattern empty?
     #       * Is name or url_pattern already taken?
     rg = ResourceGroup(self.project, name, url_pattern)
     rg.source = source
     self.entity_tree.update()
 def _update_preview_urls(self):
     url_pattern = self.pattern_field.GetValue()
     url_pattern_re = ResourceGroup.create_re_for_url_pattern(url_pattern)
     
     matching_urls = []
     for r in self._project.resources:
         if url_pattern_re.match(r.url) is not None:
             matching_urls.append(r.url)
     
     self.url_list.Clear()
     self.url_list.InsertItems(sorted(matching_urls), 0)