protected void doProcess()

in server/src/jetbrains/buildServer/sharedResources/pages/actions/EditResourceAction.java [55:102]


  protected void doProcess(@NotNull final HttpServletRequest request,
                           @NotNull final HttpServletResponse response,
                           @NotNull final Element ajaxResponse) {
    final String oldName = request.getParameter(SharedResourcesPluginConstants.WEB.PARAM_OLD_RESOURCE_NAME);
    final String projectId = request.getParameter(SharedResourcesPluginConstants.WEB.PARAM_PROJECT_ID);
    final SProject project = myProjectManager.findProjectById(projectId);
    if (project != null) {
      final Resource resource = myResourceHelper.getResourceFromRequest(projectId, request);
      if (resource != null) {
        final String newName = resource.getName();
        boolean changedName = !newName.equals(oldName);
        // check if there is already resource with such name
        if (changedName && containsDuplicateName(project, newName)) {
          createNameError(ajaxResponse, newName);
          return;
        }
        boolean selfPersisted = false;
        myProjectFeatures.updateFeature(project, resource.getId(), resource.getParameters());
        ConfigAction cause = myConfigActionFactory.createAction(project, "'" + resource.getName() + "' shared resource was updated");
        if (changedName) {
          // my resource can be used only in my build configurations or in build configurations in my subtree
          final List<SProject> projects = project.getProjects();
          projects.add(project);
          for (SProject p: projects) {
            boolean updated = false;
            final List<BuildTypeSettings> containers = getSettingsContainers(p);
            for (BuildTypeSettings settings: containers) {
              for (SharedResourcesFeature feature: myBuildFeatures.searchForFeatures(settings)) {
                updated = feature.updateLock(settings, oldName, newName) || updated;
              }
            }
            if (updated) {
              p.schedulePersisting(cause);
              if (!selfPersisted && p.equals(project)) { // make sure we persist current project even if no resource usages were detected
                selfPersisted = true;
              }
            }
          }
          if (!selfPersisted) {
            project.schedulePersisting(cause);
          }
        } else { // just persist project so that settings will be saved
          project.schedulePersisting(cause);
        }
        addMessage(request, "Resource " + newName + " was updated");
      }
    }
  }