code: private void writeFilteredSources(final String name, final String filter, final String basePath,
        final File[] sortedSources, final ContentHandler content) throws SAXException {
      final AttributesImpl filterAttrs = new AttributesImpl();
      filterAttrs.addAttribute(null, "Name", "Name", "#PCDATA", name);
      filterAttrs.addAttribute(null, "Filter", "Filter", "#PCDATA", filter);
      content.startElement(null, "Filter", "Filter", filterAttrs);
  
      final AttributesImpl fileAttrs = new AttributesImpl();
      fileAttrs.addAttribute(null, "RelativePath", "RelativePath", "#PCDATA", "");
  
      for (final File sortedSource : sortedSources) {
        if (isGroupMember(filter, sortedSource)) {
          final String relativePath = CUtil.getRelativePath(basePath, sortedSource);
          fileAttrs.setValue(0, relativePath);
          content.startElement(null, "File", "File", fileAttrs);
          content.endElement(null, "File", "File");
        }
      }
      content.endElement(null, "Filter", "Filter");
  
    }
docs: Writes a cluster of source files to the project.
  
  @param name
  name of filter
  @param filter
  file extensions
  @param basePath
  base path for files
  @param sortedSources
  array of source files
  @param content
  generated project
  @throws SAXException
  if invalid content