es.pode.catalogadorWeb.presentacion.tesauros.TesaurosControllerImpl.java Source code

Java tutorial

Introduction

Here is the source code for es.pode.catalogadorWeb.presentacion.tesauros.TesaurosControllerImpl.java

Source

/* Agrega es una federacin de repositorios de objetos digitales educativos formada por todas las Comunidades Autnomas propiedad de Red.es. Este cdigo ha sido desarrollado por la Entidad Pblica Empresarial red.es adscrita al Ministerio de Industria,Turismo y Comercio a travs de la Secretara de Estado de Telecomunicaciones y para la Sociedad de la Informacin, dentro del Programa Internet en el Aula, que se encuadra dentro de las actuaciones previstas en el Plan Avanza (Plan 2006-2010 para el desarrollo de la Sociedad de la Informacin y de Convergencia con Europa y entre Comunidades Autnomas y Ciudades Autnomas) y ha sido cofinanciado con fondos FEDER del Programa Operativo FEDER 2000-2006 Sociedad de la Informacin
    
This program is free software: you can redistribute it and/or modify it under the terms of the European Union Public Licence (EUPL v.1.0).  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the European Union Public Licence (EUPL v.1.0). You should have received a copy of the EUPL licence along with this program.  If not, see http://ec.europa.eu/idabc/en/document/7330.
*/
// license-header java merge-point
package es.pode.catalogadorWeb.presentacion.tesauros;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;

import org.apache.commons.validator.ValidatorException;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionMapping;

import es.pode.catalogacion.negocio.servicios.AvClassificationVO;
import es.pode.catalogacion.negocio.servicios.EntryVO;
import es.pode.catalogacion.negocio.servicios.IdVO;
import es.pode.catalogacion.negocio.servicios.LangStringVO;
import es.pode.catalogacion.negocio.servicios.RutaTaxonomicaVO;
import es.pode.catalogadorWeb.presentacion.CatalogadorAvSession;
import es.pode.fuentestaxonomicas.negocio.servicio.JerarquiaVO;
import es.pode.fuentestaxonomicas.negocio.servicio.TaxonVO;
import es.pode.soporte.constantes.ConstantesAgrega;
import es.pode.soporte.i18n.I18n;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @see es.pode.catalogadorWeb.presentacion.tesauros.TesaurosController
 */
public class TesaurosControllerImpl extends TesaurosController {
    protected static Logger logger = Logger.getLogger(TesaurosControllerImpl.class);

    /**
    * Carga los tesauros con el nombre seleccionado en el combo de fuentes taxonmicas del
    * catalogador avanzado y nos devuelve los trminos de primer nivel, es decir, los que no tienen padre.
    * Estos trminos los metemos en taxonesvo, y en rutaPadrevo metemos un taxn vaco
    * @throws Exception
    */
    public final void cargaTesauros(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.tesauros.CargaTesaurosForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        try {
            InputStream iss = null;

            String idioma = ((Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE))
                    .getLanguage();
            String ficheroProperties = "/catalogadorAvanzado.properties";

            iss = this.getClass().getResourceAsStream(ficheroProperties);
            Properties fprop = new Properties();
            fprop.load(iss);

            String nomTesauro = "";
            String vocabName = "";
            //recogemos idioma y nombreTesauro de los combos
            CatalogadorAvSession osa = this.getCatalogadorAvSession(request);
            if ((osa != null) && (osa.getMDSesion() != null)) {
                nomTesauro = request.getParameter("nomTesauro");
                idioma = request.getParameter("idioma");//valor que se ha recogido del combo del formulario
                vocabName = request.getParameter("vocabName");
            }

            TaxonVO[] taxVO = this.getSrvTesaurosServices().obtenerPrimerNivelTesauro(nomTesauro, idioma);//Se carga el primer nivel del tesauro

            form.setIdioma(idioma);

            form.setNomTesauro(nomTesauro);
            form.setVocabName(vocabName);
            form.setTaxonesvoAsArray(taxVO);

            CatalogadorAvSession os = this.getCatalogadorAvSession(request);

            os.setRutasJerarquicas(null);

            TaxonVO[] taxVORutaPadre = new TaxonVO[0];//En la cabecera slo pondr Inicio
            form.setRutaPadrevoAsArray(taxVORutaPadre);

        } catch (org.acegisecurity.AccessDeniedException ad) {
            logger.error("Error de Acceso " + ad);
            throw new java.lang.Exception("tesauros", ad);

        } catch (Exception e) {
            logger.error("Error en catalogadorWeb, tesauros, metodo cargaTesauros " + e);
            throw new java.lang.Exception("tesauros", e);
        }
    }

