package slacknotifications.teamcity.extension.bean; import slacknotifications.teamcity.BuildStateEnum; import slacknotifications.teamcity.settings.SlackNotificationConfig; import slacknotifications.teamcity.settings.SlackNotificationContentConfig; import slacknotifications.teamcity.settings.SlackNotificationMainConfig; import slacknotifications.teamcity.settings.SlackNotificationMainSettings; import java.util.ArrayList; import java.util.List; public class SlacknotificationConfigAndBuildTypeListHolder { private String token; private String channel; private String uniqueKey; private boolean enabled; private String payloadFormatForWeb = "Unknown"; private List<StateBean> states = new ArrayList<StateBean>(); private boolean allBuildTypesEnabled; private boolean subProjectsEnabled; private List<SlacknotificationBuildTypeEnabledStatusBean> builds = new ArrayList<SlacknotificationBuildTypeEnabledStatusBean>(); private String enabledEventsListForWeb; private String enabledBuildsListForWeb; private boolean mentionChannelEnabled; private boolean mentionSlackUserEnabled; private boolean customContentEnabled; private boolean showBuildAgent; private boolean showElapsedBuildTime; private boolean showCommits; private boolean showCommitters; private int maxCommitsToDisplay; private boolean showFailureReason; private String botName; private String iconUrl; public SlacknotificationConfigAndBuildTypeListHolder(SlackNotificationConfig config, SlackNotificationMainSettings mainSettings) { token = config.getToken(); channel = config.getChannel(); uniqueKey = config.getUniqueKey(); enabled = config.getEnabled(); setEnabledEventsListForWeb(config.getEnabledListAsString()); setEnabledBuildsListForWeb(config.getBuildTypeCountAsFriendlyString()); allBuildTypesEnabled = config.isEnabledForAllBuildsInProject(); subProjectsEnabled = config.isEnabledForSubProjects(); for (BuildStateEnum state : config.getBuildStates().getStateSet()){ states.add(new StateBean(state.getShortName(), config.getBuildStates().enabled(state))); } mentionChannelEnabled = config.getMentionChannelEnabled(); mentionSlackUserEnabled = config.getMentionSlackUserEnabled(); maxCommitsToDisplay = config.getContent().getMaxCommitsToDisplay(); customContentEnabled = config.getContent().isEnabled(); showBuildAgent = valueOrFallback(config.getContent().getShowBuildAgent(), valueOrFallback(mainSettings.getShowBuildAgent(), SlackNotificationContentConfig.DEFAULT_SHOW_BUILD_AGENT)); showElapsedBuildTime = valueOrFallback(config.getContent().getShowElapsedBuildTime(), valueOrFallback(mainSettings.getShowElapsedBuildTime(), SlackNotificationContentConfig.DEFAULT_SHOW_ELAPSED_BUILD_TIME)); showCommits = valueOrFallback(config.getContent().getShowCommits(), valueOrFallback(mainSettings.getShowCommits(), SlackNotificationContentConfig.DEFAULT_SHOW_COMMITS)); showCommitters = valueOrFallback(config.getContent().getShowCommitters(), valueOrFallback(mainSettings.getShowCommitters(), SlackNotificationContentConfig.DEFAULT_SHOW_COMMITTERS)); showFailureReason = valueOrFallback(config.getContent().getShowFailureReason(), valueOrFallback(mainSettings.getShowFailureReason(), SlackNotificationContentConfig.DEFAULT_SHOW_FAILURE_REASON)); botName = valueOrFallback(config.getContent().getBotName(), SlackNotificationMainConfig.DEFAULT_BOTNAME); iconUrl = valueOrFallback(config.getContent().getIconUrl(), SlackNotificationMainConfig.DEFAULT_ICONURL); } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public String getChannel() { return channel; } public void setChannel(String channel) { this.channel = channel; } public String getUniqueKey() { return uniqueKey; } public void setUniqueKey(String uniqueKey) { this.uniqueKey = uniqueKey; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public String getPayloadFormatForWeb() { return payloadFormatForWeb; } public void setPayloadFormatForWeb(String payloadFormatForWeb) { this.payloadFormatForWeb = payloadFormatForWeb; } public List<StateBean> getStates() { return states; } public void setStates(List<StateBean> states) { this.states = states; } public boolean isAllBuildTypesEnabled() { return allBuildTypesEnabled; } public void setAllBuildTypesEnabled(boolean allBuildTypesEnabled) { this.allBuildTypesEnabled = allBuildTypesEnabled; } public boolean isSubProjectsEnabled() { return subProjectsEnabled; } public void setSubProjectsEnabled(boolean subProjectsEnabled) { this.subProjectsEnabled = subProjectsEnabled; } public List<SlacknotificationBuildTypeEnabledStatusBean> getBuilds() { return builds; } public String getEnabledBuildTypes(){ StringBuilder types = new StringBuilder(); for (SlacknotificationBuildTypeEnabledStatusBean build : getBuilds()){ if (build.enabled){ types.append(build.buildTypeId).append(","); } } return types.toString(); } private boolean valueOrFallback(Boolean value, boolean fallback){ return value == null ? fallback : value.booleanValue(); } private String valueOrFallback(String value, String fallback){ return value == null ? fallback : value; } public void setBuilds(List<SlacknotificationBuildTypeEnabledStatusBean> builds) { this.builds = builds; } public void addSlackNotificationBuildType(SlacknotificationBuildTypeEnabledStatusBean status){ this.builds.add(status); } public String getEnabledEventsListForWeb() { return enabledEventsListForWeb; } public void setEnabledEventsListForWeb(String enabledEventsListForWeb) { this.enabledEventsListForWeb = enabledEventsListForWeb; } public String getEnabledBuildsListForWeb() { return enabledBuildsListForWeb; } public void setEnabledBuildsListForWeb(String enabledBuildsListForWeb) { this.enabledBuildsListForWeb = enabledBuildsListForWeb; } }