package slacknotifications.teamcity.extension; import jetbrains.buildServer.serverSide.ProjectManager; import jetbrains.buildServer.serverSide.SProject; import jetbrains.buildServer.serverSide.settings.ProjectSettingsManager; import jetbrains.buildServer.users.SUser; import jetbrains.buildServer.web.openapi.PagePlaces; import jetbrains.buildServer.web.openapi.PluginDescriptor; import jetbrains.buildServer.web.openapi.project.ProjectTab; import org.jetbrains.annotations.NotNull; import slacknotifications.teamcity.TeamCityIdResolver; import slacknotifications.teamcity.extension.bean.ProjectAndBuildSlacknotificationsBean; import slacknotifications.teamcity.settings.SlackNotificationProjectSettings; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; import java.util.Map; public class SlackNotificationProjectTabExtension extends ProjectTab { ProjectSettingsManager projSettings; String myPluginPath; protected SlackNotificationProjectTabExtension( PagePlaces pagePlaces, ProjectManager projectManager, ProjectSettingsManager settings, PluginDescriptor pluginDescriptor) { super("slackNotifications", "Slack", pagePlaces, projectManager); this.projSettings = settings; myPluginPath = pluginDescriptor.getPluginResourcesPath(); } @Override public boolean isAvailable(@NotNull HttpServletRequest request) { return true; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override protected void fillModel(Map model, HttpServletRequest request, @NotNull SProject project, SUser user) { List<ProjectAndBuildSlacknotificationsBean> projectAndParents = new ArrayList<ProjectAndBuildSlacknotificationsBean>(); List<SProject> parentProjects = project.getProjectPath(); parentProjects.remove(0); for (SProject projectParent : parentProjects){ projectAndParents.add( ProjectAndBuildSlacknotificationsBean.newInstance( projectParent, (SlackNotificationProjectSettings) this.projSettings.getSettings(projectParent.getProjectId(), "slackNotifications"), null ) ); } // projectAndParents.add( // ProjectAndBuildSlacknotificationsBean.newInstance( // project, // (SlackNotificationProjectSettings) this.projSettings.getSettings(project.getProjectId(), "slackNotifications"), // true // ) // ); model.put("projectAndParents", projectAndParents); // model.put("projectSlackNotificationCount", projectSlacknotifications.size()); // if (projectSlacknotifications.size() == 0){ // model.put("noProjectSlackNotifications", "true"); // model.put("projectSlackNotifications", "false"); // } else { // model.put("noProjectSlackNotifications", "false"); // model.put("projectSlackNotifications", "true"); // model.put("projectSlackNotificationList", projectSlacknotifications); // model.put("projectSlackNotificationsDisabled", !this.settings.isEnabled()); // } // // model.put("buildSlackNotificationList", buildSlacknotifications); model.put("projectId", project.getProjectId()); model.put("projectExternalId", TeamCityIdResolver.getExternalProjectId(project)); model.put("projectName", project.getName()); } @Override public String getIncludeUrl() { return myPluginPath+ "SlackNotification/projectSlackNotificationTab.jsp"; } }