package slacknotifications.teamcity; import jetbrains.buildServer.serverSide.ProjectManager; import jetbrains.buildServer.serverSide.SBuildType; import jetbrains.buildServer.serverSide.SProject; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public final class TeamCityIdResolver { private static final Logger LOGGER = Logger.getLogger(TeamCityIdResolver.class.getName()); private TeamCityIdResolver(){} public static String getBuildTypeId(SBuildType buildType){ try { return buildType.getExternalId(); } catch (NoSuchMethodError ex) { LOGGER.log(Level.INFO,ex.getMessage(),ex); return buildType.getBuildTypeId(); } } public static String getExternalBuildId(SBuildType buildType){ try { return buildType.getExternalId(); } catch (NoSuchMethodError ex) { LOGGER.log(Level.INFO,ex.getMessage(),ex); return buildType.getBuildTypeId(); } } public static String getExternalBuildIdOrNull(SBuildType buildType){ try { return buildType.getExternalId(); } catch (NoSuchMethodError ex) { LOGGER.log(Level.INFO,ex.getMessage(),ex); return null; } } public static String getInternalBuildId(SBuildType buildType){ try { return buildType.getInternalId(); } catch (NoSuchMethodError ex) { LOGGER.log(Level.INFO,ex.getMessage(),ex); return buildType.getBuildTypeId(); } } public static String getInternalBuildIdOrNull(SBuildType buildType){ try { return buildType.getInternalId(); } catch (NoSuchMethodError ex) { LOGGER.log(Level.INFO,ex.getMessage(),ex); return null; } } public static String getProjectId(SProject project){ try { return project.getExternalId(); } catch (NoSuchMethodError ex) { LOGGER.log(Level.INFO,ex.getMessage(),ex); return project.getProjectId(); } } public static String getInternalProjectId(SProject project){ return project.getProjectId(); } public static String getExternalProjectId(SProject project){ try { return project.getExternalId(); } catch (NoSuchMethodError ex) { LOGGER.log(Level.INFO,ex.getMessage(),ex); return project.getProjectId(); } } public static String getExternalProjectIdOrNull(SProject project){ try { return project.getExternalId(); } catch (NoSuchMethodError ex) { LOGGER.log(Level.INFO,ex.getMessage(),ex); return null; } } /** * Finds a TeamCity project in the ProjectManager by ProjectId. * Uses findProjectByExternalId() if available, otherwise uses findProjectById() * @param TeamCity projectManager instance * @param projectId string * @return TeamCity Project Config object */ public static SProject findProjectById(ProjectManager projectManager, String projectId) { try { return projectManager.findProjectByExternalId(projectId); } catch (NoSuchMethodError ex){ LOGGER.log(Level.INFO,ex.getMessage(),ex); return projectManager.findProjectById(projectId); } } /** * Finds a TeamCity BuiltType in the ProjectManager by buildTypeId. * Uses findBuildTypeByExternalId() if available, otherwise uses findBuildTypeById() * @param ProjectManager instance * @param buildTypeId string * @return TeamCity BuildType config object */ public static SBuildType findBuildTypeById(ProjectManager projectManager, String buildTypeId) { try { return projectManager.findBuildTypeByExternalId(buildTypeId); } catch (NoSuchMethodError ex){ LOGGER.log(Level.INFO,ex.getMessage(),ex); return projectManager.findBuildTypeById(buildTypeId); } } /** * Finds builds that belong the referenced project. Uses new method getOwnBuildTypes() if available. * Does not find builds in sub-projects. * @param project * @return List of BuildTypes corresponding to what is configured in the project. */ public static List<SBuildType> getOwnBuildTypes(SProject project) { try { return project.getOwnBuildTypes(); } catch (NoSuchMethodError ex){ LOGGER.log(Level.INFO,ex.getMessage(),ex); return project.getBuildTypes(); } } }