    /**
    * Obtiene los terminos relacionados del identificador que le pasamos mediante el servicio del tesauro.
    * Si las rutas jerrquicas del objeto de sesion son nulas, o si es varias rutas disponible obtenemos los trminos relacionados,
    * con el identificador que nos viene de la request, que es el del trmino.Los taxones relacionados los almacenamos en taxonesvo.
    * Calculamos las jerarquas de ese trmino. Si tiene mas de una jerarqua, los guardamos en sesin y nos generamos una ruta padre con variasRutasDisponibles
    * y nuestro trmino y lo guardamos en el formulario. Si slo tiene una jerarqua lo guardamos en el formulario y ponemos a null en el objeto de sesin
    * las rutasJerarquicas.
    * Si en el objeto de sesin las rutas no son nulas recogemos la jerarquia del objeto de sesin que esta en la posicin id ( que va a ser el que le hemos metido nosotros, no es
    * el identificador de ningn taxn, sino el del taxn que generamos concatenando todos los textos de los taxones. Recogemos los taxones y los metemos en el formulario, en rutaPadrevo.
    * Recogemos los trminos relacionados del ltimo taxn de la concatenacin y los metemos en taxonesvo. Cambiamos el identificador de la posicin
    * por el del taxn en el formulario.
    * Ponemos las rutasJerarquicas a null
    * @throws Exception
    */
    public final void consultaTesId(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.tesauros.ConsultaTesIdForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String idioma = request.getParameter("idioma");
        if (idioma == null || idioma.equals("")) {
            idioma = ((Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE)).getLanguage();
        }

        InputStream iss = null;
        boolean bandera = false;

        String ficheroProperties = "/catalogadorAvanzado.properties";

        iss = this.getClass().getResourceAsStream(ficheroProperties);
        Properties fprop = new Properties();
        fprop.load(iss);

        String nomTesauro = request.getParameter("nomTesauro");
        String id = request.getParameter("id");
        String vocabName = request.getParameter("vocabName");
        form.setIdioma(idioma);
        form.setNomTesauro(nomTesauro);
        form.setVocabName(vocabName);
        String segundoId = "";
        Object valor = request.getSession().getAttribute("form");

        if (valor instanceof TesaurosFormImpl) {
            form.setRutaPadrevo(((TesaurosFormImpl) valor).getRutaPadrevo());
        } else if (valor instanceof TesaurosFormConsultaNodoFormImpl) {
            form.setRutaPadrevo(((TesaurosFormConsultaNodoFormImpl) valor).getRutaPadrevo());
        } else if (valor instanceof TesaurosFormBuscarFormImpl) {
            form.setRutaPadrevo(((TesaurosFormBuscarFormImpl) valor).getRutaPadrevo());
        } else if (valor instanceof TesaurosFormConsultaPadreFormImpl) {
            form.setRutaPadrevo(((TesaurosFormConsultaPadreFormImpl) valor).getRutaPadrevo());
        }

        if ((form.getRutaPadrevo() != null)) {//Si rutapadrevo es distinto a null, recogemos el identificador del texon de la primera posicion, para saber 
            if (form.getRutaPadrevoAsArray().length > 0) {//si es varias rutas disponibles
                JerarquiaVO jerarquiaForm = (JerarquiaVO) (form.getRutaPadrevoAsArray()[0]);
                if (jerarquiaForm.getJerarquia().length > 1) {
                    TaxonVO segundoTax = (TaxonVO) jerarquiaForm.getJerarquia()[0];
                    segundoId = segundoTax.getId();
                }
            }
        }

        String iden = "0.0";
        try {
            //String idiomaLocale=((Locale)request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE)).getLanguage();
            ResourceBundle datosResources = I18n.getInstance().getResource("application-resources",
                    (Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE));

            CatalogadorAvSession os = this.getCatalogadorAvSession(request);
            if ((os.getRutasJerarquicas() == null) || (iden.equals(segundoId))) {//Si en el objeto de sesion las rutas jerarquicas son nulas
                TaxonVO[] taxonesRelacionados = this.getSrvTesaurosServices().obtenerTerminosRelacionadosPorId(id,
                        nomTesauro, idioma);
                Collection taxonesRelacion = new ArrayList();//Recogemos los taxones relacionados en una coleccion
                for (int j = 0; j < taxonesRelacionados.length; j++) {
                    taxonesRelacion.add(taxonesRelacionados[j]);
                }
                form.setTaxonesvo(taxonesRelacion);//insertamos los taxones en el formulario
                JerarquiaVO[] jerarquia = this.getSrvTesaurosServices().obtenerJerarquia(id, nomTesauro, idioma);//Obtenemos las jerarquias
                if (jerarquia.length > 1) {//Si hay ms de una jerarquia
                    Collection jerarquiaC = new ArrayList();//Guardamos el en objeto de sesion todas las rutas disponibles
                    for (int i = 0; i < jerarquia.length; i++) {
                        jerarquiaC.add(jerarquia[i]);
                    }
                    os.setRutasJerarquicas(jerarquiaC);

                    Collection rutaPadre = new ArrayList();
                    //            El taxon para representar que hay mas de una ruta, con el texto varias rutas disponibles
                    TaxonVO rutaAlternativa = new TaxonVO();
                    rutaAlternativa.setEsHoja(new Boolean("false"));
                    rutaAlternativa.setId(iden);//Le metemos 0.0 como identificador
                    String valorTax = datosResources.getString("variasRutasDisponibles").toString();
                    rutaAlternativa.setValorTax(valorTax);
                    //Vamos a recoger el taxon con identificador id
                    JerarquiaVO fJerarquia = jerarquia[0];
                    TaxonVO[] lTaxones = fJerarquia.getJerarquia();
                    TaxonVO ultimoTaxon = lTaxones[lTaxones.length - 1];
                    List lTax = new ArrayList();
                    lTax.add(rutaAlternativa);
                    lTax.add(ultimoTaxon);
                    //El array de TaxonesVO que contiene el varias rutas disponibles y el taxon del identificador id
                    TaxonVO[] tax = (TaxonVO[]) lTax.toArray(new TaxonVO[lTax.size()]);
                    //Aadimos el array de taxones a una JerarquiaVO
                    JerarquiaVO nuevaJerar = new JerarquiaVO();
                    nuevaJerar.setJerarquia(tax);
                    //Aadimos la JerarquiaVO a una coleccion ( a la rutaPadre)
                    rutaPadre.add(nuevaJerar);
                    form.setRutaPadrevo(rutaPadre);//Insertamos la rutaPadre en el formulario

                } else {
                    Collection rutaPadre = new ArrayList();
                    rutaPadre.add(jerarquia[0]);//a la colecion rutaPadre le insertamos la nica jerarquia que tenemos y lo metemos en el formulario
                    os.setRutasJerarquicas(null);
                    form.setRutaPadrevo(rutaPadre);
                }
                form.setId(id);
            } else {//Si en el objeto de sesion las rutas jerarquicas no son nulas
                Collection rutaPadre = new ArrayList();
                Integer entero = null;
                entero = new Integer(id);
                //Accedemos y recogemos el array de taxones de la posicion id; que sera la rutaPadre
                Collection coleccionRutas = os.getRutasJerarquicas();
                JerarquiaVO jerarquia = (JerarquiaVO) coleccionRutas.toArray()[entero.intValue()];
                TaxonVO[] taxones = jerarquia.getJerarquia();
                JerarquiaVO jerar = new JerarquiaVO();
                jerar.setJerarquia(taxones);
                rutaPadre.add(jerar);
                //Los terminos relacionados del ultimo taxon del array
                TaxonVO ultimoTaxon = taxones[taxones.length - 1];
                TaxonVO[] terminosRelacionados = this.getSrvTesaurosServices()
                        .obtenerTerminosRelacionadosPorId(ultimoTaxon.getId(), nomTesauro, idioma);
                Collection taxonesRelacion = new ArrayList();//Recogemos los taxones relacionados en una coleccion
                for (int j = 0; j < terminosRelacionados.length; j++) {
                    taxonesRelacion.add(terminosRelacionados[j]);
                }
                //Insertamos en el formulario los taxones relacionados y la rutaPadre
                form.setTaxonesvo(taxonesRelacion);
                form.setRutaPadrevo(rutaPadre);
                form.setId(ultimoTaxon.getId());//Cambiamos el identificador de la posicion por la del ultimo taxon
                os.setRutasJerarquicas(null);
            }
        } catch (org.acegisecurity.AccessDeniedException ad) {
            logger.error("Error de Acceso " + ad);
            throw new java.lang.Exception("tesauros", ad);

        } catch (Exception e) {
            logger.error("Error en catalogadorWeb, tesauros, metodo consultaTesId " + e);
            throw new java.lang.Exception("tesauros", e);
        }
    }

