# InAndOutDirectoryOperationRequest

# InAndOutDirectoryOperationRequest

```
@Incubating interface InAndOutDirectoryOperationRequest<TaskT : Task>
```

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [com.android.build.api.artifact.InAndOutDirectoryOperationRequest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/InAndOutDirectoryOperationRequest#) |

## Summary

|                                                                                                                                                                                                                                                                                                                                                  ### Public methods                                                                                                                                                                                                                                                                                                                                                  ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                                                        | [toTransform](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/InAndOutDirectoryOperationRequest#toTransform(com.android.build.api.artifact.InAndOutDirectoryOperationRequest.toTransform.ArtifactTypeT))`(`type:` `ArtifactTypeT`)` Initiates a transform request to a single[Artifact.Transformable](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.Transformable)artifact type.                                                     |
| abstract[ArtifactTransformationRequest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/ArtifactTransformationRequest)\<TaskT\> | [toTransformMany](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/InAndOutDirectoryOperationRequest#toTransformMany(com.android.build.api.artifact.InAndOutDirectoryOperationRequest.toTransformMany.ArtifactTypeT))`(`type:` `ArtifactTypeT`)` Initiates a transform request to a single[Artifact.Transformable](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.Transformable)artifact type that can contain more than one artifact. |

## Public methods

### toTransform

```
abstract fun <ArtifactTypeT> toTransform(type: ArtifactTypeT): Unit where ArtifactTypeT : Artifact.SingleArtifact<Directory>, ArtifactTypeT : Artifact.Transformable
```

Initiates a transform request to a single[Artifact.Transformable](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.Transformable)artifact type.

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Parameters                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ||
|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type:ArtifactTypeT | The[Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact)identifying the artifact to transform. The[Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact)'s[Artifact.kind](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact#kind:com.android.build.api.artifact.ArtifactKind)must be[Artifact.DIRECTORY](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact#Companion.DIRECTORY:com.android.build.api.artifact.ArtifactKind.DIRECTORY) The artifact type must be[Artifact.SingleArtifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.SingleArtifact)and[Artifact.Transformable](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.Transformable). Let's take a[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)transforming an input[org.gradle.api.file.Directory](https://docs.gradle.org/current/javadoc/org/gradle/api/file/Directory.html)into an output: ```scalate-server-page abstract class MyTask: DefaultTask() { @get:InputFiles abstract val inputDir: DirectoryProperty @get:OutputDirectory abstract val outputDir: DirectoryProperty @TaskAction fun taskAction() { ... read inputFile and write outputFile ... } } ``` An ArtifactType defined as follows : ```scalate-server-page sealed class ArtifactType<T: FileSystemLocation>(val kind: ArtifactKind) { object SINGLE_DIR_ARTIFACT: ArtifactType<Directory>(DIRECTORY), Single, Transformable } ``` You can register a transform to the collection of[org.gradle.api.file.RegularFile](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFile.html). ```verilog val taskProvider= projects.tasks.register(MyTask::class.java, "transformTask") artifacts.use(taskProvider) .wiredWithDirectories( MyTask::inputFile, MyTask::outputFile) .toTransform(ArtifactType.SINGLE_DIR_ARTIFACT) ``` |

### toTransformMany

```
abstract fun <ArtifactTypeT> toTransformMany(type: ArtifactTypeT): ArtifactTransformationRequest<TaskT> where ArtifactTypeT : Artifact.SingleArtifact<Directory>, ArtifactTypeT : Artifact.ContainsMany
```

Initiates a transform request to a single[Artifact.Transformable](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.Transformable)artifact type that can contain more than one artifact.

|                                                                                                                                 Parameters                                                                                                                                 ||
|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| type:ArtifactTypeT | The[Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact)of the[Directory](https://docs.gradle.org/current/javadoc/org/gradle/api/file/Directory.html)identifying the artifact to transform. |

| Return ||
|---|---|
| [ArtifactTransformationRequest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/ArtifactTransformationRequest)that will allow processing of individual artifacts located in the input directory. The artifact type must be[Artifact.SingleArtifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.SingleArtifact),[Artifact.Transformable](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.Transformable), and[Artifact.ContainsMany](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.ContainsMany). For example, let's take a[Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)to transform a list of[org.gradle.api.file.RegularFile](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFile.html)as inputs into a single output: ```scalate-server-page abstract class MyTask: DefaultTask() { @get:InputFiles abstract val inputFolder: DirectoryProperty @get:OutputFile abstract val outputFolder: DirectoryProperty @Internal abstract Property<ArtifactTransformationRequest<MyTask>> getTransformationRequest() @TaskAction fun taskAction() { transformationRequest.get().submit( ... submit a work item for each input file ... ) } } ``` You then register the task as follows: ```verilog val taskProvider= projects.tasks.register(MyTask::class.java, "combineTask") val transformationRequest = artifacts.use(taskProvider) .wiredWith( MyTask::inputFolder, MyTask::outputFolder) .toTransformMany(ArtifactType.APK) taskProvider.configure { task -> task.getTransformationRequest().set(transformationRequest) } ``` ||