protected ModelAndView doHandle()

in aws-core-server/src/main/java/jetbrains/buildServer/serverSide/oauth/aws/controllers/AvailableAwsConnsController.java [68:128]


  protected ModelAndView doHandle(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response) throws Exception {
    Loggers.CLOUD.debug("Available AWS Connections have been requested for the project with id: " + request.getParameter("projectId"));

    final ActionErrors errors = new ActionErrors();

    try {
      final String projectId = request.getParameter("projectId");
      if (projectId == null) {
        throw new AwsConnectorException("The ID of the project where to find Available AWS Connections is null");
      }
      final SProject project = myProjectManager.findProjectByExternalId(projectId);
      if (project == null) {
        throw new AwsConnectorException("Could not find the project with id: " + projectId);
      }

      List<ConnectionDescriptor> awsConnections = myConnectionsManager.getAvailableConnectionsOfType(project, AwsConnectionProvider.TYPE);
      final ProjectEx projectEx = (ProjectEx) project;

      final boolean forBuildStepFeatureEnabled = projectEx.getBooleanInternalParameterOrTrue(ALLOWED_IN_BUILDS_FEATURE_FLAG);
      final boolean isForBuildStep = Boolean.parseBoolean(request.getParameter(ALLOWED_IN_BUILDS_REQUEST_PARAM));
      if (forBuildStepFeatureEnabled && isForBuildStep) {
        awsConnections = awsConnections.stream().filter(conn -> {
          final String isAllowedInBuildSteps = conn.getParameters().get(AwsCloudConnectorConstants.ALLOWED_IN_BUILDS_PARAM);
          return isAllowedInBuildSteps == null || Boolean.parseBoolean(isAllowedInBuildSteps);
        }).collect(Collectors.toList());
      }

      final boolean childProjectsFeatureEnabled = projectEx.getBooleanInternalParameterOrTrue(ALLOWED_IN_SUBPROJECTS_FEATURE_FLAG);

      if (childProjectsFeatureEnabled) {
        awsConnections = awsConnections.stream()
                                       .filter(conn -> conn.getProjectId().equals(project.getProjectId()) || ParamUtil.isAllowedInSubProjects(conn.getParameters()))
                                       .collect(Collectors.toList());
      }

      List<List<String>> readyAvailAwsConnProps = getAvailableAwsConnectionsParams(processAvailableAwsConnections(awsConnections, request));

      String resourceName = request.getParameter("resource");
      if (resourceName == null) {
        ModelAndView mv = new ModelAndView(myDescriptor.getPluginResourcesPath(AwsConnectionProvider.EDIT_PARAMS_URL));
        mv.getModel().put("projectId", project.getProjectId());
        mv.getModel().put(availableAwsConnsBeanName, readyAvailAwsConnProps);
        return mv;

      } else if (resourceName.equals(AVAIL_AWS_CONNECTIONS_REST_RESOURCE_NAME)) {
        writeAsJson(
          readyAvailAwsConnProps,
          response
        );

      } else {
        throw new AwsConnectorException("Resource " + resourceName + " is not supported. Only " + AVAIL_AWS_CONNECTIONS_REST_RESOURCE_NAME + " is supported.");
      }

    } catch (AwsConnectorException e) {
      errors.addError("error_" + AVAIL_AWS_CONNECTIONS_SELECT_ID, e.getMessage());
      writeAsJson(errors, response);
    }

    return null;
  }