    /**
    * Consulta los trminos relacionados
    * 
    * Le viene el identificador por parametro. Si el identificador es distinto a "0.0", quiere decir que no es varias rutas disponibles.
    * Calculamos los trminos relacionados de ese identificador, y los metemos en taxonesvo del formulario. Calculamos las jerarquas, si tiene
    * ms de una jerarqua los guardamos en el objeto de sesin y nos generamos la jerarqua auxiliar, que tenga varias rutas disponibles y nuestro taxn
    * y lo guardamos en la rutaPadrevo. Si slo tiene una ruta lo metemos en la rutaPadrevo y ponemos a null rutasJerarquicas del objeto de sesin.
    * Si el identificador es "0.0", quiere decir que hemos pulsado en varias rutas disponibles. Recogemos las rutas jerrquicas del objeto de sesin.
    * Nos generamos nuevos taxones, que tendrn como identificador la "posicin" y el texto ser la concatenacin de todos los textos de los taxones de
    * cada ruta jerrquica.
    * En la ruta padre insertaremos un taxn vaco, para que en la cabecera no aparezca nada, y insertaremos los taxones relacionados
    * en taxonesvo.
    * 
    * @throws Exception
    */
    public final void consultaPadreTaxon(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.tesauros.ConsultaPadreTaxonForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String idioma = request.getParameter("idioma");
        if (idioma == null || idioma.equals(""))
            idioma = this.getCatalogadorAvSession(request).getIdioma();
        String nomTesauro = request.getParameter("nomTesauro");
        String id = request.getParameter("id");
        String vocabName = request.getParameter("vocabName");
        CatalogadorAvSession os = this.getCatalogadorAvSession(request);

        String ficheroProperties = "/catalogadorAvanzado.properties";
        InputStream iss = null;
        iss = this.getClass().getResourceAsStream(ficheroProperties);
        Properties fprop = new Properties();
        fprop.load(iss);
        try {
            if (!id.equals("0.0")) {//Cuando viene con un identificador que no le hemos insertado nosotros
                TaxonVO[] taxonesRelacionados = this.getSrvTesaurosServices().obtenerTerminosRelacionadosPorId(id,
                        nomTesauro, idioma);
                Collection taxonesRelacion = new ArrayList();//Recogemos los taxones relacionados en una coleccion
                for (int j = 0; j < taxonesRelacionados.length; j++) {
                    taxonesRelacion.add(taxonesRelacionados[j]);
                }
                form.setTaxonesvo(taxonesRelacion);//insertamos los taxones en el formulario
                JerarquiaVO[] jerarquia = this.getSrvTesaurosServices().obtenerJerarquia(id, nomTesauro, idioma);//Obtenemos las jerarquias
                if (jerarquia.length > 1) {//Si hay ms de una jerarquia
                    Collection jerarquiaC = new ArrayList();//Guardamos el en objeto de sesion todas las rutas disponibles
                    for (int i = 0; i < jerarquia.length; i++) {
                        jerarquiaC.add(jerarquia[i]);
                    }
                    os.setRutasJerarquicas(jerarquiaC);

                    Collection rutaPadre = new ArrayList();
                    //            El taxon para representar que hay mas de una ruta, con el texto varias rutas disponibles
                    TaxonVO rutaAlternativa = new TaxonVO();
                    rutaAlternativa.setEsHoja(new Boolean("false"));
                    rutaAlternativa.setId("0.0");
                    String valorTax = fprop.getProperty("variasRutasDisponibles").toString();
                    rutaAlternativa.setValorTax(valorTax);
                    //Vamos a recoger el taxon con identificador id
                    JerarquiaVO fJerarquia = jerarquia[0];
                    TaxonVO[] lTaxones = fJerarquia.getJerarquia();
                    TaxonVO ultimoTaxon = lTaxones[lTaxones.length - 1];
                    List lTax = new ArrayList();
                    lTax.add(rutaAlternativa);
                    lTax.add(ultimoTaxon);
                    //El array de TaxonesVO que contiene el varias rutas disponibles y el taxon del identificador id
                    TaxonVO[] tax = (TaxonVO[]) lTax.toArray(new TaxonVO[lTax.size()]);
                    //Aadimos el array de taxones a una JerarquiaVO
                    JerarquiaVO nuevaJerar = new JerarquiaVO();
                    nuevaJerar.setJerarquia(tax);
                    //Aadimos la JerarquiaVO a una coleccion ( a la rutaPadre)
                    rutaPadre.add(nuevaJerar);
                    form.setRutaPadrevo(rutaPadre);//Insertamos la rutaPadre en el formulario

                } else {
                    Collection rutaPadre = new ArrayList();
                    rutaPadre.add(jerarquia[0]);//a la colecion rutaPadre le insertamos la nica jerarquia que tenemos y lo metemos en el formulario
                    os.setRutasJerarquicas(null);
                    form.setRutaPadrevo(rutaPadre);
                }

            } else {//Si viene con varias rutas disponibles, por eso lleva el identificador 0.0
                Collection coleccionRutas = os.getRutasJerarquicas();
                Collection taxones = new ArrayList();
                for (int i = 0; i < coleccionRutas.size(); i++) {//Recorremos la coleccion de jerarquias en sesion
                    TaxonVO nuevoTaxon = new TaxonVO();//Generamos un nuevo taxon
                    nuevoTaxon.setEsHoja(new Boolean("false"));

                    Integer entero = null;
                    entero = new Integer(i);
                    nuevoTaxon.setId(entero.toString());//Llevara por identificador la i(de la posicion en las rutas)

                    JerarquiaVO jerarquias = (JerarquiaVO) coleccionRutas.toArray()[i];
                    TaxonVO[] jerarTax = jerarquias.getJerarquia();

                    String texto = "";

                    for (int j = 0; j < jerarTax.length; j++) {
                        texto = texto + jerarTax[j].getValorTax().toString();
                        if (j < jerarTax.length - 1)
                            texto = texto + " -> ";
                    } //El texto sera la concatenacion de todos los textos del array de taxones
                    nuevoTaxon.setValorTax(texto);
                    taxones.add(nuevoTaxon);//Array de taxones

                }

                TaxonVO[] taxVORutaPadre = new TaxonVO[0];
                JerarquiaVO jerarquia = new JerarquiaVO();
                jerarquia.setJerarquia(taxVORutaPadre);//En la cabecera slo aparecera Inicio
                form.setRutaPadrevoAsArray(taxVORutaPadre);
                form.setTaxonesvo(taxones);//insertamos los taxones relacionados en el formulario

            }

        } catch (org.acegisecurity.AccessDeniedException ad) {
            logger.error("Error de Acceso " + ad);
            throw new java.lang.Exception("tesauros", ad);

        } catch (Exception e) {
            logger.error("Error en catalogadorWeb, tesauros, metodo consultaPadreTaxon " + e);
            throw new java.lang.Exception("tesauros", e);
        }
    }

