package slacknotifications.teamcity.payload;
import jetbrains.buildServer.messages.Status;
import jetbrains.buildServer.responsibility.ResponsibilityEntry;
import jetbrains.buildServer.responsibility.TestNameResponsibilityEntry;
import jetbrains.buildServer.serverSide.*;
import jetbrains.buildServer.tests.TestName;
import slacknotifications.teamcity.BuildStateEnum;
import slacknotifications.teamcity.Loggers;
import slacknotifications.teamcity.payload.content.SlackNotificationPayloadContent;
import java.util.Collection;
public class SlackNotificationPayloadManager {
private static final String NOBODY = "nobody";
SBuildServer server;
public SlackNotificationPayloadManager(SBuildServer server){
this.server = server;
Loggers.SERVER.info("SlackNotificationPayloadManager :: Starting");
}
public SlackNotificationPayloadContent beforeBuildFinish(SRunningBuild runningBuild, SFinishedBuild previousBuild) {
SlackNotificationPayloadContent content = new SlackNotificationPayloadContent(server, runningBuild, previousBuild, BuildStateEnum.BEFORE_BUILD_FINISHED);
return content;
}
public SlackNotificationPayloadContent buildFinished(SRunningBuild runningBuild, SFinishedBuild previousBuild) {
SlackNotificationPayloadContent content = new SlackNotificationPayloadContent(server, runningBuild, previousBuild, BuildStateEnum.BUILD_FINISHED);
return content;
}
public SlackNotificationPayloadContent buildInterrupted(SRunningBuild runningBuild, SFinishedBuild previousBuild) {
SlackNotificationPayloadContent content = new SlackNotificationPayloadContent(server, runningBuild, previousBuild, BuildStateEnum.BUILD_INTERRUPTED);
return content;
}
public SlackNotificationPayloadContent buildStarted(SRunningBuild runningBuild, SFinishedBuild previousBuild) {
SlackNotificationPayloadContent content = new SlackNotificationPayloadContent(server, runningBuild, previousBuild, BuildStateEnum.BUILD_STARTED);
return content;
}
/** Used by versions of TeamCity less than 7.0
*/
public SlackNotificationPayloadContent responsibleChanged(SBuildType buildType,
ResponsibilityInfo responsibilityInfoOld,
ResponsibilityInfo responsibilityInfoNew, boolean isUserAction) {
SlackNotificationPayloadContent content = new SlackNotificationPayloadContent(server, buildType, BuildStateEnum.RESPONSIBILITY_CHANGED);
String oldUser = NOBODY;
String newUser = NOBODY;
try {
oldUser = responsibilityInfoOld.getResponsibleUser().getDescriptiveName();
} catch (Exception e) {}
try {
newUser = responsibilityInfoNew.getResponsibleUser().getDescriptiveName();
} catch (Exception e) {}
content.setText(buildType.getFullName()
+ " changed responsibility from "
+ oldUser
+ " to "
+ newUser
+ " with comment '"
+ responsibilityInfoNew.getComment().trim()
+ "'"
);
return content;
}
/** Used by versions of TeamCity 7.0 and above
*/
public SlackNotificationPayloadContent responsibleChanged(SBuildType buildType,
ResponsibilityEntry responsibilityEntryOld,
ResponsibilityEntry responsibilityEntryNew) {
SlackNotificationPayloadContent content = new SlackNotificationPayloadContent(server, buildType, BuildStateEnum.RESPONSIBILITY_CHANGED);
String oldUser = NOBODY;
String newUser = NOBODY;
if (responsibilityEntryOld.getState() != ResponsibilityEntry.State.NONE) {
oldUser = responsibilityEntryOld.getResponsibleUser().getDescriptiveName();
}
if (responsibilityEntryNew.getState() != ResponsibilityEntry.State.NONE) {
newUser = responsibilityEntryNew.getResponsibleUser().getDescriptiveName();
}
content.setText(buildType.getFullName().trim()
+ " changed responsibility from "
+ oldUser
+ " to "
+ newUser
+ " with comment '"
+ responsibilityEntryNew.getComment().trim()
+ "'"
);
return content;
}
public SlackNotificationPayloadContent responsibleChanged(SProject project,
TestNameResponsibilityEntry oldTestNameResponsibilityEntry,
TestNameResponsibilityEntry newTestNameResponsibilityEntry,
boolean isUserAction) {
// TODO Auto-generated method stub
return null;
}
public SlackNotificationPayloadContent responsibleChanged(SProject project,
Collection<TestName> testNames, ResponsibilityEntry entry,
boolean isUserAction) {
// TODO Auto-generated method stub
return null;
}
/*
HashMap<String, SlackNotificationPayload> formats = new HashMap<String,SlackNotificationPayload>();
Comparator<SlackNotificationPayload> rankComparator = new SlackNotificationPayloadRankingComparator();
List<SlackNotificationPayload> orderedFormatCollection = new ArrayList<SlackNotificationPayload>();
SBuildServer server;
public SlackNotificationPayloadManager(SBuildServer server){
this.server = server;
Loggers.SERVER.info("SlackNotificationPayloadManager :: Starting");
}
public void registerPayloadFormat(SlackNotificationPayload payloadFormat){
Loggers.SERVER.info(this.getClass().getSimpleName() + " :: Registering payload "
+ payloadFormat.getFormatShortName()
+ " with rank of " + payloadFormat.getRank());
formats.put(payloadFormat.getFormatShortName(),payloadFormat);
this.orderedFormatCollection.add(payloadFormat);
Collections.sort(this.orderedFormatCollection, rankComparator);
Loggers.SERVER.debug(this.getClass().getSimpleName() + " :: Payloads list is " + this.orderedFormatCollection.size() + " items long. Payloads are ranked in the following order..");
for (SlackNotificationPayload pl : this.orderedFormatCollection){
Loggers.SERVER.debug(this.getClass().getSimpleName() + " :: Payload Name: " + pl.getFormatShortName() + " Rank: " + pl.getRank());
}
}
public SlackNotificationPayload getFormat(String formatShortname){
if (formats.containsKey(formatShortname)){
return formats.get(formatShortname);
}
return null;
}
public Boolean isRegisteredFormat(String format){
return formats.containsKey(format);
}
public Set<String> getRegisteredFormats(){
return formats.keySet();
}
public Collection<SlackNotificationPayload> getRegisteredFormatsAsCollection(){
return orderedFormatCollection;
}
public SBuildServer getServer() {
return server;
}
*/
}