in server/src/jetbrains/buildServer/serverSide/priority/PriorityClassManagerImpl.java [329:397]
void loadPriorityClasses() {
myLogger.info("Loading priority classes from the configuration file: " + myConfigFile.getAbsolutePath());
final Map<String, PriorityClassImpl> priorityClassMap = new HashMap<>();
Pattern idPattern = Pattern.compile("pc\\d+");
try {
if (myConfigFile.exists()) {
Document doc = FileUtil.parseDocument(myConfigFile, false).getDocument();
Element rootElement = doc.getRootElement();
List<Element> priorityClassElements = new PriorityClassElementVisitor(rootElement).getPriorityClassElements();
for (Element priorityClassElem : priorityClassElements) {
final String id = priorityClassElem.getAttributeValue(ID_ATTRIBUTE);
if (id.equals(DEFAULT_PRIORITY_CLASS_ID)) {
myLogger.warn("Priority Class with id " + DEFAULT_PRIORITY_CLASS_ID +
" cannot be reconfigured via the " + myConfigFile.getName() + ", please remove it from the " + myConfigFile.getName());
} else if (id.equals(PERSONAL_PRIORITY_CLASS_ID)) {
int priority = parsePriorityString(priorityClassElem.getAttributeValue(PRIORITY_ATTRIBUTE), id);
PriorityClassImpl personalPriorityClass = new PersonalPriorityClass(priority);
priorityClassMap.put(personalPriorityClass.getId(), personalPriorityClass);
//TODO: if name, description or buidltypes are changed - WARN
} else {
if (priorityClassMap.containsKey(id)) {
throw new RuntimeException("Failed to load " + myConfigFile.getName() + ". Duplicate priority class identificator found: " + id);
}
int priority = parsePriorityString(priorityClassElem.getAttributeValue(PRIORITY_ATTRIBUTE), id);
Set<String> externalIds = new BuildTypeElementVisitor(priorityClassElem).getBuildTypeIds();
PriorityClassImpl priorityClass = new PriorityClassImpl(myServer.getProjectManager(), id, priorityClassElem.getAttributeValue(NAME_ATTRIBUTE),
priorityClassElem.getAttributeValue(DESCRIPTION_ATTRIBUTE), priority,
externalIds);
priorityClassMap.put(id, priorityClass);
}
}
}
} catch (Throwable e) {
myLogger.warn("Exception occured while reading priority classes from the file: " +
myConfigFile.getAbsolutePath() + ", error message: " + e.toString());
myLogger.debug(e.toString(), e);
myLock.writeLock().lock();
try {
for (PriorityClassImpl predefinedPriorityClass : getPredefinedPriorityClasses()) {
if (!myPriorityClasses.containsKey(predefinedPriorityClass.getId())) {
myPriorityClasses.put(predefinedPriorityClass.getId(), predefinedPriorityClass);
}
}
} finally {
myLock.writeLock().unlock();
}
return;
}
myLock.writeLock().lock();
try {
myPriorityClasses.clear();
for (PriorityClassImpl priorityClass : priorityClassMap.values()) {
myPriorityClasses.put(priorityClass.getId(), priorityClass);
for (String btId : priorityClass.getExternalIds()) {
myBuildTypePriorityClasses.put(btId, priorityClass.getId());
}
}
for (PriorityClassImpl predefinedPriorityClass : getPredefinedPriorityClasses()) {
if (!myPriorityClasses.containsKey(predefinedPriorityClass.getId())) {
myPriorityClasses.put(predefinedPriorityClass.getId(), predefinedPriorityClass);
}
}
} finally {
myLock.writeLock().unlock();
}
}