dpillot     2005/11/09 16:30:52 CET

  Modified files:
    core/src/java/org/jahia/engines/importexport 
                                                 ManageContentPicker.java 
  Log:
  order enhancement
  
  Revision  Changes    Path
  1.48      +29 -23    
jahia/core/src/java/org/jahia/engines/importexport/ManageContentPicker.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/engines/importexport/ManageContentPicker.java.diff?r1=1.47&r2=1.48&f=h
  
  
  
  Index: ManageContentPicker.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/engines/importexport/ManageContentPicker.java,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- ManageContentPicker.java  9 Nov 2005 14:12:08 -0000       1.47
  +++ ManageContentPicker.java  9 Nov 2005 15:30:52 -0000       1.48
  @@ -2,7 +2,6 @@
   
   import org.jahia.content.ContainerDefinitionKey;
   import org.jahia.content.ContentObject;
  -import org.jahia.content.ObjectKey;
   import org.jahia.data.containers.JahiaContainerDefinition;
   import org.jahia.data.search.JahiaContainerSearchHit;
   import org.jahia.data.search.JahiaSearchHit;
  @@ -43,7 +42,7 @@
    *
    * @author Thomas Draier, joe Pillot
    * @author ${User}
  - * @version $Id: ManageContentPicker.java,v 1.47 2005/11/09 14:12:08 tdraier 
Exp $
  + * @version $Id: ManageContentPicker.java,v 1.48 2005/11/09 15:30:52 dpillot 
Exp $
    */
   public class ManageContentPicker {
       private static org.apache.log4j.Logger logger =
  @@ -56,7 +55,7 @@
       private static JahiaSearchService searchService;
       private static JahiaSitesService siteService;
       //private static MetadataService metaservice;
  -
  +    private boolean ascOrder=true;
       private ManageContentPicker() {
       }
   
  @@ -115,7 +114,7 @@
                   && !o.equalsIgnoreCase((String) engineMap.get("orderby"))
                   && engineMap.get("searchResults") != null
                   ) {
  -            orderBy(o, engineMap);
  +            orderBy(o, engineMap, true);
               //engineMap.remove("orderby");
               engineMap.put("orderby",o);
               return true;
  @@ -536,7 +535,7 @@
               JahiaContainerDefinition thisJcd = (JahiaContainerDefinition) 
ContentObject.getInstance(cdk);
               logger.debug("destination cdk:" + cdk + " cdfn:" + thisJcd);
   
  -            
  +
               EntryLoadRequest lr = new 
EntryLoadRequest(EntryLoadRequest.ACTIVE_WORKFLOW_STATE, 0, 
processingContext.getLocaleList());
   
               // big loop to test the compatibility of container type
  @@ -707,7 +706,7 @@
               }//end big loop.
                */
               //sorting
  -            orderBy(orderBy, engineMap, myResults, results);
  +            orderBy(orderBy, engineMap, myResults, results,true);
   
           }
       }
  @@ -758,7 +757,7 @@
        * @param myResults output results
        * @param results   input results
        */
  -    private void orderBy(String key, HashMap engineMap, JahiaSearchResult 
myResults, Map results) {
  +    private void orderBy(String key, HashMap engineMap, JahiaSearchResult 
myResults, Map results,boolean order) {
   
           logger.debug("sort searching by" + key);
   
  @@ -766,19 +765,19 @@
               //by id
               }else if(key.equalsIgnoreCase("creator")) {
               //by creator
  -            orderBy("creator",engineMap);
  +            orderBy("creator",engineMap, order);
               }else if(key.equalsIgnoreCase("lastpublishingdate")) {
               //by last pub date
  -            orderBy("lastpublishingdate",engineMap);
  +            orderBy("lastpublishingdate",engineMap, order);
               }else if(key.equalsIgnoreCase("creationdate")) {
               //by creationdate
  -            orderBy("creationdate",engineMap);
  +            orderBy("creationdate",engineMap, order);
               }else if(key.equalsIgnoreCase("lastmodificationdate")) {
               //by modif date
  -            orderBy("lastmodificationdate",engineMap);
  +            orderBy("lastmodificationdate",engineMap, order);
               }else if(key.equalsIgnoreCase("lastcontributor")) {
               //by contributor
  -            orderBy("lastcontributor",engineMap);
  +            orderBy("lastcontributor",engineMap, order);
           }else {
               // by score (default comparable interface)
               for (Iterator iterator = new 
TreeSet(results.values()).iterator(); iterator.hasNext();) {
  @@ -796,11 +795,13 @@
        *
        * @param key
        * @param engineMap
  +     * @param order
        */
  -    private void orderBy(final String key, HashMap engineMap) {
  +    public void orderBy(final String key, HashMap engineMap, final boolean 
order) {
   
           logger.debug("sort by" + key);
           JahiaSearchResult myResults = (JahiaSearchResult) 
engineMap.get("searchResults");
  +
           // create a comparator to compare from key and score
           Comparator comp = new Comparator() {
   
  @@ -816,35 +817,40 @@
                   int sc1 = ((JahiaSearchHit) o1).getScore();
                   String metadata2 = ((JahiaSearchHit) 
o2).getParsedObject().getValue(key);
                   int sc2 = ((JahiaSearchHit) o2).getScore();
  -
  +                int o=1;
  +                if(!order) o=-1;
                   // possibly metadata could be null
  -                if (metadata1 == null) return -1;
  -                if (metadata2 == null) return 1;
  -
  +                if (metadata1 == null && metadata2 != null) return (-1*o);
  +                if (metadata2 == null && metadata1 != null) return (1*o);
  +                if(metadata2 == null && metadata1 == null) return 0;
                   //comparaison
                   if (metadata1.equalsIgnoreCase(metadata2)) {
  -                    if (sc1 <= sc2) return 1;// second object is less than 
1st
  +                    //equality case (use the score)
  +                    if (sc1 <= sc2) return (1*o);// second object is less 
than 1st
                       else
  -                        return -1; //opposite
  +                        return (-1*o); //opposite
                   }
  -                if (metadata1.compareTo(metadata2) < 0) return 1;// second 
object is less than 1st
  +                if (metadata1.compareTo(metadata2) < 0) return (1*o);// 
second object is less than 1st
                   else
  -                    return -1;  //opposite
  +                    return (-1*o);  //opposite
   
   
               }
           };
  -        if (myResults.results() != null) {
  +        if (myResults.results() != null && myResults.results().size()>1) {
               Collections.sort(myResults.results(), comp);
               engineMap.put("searchResults", myResults);
           } else {
  -            logger.debug("results null!!!");
  +            logger.debug("results null or too small");
           }
   
       }
   }
   /**
    * $Log: ManageContentPicker.java,v $
  + * Revision 1.48  2005/11/09 15:30:52  dpillot
  + * order enhancement
  + *
    * Revision 1.47  2005/11/09 14:12:08  tdraier
    * contentpick as a background job, simplified api
    *
  

Reply via email to