void loadPriorityClasses()

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();
    }
  }