public static void readExternal(ProcessorConfigProfile profile, Element element) {
    profile.setName(element.getAttributeValue(NAME, ""));
    profile.setEnabled(Boolean.parseBoolean(element.getAttributeValue(ENABLED, "false")));
    profile.setProcOnly(Boolean.parseBoolean(element.getAttributeValue(PROC_ONLY, "false")));

    final Element srcOutput = element.getChild("sourceOutputDir");
    final String out = srcOutput != null ? srcOutput.getAttributeValue(NAME) : null;
    profile.setGeneratedSourcesDirectoryName(out != null ? FileUtilRt.toSystemDependentName(out) : null, false);

    final Element srcTestOutput = element.getChild("sourceTestOutputDir");
    final String testOut = srcTestOutput != null ? srcTestOutput.getAttributeValue(NAME) : null;
    profile.setGeneratedSourcesDirectoryName(testOut != null? FileUtilRt.toSystemDependentName(testOut) : null, true);

    final Element isRelativeToContentRoot = element.getChild("outputRelativeToContentRoot");
    if (isRelativeToContentRoot != null) {
      profile.setOutputRelativeToContentRoot(Boolean.parseBoolean(isRelativeToContentRoot.getAttributeValue(VALUE)));
    }

    profile.clearProcessorOptions();
    for (Element optionElement : element.getChildren(OPTION)) {
      final String key = optionElement.getAttributeValue(NAME);
      final String value = optionElement.getAttributeValue(VALUE);
      if (!StringUtil.isEmptyOrSpaces(key) && value != null) {
        profile.setOption(key, value);
      }
    }

    profile.clearProcessors();
    for (Element procElement : element.getChildren("processor")) {
      final String name = procElement.getAttributeValue(NAME);
      if (!StringUtil.isEmptyOrSpaces(name)) {
        profile.addProcessor(name);
      }
    }

    final Element pathElement = element.getChild("processorPath");
    if (pathElement != null) {
      profile.setObtainProcessorsFromClasspath(Boolean.parseBoolean(pathElement.getAttributeValue(USE_CLASSPATH, "true")));
      profile.setUseProcessorModulePath(Boolean.parseBoolean(pathElement.getAttributeValue(USE_PROC_MODULE_PATH, "false")));
      final StringBuilder pathBuilder = new StringBuilder();
      for (Element entry : pathElement.getChildren(ENTRY)) {
        final String path = entry.getAttributeValue(NAME);
        if (!StringUtil.isEmptyOrSpaces(path)) {
          if (pathBuilder.length() > 0) {
            pathBuilder.append(File.pathSeparator);
          }
          pathBuilder.append(FileUtilRt.toSystemDependentName(path));
        }
      }
      profile.setProcessorPath(pathBuilder.toString());
    }

    profile.clearModuleNames();
    for (Element moduleElement : element.getChildren(MODULE)) {
      final String name = moduleElement.getAttributeValue(NAME);
      if (!StringUtil.isEmptyOrSpaces(name)) {
        profile.addModuleName(name);
      }
    }
  }
public static void readExternal(ProcessorConfigProfile profile, Element element)