Package org.infoglue.cms.util.sorters

Source Code of org.infoglue.cms.util.sorters.HardcodedPageComparator

package org.infoglue.cms.util.sorters;

import java.util.Comparator;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.log4j.Logger;
import org.infoglue.deliver.applications.databeans.WebPage;
import org.infoglue.deliver.controllers.kernel.impl.simple.TemplateController;

/**
* Sort on a particular property, using reflection to find the value
*
* @author Frank Febbraro (frank@phase2technology.com)
*/
public class HardcodedPageComparator implements Comparator
{
    private final static Logger logger = Logger.getLogger(HardcodedPageComparator.class.getName());

  private String sortProperty;
  private String sortOrder;
  private boolean numberOrder;
  private String nameProperty;
  private String namesInOrderString;
 
  private TemplateController templateController;

  public HardcodedPageComparator(String sortProperty, String sortOrder, boolean numberOrder, String nameProperty, String namesInOrderString, TemplateController templateController)
  {
    this.sortProperty = sortProperty;
    this.sortOrder = sortOrder;
    this.numberOrder = numberOrder;
    this.nameProperty = nameProperty;
    this.namesInOrderString = namesInOrderString;
    this.templateController = templateController;
  }

  public int compare(Object o1, Object o2)
  {
      Comparable valueOne = getProperty(o1, sortProperty);
    Comparable valueTwo = getProperty(o2, sortProperty);
   
    Comparable valueOneName = getProperty(o1, nameProperty);
    Comparable valueTwoName = getProperty(o2, nameProperty);
   
    if(valueOne == null)
    {
        WebPage webPage1 = (WebPage)o1;
        WebPage webPage2 = (WebPage)o2;
       
        Integer meta1Id = webPage1.getMetaInfoContentId(); //this.templateController.getMetaInformationContentId(webPage1.getSiteNodeId());
        Integer meta2Id = webPage2.getMetaInfoContentId(); //this.templateController.getMetaInformationContentId(webPage2.getSiteNodeId());

        valueOne = this.templateController.getContentAttribute(meta1Id, this.templateController.getLanguageId(), sortProperty);
      valueTwo = this.templateController.getContentAttribute(meta2Id, this.templateController.getLanguageId(), sortProperty);

      if(valueOneName == null)
      {
          valueOneName = this.templateController.getContentAttribute(meta1Id, this.templateController.getLanguageId(), nameProperty);
        valueTwoName = this.templateController.getContentAttribute(meta2Id, this.templateController.getLanguageId(), nameProperty);
      }
     
        if(this.numberOrder)
        {
            try
            {
                if(valueOne != null && !valueOne.equals(""))
                    valueOne = (Comparable)new Long(valueOne.toString());
                else
                {
                    if(sortOrder.equalsIgnoreCase("desc"))
                        valueOne = (Comparable)new Long(Long.MIN_VALUE);
                    else
                        valueOne = (Comparable)new Long(Long.MAX_VALUE);
                }
            }
            catch(Exception e)
            {
                logger.info("Not a number..." + e.getMessage());
            }
           
            try
            {
                if(valueTwo != null && !valueTwo.equals(""))
                    valueTwo = (Comparable)new Long(valueTwo.toString());
                else
                {
                    if(sortOrder.equalsIgnoreCase("desc"))
                        valueTwo = (Comparable)new Long(Long.MIN_VALUE);
                    else
                        valueTwo = (Comparable)new Long(Long.MAX_VALUE);
                }
            }
            catch(Exception e)
            {
                logger.info("Not a number..." + e.getMessage());
            }
        }
    }

    if(after(valueOne, valueTwo, valueOneName, valueTwoName))
        return 1;
    else
        return -1;
  }

  private boolean after(Comparable valueOne, Comparable valueTwo, Comparable valueOneName, Comparable valueTwoName)
  {     
      int index1 = namesInOrderString.indexOf(valueOneName.toString());
      int index2 = namesInOrderString.indexOf(valueTwoName.toString());
     
      if(index1 != -1 && index2 != -1)
      {
          if(index1 > index2)
              return true;
          else
              return false;
      }
      else
      {
          if(index1 == -1 && index2 != -1)
              return true;
          else if(index2 == -1 && index1 != -1)
              return false;
          else
          {
              int result;
            if(sortOrder.equalsIgnoreCase("desc"))
            { 
                if((valueOne != null && !valueOne.toString().equalsIgnoreCase("")) && (valueTwo == null || valueTwo.toString().equalsIgnoreCase("")))
                    result = -1;
              if((valueTwo != null && !valueTwo.toString().equalsIgnoreCase("")) && (valueOne == null || valueOne.toString().equalsIgnoreCase("")))
                  result = 1;
               
              result = valueTwo.compareTo(valueOne);
            }
            else
          {
              if((valueOne != null && !valueOne.toString().equalsIgnoreCase("")) && (valueTwo == null || valueTwo.toString().equalsIgnoreCase("")))
                  result = -1;
              if((valueTwo != null && !valueTwo.toString().equalsIgnoreCase("")) && (valueOne == null || valueOne.toString().equalsIgnoreCase("")))
                  result = 1;
               
              result = valueOne.compareTo(valueTwo);
          }
           
            if(result > 0)
                return true;
            else
                return false;           
          }
      }
  }
 
  private Comparable getProperty(Object o, String property)
  {
    try
    {
      Object propertyObject = PropertyUtils.getProperty(o, sortProperty);
      if(propertyObject instanceof String)
        return (Comparable)propertyObject.toString().toLowerCase();
      else
        return (Comparable)propertyObject;
    }
    catch (Exception e)
    {
      logger.info(getClass().getName() + " Error finding property " + property, e);
      return null;
    }
  }
}
TOP

Related Classes of org.infoglue.cms.util.sorters.HardcodedPageComparator

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.