private static LicenseHeaderInfo readLicenseHeader(ConfigTree licenseNode) {
    if (licenseNode == null) {
      return null;
    }

    String name = licenseNode.getChildTree(CONFIG_KEY_NAME).getValue(null);
    if (name == null) {
      return null;
    }

    Path licenseTemplate =
        CommonProperties.tryReadFilePath(licenseNode.getChildTree(CONFIG_KEY_FILE).getValue(null));

    Map<String, String> properties = new HashMap<>();
    List<ConfigTree> propertyNodes = licenseNode.getChildTrees(CONFIG_KEY_PROPERTY);
    for (ConfigTree propertyNode : propertyNodes) {
      String propertyName = propertyNode.getChildTree(CONFIG_KEY_PROPERTY_NAME).getValue(null);
      String properyValue = propertyNode.getValue(null);

      if (propertyName != null && properyValue != null) {
        properties.put(propertyName.trim(), properyValue.trim());
      }
    }

    return new LicenseHeaderInfo(name.trim(), properties, licenseTemplate);
  }
 private static PropertyDef<ConfigTree, LicenseHeaderInfo> createPropertyDef() {
   PropertyDef.Builder<ConfigTree, LicenseHeaderInfo> result =
       new PropertyDef.Builder<>(CONFIG_ROOT);
   result.setKeyEncodingDef(CommonProperties.getIdentityTreeKeyEncodingDef());
   result.setValueDef(getValueDef());
   return result.create();
 }
  private static ConfigTree writeLicenseHeader(LicenseHeaderInfo licenseHeader) {
    ConfigTree.Builder result = new ConfigTree.Builder();

    result.getChildBuilder(CONFIG_KEY_NAME).setValue(licenseHeader.getLicenseName());

    Path licenseTemplateFile = licenseHeader.getLicenseTemplateFile();
    if (licenseTemplateFile != null) {
      result
          .getChildBuilder(CONFIG_KEY_FILE)
          .setValue(CommonProperties.normalizeFilePath(licenseTemplateFile));
    }

    for (Map.Entry<String, String> entry : licenseHeader.getProperties().entrySet()) {
      ConfigTree.Builder propertyNode = result.addChildBuilder(CONFIG_KEY_PROPERTY);
      propertyNode.setValue(entry.getValue());
      propertyNode.getChildBuilder(CONFIG_KEY_PROPERTY_NAME).setValue(entry.getKey());
    }

    return result.create();
  }
  public QueryManager getQueryManager() {
    if (qm == null) {
      synchronized (this) {
        if (qm == null) {
          try {
            String pluginClass =
                CommonProperties.getInstance().getProperty(QUERY_MANAGER_CLASS_PROPERTY);

            qm = (QueryManager) createPluginInstance(pluginClass);
          } catch (Exception e) {
            String errmsg =
                "[QueryManager] Cannot instantiate "
                    + "QueryManager plugin. Please check that "
                    + "property '"
                    + QUERY_MANAGER_CLASS_PROPERTY
                    + "' is correctly set in omar-common.properties file.";
            log.error(errmsg, e);
          }
        }
      }
    }

    return qm;
  }