Package com.gentics.cr.util.resolver

Source Code of com.gentics.cr.util.resolver.ContentConnectorCallback

package com.gentics.cr.util.resolver;

import java.util.List;
import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;

import org.apache.log4j.Logger;

import com.gentics.cr.CRConfigUtil;
import com.gentics.cr.configuration.StaticConfigurationContainer;
import com.gentics.cr.exceptions.CRException;
import com.gentics.cr.util.StringUtils;

/**
* Callback to resolve a content connector property.
* @author bigbear3001
*/
public class ContentConnectorCallback implements Callback {

  /**
   * Log4j logger for error and debug messages.
   */
  private Logger logger = Logger.getLogger(ContentConnectorCallback.class);

  /**
   * configuration cache.
   */
  private ConcurrentHashMap<String, CRConfigUtil> configs = new ConcurrentHashMap<String, CRConfigUtil>();

  /**
   * List to prevent recursions when resolving.
   */
  private List<String> initConfigs = new Vector<String>();

  /**
   * {@inheritDoc}
   */
  public final String getProperty(final Matcher m) {
    String propertyFileName = m.group(1);
    String propertyName = m.group(2);
    CRConfigUtil config;
    try {
      config = getConfig(propertyFileName);
      return config.getString(propertyName);
    } catch (CRException e) {
      logger.error("Erro while getting configuration. Maybe you got" + " recursive property definitions.", e);
    }
    return null;
  }

  /**
   * @param configName - configuration name
   * @return configuration with the specified name
   * @throws CRException if there was a recursion while loading the
   * configuration.
   */
  private CRConfigUtil getConfig(final String configName) throws CRException {
    CRConfigUtil config;
    if (configs.containsKey(configName)) {
      config = configs.get(configName);
    } else if (!initConfigs.contains(configName)) {
      initConfigs.add(configName);
      config = StaticConfigurationContainer.getConfig(configName, "");
      configs.put(configName, config);
      initConfigs.remove(configName);
    } else {
      CRException e = new CRException();
      e.setMessage("Recursion in content connector properties detected. " + "Configs currently initialising: "
          + StringUtils.getCollectionSummary(initConfigs));
      throw e;
    }
    return config;
  }

}
TOP

Related Classes of com.gentics.cr.util.resolver.ContentConnectorCallback

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.