Package: org.gradle.tooling

## [Java] Interface ModelBuilder<T>

- org.gradle.tooling.LongRunningOperation

- All Superinterfaces:
    LongRunningOperation

  A `ModelBuilder` allows you to fetch a snapshot of some model for a project or a build. Instances of `ModelBuilder` are not thread-safe.

  You use a `ModelBuilder` as follows:

  - Create an instance of `ModelBuilder` by calling ProjectConnection.model.
  - Configure the builder as appropriate.
  - Call either get() or get(ResultHandler) to build the model.
  - Optionally, you can reuse the builder to build the model multiple times.
  Example:

       ProjectConnection connection = GradleConnector.newConnector()
          .forProjectDirectory(new File("someFolder"))
          .connect();

       try {
          ModelBuilder<GradleProject> builder = connection.model(GradleProject.class);

          //if you use a different than usual build file name:
          builder.withArguments("--build-file", "theBuild.gradle");

          //configure the standard input in case your build is interactive:
          builder.setStandardInput(new ByteArrayInputStream("consume this!".getBytes()));

          //if you want to listen to the progress events:
          ProgressListener listener = null; // use your implementation
          builder.addProgressListener(listener);

          //get the model:
          GradleProject project = builder.get();

          //query the model for information:
          System.out.println("Available tasks: " + project.getTasks());
       } finally {
          connection.close();
       }

  Parameters:
    `` - The type of model to build
  Since:
    1.0-milestone-3

- - ### Methods Summary

    Methods
    Type | Name and description
    --- | ---
    `ModelBuilder<T>` | `addProgressListener(ProgressListener listener)` {@inheritDoc}
    `ModelBuilder<T>` | `forTasks(String... tasks)` Specifies the tasks to execute before building the model.
    `T` | `get()` Fetch the model, blocking until it is available.
    `void` | `get(ResultHandler<? super T> handler)` Starts fetching the model, passing the result to the given handler when complete.
    `ModelBuilder<T>` | `setJavaHome(File javaHome)` {@inheritDoc}
    `ModelBuilder<T>` | `setJvmArguments(String... jvmArguments)` {@inheritDoc}
    `ModelBuilder<T>` | `setStandardError(OutputStream outputStream)` {@inheritDoc}
    `ModelBuilder<T>` | `setStandardInput(InputStream inputStream)` {@inheritDoc}
    `ModelBuilder<T>` | `setStandardOutput(OutputStream outputStream)` {@inheritDoc}
    `ModelBuilder<T>` | `withArguments(String... arguments)` {@inheritDoc}

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `interface LongRunningOperation` | `addProgressListener, setJavaHome, setJvmArguments, setStandardError, setStandardInput, setStandardOutput, withArguments, withCancellationToken`

- - ### Method Detail

    - #### public ModelBuilder<T> addProgressListener(ProgressListener listener)

      {@inheritDoc}

      Since:
        1.0-milestone-3

    - #### @Incubating public ModelBuilder<T> forTasks(String... tasks)

      Specifies the tasks to execute before building the model. By default, no tasks are executed.

      Parameters:
        `tasks` - The paths of the tasks to be executed. Relative paths are evaluated relative to the project for which this launcher was created.
      Returns:
        this
      Since:
        1.2

    - #### public T get()

      Fetch the model, blocking until it is available.

      throws:
        UnsupportedVersionException When the target Gradle version does not support building models.
      throws:
        UnknownModelException When the target Gradle version or build does not support the requested model.
      throws:
        org.gradle.tooling.exceptions.UnsupportedOperationConfigurationException When the target Gradle version does not support some requested configuration option such as setStandardInput(java.io.InputStream), setJavaHome(java.io.File), setJvmArguments(String...).
      throws:
        org.gradle.tooling.exceptions.UnsupportedBuildArgumentException When there is a problem with build arguments provided by withArguments(String...).
      throws:
        BuildException On some failure executing the Gradle build.
      throws:
        BuildCancelledException When the operation was cancelled before it completed successfully.
      throws:
        GradleConnectionException On some other failure using the connection.
      throws:
        IllegalStateException When the connection has been closed or is closing.
      Returns:
        The model.
      Since:
        1.0-milestone-3

    - #### public void get(ResultHandler<? super T> handler)

      Starts fetching the model, passing the result to the given handler when complete. This method returns immediately, and the result is later passed to the given handler's ResultHandler.onComplete method.

      If the operation fails, the handler's ResultHandler.onFailure method is called with the appropriate exception. See get() for a description of the various exceptions that the operation may fail with.

      throws:
        IllegalStateException When the connection has been closed or is closing.
      Parameters:
        `handler` - The handler to supply the result to.
      Since:
        1.0-milestone-3

    - #### public ModelBuilder<T> setJavaHome(File javaHome)

      {@inheritDoc}

      Since:
        1.0-milestone-8

    - #### public ModelBuilder<T> setJvmArguments(String... jvmArguments)

      {@inheritDoc}

      Since:
        1.0-milestone-9

    - #### public ModelBuilder<T> setStandardError(OutputStream outputStream)

      {@inheritDoc}

      Since:
        1.0-milestone-3

    - #### public ModelBuilder<T> setStandardInput(InputStream inputStream)

      {@inheritDoc}

      Since:
        1.0-milestone-7

    - #### public ModelBuilder<T> setStandardOutput(OutputStream outputStream)

      {@inheritDoc}

      Since:
        1.0-milestone-3

    - #### public ModelBuilder<T> withArguments(String... arguments)

      {@inheritDoc}

      Since:
        1.0