Package org.infoglue.deliver.integration.dataproviders

Source Code of org.infoglue.deliver.integration.dataproviders.RemoteXMLPropertyOptionsDataProvider

package org.infoglue.deliver.integration.dataproviders;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.exolab.castor.jdo.Database;
import org.infoglue.cms.applications.databeans.GenericOptionDefinition;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.util.dom.DOMBuilder;
import org.infoglue.deliver.applications.databeans.ComponentPropertyOption;
import org.infoglue.deliver.util.CacheController;

public class RemoteXMLPropertyOptionsDataProvider implements PropertyOptionsDataProvider
{
    private final static Logger logger = Logger.getLogger(RemoteXMLPropertyOptionsDataProvider.class.getName());
 
  public List<GenericOptionDefinition> getOptions(Map parameters, String languageCode, InfoGluePrincipal principal, Database db) throws Exception
  {
    String serviceUrl = (String)parameters.get("serviceUrl");
    if(serviceUrl == null)
      throw new Exception("Must supply a valid parameter [serviceUrl] to this provider.");
   
    String charset = (String)parameters.get("charset");
    if(charset == null)
      charset = "utf-8";
     
    logger.info("RemoteXMLPropertyOptionsDataProvider");
    logger.info("serviceUrl:" + serviceUrl);
    logger.info("charset:" + charset);
    List<GenericOptionDefinition> options = (List<GenericOptionDefinition>)CacheController.getCachedObjectFromAdvancedCache("propertyOptionsCache", "properties_" + serviceUrl + "_" + charset + "_" + languageCode, 300);
    if(options != null)
    {
      logger.info("Using cached options...");
      return options;     
    }
   
    try
    {
      logger.info("Getting options from remote service...");

      options = new ArrayList<GenericOptionDefinition>();
     
      org.infoglue.deliver.util.HttpHelper httpHelper = new org.infoglue.deliver.util.HttpHelper();
      String xml = httpHelper.getUrlContent(serviceUrl, Collections.EMPTY_MAP, parameters, charset, 10000);
      logger.info("xml from service:\n" + xml);
     
      Document document = new DOMBuilder().getDocument(xml);
      List properties = document.getRootElement().selectNodes("property");
      logger.info("properties:" + properties.size());
     
      Iterator propertiesIterator = properties.iterator();
      while(propertiesIterator.hasNext())
      {
        Element propertyElement = (Element)propertiesIterator.next();
        logger.info("propertyElement:" + propertyElement);
        ComponentPropertyOption option = new ComponentPropertyOption();
        if(propertyElement.attributeValue("name_" + languageCode) != null && !propertyElement.attributeValue("name_" + languageCode).equals(""))
          option.setName(propertyElement.attributeValue("name_" + languageCode));
        else
          option.setName(propertyElement.attributeValue("name"));
       
        option.setValue(propertyElement.attributeValue("value"));
        options.add(option);
      }

      if(options != null)
            CacheController.cacheObjectInAdvancedCache("propertyOptionsCache", "properties_" + serviceUrl + "_" + charset, options);
    }
    catch (Exception e)
    {
      e.printStackTrace();
      options = (List<GenericOptionDefinition>)CacheController.getCachedObjectFromAdvancedCache("propertyOptionsCache", "properties_" + serviceUrl + "_" + charset);
    }
   
    return options;
  }
}
TOP

Related Classes of org.infoglue.deliver.integration.dataproviders.RemoteXMLPropertyOptionsDataProvider

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.