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
*