package slacknotifications.teamcity.extension;
import jetbrains.buildServer.serverSide.ProjectManager;
import jetbrains.buildServer.serverSide.SBuildType;
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.WebControllerManager;
import jetbrains.buildServer.web.openapi.buildType.BuildTypeTab;
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 SlackNotificationBuildTabExtension extends BuildTypeTab {
private static final String SLACK_NOTIFICATIONS = "slackNotifications";
SlackNotificationProjectSettings settings;
ProjectSettingsManager projSettings;
String myPluginPath;
protected SlackNotificationBuildTabExtension(
PagePlaces pagePlaces, ProjectManager projectManager,
ProjectSettingsManager settings, WebControllerManager manager,
PluginDescriptor pluginDescriptor) {
//super(myTitle, myTitle, null, projectManager);
super(SLACK_NOTIFICATIONS, "Slack", manager, 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 SBuildType buildType, SUser user) {
this.settings =
(SlackNotificationProjectSettings)this.projSettings.getSettings(buildType.getProject().getProjectId(), SLACK_NOTIFICATIONS);
List<ProjectAndBuildSlacknotificationsBean> projectAndParents = new ArrayList<ProjectAndBuildSlacknotificationsBean>();
List<SProject> parentProjects = buildType.getProject().getProjectPath();
parentProjects.remove(0);
for (SProject projectParent : parentProjects){
projectAndParents.add(
ProjectAndBuildSlacknotificationsBean.newInstance(
projectParent,
(SlackNotificationProjectSettings) this.projSettings.getSettings(projectParent.getProjectId(), SLACK_NOTIFICATIONS),
buildType
)
);
}
// projectAndParents.add(
// ProjectAndBuildSlacknotificationsBean.newInstance(
// project,
// (SlackNotificationProjectSettings) this.projSettings.getSettings(project.getProjectId(), SLACK_NOTIFICATIONS),
// true
// )
// );
model.put("projectAndParents", projectAndParents);
// List<SlackNotificationConfig> projectSlacknotifications = this.settings.getProjectSlackNotificationsAsList();
// List<SlackNotificationConfig> buildSlacknotifications = this.settings.getBuildSlackNotificationsAsList(buildType);
//
// 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("buildSlackNotificationCount", buildSlacknotifications.size());
// if (buildSlacknotifications.size() == 0){
// model.put("noBuildSlackNotifications", "true");
// model.put("buildSlackNotifications", "false");
// } else {
// model.put("noBuildSlackNotifications", "false");
// model.put("buildSlackNotifications", "true");
// model.put("buildSlackNotificationList", buildSlacknotifications);
// }
//
model.put("projectId", buildType.getProject().getProjectId());
model.put("projectExternalId", TeamCityIdResolver.getExternalProjectId(buildType.getProject()));
model.put("projectName", buildType.getProject().getName());
model.put("buildTypeId", buildType.getBuildTypeId());
model.put("buildExternalId", TeamCityIdResolver.getExternalBuildId(buildType));
model.put("buildName", buildType.getName());
}
@Override
public String getIncludeUrl() {
//return myPluginPath + "SlackNotification/buildSlackNotificationTab.jsp";
return myPluginPath + "SlackNotification/projectSlackNotificationTab.jsp";
}
}