dpillot 2005/12/02 18:58:31 CET
Modified files:
core/src/java/org/jahia/engines/importexport
ManageContentPicker.java
Log:
misc bugs:fix pid bug, queries persistence bug
added ability to querying number as jahia_pid
added languages cross-sites searching support
Revision Changes Path
1.56 +358 -378
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.55&r2=1.56&f=h
Index: ManageContentPicker.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/engines/importexport/ManageContentPicker.java,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- ManageContentPicker.java 1 Dec 2005 11:01:42 -0000 1.55
+++ ManageContentPicker.java 2 Dec 2005 17:58:30 -0000 1.56
@@ -1,13 +1,14 @@
package org.jahia.engines.importexport;
+import org.apache.commons.lang.StringUtils;
+import org.jahia.bin.Jahia;
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;
-import org.jahia.data.search.JahiaSearchResult;
import org.jahia.data.search.JahiaSearchHitInterface;
+import org.jahia.data.search.JahiaSearchResult;
import org.jahia.engines.JahiaEngine;
import org.jahia.engines.search.Search_Engine;
import org.jahia.exceptions.JahiaException;
@@ -17,21 +18,22 @@
import org.jahia.registries.ServicesRegistry;
import org.jahia.services.containers.ContentContainer;
import org.jahia.services.containers.ContentContainerList;
-import org.jahia.services.containers.JahiaContainersService;
-import org.jahia.services.fields.*;
-import org.jahia.services.importexport.ImportExportService;
+import org.jahia.services.fields.ContentField;
+import org.jahia.services.fields.ContentPageField;
+import org.jahia.services.fields.ContentSmallTextField;
import org.jahia.services.importexport.CopyJob;
+import org.jahia.services.importexport.ImportExportService;
+import org.jahia.services.pages.ContentPage;
+import org.jahia.services.scheduler.BackgroundJob;
+import org.jahia.services.scheduler.SchedulerService;
import org.jahia.services.search.*;
import org.jahia.services.sites.JahiaSite;
import org.jahia.services.sites.JahiaSitesService;
+import org.jahia.services.sites.SiteLanguageSettings;
import org.jahia.services.version.EntryLoadRequest;
-import org.jahia.services.pages.ContentPage;
-import org.jahia.services.scheduler.SchedulerService;
-import org.jahia.services.scheduler.BackgroundJob;
import org.jahia.utils.JahiaTools;
-import org.jahia.bin.Jahia;
-import org.quartz.JobDetail;
import org.quartz.JobDataMap;
+import org.quartz.JobDetail;
import java.util.*;
@@ -42,7 +44,7 @@
*
* @author Thomas Draier, joe Pillot
* @author ${User}
- * @version $Id: ManageContentPicker.java,v 1.55 2005/12/01 11:01:42 dpillot
Exp $
+ * @version $Id: ManageContentPicker.java,v 1.56 2005/12/02 17:58:30 dpillot
Exp $
*/
public class ManageContentPicker {
private static org.apache.log4j.Logger logger =
@@ -55,7 +57,8 @@
private static JahiaSearchService searchService;
private static JahiaSitesService siteService;
//private static MetadataService metaservice;
- private boolean ascOrder=true;
+ private boolean ascOrder = true;
+
private ManageContentPicker() {
}
@@ -106,13 +109,11 @@
ContainerDefinitionKey k = (ContainerDefinitionKey)
object.getDefinitionKey(null);
try {
JahiaContainerDefinition def = (JahiaContainerDefinition)
ContentObject.getInstance(k);
- engineMap.put("objecttype",def.getName());
+ engineMap.put("objecttype", def.getName());
} catch (ClassNotFoundException e) {
logger.debug(e);
}
-
-
//engineMap.put("adminAccess", Boolean.TRUE);
//check if we just need a sort on previous results
@@ -127,7 +128,7 @@
) {
orderBy(o, engineMap, true);
//engineMap.remove("orderby");
- engineMap.put("orderby",o);
+ engineMap.put("orderby", o);
return true;
}
@@ -156,7 +157,7 @@
private boolean save(ProcessingContext jParams, HashMap engineMap,
ContentObject object)
throws JahiaException {
String op = jParams.getParameter("contentPickOp");
- logger.debug("saving mode:pickop="+op);
+ logger.debug("saving mode:pickop=" + op);
try {
@@ -171,7 +172,7 @@
String skey = source.getObjectKey().toString();
String dkey = object.getObjectKey().toString();
- JobDetail jobDetail = BackgroundJob.createJahiaJob("Copy
"+skey+ " to "+dkey, jobClass, jParams);
+ JobDetail jobDetail = BackgroundJob.createJahiaJob("Copy " +
skey + " to " + dkey, jobClass, jParams);
JobDataMap jobDataMap;
jobDataMap = jobDetail.getJobDataMap();
@@ -192,7 +193,7 @@
/**
* internal method to do the search
*
- * @param object the initial destination object
+ * @param object the initial destination object
* @param processingContext
* @param engineMap
* @throws Exception
@@ -200,80 +201,84 @@
private void doSearch(ContentObject object, ProcessingContext
processingContext, HashMap engineMap)
throws Exception {
- //domain scope
+ boolean isPID = false;
+ //domain scope
Enumeration sites = siteService.getSites();
- /*
- int siteCount = siteService.getNbSites();
- engineMap.put("sitecount", "" + siteCount);
- engineMap.put("sites", sites);
- */
+
//get all parameters
// main query
String searchString = (String)
processingContext.getParameter("query");
String smode = (String) processingContext.getParameter("condition1");
- String query_concat_mode=(String)
processingContext.getParameter("concat");
+ String query_concat_mode = (String)
processingContext.getParameter("concat");
// checking NPE & emptyness of important params
- if(searchString ==null) searchString="";
- String query1=searchString;
- if(smode==null || smode.equalsIgnoreCase("")) smode="or";
- if(query_concat_mode==null ||
query_concat_mode.equalsIgnoreCase("")) query_concat_mode="or";
+ if (searchString == null) searchString = "";
+ String query1 = searchString;
+
+ // to remap a numeric input in PIDs
+ if (StringUtils.isNumeric(searchString)) {
+ //used to get a pid directly from the main request assuming
number is pid number
+ searchString = "jahia.page_id:" +
NumberPadding.pad(searchString);
+ isPID = true;
+ logger.warn("assuming number is jahia PID page");
+ }
+
+ if (smode == null || smode.equalsIgnoreCase("")) smode = "or";
+ if (query_concat_mode == null ||
query_concat_mode.equalsIgnoreCase("")) query_concat_mode = "or";
//get alt queries
//query2
//String query2=(String) processingContext.getParameter("query2");
- String query21=(String) processingContext.getParameter("query21");
- String query22=(String) processingContext.getParameter("query22");
- String query23=(String) processingContext.getParameter("query23");
- String query24=(String)
processingContext.getParameter("condition24");
- String query244=(String)
processingContext.getParameter("condition244");
- String smode2=(String) processingContext.getParameter("condition2");
+ String query21 = processingContext.getParameter("query21");
+ String query22 = processingContext.getParameter("query22");
+ String query23 = processingContext.getParameter("query23");
+ String query24 = processingContext.getParameter("condition24");
+ String query244 = processingContext.getParameter("condition244");
+ String smode2 = processingContext.getParameter("condition2");
//query3
//String query3=(String) processingContext.getParameter("query3");
- String query31=(String) processingContext.getParameter("query31");
- String query32=(String) processingContext.getParameter("query32");
- String query33=(String) processingContext.getParameter("query33");
- String query34=(String)
processingContext.getParameter("condition34");
- String query344=(String)
processingContext.getParameter("condition344");
- String smode3=(String) processingContext.getParameter("condition3");
+ String query31 = processingContext.getParameter("query31");
+ String query32 = processingContext.getParameter("query32");
+ String query33 = processingContext.getParameter("query33");
+ String query34 = processingContext.getParameter("condition34");
+ String query344 = processingContext.getParameter("condition344");
+ String smode3 = processingContext.getParameter("condition3");
//query4
//String query4=(String) processingContext.getParameter("query4");
- String query41=(String) processingContext.getParameter("query41");
- String query42=(String) processingContext.getParameter("query42");
- String query43=(String) processingContext.getParameter("query43");
- String query44=(String)
processingContext.getParameter("condition44");
- String query444=(String)
processingContext.getParameter("condition444");
- String smode4=(String) processingContext.getParameter("condition4");
-
-
+ String query41 = processingContext.getParameter("query41");
+ String query42 = processingContext.getParameter("query42");
+ String query43 = processingContext.getParameter("query43");
+ String query44 = processingContext.getParameter("condition44");
+ String query444 = processingContext.getParameter("condition444");
+ String smode4 = (String)
processingContext.getParameter("condition4");
//check NPE on alt queries and alt modes
//if(query2==null) query2="";
- if(query21==null) query21="";
- if(query22==null) query22="";
- if(query23==null) query23="";
- if(query244==null) query244="-";
+ if (query21 == null) query21 = "";
+ if (query22 == null) query22 = "";
+ if (query23 == null) query23 = "";
+ if (query244 == null) query244 = "-";
//if(query3==null) query3="";
- if(query31==null) query31="";
- if(query32==null) query32="";
- if(query33==null) query33="";
- if(query344==null) query344="-";
+ if (query31 == null) query31 = "";
+ if (query32 == null) query32 = "";
+ if (query33 == null) query33 = "";
+ if (query344 == null) query344 = "-";
//if(query4==null) query4="";
- if(query41==null) query41="";
- if(query42==null) query42="";
- if(query43==null) query43="";
- if(query444==null) query444="-";
+ if (query41 == null) query41 = "";
+ if (query42 == null) query42 = "";
+ if (query43 == null) query43 = "";
+ if (query444 == null) query444 = "-";
//conditions
- if(smode2==null) smode2="creator";//default
- if(smode3==null) smode3="creator";
- if(smode4==null) smode4="creator";
- engineMap.put("smode2",smode2);
- engineMap.put("smode3",smode3);
- engineMap.put("smode4",smode4);
+ if (smode2 == null) smode2 = "creator";//default
+ if (smode3 == null) smode3 = "creator";
+ if (smode4 == null) smode4 = "creator";
+ engineMap.put("smode2", smode2);
+ engineMap.put("smode3", smode3);
+ engineMap.put("smode4", smode4);
//order
String orderBy = (String)
processingContext.getParameter("orderby");//orderby parameter
@@ -282,7 +287,7 @@
logger.warn("order set on default score");
}
- //check on emptyness of queries
+ //check on emptyness of queries
if (searchString.equalsIgnoreCase("")
&& (query21.equalsIgnoreCase("") ||
query22.equalsIgnoreCase("") || query23.equalsIgnoreCase("") ||
query244.equalsIgnoreCase("-"))
&& (query31.equalsIgnoreCase("") ||
query32.equalsIgnoreCase("") || query33.equalsIgnoreCase("") ||
query344.equalsIgnoreCase("-"))
@@ -291,198 +296,211 @@
logger.debug("initialization of primary parameters to default
values");
engineMap.put("searchString", "");
- engineMap.put("smode","or");
- engineMap.put("concat","or");
- engineMap.put("orderby","score");
+ engineMap.put("smode", "or");
+ engineMap.put("concat", "or");
+ engineMap.put("orderby", "score");
//return;
}
//store alt queries non-null in engineMap
//if(!query2.equalsIgnoreCase("")) engineMap.put("query2",query2);
- String query2="";
- String query3="";
- String query4="";
- long now=System.currentTimeMillis();
- long day=3600*1000*24;
- long aweek=now-(day*7);
- long amonth=now-(day*30);
- long amonths=now-(day*180);
- String[]
scopedate={"jahia.metadata_lastpublishingdate:","jahia.metadata_lastmodificationdate:","jahia.metadata_creationdate:"};
+ String query2 = "";
+ String query3 = "";
+ String query4 = "";
+ long now = System.currentTimeMillis();
+ long day = 3600 * 1000 * 24;
+ long aweek = now - (day * 7);
+ long amonth = now - (day * 30);
+ long amonths = now - (day * 180);
+ String[] scopedate = {"jahia.metadata_lastpublishingdate:",
"jahia.metadata_lastmodificationdate:", "jahia.metadata_creationdate:"};
//query2s
- if(!query21.equalsIgnoreCase("")) {
- engineMap.put("query21",query21);
- String subcondition=(String)
processingContext.getParameter("condition21");
- if(subcondition!=null &&
subcondition.equalsIgnoreCase("creator")){
- query2="jahia.metadata_creator:"+query21;
- } else if(subcondition!=null &&
subcondition.equalsIgnoreCase("contributor")){
- query2="jahia.metadata_lastcontributor:"+query21;
- } else if(subcondition!=null &&
subcondition.equalsIgnoreCase("all")){
- query2="(jahia.metadata_creator:"+query21+" OR
jahia.metadata_lastcontributor:"+query21+")";
- }
- }
- if(!query22.equalsIgnoreCase("")) {
- engineMap.put("query22",query22);
- query2="jahia.metadata_keywords:"+query22;
- }
- if(!query23.equalsIgnoreCase("")) {
- engineMap.put("query23",query23);
- query2="jahia.page_id:"+query23;
- }
- if(!query244.equalsIgnoreCase("-")) {
- engineMap.put("condition24",query24);
- engineMap.put("condition244",query244);
- int valscope=0;
- if(query24.equalsIgnoreCase("pub")) valscope=0;
- if(query24.equalsIgnoreCase("mod")) valscope=1;
- if(query24.equalsIgnoreCase("cre")) valscope=2;
- if(query244.equalsIgnoreCase("week")){
- query2=scopedate[valscope]+"["+NumberPadding.pad(aweek)+" TO
"+NumberPadding.pad(now)+"]";
- } else if(query244.equalsIgnoreCase("month")){
- query2=scopedate[valscope]+"["+NumberPadding.pad(amonth)+"
TO "+NumberPadding.pad(now)+"]";
- } else if(query244.equalsIgnoreCase("months")){
- query2=scopedate[valscope]+"["+NumberPadding.pad(amonths)+"
TO "+NumberPadding.pad(now)+"]";
+ engineMap.put("query21", query21);
+ if (!query21.equalsIgnoreCase("")) {
+
+ String subcondition =
processingContext.getParameter("condition21");
+ if (subcondition != null &&
subcondition.equalsIgnoreCase("creator")) {
+ query2 = "jahia.metadata_creator:" + query21;
+ } else if (subcondition != null &&
subcondition.equalsIgnoreCase("contributor")) {
+ query2 = "jahia.metadata_lastcontributor:" + query21;
+ } else if (subcondition != null &&
subcondition.equalsIgnoreCase("all")) {
+ query2 = "(jahia.metadata_creator:" + query21 + " OR
jahia.metadata_lastcontributor:" + query21 + ")";
+ }
+ }
+ engineMap.put("query22", query22);
+ if (!query22.equalsIgnoreCase("")) {
+
+ query2 = "jahia.metadata_keywords:" + query22;
+ }
+ engineMap.put("query23", query23);
+ if (!query23.equalsIgnoreCase("")) {
+
+ query2 = "jahia.page_id:" + NumberPadding.pad(query23);
+ isPID=true;
+
+ }
+ engineMap.put("condition24", query24);
+ engineMap.put("condition244", query244);
+ if (!query244.equalsIgnoreCase("-")) {
+
+
+ int valscope = 0;
+ if (query24.equalsIgnoreCase("pub")) valscope = 0;
+ if (query24.equalsIgnoreCase("mod")) valscope = 1;
+ if (query24.equalsIgnoreCase("cre")) valscope = 2;
+ if (query244.equalsIgnoreCase("week")) {
+ query2 = scopedate[valscope] + "[" +
NumberPadding.pad(aweek) + " TO " + NumberPadding.pad(now) + "]";
+ } else if (query244.equalsIgnoreCase("month")) {
+ query2 = scopedate[valscope] + "[" +
NumberPadding.pad(amonth) + " TO " + NumberPadding.pad(now) + "]";
+ } else if (query244.equalsIgnoreCase("months")) {
+ query2 = scopedate[valscope] + "[" +
NumberPadding.pad(amonths) + " TO " + NumberPadding.pad(now) + "]";
}
}
//query3s
- if(!query31.equalsIgnoreCase("")) {
- engineMap.put("query31",query31);
- String subcondition=(String)
processingContext.getParameter("condition31");
- if(subcondition!=null &&
subcondition.equalsIgnoreCase("creator")){
- query3="jahia.metadata_creator:"+query31;
- } else if(subcondition!=null &&
subcondition.equalsIgnoreCase("contributor")){
- query3="jahia.metadata_lastcontributor:"+query31;
- } else if(subcondition!=null &&
subcondition.equalsIgnoreCase("all")){
- query3="(jahia.metadata_creator:"+query31+" OR
jahia.metadata_lastcontributor:"+query31+")";
- }
- }
- if(!query32.equalsIgnoreCase("")) {
- engineMap.put("query32",query32);
- query3="jahia.metadata_keywords:"+query32;
- }
- if(!query33.equalsIgnoreCase("")) {
- engineMap.put("query33",query33);
- query3="jahia.page_id:"+query33;
- }
- if(!query344.equalsIgnoreCase("-")) {
- engineMap.put("condition34",query34);
- engineMap.put("condition344",query344);
- int valscope=0;
- if(query34.equalsIgnoreCase("pub")) valscope=0;
- if(query34.equalsIgnoreCase("mod")) valscope=1;
- if(query34.equalsIgnoreCase("cre")) valscope=2;
- if(query344.equalsIgnoreCase("week")){
- query3=scopedate[valscope]+"["+NumberPadding.pad(aweek)+" TO
"+NumberPadding.pad(now)+"]";
- } else if(query344.equalsIgnoreCase("month")){
- query3=scopedate[valscope]+"["+NumberPadding.pad(amonth)+"
TO "+NumberPadding.pad(now)+"]";
- } else if(query344.equalsIgnoreCase("months")){
- query3=scopedate[valscope]+"["+NumberPadding.pad(amonths)+"
TO "+NumberPadding.pad(now)+"]";
+ engineMap.put("query31", query31);
+ if (!query31.equalsIgnoreCase("")) {
+
+ String subcondition =
processingContext.getParameter("condition31");
+ if (subcondition != null &&
subcondition.equalsIgnoreCase("creator")) {
+ query3 = "jahia.metadata_creator:" + query31;
+ } else if (subcondition != null &&
subcondition.equalsIgnoreCase("contributor")) {
+ query3 = "jahia.metadata_lastcontributor:" + query31;
+ } else if (subcondition != null &&
subcondition.equalsIgnoreCase("all")) {
+ query3 = "(jahia.metadata_creator:" + query31 + " OR
jahia.metadata_lastcontributor:" + query31 + ")";
+ }
+ }
+ engineMap.put("query32", query32);
+ if (!query32.equalsIgnoreCase("")) {
+
+ query3 = "jahia.metadata_keywords:" + query32;
+ }
+ if (!query33.equalsIgnoreCase("")) {
+ engineMap.put("query33", query33);
+ query3 = "jahia.page_id:" + NumberPadding.pad(query33);
+ isPID=true;
+ }
+ engineMap.put("condition34", query34);
+ engineMap.put("condition344", query344);
+ if (!query344.equalsIgnoreCase("-")) {
+
+ int valscope = 0;
+ if (query34.equalsIgnoreCase("pub")) valscope = 0;
+ if (query34.equalsIgnoreCase("mod")) valscope = 1;
+ if (query34.equalsIgnoreCase("cre")) valscope = 2;
+ if (query344.equalsIgnoreCase("week")) {
+ query3 = scopedate[valscope] + "[" +
NumberPadding.pad(aweek) + " TO " + NumberPadding.pad(now) + "]";
+ } else if (query344.equalsIgnoreCase("month")) {
+ query3 = scopedate[valscope] + "[" +
NumberPadding.pad(amonth) + " TO " + NumberPadding.pad(now) + "]";
+ } else if (query344.equalsIgnoreCase("months")) {
+ query3 = scopedate[valscope] + "[" +
NumberPadding.pad(amonths) + " TO " + NumberPadding.pad(now) + "]";
}
}
//query4s
- if(!query41.equalsIgnoreCase("")) {
- engineMap.put("query41",query41);
- String subcondition=(String)
processingContext.getParameter("condition41");
- if(subcondition!=null &&
subcondition.equalsIgnoreCase("creator")){
- query4="jahia.metadata_creator:"+query41;
- } else if(subcondition!=null &&
subcondition.equalsIgnoreCase("contributor")){
- query4="jahia.metadata_lastcontributor:"+query41;
- } else if(subcondition!=null &&
subcondition.equalsIgnoreCase("all")){
- query4="(jahia.metadata_creator:"+query41+" OR
jahia.metadata_lastcontributor:"+query41+")";
- }
- }
- if(!query42.equalsIgnoreCase("")) {
- engineMap.put("query42",query42);
- query4="jahia.metadata_keywords:"+query42;
- }
- if(!query43.equalsIgnoreCase("")) {
- engineMap.put("query43",query43);
- query4="jahia.page_id:"+query43;
- }
- if(!query444.equalsIgnoreCase("-")) {
- engineMap.put("condition44",query44);
- engineMap.put("condition444",query444);
- int valscope=0;
- if(query44.equalsIgnoreCase("pub")) valscope=0;
- if(query44.equalsIgnoreCase("mod")) valscope=1;
- if(query44.equalsIgnoreCase("cre")) valscope=2;
- if(query444.equalsIgnoreCase("week")){
- query4=scopedate[valscope]+"["+NumberPadding.pad(aweek)+" TO
"+NumberPadding.pad(now)+"]";
- } else if(query444.equalsIgnoreCase("month")){
- query4=scopedate[valscope]+"["+NumberPadding.pad(amonth)+"
TO "+NumberPadding.pad(now)+"]";
- } else if(query444.equalsIgnoreCase("months")){
- query4=scopedate[valscope]+"["+NumberPadding.pad(amonths)+"
TO "+NumberPadding.pad(now)+"]";
+ engineMap.put("query41", query41);
+ if (!query41.equalsIgnoreCase("")) {
+
+ String subcondition =
processingContext.getParameter("condition41");
+ if (subcondition != null &&
subcondition.equalsIgnoreCase("creator")) {
+ query4 = "jahia.metadata_creator:" + query41;
+ } else if (subcondition != null &&
subcondition.equalsIgnoreCase("contributor")) {
+ query4 = "jahia.metadata_lastcontributor:" + query41;
+ } else if (subcondition != null &&
subcondition.equalsIgnoreCase("all")) {
+ query4 = "(jahia.metadata_creator:" + query41 + " OR
jahia.metadata_lastcontributor:" + query41 + ")";
+ }
+ }
+ engineMap.put("query42", query42);
+ if (!query42.equalsIgnoreCase("")) {
+
+ query4 = "jahia.metadata_keywords:" + query42;
+ }
+ engineMap.put("query43", query43);
+ if (!query43.equalsIgnoreCase("")) {
+
+ query4 = "jahia.page_id:" + NumberPadding.pad(query43);
+ isPID=true;
+ }
+ engineMap.put("condition44", query44);
+ engineMap.put("condition444", query444);
+ if (!query444.equalsIgnoreCase("-")) {
+
+ int valscope = 0;
+ if (query44.equalsIgnoreCase("pub")) valscope = 0;
+ if (query44.equalsIgnoreCase("mod")) valscope = 1;
+ if (query44.equalsIgnoreCase("cre")) valscope = 2;
+ if (query444.equalsIgnoreCase("week")) {
+ query4 = scopedate[valscope] + "[" +
NumberPadding.pad(aweek) + " TO " + NumberPadding.pad(now) + "]";
+ } else if (query444.equalsIgnoreCase("month")) {
+ query4 = scopedate[valscope] + "[" +
NumberPadding.pad(amonth) + " TO " + NumberPadding.pad(now) + "]";
+ } else if (query444.equalsIgnoreCase("months")) {
+ query4 = scopedate[valscope] + "[" +
NumberPadding.pad(amonths) + " TO " + NumberPadding.pad(now) + "]";
}
}
-
//summary of alt queries
- logger.debug("query2:"+query2+" cond2:"+smode2);
- logger.debug("query3:"+query3+" cond3:"+smode3);
- logger.debug("query4:"+query4+" cond4:"+smode4);
-
-
+ logger.debug("query2:" + query2 + " cond2:" + smode2);
+ logger.debug("query3:" + query3 + " cond3:" + smode3);
+ logger.debug("query4:" + query4 + " cond4:" + smode4);
//domain scope
String scope = (String) processingContext.getParameter("searchSite");
if (scope == null && siteService.getNbSites() > 1) scope = "all";
//default
else if (siteService.getNbSites() == 1) {
- int siteid= ((JahiaSite)
siteService.getSites().nextElement()).getID();
- scope = String.valueOf(siteid) ;
- logger.debug("siteid:"+siteid);
+ int siteid = ((JahiaSite)
siteService.getSites().nextElement()).getID();
+ scope = String.valueOf(siteid);
+ logger.debug("siteid:" + siteid);
}
// transform main query(only if not empty)
- searchString=searchString.trim();
- if(smode.equalsIgnoreCase("exact") &&
!searchString.equalsIgnoreCase("")) {
- searchString="\""+searchString+"\"";
+ searchString = searchString.trim();
+ if (smode.equalsIgnoreCase("exact") &&
!searchString.equalsIgnoreCase("")) {
+ searchString = "\"" + searchString + "\"";
} else if (smode.equalsIgnoreCase("and") &&
!searchString.equalsIgnoreCase("")) {
- searchString=searchString.trim().replaceAll("\\s"," AND ");
+ searchString = searchString.trim().replaceAll("\\s", " AND ");
}
//adding advanced queries
- String advplus=" OR ";
- if(query_concat_mode.equalsIgnoreCase("and")) advplus=" AND ";
+ String advplus = " OR ";
+ if (query_concat_mode.equalsIgnoreCase("and")) advplus = " AND ";
// constructing final BIG LUCENE query
- String altqueries="";
+ String altqueries = "";
- if(!query2.equalsIgnoreCase(""))
altqueries=altqueries+advplus+query2;
- if(!query3.equalsIgnoreCase(""))
altqueries=altqueries+advplus+query3;
- if(!query4.equalsIgnoreCase(""))
altqueries=altqueries+advplus+query4;
-
- if(!searchString.equalsIgnoreCase("") &&
!altqueries.equalsIgnoreCase("")) {
- searchString="("+searchString+")"+altqueries;
- } else if(searchString.equalsIgnoreCase("") &&
!altqueries.equalsIgnoreCase("")){
- searchString=altqueries.substring(altqueries.indexOf("AND ")+4);
+ if (!query2.equalsIgnoreCase("")) altqueries = altqueries + advplus
+ query2;
+ if (!query3.equalsIgnoreCase("")) altqueries = altqueries + advplus
+ query3;
+ if (!query4.equalsIgnoreCase("")) altqueries = altqueries + advplus
+ query4;
+
+ if (!searchString.equalsIgnoreCase("") &&
!altqueries.equalsIgnoreCase("")) {
+ searchString = "(" + searchString + ")" + altqueries;
+ } else if (searchString.equalsIgnoreCase("") &&
!altqueries.equalsIgnoreCase("")) {
+ searchString = altqueries.substring(altqueries.indexOf("AND ") +
4);
}
//summary
logger.warn("[init parameters from request: "
+ " searchSite:" + scope
+ " ordered by:" + orderBy
- + "[------- searchstring:"+searchString+"
---------------]");
+ + "[------- searchstring:" + searchString + "
---------------]");
//store all the params for subsequent requests
engineMap.put("searchString", searchString); //main query
- engineMap.put("query1",query1); //main query
copy(used to display)
+ engineMap.put("query1", query1); //main query
copy(used to display)
engineMap.put("smode", smode); //string addition
mode
engineMap.put("concat", query_concat_mode); //mode of add
criteria
engineMap.put("orderby", orderBy); //sort order
engineMap.put("searchSite", scope); //virtual site scope
-
//previous results (maybe we can store the history of results?)
JahiaSearchResult searchResults = (JahiaSearchResult)
engineMap.get("searchResults");
// we search only if we have smtg to search
if (!"".equals(searchString)) {
JahiaSearchResultBuilder resultBuilder = new
ContainerSearchResultBuilderImpl();
- searchString=searchString.trim();
+ searchString = searchString.trim();
// unused
+ /*
if (searchString.startsWith("page:")) {
logger.debug("searching for page:"+searchString);
int pageId =
Integer.parseInt(searchString.substring(5,searchString.indexOf(" ")));
@@ -503,48 +521,84 @@
}
}
} else {
- ArrayList languageCodes = new ArrayList();
- String[] languageCodesVal =
processingContext.getParameterValues("searchlang");
- if (languageCodesVal != null) {
- if (!JahiaTools.inValues(Search_Engine.SEARCH_ALL_LANG,
languageCodesVal)) {
- for (int i = 0; i < languageCodesVal.length; i++) {
- languageCodes.add(languageCodesVal[i]);
- }
+
+ */
+ //languages
+ ArrayList languageCodes = new ArrayList();
+ String[] languageCodesVal =
processingContext.getParameterValues("searchlang");
+
+ // languages available on current site
+ Vector langs =
processingContext.getSite().getLanguageSettings(true);
+ logger.debug("sitelangages number:" + langs.size());
+ for (Iterator i = langs.iterator(); i.hasNext();) {
+ logger.debug("" + ((SiteLanguageSettings)
i.next()).getCode());
+ }
+ /*
+ // useless for now
+ if (languageCodesVal != null) {
+ logger.debug("found searchlang parameter:" +
languageCodesVal);
+ if (!JahiaTools.inValues(Search_Engine.SEARCH_ALL_LANG,
languageCodesVal)) {
+ for (int i = 0; i < languageCodesVal.length; i++) {
+ languageCodes.add(languageCodesVal[i]);
}
- } else {
-
languageCodes.add(processingContext.getLocale().toString());
}
- logger.debug("searching in what languages:" + languageCodes);
- engineMap.put("searchLanguageCodes", languageCodes);
+ }
+ */
+ //adding the lang of the request if needed
+ String currlangcode =
processingContext.getCurrentLocale().toString();
+ if (currlangcode != null &&
!languageCodes.contains(currlangcode)) languageCodes.add(currlangcode);
+
+ JahiaSite site;
+ if (scope.equalsIgnoreCase("all")) {
+ //multidomain search
+ List handlers = new ArrayList(50);
+
+
+ while (sites.hasMoreElements()) {
+ site = (JahiaSite) sites.nextElement();
+ if(isPID){
+
+ // to add all languages available in site in the case of
pid present in queries
+ Vector v = site.getLanguageSettings(true);
+ for (Iterator i = v.iterator(); i.hasNext();) {
+ Object o = i.next();
+ String langCode = ((SiteLanguageSettings)
o).getCode();
+ if (langCode != null &&
!languageCodes.contains(langCode)) languageCodes.add(langCode);
- //String theScreen = (String)engineMap.get("screen");
+ }
+ }
- if (scope.equalsIgnoreCase("all")) {
- //multidomain search
- List handlers = new ArrayList(50);
-
- while (sites.hasMoreElements()) {
- SearchHandler h =
searchService.getSearchHandler(((JahiaSite) sites.nextElement()).getID());
- //defensive code
- if(h!= null){
+ SearchHandler h =
searchService.getSearchHandler(site.getID());
+ //defensive code
+ if (h != null) {
handlers.add(h.getName());
- }
}
- String[] strings = (String[]) handlers.toArray(new
String[handlers.size()]);
- logger.debug(strings);
+ }
+
+ String[] strings = (String[]) handlers.toArray(new
String[handlers.size()]);
+ logger.debug(strings);
+
+ searchResults = searchService.search(strings, searchString,
processingContext, languageCodes, resultBuilder);
+ } else {
+ //just one domain search
+
+ // we get the languagecode from this site
+ //todo these could be set in user settings?
+ site =
siteService.getSite(Integer.parseInt(processingContext.getParameter("searchSite")));
+ // to add all languages available in this site
+ Vector v = site.getLanguageSettings(true);
+ for (Iterator i = v.iterator(); i.hasNext();) {
+ Object o = i.next();
+ String langCode = ((SiteLanguageSettings) o).getCode();
+ if (langCode != null &&
!languageCodes.contains(langCode)) languageCodes.add(langCode);
- //recreate enum
- /*
- sites = siteService.getSites();
- engineMap.put("sites", sites);
- */
- searchResults = searchService.search(strings,
searchString, processingContext, languageCodes, resultBuilder);
- } else {
- //just one domain search
- searchResults =
searchService.search(Integer.parseInt(processingContext.getParameter("searchSite")),
- searchString, processingContext, languageCodes,
resultBuilder);
}
+ searchResults =
searchService.search(Integer.parseInt(processingContext.getParameter("searchSite")),
+ searchString, processingContext, languageCodes,
resultBuilder);
}
+ logger.debug("searching in what languages:" + languageCodes);
+ engineMap.put("searchLanguageCodes", languageCodes);
+ //}
logger.debug("# of hits in raw searchresults:" +
searchResults.getHitCount() + " " + searchResults);
// subset of results
@@ -594,17 +648,17 @@
int pageID = contentContainer.getPageID();
//used to try to create an url
int siteID = contentContainer.getSiteID();
- int
type=JahiaSearchHitInterface.UNDEFINED_TYPE;
+ int type =
JahiaSearchHitInterface.UNDEFINED_TYPE;
logger.debug("found compatible?" + key);
String t = key;
- List l =
getChildFieldsOnly(contentContainer.getChilds(null, lr, null));
+ List l =
getChildFieldsOnly(contentContainer.getChilds(null, lr, null));
for (Iterator iterator1 = l.iterator();
iterator1.hasNext();) {
ContentField contentField =
(ContentField) iterator1.next();
String value =
contentField.getValue(processingContext, lr);
if (value != null &&
!value.trim().equals("") && !value.equals("<empty>")) {
t = value;
- if(value.length()>12)
t=value.substring(0,12)+" (...)";
+ if (value.length() > 12) t =
value.substring(0, 12) + " (...)";
logger.debug("tkey=" + t);
break;
}
@@ -619,8 +673,8 @@
t = value;
pageID =
contentField.getPageID();
siteID =
contentField.getSiteID();
-
type=JahiaSearchHitInterface.FIELD_TYPE;
- logger.debug("smalltext:" + t +
" pageID" + pageID+"on site"+siteID);
+ type =
JahiaSearchHitInterface.FIELD_TYPE;
+ logger.debug("smalltext:" + t +
" pageID" + pageID + "on site" + siteID);
break;
}
}
@@ -631,16 +685,24 @@
ContentField contentField =
(ContentField) iterator1.next();
if (contentField instanceof
ContentPageField) {
ContentPage contentPage =
((ContentPageField) contentField).getContentPage(lr);
- t = contentPage.getTitle(lr);
+
+ //try to obtain a title
+ t =
contentPage.getTitle(EntryLoadRequest.STAGED);
+ // check for some titl in some
languages
+ if (t == null) for (Iterator it =
languageCodes.iterator(); it.hasNext();) {
+ t = (String)
contentPage.getTitles(true).get((String) it.next());
+ if (t != null) break;
+ }
+
pageID = contentPage.getID();
siteID = contentPage.getSiteID();
-
type=JahiaSearchHitInterface.PAGE_TYPE;
- logger.debug("page:" + t + " pageID"
+ pageID+ "on site"+siteID);
+ type =
JahiaSearchHitInterface.PAGE_TYPE;
+ logger.debug("page:" + t + " pageID"
+ pageID + "on site" + siteID);
break;
}
}
- if (jahiaSearchHit.getParsedObject()!= null)
{
+ if (jahiaSearchHit.getParsedObject() !=
null) {
//logger.debug("fields of searchhit" +
jahiaSearchHit.getParsedObject().getFields());
}
@@ -656,19 +718,19 @@
hit.setPage(contentContainer.getPage().getPage(processingContext));
hit.setPageId(pageID);
//the independant url from site
- String hiturl=
Jahia.getContextPath()+Jahia.getServletPath()+"/pid/"+pageID;
- //logger.debug("URL:---->"+hiturl);
+ String hiturl = Jahia.getContextPath() +
Jahia.getServletPath() + "/pid/" + pageID;
+ logger.debug("URL:---->" + hiturl);
//hit.setURL(processingContext.composePageUrl(pageID));
hit.setURL(hiturl);
hit.setTeaser(t);
hit.setScore(score);
List metadata =
contentContainer.getMetadatas();
- logger.debug("metadata : "+metadata);
+ logger.debug("metadata : " + metadata);
Hashtable fields =
hit.getParsedObject().getFields();
-
fillSearchHitWithMetadataValues(fields,contentContainer,"creator",new
String[]{""},processingContext);
-
fillSearchHitWithMetadataValues(fields,contentContainer,"lastContributor",new
String[]{""},processingContext);
-
fillSearchHitWithMetadataValues(fields,contentContainer,"creationDate",new
String[]{""},processingContext);
-
fillSearchHitWithMetadataValues(fields,contentContainer,"lastPublishingDate",new
String[]{""},processingContext);
+ fillSearchHitWithMetadataValues(fields,
contentContainer, "creator", new String[]{""}, processingContext);
+ fillSearchHitWithMetadataValues(fields,
contentContainer, "lastContributor", new String[]{""}, processingContext);
+ fillSearchHitWithMetadataValues(fields,
contentContainer, "creationDate", new String[]{""}, processingContext);
+ fillSearchHitWithMetadataValues(fields,
contentContainer, "lastPublishingDate", new String[]{""}, processingContext);
while (current != null) {
current = current.getParent(null);
@@ -693,54 +755,23 @@
}
}
- //test for metadatas values - joe
- /*
- for (Iterator iterator = results.values().iterator();
iterator.hasNext();) {
- JahiaSearchHit hit = (JahiaSearchHit) iterator.next();
- ParsedObject po = hit.getParsedObject();
- Hashtable t = po.getFields();
- //name of metadatas
- for (Iterator it = t.keySet().iterator(); it.hasNext();) {
- String name = (String) it.next();
- String[] val = po.getValues(name);
- String values = "";
- logger.debug("size:" + val.length);
- for (int v = 0; v < val.length; v++) {
- values += val[v] + " ";
- }
- logger.debug(name + ":" + values);
- }
-
- //other loops
-
- ContentObject o =
ContentContainer.getContainer(Integer.parseInt(hit.getId()));
- ArrayList a = o.getMetadatas();
- for (Iterator ia = a.iterator(); ia.hasNext();) {
- JahiaObject jo = (JahiaObject) ia.next();
- ContentField cf = (ContentField) jo;
-
- logger.debug("LOOPING " +
cf.getDisplayName(processingContext) + ":" + cf.getValue(processingContext));
- }
-
- }//end big loop.
- */
//sorting
- orderBy(orderBy, engineMap, myResults, results,true);
+ orderBy(orderBy, engineMap, myResults, results, true);
}
}
- private List getChildFieldsOnly(List childs){
+ private List getChildFieldsOnly(List childs) {
List results = new ArrayList();
- if ( childs == null || childs.isEmpty() ){
+ if (childs == null || childs.isEmpty()) {
return results;
}
Iterator iterator = childs.iterator();
ContentObject contentObject = null;
- while (iterator.hasNext()){
- contentObject = (ContentObject)iterator.next();
- if ( contentObject instanceof ContentField ){
+ while (iterator.hasNext()) {
+ contentObject = (ContentObject) iterator.next();
+ if (contentObject instanceof ContentField) {
results.add(contentObject);
}
}
@@ -755,18 +786,18 @@
* @param context
* @throws JahiaException
*/
- private void fillSearchHitWithMetadataValues( Hashtable fields,
- ContentContainer
container,
- String metadataName,
- String[] defaultValues,
- ProcessingContext
context )
- throws JahiaException {
- if ( container.getMetadata(metadataName) != null ){
+ private void fillSearchHitWithMetadataValues(Hashtable fields,
+ ContentContainer container,
+ String metadataName,
+ String[] defaultValues,
+ ProcessingContext context)
+ throws JahiaException {
+ if (container.getMetadata(metadataName) != null) {
String value =
container.getMetadata(metadataName).getValue(context);
- if ( value == null ){
- fields.put(metadataName.toLowerCase(),defaultValues);
+ if (value == null) {
+ fields.put(metadataName.toLowerCase(), defaultValues);
} else {
- fields.put(metadataName.toLowerCase(),new String[]{value});
+ fields.put(metadataName.toLowerCase(), new String[]{value});
}
}
}
@@ -777,34 +808,34 @@
* @param myResults output results
* @param results input results
*/
- private void orderBy(String key, HashMap engineMap, JahiaSearchResult
myResults, Map results,boolean order) {
+ private void orderBy(String key, HashMap engineMap, JahiaSearchResult
myResults, Map results, boolean order) {
logger.debug("sort searching by" + key);
if (key.equalsIgnoreCase("id")) {
//by id
- }else if(key.equalsIgnoreCase("creator")) {
+ } else if (key.equalsIgnoreCase("creator")) {
//by creator
- orderBy("creator",engineMap, order);
- }else if(key.equalsIgnoreCase("lastpublishingdate")) {
+ orderBy("creator", engineMap, order);
+ } else if (key.equalsIgnoreCase("lastpublishingdate")) {
//by last pub date
- orderBy("lastpublishingdate",engineMap, order);
- }else if(key.equalsIgnoreCase("creationdate")) {
+ orderBy("lastpublishingdate", engineMap, order);
+ } else if (key.equalsIgnoreCase("creationdate")) {
//by creationdate
- orderBy("creationdate",engineMap, order);
- }else if(key.equalsIgnoreCase("lastmodificationdate")) {
+ orderBy("creationdate", engineMap, order);
+ } else if (key.equalsIgnoreCase("lastmodificationdate")) {
//by modif date
- orderBy("lastmodificationdate",engineMap, order);
- }else if(key.equalsIgnoreCase("lastcontributor")) {
+ orderBy("lastmodificationdate", engineMap, order);
+ } else if (key.equalsIgnoreCase("lastcontributor")) {
//by contributor
- orderBy("lastcontributor",engineMap, order);
- }else {
+ orderBy("lastcontributor", engineMap, order);
+ } else {
// by score (default comparable interface)
for (Iterator iterator = new
TreeSet(results.values()).iterator(); iterator.hasNext();) {
JahiaSearchHit jahiaSearchHit = (JahiaSearchHit)
iterator.next();
myResults.addHit(jahiaSearchHit);
}
- engineMap.put("searchResults", myResults);
+ engineMap.put("searchResults", myResults);
}
@@ -837,27 +868,27 @@
int sc1 = ((JahiaSearchHit) o1).getScore();
String metadata2 = ((JahiaSearchHit)
o2).getParsedObject().getValue(key);
int sc2 = ((JahiaSearchHit) o2).getScore();
- int o=1;
- if(!order) o=-1;
+ int o = 1;
+ if (!order) o = -1;
// possibly metadata could be null
- if (metadata1 == null && metadata2 != null) return (-1*o);
- if (metadata2 == null && metadata1 != null) return (1*o);
- if(metadata2 == null && metadata1 == null) return 0;
+ 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)) {
//equality case (use the score)
- if (sc1 <= sc2) return (1*o);// second object is less
than 1st
+ if (sc1 <= sc2) return (1 * o);// second object is less
than 1st
else
- return (-1*o); //opposite
+ return (-1 * o); //opposite
}
- if (metadata1.compareTo(metadata2) < 0) return (1*o);//
second object is less than 1st
+ if (metadata1.compareTo(metadata2) < 0) return (1 * o);//
second object is less than 1st
else
- return (-1*o); //opposite
+ return (-1 * o); //opposite
}
};
- if (myResults.results() != null && myResults.results().size()>1) {
+ if (myResults.results() != null && myResults.results().size() > 1) {
Collections.sort(myResults.results(), comp);
engineMap.put("searchResults", myResults);
} else {
@@ -868,6 +899,11 @@
}
/**
* $Log: ManageContentPicker.java,v $
+ * Revision 1.56 2005/12/02 17:58:30 dpillot
+ * misc bugs:fix pid bug, queries persistence bug
+ * added ability to querying number as jahia_pid
+ * added languages cross-sites searching support
+ *
* Revision 1.55 2005/12/01 11:01:42 dpillot
* avoid npe from searchservice
*
@@ -883,59 +919,5 @@
* Revision 1.51 2005/11/22 15:30:28 tdraier
* filter validated results, remove parents
*
- * Revision 1.50 2005/11/14 16:06:12 tdraier
- * added workflow job
- * fixed acl import/export, try to map on local users/groups
- *
- * Revision 1.49 2005/11/09 17:30:27 tdraier
- * add job description
- *
- * 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
- *
- * Revision 1.46 2005/11/09 12:40:51 dpillot
- * better visualization
- *
- * Revision 1.45 2005/11/04 16:45:58 dpillot
- * fix link on page url
- *
- * Revision 1.44 2005/11/03 13:22:22 knguyen
- * - synchr
- *
- * Revision 1.43 2005/10/28 10:56:17 tdraier
- * avoid content pick loops
- *
- * Revision 1.42 2005/10/20 16:55:54 dpillot
- * internationalization & bug NFE fix
- *
- * Revision 1.40 2005/10/19 14:24:53 dpillot
- * content pick final enhancements
- *
- * Revision 1.39 2005/10/19 14:02:10 tdraier
- * check rigths
- *
- * Revision 1.38 2005/10/12 10:41:22 dpillot
- * npe bugfix & avd queries enhacement
- *
- * Revision 1.37 2005/10/11 15:18:16 dpillot
- * added support for limited advanced queries
- *
- * Revision 1.36 2005/10/11 14:21:07 knguyen
- * - take care to retrieve ContentField child only ( not
ContentContainerList child ) from ContentContainer.getChilds(...)
- *
- * Revision 1.35 2005/10/10 15:34:00 tdraier
- * fixed empty teaser
- *
- * Revision 1.34 2005/10/10 08:42:28 knguyen
- * - check for npe & metadata case sensitive
- *
- * Revision 1.33 2005/10/07 12:45:28 knguyen
- * - synchro
- *
- * Revision 1.32 2005/10/06 15:50:35 tdraier
- * display metadatas in content pick
*
*/
\ No newline at end of file