package slacknotifications.teamcity.extension.bean; import jetbrains.buildServer.serverSide.SBuildType; import jetbrains.buildServer.serverSide.SProject; import slacknotifications.teamcity.BuildState; import slacknotifications.teamcity.TeamCityIdResolver; import slacknotifications.teamcity.settings.SlackNotificationConfig; import slacknotifications.teamcity.settings.SlackNotificationMainSettings; import slacknotifications.teamcity.settings.SlackNotificationProjectSettings; import java.util.*; public class ProjectSlackNotificationsBean { String projectId; Map<String, SlacknotificationConfigAndBuildTypeListHolder> slackNotificationList; public static ProjectSlackNotificationsBean build(SlackNotificationProjectSettings projSettings, SProject project, SlackNotificationMainSettings mainSettings){ ProjectSlackNotificationsBean bean = new ProjectSlackNotificationsBean(); List<SBuildType> projectBuildTypes = TeamCityIdResolver.getOwnBuildTypes(project); bean.projectId = TeamCityIdResolver.getInternalProjectId(project); bean.slackNotificationList = new LinkedHashMap<String, SlacknotificationConfigAndBuildTypeListHolder>(); /* Create a "new" config with blank stuff so that clicking the "new" button has a bunch of defaults to load in */ SlackNotificationConfig newBlankConfig = new SlackNotificationConfig("", "", "", true, new BuildState().setAllEnabled(), true, true, null, true, true); newBlankConfig.setUniqueKey("new"); /* And add it to the list */ addSlackNotificationConfigHolder(bean, projectBuildTypes, newBlankConfig, mainSettings); /* Iterate over the rest of the slacknotifications in this project and add them to the json config */ for (SlackNotificationConfig config : projSettings.getSlackNotificationsAsList()){ addSlackNotificationConfigHolder(bean, projectBuildTypes, config, mainSettings); } return bean; } public static ProjectSlackNotificationsBean build(SlackNotificationProjectSettings projSettings, SBuildType sBuildType, SProject project, SlackNotificationMainSettings mainSettings){ ProjectSlackNotificationsBean bean = new ProjectSlackNotificationsBean(); List<SBuildType> projectBuildTypes = TeamCityIdResolver.getOwnBuildTypes(project); Set<String> enabledBuildTypes = new HashSet<String>(); enabledBuildTypes.add(sBuildType.getBuildTypeId()); bean.projectId = TeamCityIdResolver.getInternalProjectId(project); bean.slackNotificationList = new LinkedHashMap<String, SlacknotificationConfigAndBuildTypeListHolder>(); /* Create a "new" config with blank stuff so that clicking the "new" button has a bunch of defaults to load in */ SlackNotificationConfig newBlankConfig = new SlackNotificationConfig("", "", "", true, new BuildState().setAllEnabled(), false, false, enabledBuildTypes, true, true); newBlankConfig.setUniqueKey("new"); /* And add it to the list */ addSlackNotificationConfigHolder(bean, projectBuildTypes, newBlankConfig, mainSettings); /* Iterate over the rest of the slacknotifications in this project and add them to the json config */ for (SlackNotificationConfig config : projSettings.getBuildSlackNotificationsAsList(sBuildType)){ addSlackNotificationConfigHolder(bean, projectBuildTypes, config, mainSettings); } return bean; } private static void addSlackNotificationConfigHolder(ProjectSlackNotificationsBean bean, List<SBuildType> projectBuildTypes, SlackNotificationConfig config, SlackNotificationMainSettings mainSettings) { SlacknotificationConfigAndBuildTypeListHolder holder = new SlacknotificationConfigAndBuildTypeListHolder(config, mainSettings); for (SBuildType sBuildType : projectBuildTypes){ holder.addSlackNotificationBuildType(new SlacknotificationBuildTypeEnabledStatusBean( sBuildType.getBuildTypeId(), sBuildType.getName(), config.isEnabledForBuildType(sBuildType) ) ); } bean.slackNotificationList.put(holder.getUniqueKey(), holder); } }