package slacknotifications.teamcity.settings; import jetbrains.buildServer.serverSide.MainConfigProcessor; import jetbrains.buildServer.serverSide.SBuildServer; import jetbrains.buildServer.serverSide.ServerPaths; import org.jdom.Element; import slacknotifications.SlackNotificationProxyConfig; import slacknotifications.teamcity.Loggers; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public class SlackNotificationMainSettings implements MainConfigProcessor { private static final String NAME = SlackNotificationMainSettings.class.getName(); private SlackNotificationMainConfig slackNotificationMainConfig; private SBuildServer server; private ServerPaths serverPaths; private String version; public SlackNotificationMainSettings(SBuildServer server, ServerPaths serverPaths){ this.serverPaths = serverPaths; Loggers.SERVER.debug(NAME + " :: Constructor called"); this.server = server; slackNotificationMainConfig = new SlackNotificationMainConfig(serverPaths); } public void register(){ Loggers.SERVER.debug(NAME + ":: Registering"); server.registerExtension(MainConfigProcessor.class, "slacknotifications", this); } public String getProxySettingsAsString(){ return this.slackNotificationMainConfig.getProxySettingsAsString(); } @SuppressWarnings("unchecked") @Override public void readFrom(Element rootElement) /* Is passed an Element by TC, and is expected to persist it to the settings object. * Old settings should be overwritten. */ { if(slackNotificationMainConfig.getConfigFileExists()){ // The MainConfigProcessor approach has been deprecated. // Instead we will use our own config file so we have better control over when it is persisted return; } Loggers.SERVER.info("SlackNotificationMainSettings: re-reading main settings using old-style MainConfigProcessor. From now on we will use the slack/slack-config.xml file instead of main-config.xml"); Loggers.SERVER.debug(NAME + ":readFrom :: " + rootElement.toString()); SlackNotificationMainConfig tempConfig = new SlackNotificationMainConfig(serverPaths); Element slackNotificationsElement = rootElement.getChild("slacknotifications"); tempConfig.readConfigurationFromXmlElement(slackNotificationsElement); this.slackNotificationMainConfig = tempConfig; tempConfig.save(); } @Override public void writeTo(Element parentElement) /* Is passed an (probably empty) Element by TC, which is expected to be populated from the settings * in memory. */ { } public String getProxy(){ return this.slackNotificationMainConfig.getProxyConfig().getProxyHost(); } public String getInfoText(){ return this.slackNotificationMainConfig.getSlackNotificationInfoText(); } public String getInfoUrl(){ return this.slackNotificationMainConfig.getSlackNotificationInfoUrl(); } public String getDefaultChannel() { return this.slackNotificationMainConfig.getDefaultChannel(); } public String getTeamName() { return this.slackNotificationMainConfig.getTeamName(); } public String getToken() { return this.slackNotificationMainConfig.getToken(); } public String getIconUrl() { return this.slackNotificationMainConfig.getContent().getIconUrl(); } public String getBotName() { return this.slackNotificationMainConfig.getContent().getBotName(); } public boolean getEnabled(){ return this.slackNotificationMainConfig.getEnabled(); } public Boolean getShowBuildAgent() { return this.slackNotificationMainConfig.getContent().getShowBuildAgent(); } public Boolean getShowElapsedBuildTime() { return this.slackNotificationMainConfig.getContent().getShowElapsedBuildTime(); } public boolean getShowCommits(){ return this.slackNotificationMainConfig.getContent().getShowCommits(); } public boolean getShowCommitters(){ return this.slackNotificationMainConfig.getContent().getShowCommitters(); } public Boolean getShowFailureReason() { return this.slackNotificationMainConfig.getContent().getShowFailureReason(); } public Boolean getSlackNotificationShowFurtherReading(){ return this.slackNotificationMainConfig.getSlackNotificationShowFurtherReading(); } public void dispose() { Loggers.SERVER.debug(NAME + ":dispose() called"); } public SlackNotificationProxyConfig getProxyConfig() { return this.slackNotificationMainConfig.getProxyConfig(); } public int getMaxCommitsToDisplay() { return this.slackNotificationMainConfig.getContent().getMaxCommitsToDisplay(); } public void refresh() { this.slackNotificationMainConfig.refresh(); } public String getPluginVersion() throws IOException { if(version != null){ return version; } Properties props = new Properties(); props.load(SlackNotificationMainSettings.class.getResourceAsStream("/version.txt")); version = props.getProperty("version"); return version; } }