    /**
    * Asocia el tesauro cuando slo tenemos una ruta.
    * Recogemos la ruta padre del formulario y insertamos los taxones uno a uno en los taxones de tipo es.pode.catalogacion.negocio.servicios.TaxonVO.
    * Los cargamos en el calsificacionAux  (teniendo en cuenta, que si traa alguna ruta de antes, se guardan los que haba y se le aade el nuevo).
    * @throws Exception
    */
    public final void asociarTesauro(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.tesauros.AsociarTesauroForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        CatalogadorAvSession os = this.getCatalogadorAvSession(request);
        //      Collection rutaPadre=new ArrayList();
        String idioma = form.getIdioma();// this.getCatalogadorBSession(request).getIdioma();
        String nomTesauro = form.getNomTesauro();// request.getParameter("nomTaxonomia");

        Object valor = request.getSession().getAttribute("form");

        if (valor instanceof TesaurosFormConsultaNodoFormImpl) {//??????????????
            form.setId(((TesaurosFormConsultaNodoFormImpl) valor).getId());
            form.setRutaPadrevo(((TesaurosFormConsultaNodoFormImpl) valor).getRutaPadrevo());
        } else if (valor instanceof TesaurosFormConsultaPadreFormImpl) {
            form.setId(((TesaurosFormConsultaPadreFormImpl) valor).getId());
            form.setRutaPadrevo(((TesaurosFormConsultaPadreFormImpl) valor).getRutaPadrevo());
        } else if (valor instanceof TesaurosFormBuscarFormImpl) {
            form.setId(((TesaurosFormBuscarFormImpl) valor).getId());
            form.setRutaPadrevo(((TesaurosFormBuscarFormImpl) valor).getRutaPadrevo());
        }
        Object[] jerarquias = form.getRutaPadrevoAsArray();

        try {

            AvClassificationVO clasificacionAux = os.getClasificacionAux();
            RutaTaxonomicaVO[] rutasTaxonomicasClas = null;
            RutaTaxonomicaVO rutaTaxonomica = new RutaTaxonomicaVO();
            ArrayList lRutas = new ArrayList();
            if (clasificacionAux != null) {
                rutasTaxonomicasClas = clasificacionAux.getRutasTaxonomicas();//Recogemos las rutas padre que habia de antes y le aadimos el nuevo
                if (rutasTaxonomicasClas != null)
                    for (int i = 0; i < rutasTaxonomicasClas.length; i++) {
                        lRutas.add(rutasTaxonomicasClas[i]);
                    }
            } else {
                clasificacionAux = new AvClassificationVO();
            }
            ArrayList listaT = new ArrayList();
            JerarquiaVO jerarquia = ((JerarquiaVO) jerarquias[0]);
            TaxonVO[] listTax = jerarquia.getJerarquia();
            for (int j = 0; j < listTax.length; j++) {//Generamos el array de taxones
                String ident = listTax[j].getId();
                String text = listTax[j].getValorTax();
                es.pode.catalogacion.negocio.servicios.TaxonVO taxonAux = new es.pode.catalogacion.negocio.servicios.TaxonVO();
                EntryVO entry = new EntryVO();
                ArrayList textos = new ArrayList();
                LangStringVO texto = new LangStringVO();
                texto.setTexto(text);
                texto.setIdioma(idioma);
                textos.add(texto);
                LangStringVO[] lang = (LangStringVO[]) textos.toArray(new LangStringVO[textos.size()]);
                entry.setTextos(lang);
                taxonAux.setEntry(entry);
                IdVO ide = new IdVO();
                ide.setTexto(ident);
                taxonAux.setId(ide);
                listaT.add(taxonAux);
            }
            es.pode.catalogacion.negocio.servicios.TaxonVO[] lTaxones = (es.pode.catalogacion.negocio.servicios.TaxonVO[]) listaT
                    .toArray(new es.pode.catalogacion.negocio.servicios.TaxonVO[listaT.size()]);

            //            rutaTaxonomica.setTaxones(lTaxones);
            //            FuenteVO fuente=new FuenteVO();
            //            LangStringVO texto=new LangStringVO();
            //            ArrayList textos=new ArrayList();
            //            texto.setIdioma(idioma);//El idioma que nos viene como parametro
            //            texto.setTexto(nomTesauro);//El nombre del tesauro que nos viene como parametro
            //            textos.add(texto);
            //            LangStringVO[] lang=(LangStringVO[])textos.toArray(new LangStringVO[textos.size()]);
            //            fuente.setTextos(lang);
            //            rutaTaxonomica.setFuente(fuente);//Generada la nueva ruta taxonomica
            //            lRutas.add(rutaTaxonomica);//Aadir a las rutas existentes
            //            RutaTaxonomicaVO[] rutas=(RutaTaxonomicaVO[])lRutas.toArray(new RutaTaxonomicaVO[lRutas.size()]);
            //            clasificacionAux.setRutasTaxonomicas(rutas);//Aadimos las rutas a la clasificacion auxiliar
            //            os.setClasificacionAux(clasificacionAux);//Aadimos a la sesion la clasificacion
            //            os.setRutasJerarquicas(null);

            AvClassificationVO clasAux = os.getClasificacionAux();
            RutaTaxonomicaVO rt = clasAux.getRutasTaxonomicas()[clasAux.getRutasTaxonomicas().length - 1];
            if (rt != null) {
                rt.setTaxones(lTaxones);
                os.setRutasJerarquicas(null);
            }

            if (logger.isDebugEnabled()) {

                logger.debug("Actualizados la sesion y el tesauro");
            }

        } catch (org.acegisecurity.AccessDeniedException ad) {
            logger.error("Error de Acceso " + ad);
            throw new java.lang.Exception("tesauros", ad);

        } catch (Exception e) {
            logger.error("Error en catalogadorWeb, tesauros, metodo asociarTesauro " + e);
            throw new java.lang.Exception("tesauros", e);
        }
    }

