# Interface ContentFilterable

All Known Subinterfaces:
  `CopyProcessingSpec, CopySpec, FileCopyDetails, SyncSpec`

All Known Implementing Classes:
  `AbstractArchiveTask, AbstractCopyTask, Copy, Ear, Jar, Jar, ProcessResources, Sync, Tar, War, Zip`

public interface ContentFilterable
Represents some binary resource whose content can be filtered.

Since:
  0.9

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ContentFilterable`
  `expand(Map<String,?> properties)`
  Expands property references in each file as it is copied.
  `ContentFilterable`
  `expand(Map<String,?> properties, Action<? super ExpandDetails> action)`
  Expands property references in each file as it is copied.
  `ContentFilterable`
  `filter(Closure closure)`
  Adds a content filter based on the provided closure.
  `ContentFilterable`
  `filter(Class<? extends FilterReader> filterType)`
  Adds a content filter to be used during the copy.
  `ContentFilterable`
  `filter(Map<String,?> properties, Class<? extends FilterReader> filterType)`
  Adds a content filter to be used during the copy.
  `ContentFilterable`
  `filter(Transformer<@Nullable String, String> transformer)`
  Adds a content filter based on the provided transformer.

- ## Method Details

  - ### filter

    ContentFilterable filter(Map<String,?> properties, Class<? extends FilterReader> filterType)

    Adds a content filter to be used during the copy. Multiple calls to filter, add additional filters to the filter chain. Each filter should implement `java.io.FilterReader`. Include `org.apache.tools.ant.filters.*` for access to all the standard Ant filters.

    Filter properties may be specified using groovy map syntax.

    Examples:

           filter(HeadFilter, lines:25, skip:2)
           filter(ReplaceTokens, tokens:[copyright:'2009', version:'2.3.1'])

    Parameters:
      `properties` - map of filter properties
      `filterType` - Class of filter to add
    Returns:
      this
    Since:
      0.9

  - ### filter

    ContentFilterable filter(Class<? extends FilterReader> filterType)

    Adds a content filter to be used during the copy. Multiple calls to filter, add additional filters to the filter chain. Each filter should implement `java.io.FilterReader`. Include `org.apache.tools.ant.filters.*` for access to all the standard Ant filters.

    Examples:

           filter(StripJavaComments)
           filter(com.mycompany.project.CustomFilter)

    Parameters:
      `filterType` - Class of filter to add
    Returns:
      this
    Since:
      0.9

  - ### filter

    ContentFilterable filter(Closure closure)
    Adds a content filter based on the provided closure. The Closure will be called with each line (stripped of line endings) and should return a String to replace the line or `null` to remove the line. If every line is removed, the result will be an empty file, not an absent one.
    Parameters:
      `closure` - to implement line based filtering
    Returns:
      this
    Since:
      0.9

  - ### filter

    ContentFilterable filter(Transformer<@Nullable String, String> transformer)
    Adds a content filter based on the provided transformer. The Closure will be called with each line (stripped of line endings) and should return a String to replace the line or `null` to remove the line. If every line is removed, the result will be an empty file, not an absent one.
    Parameters:
      `transformer` - to implement line based filtering
    Returns:
      this
    Since:
      3.0

  - ### expand

    ContentFilterable expand(Map<String,?> properties)

    Expands property references in each file as it is copied. More specifically, each file is transformed using Groovy's `SimpleTemplateEngine`. This means you can use simple property references, such as `$property` or `${property}` in the file. You can also include arbitrary Groovy code in the file, such as `${version ?: 'unknown'}` or `${classpath*.name.join(' ')}`

    Note that all escape sequences (`\n`, `\t`, `\\`, etc) are converted to the symbols they represent, so, for example, `\n` becomes newline. If this is undesirable then `expand(Map, Action)` should be used to disable this behavior.

    Parameters:
      `properties` - reference-to-value map for substitution
    Returns:
      this
    Since:
      0.9

  - ### expand

    ContentFilterable expand(Map<String,?> properties, Action<? super ExpandDetails> action)

    Expands property references in each file as it is copied. More specifically, each file is transformed using Groovy's `SimpleTemplateEngine`. This means you can use simple property references, such as `$property` or `${property}` in the file. You can also include arbitrary Groovy code in the file, such as `${version ?: 'unknown'}` or `${classpath*.name.join(' ')}`. The template engine can be configured with the provided action.

    Note that by default all escape sequences (`\n`, `\t`, `\\`, etc) are converted to the symbols they represent, so, for example, `\n` becomes newline. This behavior is controlled by `ExpandDetails.getEscapeBackslash()` property. It should be set to `true` to disable escape sequences conversion:

         expand(one: '1', two: 2) {
             escapeBackslash = true
         }

    Parameters:
      `properties` - reference-to-value map for substitution
      `action` - action to perform additional configuration of the underlying template engine
    Returns:
      this
    Since:
      7.2