dpillot     2005/10/05 10:36:09 CEST

  Modified files:
    core/src/java/org/jahia/engines/importexport 
                                                 ManageContentPicker.java 
  Log:
  bug fix (npe on orderby)
  
  Revision  Changes    Path
  1.29      +75 -46    
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.28&r2=1.29&f=h
  
  
  
  Index: ManageContentPicker.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/engines/importexport/ManageContentPicker.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- ManageContentPicker.java  4 Oct 2005 09:24:28 -0000       1.28
  +++ ManageContentPicker.java  5 Oct 2005 08:36:08 -0000       1.29
  @@ -36,7 +36,7 @@
    *
    * @author Thomas Draier, joe Pillot
    * @author ${User}
  - * @version $Id: ManageContentPicker.java,v 1.28 2005/10/04 09:24:28 dpillot 
Exp $
  + * @version $Id: ManageContentPicker.java,v 1.29 2005/10/05 08:36:08 dpillot 
Exp $
    */
   public class ManageContentPicker {
       private static org.apache.log4j.Logger logger =
  @@ -63,7 +63,7 @@
               // reference the useful services
               ie = ServicesRegistry.getInstance().getImportExportService();
               searchService = ServicesRegistry 
.getInstance().getJahiaSearchService();
  -            siteService= 
ServicesRegistry.getInstance().getJahiaSitesService();
  +            siteService = 
ServicesRegistry.getInstance().getJahiaSitesService();
               logger.debug("creating instance");
           }
           return instance;
  @@ -101,11 +101,11 @@
           //check if we just need a sort on previous results
           String o = processingContext.getParameter("orderby");
           //o not null nor empty,lasto exist, o!=lasto, results not null
  -        logger.debug("o="+o+" lasto="+engineMap.get("orderby"));
  +        logger.debug("o=" + o + " lasto=" + engineMap.get("orderby"));
           if (o != null
                   && !o.equalsIgnoreCase("")
                   && engineMap.containsKey("orderby")
  -                && !o.equalsIgnoreCase((String)engineMap.get("orderby"))
  +                && !o.equalsIgnoreCase((String) engineMap.get("orderby"))
                   && engineMap.get("searchResults") != null
                   ) {
               orderBy(o, engineMap);
  @@ -128,7 +128,6 @@
       }
   
   
  -
       public boolean update(ProcessingContext jParams, HashMap engineMap, 
ContentObject object)
               throws JahiaException, JahiaSessionExpirationException {
           logger.debug("update mode");
  @@ -140,7 +139,9 @@
               throws JahiaException {
           String op = jParams.getParameter("contentPickOp");
           logger.debug("saving mode");
  -        if(op!=null) logger.debug("pickoperation:");
  +
  +        logger.debug("pickoperation:");
  +
           try {
   
               if (op != null && !op.equalsIgnoreCase("")) {
  @@ -159,6 +160,7 @@
   
       /**
        * internal method to do the search
  +     *
        * @param object
        * @param processingContext
        * @param engineMap
  @@ -168,11 +170,9 @@
               throws Exception {
   
   
  -
  -
           Enumeration sites = siteService.getSites();
           int siteCount = siteService.getNbSites();
  -        engineMap.put("sitecount",""+siteCount);
  +        engineMap.put("sitecount", "" + siteCount);
           engineMap.put("sites", sites);
   
           //get all parameters
  @@ -192,18 +192,25 @@
   
           //domain scope
           String scope = (String) processingContext.getParameter("searchSite");
  -        if (scope == null && siteService.getNbSites()>1) scope = "all";
  -        else if (siteService.getNbSites()==1) 
scope=""+siteService.getSite(((JahiaSite)siteService.getSites().nextElement()).getID());
  +        if (scope == null && siteService.getNbSites() > 1) scope = "all";
  +        else if (siteService.getNbSites() == 1) scope = "" + 
siteService.getSite(((JahiaSite) siteService.getSites().nextElement()).getID());
   
  -        logger.debug("[init parameters from request: orderby:" + orderBy
  -                +" searchstring:" + searchString
  -                +" searchSite:" + scope+ "  ---------------]");
  +        //summary
  +        logger.warn("[init parameters from request: "
  +                + " query:" + searchString
  +                + " searchSite:" + scope + " on " + siteCount + " sites"
  +                + " ordered by:" + orderBy
   
  +                + "  ---------------]");
   
           //store all the params for subsequent requests
           engineMap.put("searchString", searchString);
           engineMap.put("orderby", orderBy);
           engineMap.put("searchSite", scope);
  +        if (searchString.equalsIgnoreCase("")) {
  +            logger.warn("query is empty: returning");
  +            return;
  +        }
   
           //previous results (maybe we can store the history of results?)
           JahiaSearchResult searchResults = (JahiaSearchResult) 
engineMap.get("searchResults");
  @@ -242,6 +249,10 @@
                   }
                   String[] strings = (String[]) handlers.toArray(new 
String[handlers.size()]);
                   logger.debug(strings);
  +
  +                //recreate enum
  +                sites = siteService.getSites();
  +                engineMap.put("sites", sites);
                   searchResults = searchService.search(strings, searchString, 
processingContext, languageCodes, resultBuilder);
               } else {
                   //just one domain search
  @@ -250,7 +261,6 @@
               }
               logger.debug("# of hits in raw searchresults:" + 
searchResults.getHitCount() + " " + searchResults);
   
  -
               // subset of results
               JahiaSearchResult myResults = new 
JahiaSearchResult(resultBuilder);
               Map results = new HashMap();
  @@ -294,8 +304,8 @@
                                   ContentField contentField = (ContentField) 
iterator1.next();
                                   if (contentField instanceof 
ContentSmallTextField) {
                                       t = ((ContentField) 
l.iterator().next()).getValue(processingContext, lr);
  -                                    pageID=contentField.getPageID();
  -                                    logger.debug("smalltext:" + t+" 
pageID"+pageID);
  +                                    pageID = contentField.getPageID();
  +                                    logger.debug("smalltext:" + t + " 
pageID" + pageID);
                                       break;
                                   }
                               }
  @@ -307,7 +317,7 @@
                                       ContentPage contentPage = 
((ContentPageField) l.iterator().next()).getContentPage(lr);
                                       t = contentPage.getTitle(lr);
                                       pageID = contentPage.getID();
  -                                    logger.debug("page:" + t+ " 
pageID"+pageID);
  +                                    logger.debug("page:" + t + " pageID" + 
pageID);
                                       break;
                                   }
                               }
  @@ -379,7 +389,7 @@
               }//end big loop.
   
               //sorting by score
  -            orderBy("score", engineMap, myResults,results);
  +            orderBy("score", engineMap, myResults, results);
               /*
               for (Iterator iterator = new 
TreeSet(results.values()).iterator(); iterator.hasNext();) {
                   JahiaSearchHit jahiaSearchHit = (JahiaSearchHit) 
iterator.next();
  @@ -392,13 +402,12 @@
       }
   
       /**
  -     *
  -     * @param key string key to order by
  +     * @param key       string key to order by
        * @param engineMap The engine map
        * @param myResults output results
  -     * @param results input 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) {
   
           logger.debug("sort searching by" + key);
   
  @@ -417,6 +426,7 @@
       }
   
       /**
  +     * internal method to sort by a key
        *
        * @param key
        * @param engineMap
  @@ -424,34 +434,53 @@
       private void orderBy(final String key, HashMap engineMap) {
   
           logger.debug("sort by" + key);
  -        JahiaSearchResult myResults =(JahiaSearchResult) 
engineMap.get("searchResults");
  +        JahiaSearchResult myResults = (JahiaSearchResult) 
engineMap.get("searchResults");
           // create a comparator to compare from key and score
  -        Comparator comp=new Comparator() {
  -                       public int compare(Object o1, Object o2) {
  -                           String 
metadata1=((JahiaSearchHit)o1).getParsedObject().getValue(key);
  -                           int sc1=((JahiaSearchHit)o1).getScore();
  -                           String 
metadata2=((JahiaSearchHit)o2).getParsedObject().getValue(key);
  -                           int sc2=((JahiaSearchHit)o2).getScore();
  -                           if(metadata1.equalsIgnoreCase(metadata2)){
  -                               if(sc1<=sc2) return 1;
  -                               else return -1;
  -                           }
  -                           if(metadata1.compareTo(metadata2)<0) return 1;
  -                            else return -1;
  -
  -
  -                       }
  -                   };
  -       if(myResults.results()!=null){
  -       Collections.sort(myResults.results(),comp);
  -       } else {
  -           logger.debug("results null!!!");
  -       }
  -       engineMap.put("searchResults", myResults);
  +        Comparator comp = new Comparator() {
  +
  +            /**
  +             * compare implementation
  +             *
  +             * @param o1
  +             * @param o2
  +             * @return int value
  +             */
  +            public int compare(Object o1, Object o2) {
  +                String metadata1 = ((JahiaSearchHit) 
o1).getParsedObject().getValue(key);
  +                int sc1 = ((JahiaSearchHit) o1).getScore();
  +                String metadata2 = ((JahiaSearchHit) 
o2).getParsedObject().getValue(key);
  +                int sc2 = ((JahiaSearchHit) o2).getScore();
  +
  +                // possibly metadata could be null
  +                if (metadata1 == null) return -1;
  +                if (metadata2 == null) return 1;
  +
  +                //comparaison
  +                if (metadata1.equalsIgnoreCase(metadata2)) {
  +                    if (sc1 <= sc2) return 1;// second object is less than 
1st
  +                    else
  +                        return -1; //opposite
  +                }
  +                if (metadata1.compareTo(metadata2) < 0) return 1;// second 
object is less than 1st
  +                else
  +                    return -1;  //opposite
  +
  +
  +            }
  +        };
  +        if (myResults.results() != null) {
  +            Collections.sort(myResults.results(), comp);
  +        } else {
  +            logger.debug("results null!!!");
  +        }
  +        engineMap.put("searchResults", myResults);
       }
   }
   /**
    * $Log: ManageContentPicker.java,v $
  + * Revision 1.29  2005/10/05 08:36:08  dpillot
  + * bug fix (npe on orderby)
  + *
    * Revision 1.28  2005/10/04 09:24:28  dpillot
    * bug fix
    *
  

Reply via email to