    /**
    * Generamos la lista de las jerarquas.
    * Si en el formulario las jerarquas son distintas a null comprobamos que el primer taxn no sea de varias rutas disponibles, si es as
    * metemos esa jerarquia en el formulario.
    * Si al contrario, el segundo taxn es varias rutas disponibles, obtenemos las jerarquias del identificador y los guardamos en el formulario.
    * Si el formulario no tiene rutas, las obtenemos con el identificador y los guardamos en el formulario.
    * @throws Exception
    */
    public final void jerarquiasLista(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.tesauros.JerarquiasListaForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        try {//Recogemos el array de jerarquiaVO y lo insertamos en enu coleccion
            Collection cJerarquia = new ArrayList();
            Object valor = request.getSession().getAttribute("form");

            if (valor instanceof TesaurosFormConsultaNodoFormImpl) {
                form.setId(((TesaurosFormConsultaNodoFormImpl) valor).getId());
                form.setJerarquias(((TesaurosFormConsultaNodoFormImpl) valor).getRutaPadrevo());
            } else if (valor instanceof TesaurosFormAsociarTesauroFormImpl) {
                form.setId(((TesaurosFormAsociarTesauroFormImpl) valor).getId());
            } else if (valor instanceof TesaurosFormConsultaPadreFormImpl) {
                form.setId(((TesaurosFormConsultaPadreFormImpl) valor).getId());
            } else if (valor instanceof TesaurosFormBuscarFormImpl) {
                form.setId(((TesaurosFormBuscarFormImpl) valor).getId());
                form.setJerarquias(((TesaurosFormBuscarFormImpl) valor).getRutaPadrevo());
            }

            String idioma = form.getIdioma();// this.getCatalogadorBSession(request).getIdioma();
            String nomTesauro = form.getNomTesauro();

            String id = form.getId();// request.getParameter("nomTaxonomia");
            if (form.getJerarquias() != null) {
                Object[] listJerar = form.getJerarquiasAsArray();
                JerarquiaVO listTax = (JerarquiaVO) listJerar[0];
                TaxonVO[] lisTaxones = listTax.getJerarquia();
                if (!(lisTaxones[0].getId().equals("0.0"))) {
                    cJerarquia.add(listTax);
                } else {
                    JerarquiaVO[] jerarquia = this.getSrvTesaurosServices().obtenerJerarquia(id, nomTesauro,
                            idioma);

                    if ((jerarquia != null) && (jerarquia.length > 0)) {
                        for (int i = 0; i < jerarquia.length; i++) {
                            TaxonVO[] lTaxon = jerarquia[i].getJerarquia();
                            cJerarquia.add(lTaxon);//En cada posicion de la coleccion meto el array de taxones
                        }
                    }
                }
            } else {

                JerarquiaVO[] jerarquia = this.getSrvTesaurosServices().obtenerJerarquia(id, nomTesauro, idioma);

                if ((jerarquia != null) && (jerarquia.length > 0)) {
                    for (int i = 0; i < jerarquia.length; i++) {
                        TaxonVO[] lTaxon = jerarquia[i].getJerarquia();
                        cJerarquia.add(lTaxon);//En cada posicion de la coleccion meto el array de taxones
                    }
                }
            }
            form.setJerarquias(cJerarquia);//Lo metemos en el formulario

        } catch (org.acegisecurity.AccessDeniedException ad) {
            logger.error("Error de Acceso " + ad);
            throw new java.lang.Exception("tesauros", ad);

        } catch (Exception e) {
            logger.error("Error en catalogadorWeb, tesauros, metodo jerarquiasLista " + e);
            throw new java.lang.Exception("tesauros", e);
        }

    }

