JaliosXperience
Link

JCMS 5.7 : Développement de recherches étendues avec l'API des QueryFilter > Query Filter : exclure les images d'un résultat de recherche

Stéphane Guellec

Post November 13, 2008 12:35 PM

Query Filter : exclure les images d'un résultat de recherche

Bonjour,
Je suis en train de faire un Query Filter afin de supprimer tous les documents de type "image" des résultats de recherche/requete.
Voici donc mon code :

public QueryResultSet filterResultSet(QueryHandler qh, QueryResultSet set, Map context) {
    for(Iterator itQueryResultSet = set.iterator() ; itQueryResultSet.hasNext();){
    	logger.info("A");
    	Publication itPub = (Publication)itQueryResultSet.next();
    	logger.info("B");
    	if(itPub.getClass().getName().indexOf("FileDocument") != -1){
    		FileDocument doc = (FileDocument)itPub;
    		if(doc.getContentType().indexOf("image") != -1){
    			set.remove(itPub);
    		}
    	}
    }
    return super.filterResultSet(qh, set, context);
}

Le problème c'est que j'ai une sale exception à la fin de la 1ère itération. On ne passe qu'une fois par le marqueur "B". Mon premier contenu est bien une image. Comme si le fait d'avoir fait un "remove(itPub)" empêchait de réutiliser cette variable itPub.
Si je supprime le "remove" l'itération se poursuit bien.
Merci pour le coup de main.

Stéphane Guellec

Post November 13, 2008 4:08 PM

Re: Query Filter : exclure les images d'un résultat de recherche

En attendant une réponse sur l'utilisation de la méthode "remove" j'ai procédé à l'inverse :
je déclare un nouvel HashSet que je rempli si les critères de recherche que j'ai fixé sont valides. Je le retourne ensuite via la méthode "filterResultSet".
Par contre je n'arrive pas à restreindre l'utilisation de ce QueryFilter uniquement dans le Front-Office. J'essaye de récupérer le paramètre "inFO" mais ça ne fonctionne pas. Je n'arrive pas non plus à utiliser la méthode "isFrontOfficeSearch" de la classe QueryFilter.
Si vous aviez des exemples ça serait pas mal. Merci !

Jean-Emmanuel Roux

Jean-Emmanuel Roux

Post November 17, 2008 2:10 PM

Re: Query Filter : exclure les images d'un résultat de recherche

Bonjour,

Voici une version corrigée de votre code.

public QueryResultSet filterResultSet(QueryHandler qh, QueryResultSet set, Map context) {

	
	if ( !isFrontOfficeSearch(qh)) {
		return set;
	}
		
	
	for(Iterator itQueryResultSet = set.iterator() ; itQueryResultSet.hasNext();){
		   
	    	Publication itPub = (Publication)itQueryResultSet.next();
		    
	    	if(itPub instanceof FileDocument){
	    		FileDocument doc = (FileDocument)itPub;
	    		if(doc.isWebImage()){
	    			itQueryResultSet.remove();
	    		}
	    	}
	}     
		
	return set;
}

Je vous rappelle que le remove() doit être appliquée sur l' iterator itQueryResultSet et non sur le set d'entrée.

Par ailleurs :

  • Le mot clef java instanceof permet de connaître la classe d'appartenance d'une instance.
  • la methode isWebImage() de JCMS permet de savoir si la publication est de type image.
Login   Home   fr en
JALIOS SA - SIREN 440 126 035