org.apache.tools.ant.types.resources

## Class ContentTransformingResource

- java.lang.Object
- - org.apache.tools.ant.ProjectComponent
  - - org.apache.tools.ant.types.DataType
    - - org.apache.tools.ant.types.Resource
      - - org.apache.tools.ant.types.resources.ResourceDecorator
        - - org.apache.tools.ant.types.resources.ContentTransformingResource

- All Implemented Interfaces:
    java.lang.Cloneable, java.lang.Comparable<Resource>, java.lang.Iterable<Resource>, ResourceCollection
  Direct Known Subclasses:
    CompressedResource

      public abstract class ContentTransformingResource
      extends ResourceDecorator

  A resource that transforms the content of another resource.

  Wraps around another resource, delegates all queries (except getSize) to that other resource but transforms stream content on the fly.

  Since:
    Ant 1.8

- - ### Field Summary

    - ### Fields inherited from class org.apache.tools.ant.types.Resource

      `MAGIC, UNKNOWN_DATETIME, UNKNOWN_SIZE`

    - ### Fields inherited from class org.apache.tools.ant.types.DataType

      `checked, ref`

    - ### Fields inherited from class org.apache.tools.ant.ProjectComponent

      `description, location, project`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `ContentTransformingResource()` no arg constructor
    `protected` | `ContentTransformingResource(ResourceCollection other)` Constructor with another resource to wrap.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `<T> T` | `as(java.lang.Class<T> clazz)` Suppress FileProvider, re-implement Appendable
    `java.io.InputStream` | `getInputStream()` Get an InputStream for the Resource.
    `java.io.OutputStream` | `getOutputStream()` Get an OutputStream for the Resource.
    `long` | `getSize()` Get the size of this Resource.
    `protected boolean` | `isAppendSupported()` Learn whether the transformation performed allows appends.
    `protected abstract java.io.InputStream` | `wrapStream(java.io.InputStream in)` Get a content-filtering/transforming InputStream.
    `protected abstract java.io.OutputStream` | `wrapStream(java.io.OutputStream out)` Get a content-filtering/transforming OutputStream.

    - ### Methods inherited from class org.apache.tools.ant.types.resources.ResourceDecorator

      `addConfigured, compareTo, dieOnCircularReference, getLastModified, getName, getResource, hashCode, isDirectory, isExists, isFilesystemOnly, setDirectory, setExists, setLastModified, setName, setRefid, setSize`

    - ### Methods inherited from class org.apache.tools.ant.types.Resource

      `asOptional, clone, equals, getCheckedRef, getMagicNumber, iterator, size, toLongString, toString`

    - ### Methods inherited from class org.apache.tools.ant.types.DataType

      `checkAttributesAllowed, checkChildrenAllowed, circularReference, dieOnCircularReference, dieOnCircularReference, getCheckedRef, getCheckedRef, getCheckedRef, getDataTypeName, getRefid, invokeCircularReferenceCheck, isChecked, isReference, noChildrenAllowed, pushAndInvokeCircularReferenceCheck, setChecked, tooManyAttributes`

    - ### Methods inherited from class org.apache.tools.ant.ProjectComponent

      `getDescription, getLocation, getProject, log, log, setDescription, setLocation, setProject`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.apache.tools.ant.types.ResourceCollection

      `isEmpty, stream`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

- - ### Constructor Detail

    - #### ContentTransformingResource

          protected ContentTransformingResource()

      no arg constructor

    - #### ContentTransformingResource

          protected ContentTransformingResource(ResourceCollection other)

      Constructor with another resource to wrap.
      Parameters:
        `other` - the resource to wrap.

  - ### Method Detail

    - #### getSize

          public long getSize()

      Get the size of this Resource.
      Overrides:
        `getSize` in class `ResourceDecorator`
      Returns:
        the size, as a long, 0 if the Resource does not exist (for compatibility with java.io.File), or UNKNOWN_SIZE if not known.

    - #### getInputStream

          public java.io.InputStream getInputStream()
                                             throws java.io.IOException

      Get an InputStream for the Resource.
      Overrides:
        `getInputStream` in class `ResourceDecorator`
      Returns:
        an InputStream containing this Resource's content.
      Throws:
        `java.io.IOException` - if unable to provide the content of this Resource as a stream.
        `java.lang.UnsupportedOperationException` - if InputStreams are not supported for this Resource type.

    - #### getOutputStream

          public java.io.OutputStream getOutputStream()
                                               throws java.io.IOException

      Get an OutputStream for the Resource.
      Overrides:
        `getOutputStream` in class `ResourceDecorator`
      Returns:
        an OutputStream to which content can be written.
      Throws:
        `java.io.IOException` - if unable to provide the content of this Resource as a stream.
        `java.lang.UnsupportedOperationException` - if OutputStreams are not supported for this Resource type.

    - #### as

          public <T> T as(java.lang.Class<T> clazz)

      Suppress FileProvider, re-implement Appendable
      Overrides:
        `as` in class `ResourceDecorator`
      Type Parameters:
        `T` - desired type
      Parameters:
        `clazz` - a class
      Returns:
        resource of a desired type

    - #### isAppendSupported

          protected boolean isAppendSupported()

      Learn whether the transformation performed allows appends.

      In general compressed outputs will become invalid if they are appended to, for example.

      This implementations returns false.

      Returns:
        boolean false

    - #### wrapStream

          protected abstract java.io.InputStream wrapStream(java.io.InputStream in)
                                                     throws java.io.IOException

      Get a content-filtering/transforming InputStream.
      Parameters:
        `in` - InputStream to wrap, will never be null.
      Returns:
        a compressed InputStream.
      Throws:
        `java.io.IOException` - if there is a problem.

    - #### wrapStream

          protected abstract java.io.OutputStream wrapStream(java.io.OutputStream out)
                                                      throws java.io.IOException

      Get a content-filtering/transforming OutputStream.
      Parameters:
        `out` - OutputStream to wrap, will never be null.
      Returns:
        a compressed OutputStream.
      Throws:
        `java.io.IOException` - if there is a problem.