public void process()

in nuget-feed/src/jetbrains/buildServer/nuget/feed/server/tab/PackagesSettingsController.java [155:228]


        public void process(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @Nullable Element xmlResponse) {
            final ActionErrors errors = new ActionErrors();
            try {
                final SProject project = getProject(request);
                if (project == null) {
                    errors.addError("projectNotFound", "Project was not found");
                    return;
                }

                if (project.isReadOnly()) {
                    errors.addError("cannotEditProject", "Project is read-only");
                    return;
                }

                if (PublicKeyUtil.isPublicKeyExpired(request)) {
                    if (xmlResponse != null) {
                        PublicKeyUtil.writePublicKeyExpiredError(xmlResponse);
                    }
                    return;
                }

                String name = request.getParameter("name");
                Map<String, String> properties;
                try {
                    properties = prepareProperties(request);
                } catch (Exception e) {
                    // In case of exception here, we don't know all possible errors, hence can't save the properties.
                    Loggers.SERVER.error(e.getMessage(), e);
                    errors.addError("invalidProperties", "Unable to read the properties");
                    return;
                }

                if (errors.hasNoErrors()) {
                    errors.fillErrors(myDefaultProcessor, properties);
                }

                String type = properties.get(RepositoryConstants.REPOSITORY_TYPE_KEY);
                if (type == null) {
                    errors.addError(RepositoryConstants.REPOSITORY_TYPE_KEY, "Repository type not found");
                    return;
                }

                RepositoryType registryType = myRepositoryRegistry.findType(type);
                if (registryType == null) {
                    errors.addError(RepositoryConstants.REPOSITORY_TYPE_KEY, "Repository type not found");
                    return;
                }

                PropertiesProcessor parametersProcessor = registryType.getParametersProcessor();
                if (parametersProcessor != null) {
                    errors.fillErrors(parametersProcessor, properties);
                }

                if (errors.hasNoErrors()) {
                    Repository repository = registryType.createRepository(project, properties);
                    try {
                        if (StringUtil.isEmpty(name)) {
                            myRepositoryManager.addRepository(project, repository);
                        } else {
                            myRepositoryManager.updateRepository(project, name, repository);
                        }
                    } catch (DuplicateIdException e) {
                        errors.addError(RepositoryConstants.REPOSITORY_NAME_KEY, registryType.getName() + " with the same name already exists");
                    } catch (Exception e) {
                        LOG.warnAndDebugDetails("Failed to save " + registryType.getName(), e);
                        errors.addError("saveFailure", e.getMessage());
                    }
                }
            } finally {
                if (xmlResponse != null) {
                    writeErrors(xmlResponse, errors);
                }
            }
        }