private boolean fillBuildTypeOrTemplate()

in rest-api/src/jetbrains/buildServer/server/rest/model/buildType/BuildType.java [969:1081]


  private boolean fillBuildTypeOrTemplate(final @NotNull BuildTypeOrTemplatePatcher buildTypeOrTemplatePatcher, final @NotNull ServiceLocator serviceLocator) {
    boolean result = false;
    SubmitedParameters submittedParams = mySubmitted.get();
    if (submittedParams.description != null) {
      result = true;
      buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().setDescription(submittedParams.description);
    }
    if (submittedParams.paused != null) {
      if (buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType() == null) {
        throw new BadRequestException("Cannot set paused state for a template");
      }
//check if it is already paused      if (Boolean.valueOf(submittedPaused) ^ buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType().isPaused())
      result = true;
      buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType().setPaused(Boolean.valueOf(submittedParams.paused),
                                                                                   serviceLocator.getSingletonService(UserFinder.class).getCurrentUser(),
                                                                                   TeamCityProperties.getProperty("rest.defaultActionComment"));
    }

    if (submittedParams.templates != null) {
      if (buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType() == null) {
        throw new BadRequestException("Cannot set templates for a template");
      }
      try {
        //noinspection ConstantConditions
        List<BuildTypeOrTemplate> templates = submittedParams.templates.getFromPosted(serviceLocator.findSingletonService(BuildTypeFinder.class));
        BuildTypeOrTemplate.setTemplates(buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType(), templates, false);
      } catch (BadRequestException e) {
        throw new BadRequestException("Error retrieving submitted templates: " + e.getMessage(), e);
      }
      result = true;
    } else if (submittedParams.template != null) {
      if (buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType() == null) {
        throw new BadRequestException("Cannot set template for a template");
      }
      final BuildTypeOrTemplate templateFromPosted;
      try {
        //noinspection ConstantConditions
        templateFromPosted = submittedParams.template.getBuildTypeFromPosted(serviceLocator.findSingletonService(BuildTypeFinder.class));
      } catch (BadRequestException e) {
        throw new BadRequestException("Error retrieving submitted template: " + e.getMessage(), e);
      }
      if (templateFromPosted.getTemplate() == null) {
        throw new BadRequestException("'template' field should reference a template, not build type");
      }
      result = true;
      buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType().attachToTemplate(templateFromPosted.getTemplate());
    }

    BuildTypeOrTemplate buildTypeOrTemplate = buildTypeOrTemplatePatcher.getBuildTypeOrTemplate();
    BuildTypeSettingsEx buildTypeSettings = buildTypeOrTemplate.getSettingsEx();
    if (submittedParams.vcsRootEntries != null) {
      boolean updated = submittedParams.vcsRootEntries.setToBuildType(buildTypeOrTemplate, serviceLocator);
      result = result || updated;
    }
    if (submittedParams.parameters != null) {
      boolean updated = submittedParams.parameters.setTo(buildTypeOrTemplate, serviceLocator);
      result = result || updated;
    }
    if (submittedParams.steps != null) {
      boolean updated = submittedParams.steps.setToBuildType(buildTypeOrTemplate, serviceLocator);
      result = result || updated;
    }
    if (submittedParams.features != null) {
      boolean updated = submittedParams.features.setToBuildType(buildTypeOrTemplate, serviceLocator);
      result = result || updated;
    }
    if (submittedParams.triggers != null) {
      boolean updated = submittedParams.triggers.setToBuildType(buildTypeOrTemplate, serviceLocator);
      result = result || updated;
    }
    if (submittedParams.snapshotDependencies != null) {
      boolean updated = submittedParams.snapshotDependencies.setToBuildType(buildTypeOrTemplate, serviceLocator);
      result = result || updated;
    }
    if (submittedParams.artifactDependencies != null) {
      boolean updated = submittedParams.artifactDependencies.setToBuildType(buildTypeOrTemplate, serviceLocator);
      result = result || updated;
    }
    if (submittedParams.agentRequirements != null) {
      boolean updated = submittedParams.agentRequirements.setToBuildType(buildTypeOrTemplate, serviceLocator);
      result = result || updated;
    }
    if (submittedParams.settings != null && submittedParams.settings.getProperties() != null) {
      //need to remove all settings if submittedSettings.properties == null???
      for (Property property : submittedParams.settings.getProperties()) {
        try {
          property.addTo(new BuildTypeRequest.BuildTypeSettingsEntityWithParams(buildTypeOrTemplatePatcher.getBuildTypeOrTemplate()), serviceLocator);
          result = true;
        } catch (java.lang.UnsupportedOperationException e) {  //can be thrown from EditableBuildTypeCopy
          LOG.debug("Error setting property '" + property.name + "' to value '" + property.value + "': " + e.getMessage());
        }
      }
    }
    if (submittedParams.type != null) {
      //this overrides setting submitted via "settings"
      String previousValue = buildTypeSettings.getOption(BuildTypeOptions.BT_BUILD_CONFIGURATION_TYPE);

      boolean modified;
      try {
        String newValue = TypedFinderBuilder.getEnumValue(submittedParams.type, BuildTypeOptions.BuildConfigurationType.class).name();
        modified = !previousValue.equalsIgnoreCase(newValue);
        if (modified) {
          serviceLocator.getSingletonService(PermissionChecker.class).checkCanEditBuildTypeOrTemplate(buildTypeOrTemplate);

          buildTypeSettings.setOption(BuildTypeOptions.BT_BUILD_CONFIGURATION_TYPE, newValue);
        }
      } catch (IllegalArgumentException e) {
        throw new BadRequestException("Could not set type to value '" + submittedParams.type + "'. Error: " + e.getMessage());
      }
      result = result || modified;
    }
    return result;
  }