    /**
    * Machacamos lo que haba en las rutas jerrquicas del objeto de sesin, y le insertamos lo que hay en el formulario.
    * Recogemos las rutas jerrquicas del formulario y los metemos en el objeto de sesin.
    * Recorremos todas las jerarquas y los metemos en taxones auxiliares que tengan como identificador la posicin y como texto la concatenacin
    * de los textos de los taxones de cada jerarqua.
    * Ponemos a null la rutaPadrevo del formulario y metemos en taxonesvo los taxones auxiliares que acabamos de generar.
    * @throws Exception
    */
    public final void cambiarJerarquiaSesion(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.tesauros.CambiarJerarquiaSesionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {//Machacamos lo que habia en las rutas jerarquicas del objeto de sesion y le insertamos lo que hay en el formulario
            CatalogadorAvSession os = this.getCatalogadorAvSession(request);
            Collection jerarquias = form.getJerarquias();
            os.setRutasJerarquicas(jerarquias);

            Collection Aux = new ArrayList();
            Object[] jeraquiaArray = form.getJerarquiasAsArray();
            for (int i = 0; i < jeraquiaArray.length; i++) {

                TaxonVO nuevoTaxon = new TaxonVO();//Generamos un nuevo taxon que tenga como identificador la i y como texto la concatenacion de los textos del array de taxones
                nuevoTaxon.setEsHoja(new Boolean("false"));
                Integer entero = null;
                entero = new Integer(i);

                nuevoTaxon.setId(entero.toString());

                TaxonVO[] jerarTax = (TaxonVO[]) (jeraquiaArray[i]);
                String valorTax = "";
                for (int j = 0; j < jerarTax.length; j++) {
                    valorTax = valorTax + jerarTax[j].getValorTax().toString();
                    if (j < jerarTax.length - 1)
                        valorTax = valorTax + " -> ";
                }
                nuevoTaxon.setValorTax(valorTax);
                Aux.add(nuevoTaxon);
            }
            form.setRutaPadrevo(null);
            form.setTaxonesvo(Aux);

        } catch (org.acegisecurity.AccessDeniedException ad) {
            logger.error("Error de Acceso " + ad);
            throw new java.lang.Exception("tesauros", ad);

        } catch (Exception e) {
            logger.error("Error en catalogadorWeb, tesauros, metodo cambiarJerarquiaSesion " + e);
            throw new java.lang.Exception("tesauros", e);
        }
    }

