/**
   * @see
   *     org.jboss.arquillian.container.test.impl.client.container.ClientContainerController#stop(java.lang.String)
   */
  @Override
  public void stop(String containerQualifier, int timeout) {
    {
      DeploymentScenario scenario = getDeploymentScenario().get();
      if (scenario == null) {
        throw new IllegalArgumentException("No deployment scenario in context");
      }

      ContainerRegistry registry = getContainerRegistry().get();
      if (registry == null) {
        throw new IllegalArgumentException("No container registry in context");
      }

      if (!containerExists(registry.getContainers(), containerQualifier)) {
        throw new IllegalArgumentException("No container with the specified name exists");
      }

      if (!isControllableContainer(registry.getContainers(), containerQualifier)) {
        throw new IllegalArgumentException(
            "Could not start "
                + containerQualifier
                + " container. The container life cycle is controlled by Arquillian");
      }

      Container container =
          getContainerRegistry().get().getContainer(new TargetDescription(containerQualifier));

      List<Deployment> managedDeployments =
          scenario.startupDeploymentsFor(new TargetDescription(containerQualifier));

      for (Deployment d : managedDeployments) {
        if (d.isDeployed()) {
          log.info(
              "Automatic undeploying of the managed deployment with name "
                  + d.getDescription().getName()
                  + " from the container with name "
                  + container.getName());
          getContainerControllerEvent().fire(new UnDeployDeployment(container, d));
        }
      }

      log.info("Manual stopping of a server instance with timeout=" + timeout);

      getContainerControllerEvent().fire(new StopContainerWithTimeout(container, timeout));
    }
  }