private void parseHeuristicConfiguration(Element configuration) {
    _heuristicsConfDataList = new ArrayList<HeuristicConfigurationData>();

    NodeList nodes = configuration.getChildNodes();
    int n = 0;
    for (int i = 0; i < nodes.getLength(); i++) {
      // Each heuristic node
      Node node = nodes.item(i);
      if (node.getNodeType() == Node.ELEMENT_NODE) {
        n++;
        Element heuristicElem = (Element) node;

        String className;
        Node classNameNode = heuristicElem.getElementsByTagName("classname").item(0);
        if (classNameNode == null) {
          throw new RuntimeException("No tag 'classname' in heuristic " + n);
        }
        className = classNameNode.getTextContent();
        if (className.equals("")) {
          throw new RuntimeException("Empty tag 'classname' in heuristic " + n);
        }

        String heuristicName;
        Node heuristicNameNode = heuristicElem.getElementsByTagName("heuristicname").item(0);
        if (heuristicNameNode == null) {
          throw new RuntimeException("No tag 'heuristicname' in heuristic " + n + " classname " + className);
        }
        heuristicName = heuristicNameNode.getTextContent();
        if (heuristicName.equals("")) {
          throw new RuntimeException("Empty tag 'heuristicname' in heuristic " + n + " classname " + className);
        }

        String viewName;
        Node viewNameNode = heuristicElem.getElementsByTagName("viewname").item(0);
        if (viewNameNode == null) {
          throw new RuntimeException("No tag 'viewname' in heuristic " + n + " classname " + className);
        }
        viewName = viewNameNode.getTextContent();
        if (viewName.equals("")) {
          throw new RuntimeException("Empty tag 'viewname' in heuristic " + n + " classname " + className);
        }

        Node appTypeNode = heuristicElem.getElementsByTagName("applicationtype").item(0);
        if (appTypeNode == null) {
          throw new RuntimeException(
              "No tag or invalid tag 'applicationtype' in heuristic " + n + " classname " + className);
        }
        String appTypeStr = appTypeNode.getTextContent();
        if (appTypeStr == null) {
          logger.error("Application type is not specified in heuristic " + n + " classname " + className
                  + ". Skipping this configuration.");
          continue;
        }
        ApplicationType appType = new ApplicationType(appTypeStr);

        // Check if parameters are defined for the heuristic
        Map<String, String> paramsMap = Utils.getConfigurationParameters(heuristicElem);

        HeuristicConfigurationData heuristicData = new HeuristicConfigurationData(heuristicName, className, viewName,
            appType, paramsMap);
        _heuristicsConfDataList.add(heuristicData);

      }
    }
  }
This class manages the Heuristic Configurations
app/com/linkedin/drelephant/configurations/heuristic/HeuristicConfiguration.java