    /**
     * Recogemos las jerarquas del formulario y vemos si slo tiene uno (true) o ms (false).
     */
    public final int longitudJerarquia(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.tesauros.LongitudJerarquiaForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        int longitud = 0;
        try {//Nos dice si la longitud de la jerarquia es mayor que uno
            Collection jerarquias = form.getJerarquias();
            if (jerarquias.size() == 1) {//Si la longitud es 1, longitud sera true, para representar que es de longitud 1; si no se mantiene a  false
                longitud = 1;
            } else if (jerarquias.size() == 0) {
                longitud = 0;
            } else {
                longitud = 2;
            }
        } catch (org.acegisecurity.AccessDeniedException ad) {
            logger.error("Error de Acceso " + ad);
            throw new java.lang.Exception("tesauros", ad);

        } catch (Exception e) {
            logger.error("Error en catalogadorWeb, tesauros, metodo longitudJerarquia " + e);
            throw new java.lang.Exception("tesauros", e);
        }
        return longitud;
    }

    /**
     * Asocia las Relaciones, es decir las rutas jerrquicas que hemos generado con identificador de la posicin y el texto la concatenacin de los textos de los taxones de cada una de las jerarquas.
     * Si clasificationAux tiene alguna ruta jerrquica lo guardamos y le aadiremos la nueva.
     * Recogemos las jerrquias del objeto de sesin y accedemos al que est en la posicin id, y esos taxones los insertamos en taxones de tipo es.pode.catalogacion.negocio.servicios.TaxonVO[].
     * Los aadimos a clasificationAux,y este en el objeto de sesin.
     * Ponemos las rutasJerarquicas del objeto de sesin a null.
     */
    public final void asociaRelacion(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.tesauros.AsociaRelacionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //Comprobamos que se ha seleccionado algun radioButton
        if (form.getId() == null || form.getId().equals(""))
            throw new ValidatorException("{tesauro.relaciones.jerarquicas.seleccione}");
        else {
            try {//Asocia  la relacion que esta en la posicion i, cogiendo los taxones uno a uno

                String id = request.getParameter("id");
                String idioma = form.getIdioma();
                String nomTesauro = form.getNomTesauro();

                CatalogadorAvSession os = this.getCatalogadorAvSession(request);
                Object[] jerarquias = os.getRutasJerarquicas().toArray();
                Integer entero = new Integer(id);
                AvClassificationVO clasificationAux = os.getClasificacionAux();
                RutaTaxonomicaVO[] rutasTaxonomicasClas = null;
                //         RutaTaxonomicaVO rutaTaxonomica=new RutaTaxonomicaVO();
                RutaTaxonomicaVO rutaTaxonomica = null;
                ArrayList lRutas = new ArrayList();
                if (clasificationAux != null) {
                    rutasTaxonomicasClas = clasificationAux.getRutasTaxonomicas();//Recogemos las rutas padre que habia de antes y le aadimos el nuevo
                    if (rutasTaxonomicasClas != null)
                        for (int i = 0; i < rutasTaxonomicasClas.length; i++) {
                            lRutas.add(rutasTaxonomicasClas[i]);
                        }
                } else {
                    clasificationAux = new AvClassificationVO();
                }

                TaxonVO[] listTax = (TaxonVO[]) jerarquias[entero.intValue()];//Array de taxones del objeto de sesion

                ArrayList listaT = new ArrayList();
                for (int j = 0; j < listTax.length; j++) {//Generamos el array de taxones
                    String ident = listTax[j].getId();
                    String text = listTax[j].getValorTax();
                    es.pode.catalogacion.negocio.servicios.TaxonVO taxonAux = new es.pode.catalogacion.negocio.servicios.TaxonVO();
                    EntryVO entry = new EntryVO();
                    LangStringVO texto = new LangStringVO();
                    ArrayList textos = new ArrayList();
                    texto.setIdioma(idioma);//El idioma que nos viene como parametro
                    texto.setTexto(text);//El nombre del tesauro que nos viene como parametro
                    textos.add(texto);
                    LangStringVO[] lang = (LangStringVO[]) textos.toArray(new LangStringVO[textos.size()]);
                    entry.setTextos(lang);
                    taxonAux.setEntry(entry);
                    IdVO ide = new IdVO();
                    ide.setTexto(ident);
                    taxonAux.setId(ide);
                    listaT.add(taxonAux);
                }
                es.pode.catalogacion.negocio.servicios.TaxonVO[] lTaxones = (es.pode.catalogacion.negocio.servicios.TaxonVO[]) listaT
                        .toArray(new es.pode.catalogacion.negocio.servicios.TaxonVO[listaT.size()]);

                if ((rutasTaxonomicasClas != null) && (rutasTaxonomicasClas.length > 0)) {
                    rutasTaxonomicasClas[rutasTaxonomicasClas.length - 1].setTaxones(lTaxones);
                    //            rutaTaxonomica.setTaxones(lTaxones);
                    //            FuenteVO fuente=new FuenteVO();
                    //            LangStringVO texto=new LangStringVO();
                    //            ArrayList textos=new ArrayList();
                    //            texto.setIdioma(idioma);//El idioma que nos viene como parametro
                    //            texto.setTexto(nomTesauro);//El nombre del tesauro que nos viene como parametro
                    //            textos.add(texto);
                    //            LangStringVO[] lang=(LangStringVO[])textos.toArray(new LangStringVO[textos.size()]);
                    //            fuente.setTextos(lang);
                    //            rutaTaxonomica.setFuente(fuente);//Generada la nueva ruta taxonomica
                    //            lRutas.add(rutaTaxonomica);//Aadir a las rutas existentes
                    //            RutaTaxonomicaVO[] rutas=(RutaTaxonomicaVO[])lRutas.toArray(new RutaTaxonomicaVO[lRutas.size()]);
                    clasificationAux.setRutasTaxonomicas(rutasTaxonomicasClas);//Aadimos las rutas a la clasificacion auxiliar
                    os.setClasificacionAux(clasificationAux);//Aadimos la clasificacion a la sesion
                    os.setRutasJerarquicas(null);
                }

            } catch (org.acegisecurity.AccessDeniedException ad) {
                logger.error("Error de Acceso " + ad);
                throw new java.lang.Exception("tesauros", ad);

            } catch (Exception e) {
                logger.error("Error en catalogadorWeb, tesauros, metodo asociaRelacion " + e);
                throw new java.lang.Exception("tesauros", e);
            }
        }
    }

