private void configureSupportedApplicationTypes() {
    Set<ApplicationType> supportedTypes = Sets.intersection(_typeToFetcher.keySet(), _typeToHeuristics.keySet());
    supportedTypes = Sets.intersection(supportedTypes, _appTypeToJobTypes.keySet());
    supportedTypes = Sets.intersection(supportedTypes, _typeToAggregator.keySet());

    _typeToAggregator.keySet().retainAll(supportedTypes);
    _typeToFetcher.keySet().retainAll(supportedTypes);
    _typeToHeuristics.keySet().retainAll(supportedTypes);
    _appTypeToJobTypes.keySet().retainAll(supportedTypes);

    logger.info("Configuring ElephantContext...");
    for (ApplicationType type : supportedTypes) {
      _nameToType.put(type.getName(), type);

      List<String> classes = new ArrayList<String>();
      List<Heuristic> heuristics = _typeToHeuristics.get(type);
      for (Heuristic heuristic : heuristics) {
        classes.add(heuristic.getClass().getName());
      }

      List<JobType> jobTypes = _appTypeToJobTypes.get(type);
      logger.info("Supports " + type.getName() + " application type, using " + _typeToFetcher.get(type).toString()
          + " fetcher class with Heuristics [" + StringUtils.join(classes, ", ") + "] and following JobTypes ["
          + StringUtils.join(jobTypes, ", ") + "].");
    }
  }
Decides what application types can be supported.

An application type is supported if all the below are true.
1. A Fetcher is defined in FetcherConf.xml for the application type.
2. At least one Heuristic is configured in HeuristicConf.xml for the application type.
3. At least one job type is configured in JobTypeConf.xml for the application type.
app/com/linkedin/drelephant/ElephantContext.java