[Castore-commits] ComparateurCleMap.java NONE 1.1 RechercheMultifondsSimple.java NONE 1.1 ARechercheMultifonds.java NONE 1.1 RechercheMultifondsAvancee.java NONE 1.1

Céline BENOIT cbenoit at adullact1.hosting.cri74.org
Ven 1 Déc 10:53:22 CET 2006


Update of /cvsroot/castore/castore-multifonds/src/java/fr/emn/castor/multifonds
In directory adullact1:/tmp/cvs-serv5040/src/java/fr/emn/castor/multifonds

Added Files:
	ComparateurCleMap.java RechercheMultifondsSimple.java 
	ARechercheMultifonds.java RechercheMultifondsAvancee.java 
Log Message:
Nouveau projet sur la gestion du multifond

--- NEW FILE: RechercheMultifondsAvancee.java ---
package fr.emn.castor.multifonds;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import fr.emn.castor.common.Utils;
import fr.emn.castor.recherche.metier.RechercheException;
import fr.emn.castor.webservices.SearchInterface;
import fr.emn.castor.webservices.proxy.CastoreWebServicesFactory;
import fr.emn.castor.webservices.proxy.WebServicesProperties;

public class RechercheMultifondsAvancee extends ARechercheMultifonds {

    /** le logger. */
    private static Log log = LogFactory
        .getLog(RechercheMultifondsAvancee.class);

    /**
     * Lancer la recherche avancee sur les fonds de castore présent dans la listeURLMultifonds
     * @return la liste des résultats de la recherche classée par titre des documents
     */
    public List<HashMap<String, String>> runRechercheMultifondsAvancee(
            final Collection<String> listeRechercheFondsChoisis,
            final Map<String, String> advancedSearchMap) {
        List<HashMap<String, String>> listeResultats = new ArrayList<HashMap<String, String>>();
        // Effectuer une recherche dans chaque fond de castore         
        for (String url : listeRechercheFondsChoisis) {
            WebServicesProperties props = new WebServicesProperties(url);
            // appeler l'interface du WebService de recherche
            SearchInterface searchWS = CastoreWebServicesFactory
                .createSearchWS(props);
            // Creation du proxy
            try {
                HashMap<String, String>[] resultatArray = searchWS
                    .doAdvancedSearch(advancedSearchMap);
                //fusion des résultats
                // ajoute la liste des resultats pour ce fond aux autres resultats           
                listeResultats.addAll(Utils
                    .transHashMapArrayToList(resultatArray));
            } catch (RechercheException e) {
                if (log.isErrorEnabled()) {
                    log.error("Problème de recherche multifonds simple"
                            + e.getMessage());
                }
            }
        }

        // classer les resultats obtenus
        Collections.sort(listeResultats, new ComparateurCleMap());

        return listeResultats;
    }

}

--- NEW FILE: ARechercheMultifonds.java ---
package fr.emn.castor.multifonds;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.util.LabelValueBean;

import fr.emn.castor.common.Constants;
import fr.emn.castor.documents.DocumentsConstants;

public abstract class ARechercheMultifonds {

    /** le logger. */
    private static Log log = LogFactory.getLog(ARechercheMultifonds.class);

    /**
     * Indice pour déterminer si la recherche multifonds est activée
     * @return true ou false
     */
    public static boolean isRechercheMultifondsActivee() {
        // Lecture du fichier de propriété contenant les URLs des services associés aux Castore
        Properties prop = LoadPropertiesFilesURL();
        Enumeration listeURLMultifondsCle = prop.keys();
        Enumeration listeURLMultifondsValeur = prop.elements();
        // recuperation de l'indice de recherche multifonds à true ou false
        String cle = (String) listeURLMultifondsCle.nextElement();
        String valeur = (String) listeURLMultifondsValeur.nextElement();
        if (cle.equalsIgnoreCase("RechercheMultiFonds")
                && valeur.equalsIgnoreCase("true")) {
            return true;
        } else
            return false;
    }