    public void buscarTerminos(ActionMapping mapping, BuscarTerminosForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // TODO Auto-generated method stub

        String idioma = request.getParameter("idioma");
        try {
            if (idioma == null || idioma.equals("")) {
                //Recogemos el idioma del navegador
                idioma = ((Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE))
                        .getLanguage();

            }
            String nomTesauro = request.getParameter("nomTesauro");
            String vocabName = request.getParameter("vocabName");
            form.setIdioma(idioma);
            form.setNomTesauro(nomTesauro);
            form.setVocabName(vocabName);
            String textoBusqueda = form.getTextoBusqueda();
            if (textoBusqueda == null)
                textoBusqueda = "";

            JerarquiaVO[] jerarquias = this.getSrvTesaurosServices().obtenerTerminos(textoBusqueda, nomTesauro,
                    idioma);

            CatalogadorAvSession os = this.getCatalogadorAvSession(request);
            Collection rutas = new ArrayList();
            if (jerarquias.length == 1) {

                String id = jerarquias[0].getJerarquia()[jerarquias[0].getJerarquia().length - 1].getId();
                TaxonVO[] taxonesRelacionados = this.getSrvTesaurosServices().obtenerTerminosRelacionadosPorId(id,
                        nomTesauro, idioma);
                form.setTaxonesvoAsArray(taxonesRelacionados);

                Collection rutaPadre = new ArrayList();
                rutaPadre.add(jerarquias[0]);//a la colecion rutaPadre le insertamos la nica jerarquia que tenemos y lo metemos en el formulario
                os.setRutasJerarquicas(null);
                form.setRutaPadrevo(rutaPadre);
                form.setId(id);
            } else {
                rutas = rutasBusqueda(jerarquias);
                form.setRutaPadrevo(null);
                form.setTaxonesvo(rutas);
                Collection cJerarquias = new ArrayList();
                for (int i = 0; i < jerarquias.length; i++) {
                    cJerarquias.add(jerarquias[i]);
                }
                os.setRutasJerarquicas(cJerarquias);
            }

        } catch (org.acegisecurity.AccessDeniedException ad) {
            logger.error("Error de Acceso " + ad);
            throw new java.lang.Exception("tesauros", ad);

        } catch (Exception e) {
            logger.error("Error en catalogadorWeb, tesauros, metodo buscaterminos " + e);
            throw new java.lang.Exception("tesauros", e);
        }
    }

    public Collection rutasBusqueda(JerarquiaVO[] jerarquias) {
        Collection aux = new ArrayList();
        for (int i = 0; i < jerarquias.length; i++) {

            TaxonVO nuevoTaxon = new TaxonVO();//Generamos un nuevo taxon que tenga como identificador la i y como texto la concatenacion de los textos del array de taxones
            nuevoTaxon.setEsHoja(new Boolean("false"));
            Integer entero = null;
            entero = new Integer(i);

            nuevoTaxon.setId(entero.toString());
            JerarquiaVO jerarquia = jerarquias[i];
            TaxonVO[] jerarTax = (TaxonVO[]) (jerarquia.getJerarquia());
            String valorTax = "";
            for (int j = 0; j < jerarTax.length; j++) {
                valorTax = valorTax + jerarTax[j].getValorTax().toString();
                if (j < jerarTax.length - 1)
                    valorTax = valorTax + " -> ";
            }
            nuevoTaxon.setValorTax(valorTax);
            aux.add(nuevoTaxon);
        }
        return aux;
    }

}