    /**
     * Renvoie la liste des URLS des services utilisant Castore dans les différents établissements
     * @return une collection contenant les noms des établissements + les URLs des services
     */
    public static List<LabelValueBean> getListeURLMultifonds() {
        // La liste complete des bases Castore disponibles de URL_MultiFonds.properties
        List<LabelValueBean> listeRechercheMultifonds = new ArrayList<LabelValueBean>();

        // Lecture du fichier de propriété contenant les URLs des services associés aux Castore
        Properties prop = LoadPropertiesFilesURL();
        // récupèration de la liste des URLs des établissements pour 
        // la recherche multifonds    
        Enumeration listeURLMultifondsCle = prop.keys();
        Enumeration listeURLMultifondsValeur = prop.elements();
        // recuperation de l'indice de recherche multifonds à true ou false
        String cle = (String) listeURLMultifondsCle.nextElement();
        String valeur = (String) listeURLMultifondsValeur.nextElement();
        if (cle.equalsIgnoreCase("RechercheMultiFonds")
                && valeur.equalsIgnoreCase("true")) {
            // initialisation de la listeRechercheMultifonds        
            if (listeRechercheMultifonds != null) {
                while (listeURLMultifondsCle.hasMoreElements()
                        && listeURLMultifondsValeur.hasMoreElements()) {
                    cle = (String) listeURLMultifondsCle.nextElement();
                    valeur = (String) listeURLMultifondsValeur.nextElement();
                    listeRechercheMultifonds.add(new LabelValueBean(
                        cle, valeur));
                }
            }
        }
        // trier par ordre alphabétique
        Collections.sort(listeRechercheMultifonds);
        return listeRechercheMultifonds;
    }

    /**
     * Lecture des proprietes contenues dans le fichier URL_Multifonds.properties
     * situé dans Constants.CASTOR_CONF_PATH
     * @return
     */
    private static Properties LoadPropertiesFilesURL() {
        // lecture du fichier de propriété contenant les URLs des services associés aux Castore
        Properties prop = new Properties();
        try {
            String fichierRessourceURL = Constants.CASTOR_CONF_PATH
                    + Constants.FILE_SEPARATOR
                    + DocumentsConstants.URL_MULTIFONDS + ".properties";
            InputStream in = new FileInputStream(new File(
                fichierRessourceURL));
            prop.load(in);
            in.close();
        } catch (FileNotFoundException e) {
            if (log.isErrorEnabled()) {
                log
                    .error("Fichier de propriété non trouvé"
                            + e.getMessage());
            }
        } catch (IOException e) {
            if (log.isErrorEnabled()) {
                log.error("Problème d'accès au fichier de propriété"
                        + e.getMessage());
            }
        }
        return prop;
    }

}

--- NEW FILE: RechercheMultifondsSimple.java ---
package fr.emn.castor.multifonds;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import fr.emn.castor.common.Utils;
import fr.emn.castor.recherche.metier.RechercheException;
import fr.emn.castor.webservices.SearchInterface;
import fr.emn.castor.webservices.proxy.CastoreWebServicesFactory;
import fr.emn.castor.webservices.proxy.WebServicesProperties;

public class RechercheMultifondsSimple extends ARechercheMultifonds {

    /** le logger. */
    private static Log log = LogFactory
        .getLog(RechercheMultifondsSimple.class);

    /**
     * Lancer la recherche simple sur les fonds de castore présent dans la listeURLMultifonds
     * @return la liste des résultats de la recherche classée par titre des documents
     */
    public List<HashMap<String, String>> runRechercheMultifondsSimple(
            final Collection<String> listeRechercheFondsChoisis,
            final String queryText, final boolean fullText) {
        List<HashMap<String, String>> listeResultats = new ArrayList<HashMap<String, String>>();
        // Effectuer une recherche dans chaque fond de castore         
        for (String url : listeRechercheFondsChoisis) {
            WebServicesProperties props = new WebServicesProperties(url);
            // appeler l'interface du WebService de recherche
            SearchInterface searchWS = CastoreWebServicesFactory
                .createSearchWS(props);
            // Creation du proxy
            try {
                HashMap<String, String>[] resultatArray = searchWS
                    .doSimpleSearch(queryText, fullText);
                // fusion des résultats
                // ajoute la liste des resultats pour ce fond aux autres resultats               
                listeResultats.addAll(Utils
                    .transHashMapArrayToList(resultatArray));
            } catch (RechercheException e) {
                if (log.isErrorEnabled()) {
                    log.error("Problème de recherche multifonds simple"
                            + e.getMessage());
                }
            }
        }

        // classer les resultats obtenus
        Collections.sort(listeResultats, new ComparateurCleMap());

        return listeResultats;
    }

}

--- NEW FILE: ComparateurCleMap.java ---
package fr.emn.castor.multifonds;

import java.util.Comparator;
import java.util.Map;

/**
 * Comparaison des titres contenus dans les map de resultats
 * Pour trier les résultats
 *
 * @author $Author: cbenoit $
 * @version $Revision: 1.1 $
 *
 */
public class ComparateurCleMap implements Comparator<Map<String, String>> {

    /**
     * Comparateur de titre des map 
     * Pour trier par ordre alphabétique la List<hashMap<String, String>> par titres contenus dans les Map
     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
     */
    public int compare(Map<String, String> o1, Map<String, String> o2) {
        String title1 = o1.get("title");
        String title2 = o2.get("title");
        return (title1.compareTo(title2));
    }

}




Plus d'informations sur la liste de diffusion Castore-commits