es.pode.catalogadorWeb.presentacion.catalogadorBasico.CatBasicoControllerImpl.java Source code

Java tutorial

Introduction

Here is the source code for es.pode.catalogadorWeb.presentacion.catalogadorBasico.CatBasicoControllerImpl.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.catalogadorBasico;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.StringTokenizer;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.internet.InternetHeaders;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimePartDataSource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import es.pode.catalogacion.negocio.servicios.ArbolCurricularVO;
import es.pode.catalogacion.negocio.servicios.CBTaxonVO;
import es.pode.catalogacion.negocio.servicios.ClassificationVO;
import es.pode.catalogacion.negocio.servicios.EducationalVO;
import es.pode.catalogacion.negocio.servicios.GeneralVO;
import es.pode.catalogacion.negocio.servicios.LomBasicoVO;
import es.pode.catalogacion.soporte.UtilidadesOrdenarCombos;
import es.pode.catalogadorWeb.presentacion.CatalogadorBSession;
import es.pode.fuentestaxonomicas.negocio.servicio.TerminoVO;
import es.pode.fuentestaxonomicas.negocio.servicio.TerminoYPadreVO;
import es.pode.fuentestaxonomicas.negocio.servicio.VocabularioVO;
import es.pode.soporte.constantes.ConstantesAgrega;
import es.pode.soporte.i18n.I18n;
import es.pode.soporte.seguridad.ldap.LdapUserDetailsUtils;
import es.pode.validador.negocio.servicio.MDBasicosOblVO;
import es.pode.validador.negocio.servicio.ValidaVO;

/**
 * @see es.pode.catalogadorBasico.presentacion.catalogador.CatBasicoController
 */
public class CatBasicoControllerImpl extends CatBasicoController {

    protected static Logger logger = Logger.getLogger(CatBasicoControllerImpl.class);
    private static final String HTTP = "http://";
    private static final String BARRA = "/";
    private static final String SEPARADOR = ":";

    /**
     * @see es.pode.catalogadorBasico.presentacion.catalogador.CatBasicoController#cargarDatos(org.apache.struts.action.ActionMapping,
     *      es.pode.catalogadorBasico.presentacion.catalogador.CargarDatosForm,
     *      javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     */

    public final void cargarDatos(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.catalogadorBasico.CargarDatosForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        InputStream is = null;
        try {

            ///////////////////////////////////////////////////////////////////////////////////////////
            ResourceBundle datosResources = I18n.getInstance().getResource("application-resources",
                    (Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE));
            String idioma = ((Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE))
                    .getLanguage();
            String ficheroProperties = "/catalogadorBasico.properties";
            is = this.getClass().getResourceAsStream(ficheroProperties);
            Properties prop = new Properties();
            prop.load(is);
            ////////////////////////////////////////////////////////////////////////////////////////////

            int longVocabulario = 0;

            String[] l_id = { prop.getProperty("idioma"), prop.getProperty("tipoDeRecurso"),
                    prop.getProperty("idiomaDestinatario") };
            VocabularioVO[] vocabulario = this.getSrvVocabulariosControladosService().obtenerCombos(l_id, idioma);

            //vamos a ordenar vocabulario
            UtilidadesOrdenarCombos vocabularioOrdenado1 = new UtilidadesOrdenarCombos();
            VocabularioVO[] vocabularioOrdenado = vocabularioOrdenado1.ordenarVocabulariosVO(vocabulario);

            longVocabulario = vocabularioOrdenado.length;
            for (int x = 0; x < longVocabulario; x++) {
                TerminoVO terminoVO = new TerminoVO();
                terminoVO.setIdiomaTermino("");
                terminoVO.setIdTermino("");
                terminoVO.setNomTermino("");
                switch (x) {
                case 0:
                    Collection id = new ArrayList();
                    id.add(terminoVO);
                    //               modificamos las cadenas de idiomas
                    TerminoVO[] terminos = vocabularioOrdenado[x].getTerminos();
                    for (int li = 0; li < terminos.length; li++) {
                        TerminoVO idAux = new TerminoVO();
                        idAux = terminos[li];
                        String textoIdioma = idAux.getNomTermino();
                        String idiomasTra = "";
                        if (!textoIdioma.equals("x-none")) {
                            idiomasTra = I18n.getInstance().obtenerIdiomaTraducido(textoIdioma, idioma);
                        } else {
                            idiomasTra = datosResources.getString("x-none");
                        }
                        idAux.setNomTermino(idiomasTra);
                    }
                    UtilidadesOrdenarCombos terminosOrd2 = new UtilidadesOrdenarCombos();
                    TerminoVO[] terminosOrd = terminosOrd2.ordenarTerminosVO(terminos, idioma);
                    Collection id2 = Arrays.asList(terminosOrd);

                    Iterator z = id2.iterator();
                    while (z.hasNext()) {
                        id.add(z.next());
                    }

                    form.setIdiomaBackingList(id, "idTermino", "nomTermino");
                    break;
                case 1:
                    Collection tRecurso = new ArrayList();
                    tRecurso.add(terminoVO);
                    Collection tRecurso2 = Arrays.asList(vocabularioOrdenado[x].getTerminos());
                    Iterator cont = tRecurso2.iterator();
                    while (cont.hasNext()) {
                        tRecurso.add(cont.next());
                    }
                    form.setTipoRecursoBackingList(tRecurso, "idTermino", "nomTermino");
                    break;
                case 2:
                    //               modificamos las cadenas de idiomas
                    TerminoVO[] terminosIds = vocabularioOrdenado[x].getTerminos();
                    for (int li = 0; li < terminosIds.length; li++) {
                        TerminoVO idAux = new TerminoVO();
                        idAux = terminosIds[li];
                        String textoIdioma = idAux.getNomTermino();
                        String idiomasTra = I18n.getInstance().obtenerIdiomaTraducido(textoIdioma, idioma);
                        idAux.setNomTermino(idiomasTra);
                    }
                    UtilidadesOrdenarCombos terminosIdsOrd1 = new UtilidadesOrdenarCombos();
                    TerminoVO[] terminosIdsOrd = terminosIdsOrd1.ordenarTerminosVO(terminosIds, idioma);
                    Collection idDest = new ArrayList();
                    idDest.add(terminoVO);
                    Collection idDest2 = Arrays.asList(terminosIdsOrd);
                    Iterator cont2 = idDest2.iterator();
                    while (cont2.hasNext()) {
                        idDest.add(cont2.next());
                    }
                    form.setIdiomaDestinatarioBackingList(idDest, "idTermino", "nomTermino");
                    break;
                }

            }
            if (logger.isDebugEnabled()) {

                logger.debug("Cargados los combos del formulario");
            }

            // **********************************************************************************************
            CatalogadorBSession os = this.getCatalogadorBSession(request);
            LomBasicoVO lomBasico;

            if (os.getMBOSesion() == null) {

                String usuario = LdapUserDetailsUtils.getUsuario();

                String identificador = request.getParameter("identificador");//"idLOM1";//
                //introducido nuevo parametro para vuelta al empaquetador
                String returnURL = request.getParameter("returnURL");
                //PortalEmpaquetador/Inicio/Inicio.do

                os.setIdioma(idioma);
                os.setIdentificador(identificador);
                os.setUsuario(usuario);
                //metemos en la sesion el parametro de vuelta al empaquetador
                os.setReturnURL(returnURL);

                lomBasico = this.getSrvCatalogacionBasicaService().obtenerLomBasico(identificador, usuario, idioma);
                if (lomBasico != null) {
                    if (lomBasico.getClassification() == null)
                        lomBasico.setClassification(new ClassificationVO());
                    if (lomBasico.getEducational() == null)
                        lomBasico.setEducational(new EducationalVO());
                    if (lomBasico.getGeneral() == null)
                        lomBasico.setGeneral(new GeneralVO());
                }

                TerminoYPadreVO[] terminoypadrear = new TerminoYPadreVO[longVocabulario];

                for (int i = 0; i < longVocabulario; i++) {
                    TerminoYPadreVO terminoypadreVO = new TerminoYPadreVO();
                    terminoypadreVO.setIdiomaTermino("en");
                    terminoypadreVO.setIdVocabulario(l_id[i]);
                    terminoypadreVO.setIdTermino("");
                    switch (i) {
                    case 0:
                        if ((lomBasico.getGeneral() != null) && (lomBasico.getGeneral().getIdioma() != null)) {
                            terminoypadreVO.setNomTermino(lomBasico.getGeneral().getIdioma()); //terminoYPadreVO rellenado con idioma desde el lom basico
                        } else {
                            terminoypadreVO.setNomTermino("");//terminoYPadre rellenado con idioma desde el formulario
                        }
                        break;
                    case 1:
                        if ((lomBasico.getEducational() != null)
                                && (lomBasico.getEducational().getTipo() != null)) {
                            terminoypadreVO.setNomTermino(lomBasico.getEducational().getTipo());//terminoYPadre rellenado con tipo desde el lom basico
                        } else {
                            terminoypadreVO.setNomTermino("");//terminoYPadre rellenado con tipo desde el formulario
                        }

                        break;
                    case 2:
                        if ((lomBasico.getEducational() != null)
                                && (lomBasico.getEducational().getIdiomaDest() != null)) {
                            terminoypadreVO.setNomTermino(lomBasico.getEducational().getIdiomaDest());//terminoYPadre rellenado con idioma destinatario desde el lom basico
                        } else {
                            terminoypadreVO.setNomTermino("");//terminoYPadre rellenado con idioma destinatario desde el formulario
                        }

                        break;
                    }

                    terminoypadrear[i] = terminoypadreVO;

                }

                TerminoYPadreVO[] terminoYPadreVuelta = this.getSrvVocabulariosControladosService()
                        .obtenerIdTermino(terminoypadrear);
                String idi = terminoYPadreVuelta[0].getIdTermino();//Se recoge el idtermino del idioma si lo hay
                if (idi == null) {
                    idi = "";//No hay ningn idioma seleccionado por defecto
                }
                lomBasico.getGeneral().setIdioma(idi);

                idi = terminoYPadreVuelta[1].getIdTermino();
                if (idi == null) {
                    idi = "";//No hay ningn tipo se recurso seleccionado por defecto
                }
                lomBasico.getEducational().setTipo(idi);

                idi = terminoYPadreVuelta[2].getIdTermino();
                if (idi == null) {
                    idi = "";//No hay ningn idioma destinatario seleccionado por defecto
                }
                lomBasico.getEducational().setIdiomaDest(idi);

                lomBasico.getEducational().setContexto("");
                lomBasico.getEducational().setEdad("");
                lomBasico.getEducational().setProcesoCog("");

                this.getCatalogadorBSession(request).setMBOSesion(lomBasico);

            }

            //         rellenar formulario
            if (os.getMBOSesion().getClassification() == null) {
                os.getMBOSesion().setClassification(new ClassificationVO());
            }
            if (os.getMBOSesion().getClassification().getArbolesCurriculares() == null) {

                os.getMBOSesion().getClassification().setArbolesCurriculares(new ArbolCurricularVO[] {});
            }
            this.getCatalogadorBSession(request).setArbolesController(
                    Arrays.asList(os.getMBOSesion().getClassification().getArbolesCurriculares()));

            form.setDescripcion(os.getMBOSesion().getGeneral().getDesc());
            form.setTipoRecurso(os.getMBOSesion().getEducational().getTipo());
            form.setTitulo(os.getMBOSesion().getGeneral().getTitulo());
            form.setIdioma(os.getMBOSesion().getGeneral().getIdioma());
            form.setIdiomaDestinatario(os.getMBOSesion().getEducational().getIdiomaDest());
            form.setArbolesAsArray(os.getMBOSesion().getClassification().getArbolesCurriculares());

        } catch (org.acegisecurity.AccessDeniedException ad) {
            throw new java.lang.Exception("catalogador.basico", ad);

        } catch (Exception e) {
            logger.error("Error en Servicio de catalogacion, metodo cargarDatos" + e);
            throw new java.lang.Exception("catalogador.basico", e);

        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    logger.error(e);
                }
            }
        }

        // **********************************************************************************************
    }

    public void cargarDatosGuardar(ActionMapping mapping, CargarDatosGuardarForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        CatalogadorBSession os = this.getCatalogadorBSession(request); //Recogemos el objeto de sesin   

        LomBasicoVO lomDatosSesion = new LomBasicoVO();
        EducationalVO ed = new EducationalVO();
        GeneralVO gn = new GeneralVO();
        ClassificationVO cl = new ClassificationVO();
        ed.setIdiomaDest(form.getIdiomaDestinatario());//recogemos idioma destinatario desde el formulario y insertamos en educationalVO
        ed.setTipo(form.getTipoRecurso());//recogemos tipo de recurso desde el formulario y insertamos en educationalVO
        gn.setDesc(form.getDescripcion());//recogemos descripcion desde el formulario y insertamos en generalVO
        gn.setIdioma(form.getIdioma());//recogemos idioma desde el formulario y insertamos en generalVO
        gn.setTitulo(form.getTitulo());//recogemos titulo desde el formulario y insertamos en generalVO
        //recogemos los arboles de la sesion
        ArbolCurricularVO[] arboles = new ArbolCurricularVO[0];
        if (os.getArbolesController() != null) {
            List dpr = Arrays.asList(os.getArbolesController().toArray());
            arboles = (ArbolCurricularVO[]) dpr.toArray(new ArbolCurricularVO[dpr.size()]);
        }
        if (arboles != null) {
            cl.setArbolesCurriculares(arboles);
            lomDatosSesion.setClassification(cl);//insertamos los arboles no nulos en el lomBasicoVO
        } else {
            cl.setArbolesCurriculares(new ArbolCurricularVO[0]);
            lomDatosSesion.setClassification(cl);//insertamos el arbol nulo en el lomBasicoVO
        }

        lomDatosSesion.setEducational(ed);//insertamos el educationalVO en el lomBasicoVO
        lomDatosSesion.setGeneral(gn);//insertamos el generalVO en el lomBasicoVO
        os.setMBOSesion(lomDatosSesion);//insertamos el lomBasicoVO en el objeto de sesion

        String returnURL = this.getCatalogadorBSession(request).getReturnURL();
        os.setReturnURL(returnURL);
        this.setCatalogadorBSession(request, os);
        if (logger.isDebugEnabled()) {

            logger.debug("Insertamos los valores del formulario en el objeto de sesion");
        }

    }

    private ArbolCurricularVO[] ordenaTaxonesEnArboles(ArbolCurricularVO[] arbolesAlrreves) {

        ArbolCurricularVO[] arbolOrdenado = null;
        ArrayList datos = new ArrayList();
        if (arbolesAlrreves != null) {
            CBTaxonVO[] taxones = new CBTaxonVO[0];
            for (int ina = 0; ina < arbolesAlrreves.length; ina++) {
                ArbolCurricularVO arbolOr = new ArbolCurricularVO();
                taxones = arbolesAlrreves[ina].getTaxones();
                int longitax = taxones.length;
                if (longitax > 0) {
                    String[] ultTax = taxones[longitax - 1].getId().split("\\.");
                    int longiUlt = ultTax.length;
                    String[] iniTax = taxones[0].getId().split("\\.");
                    int longiPrim = iniTax.length;
                    if (longiPrim > longiUlt) { //estan al reves y hay que darle la vuelta
                        //damos la vuelta a los taxones
                        List taxonesLis = Arrays.asList(taxones);
                        Collections.reverse(taxonesLis);
                        CBTaxonVO[] taxOk = (CBTaxonVO[]) taxonesLis.toArray(new CBTaxonVO[taxonesLis.size()]);
                        arbolOr.setTaxones(taxOk);

                    } else { //esta ordenado el arbol y lo metemos tal cual
                        CBTaxonVO[] taxOk = arbolesAlrreves[ina].getTaxones();
                        arbolOr.setTaxones(taxOk);
                    }
                    //el idArbol siempre lo metemos
                    arbolOr.setIdArbol(arbolesAlrreves[ina].getIdArbol());
                    datos.add(arbolOr);
                }
            }
        }
        arbolOrdenado = (ArbolCurricularVO[]) datos.toArray(new ArbolCurricularVO[datos.size()]);
        return arbolOrdenado;
    }

    private ArbolCurricularVO[] desordenaTaxonesEnArboles(ArbolCurricularVO[] arbolesAlrreves) {

        ArbolCurricularVO[] arbolOrdenado = null;
        ArrayList datos = new ArrayList();
        if (arbolesAlrreves != null) {
            CBTaxonVO[] taxones = new CBTaxonVO[0];
            for (int ina = 0; ina < arbolesAlrreves.length; ina++) {
                ArbolCurricularVO arbolOr = new ArbolCurricularVO();
                taxones = arbolesAlrreves[ina].getTaxones();
                int longitax = taxones.length;
                if (longitax > 0) {
                    String[] ultTax = taxones[longitax - 1].getId().split("\\.");
                    int longiUlt = ultTax.length;
                    String[] iniTax = taxones[0].getId().split("\\.");
                    int longiPrim = iniTax.length;
                    if (longiPrim < longiUlt) { //estan al reves y hay que darle la vuelta
                        //damos la vuelta a los taxones
                        List taxonesLis = Arrays.asList(taxones);
                        Collections.reverse(taxonesLis);
                        CBTaxonVO[] taxOk = (CBTaxonVO[]) taxonesLis.toArray(new CBTaxonVO[taxonesLis.size()]);
                        arbolOr.setTaxones(taxOk);

                    } else { //esta ordenado el arbol y lo metemos tal cual
                        CBTaxonVO[] taxOk = arbolesAlrreves[ina].getTaxones();
                        arbolOr.setTaxones(taxOk);
                    }
                    //el idArbol siempre lo metemos
                    arbolOr.setIdArbol(arbolesAlrreves[ina].getIdArbol());
                    datos.add(arbolOr);
                }
            }
        }
        arbolOrdenado = (ArbolCurricularVO[]) datos.toArray(new ArbolCurricularVO[datos.size()]);
        return arbolOrdenado;
    }

    /**
     * @see es.pode.catalogadorBasico.presentacion.catalogador.CatBasicoController#guardarMetadatos(org.apache.struts.action.ActionMapping,
     *      es.pode.catalogadorBasico.presentacion.catalogador.GuardarMetadatosForm,
     *      javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     */
    public final void guardarMetadatos(ActionMapping mapping,
            es.pode.catalogadorWeb.presentacion.catalogadorBasico.GuardarMetadatosForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        InputStream is = null;

        try {
            String identificador;
            if (this.getCatalogadorBSession(request) == null) {
                identificador = request.getParameter("identificador");
            } else {
                identificador = this.getCatalogadorBSession(request).getIdentificador();
            }
            String usuario = LdapUserDetailsUtils.getUsuario();
            //"user";//request.getParameter("usuario");
            //Recogemos el idioma del navegador
            String idioma = ((Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE))
                    .getLanguage();

            Properties prop = new Properties();

            LomBasicoVO lomBasico = new LomBasicoVO();
            GeneralVO general = new GeneralVO();
            EducationalVO educational = new EducationalVO();
            ClassificationVO classification = new ClassificationVO();
            CatalogadorBSession os = this.getCatalogadorBSession(request);
            if (os != null) {//Recogidos los datos de la sesion e incluidas en los VO-s
                general.setIdioma(os.getMBOSesion().getGeneral().getIdioma());
                general.setTitulo(os.getMBOSesion().getGeneral().getTitulo());
                general.setDesc(os.getMBOSesion().getGeneral().getDesc());
                educational.setContexto("");
                educational.setTipo(os.getMBOSesion().getEducational().getTipo());
                educational.setEdad("");
                educational.setIdiomaDest(os.getMBOSesion().getEducational().getIdiomaDest());
                educational.setProcesoCog("");

                //         recogemos los arboles de la sesion
                ArbolCurricularVO[] arbolesAlrreves = new ArbolCurricularVO[0];
                if (os.getArbolesController() != null) {
                    List dpr = Arrays.asList(os.getArbolesController().toArray());
                    arbolesAlrreves = (ArbolCurricularVO[]) dpr.toArray(new ArbolCurricularVO[dpr.size()]);
                }

                if (arbolesAlrreves != null) {
                    //les damos la vuelta a los taxones para que los guarde en orden correcto
                    ArbolCurricularVO[] arbolesOrdenados = new ArbolCurricularVO[0];
                    arbolesOrdenados = ordenaTaxonesEnArboles(arbolesAlrreves);
                    classification.setArbolesCurriculares(arbolesOrdenados);
                    lomBasico.setClassification(classification);
                }

                String[] idxatraduc = new String[3];
                for (int cont = 0; cont < idxatraduc.length; cont++) {
                    switch (cont) {
                    case 0:
                        idxatraduc[0] = general.getIdioma();
                        break;
                    case 1:
                        idxatraduc[1] = educational.getTipo();
                        break;
                    case 2:
                        idxatraduc[2] = educational.getIdiomaDest();
                        break;
                    }

                }

                is = this.getClass().getResourceAsStream("/catalogadorBasico.properties");
                prop.load(is);
                String[] l_id = { prop.getProperty("idioma"), prop.getProperty("tipoDeRecurso"),
                        prop.getProperty("idiomaDestinatario") };

                TerminoYPadreVO[] terminosTraduc = this.getSrvVocabulariosControladosService()
                        .crearTraduccionAIngles(idxatraduc);
                for (int cont = 0; cont < terminosTraduc.length; cont++) {//Cambiado el identificador del termino al nombre del termino en ingles
                    if (l_id[0].equals(terminosTraduc[cont].getIdVocabulario())) {
                        general.setIdioma(terminosTraduc[cont].getNomTermino());
                    } else if (l_id[1].equals(terminosTraduc[cont].getIdVocabulario())) {
                        educational.setTipo(terminosTraduc[cont].getNomTermino());
                    } else if (l_id[2].equals(terminosTraduc[cont].getIdVocabulario())) {
                        educational.setIdiomaDest(terminosTraduc[cont].getNomTermino());
                    }

                }

                lomBasico.setGeneral(general);
                lomBasico.setEducational(educational);
                lomBasico.setClassification(classification);
                if (logger.isDebugEnabled()) {

                    logger.debug("Aadidos en el lomBasico los datos de sesion en ingles");
                }
            }
            //llamada al servicio y modificacion de arboles de sesion
            List arbolesCont = Arrays.asList(this.getSrvCatalogacionBasicaService()
                    .generarMetadatos(identificador, usuario, lomBasico, idioma).getClassification()
                    .getArbolesCurriculares());

            //   les damos la vuelta a los taxones para que los guarde en orden correcto
            ArbolCurricularVO[] arboles = (ArbolCurricularVO[]) arbolesCont
                    .toArray(new ArbolCurricularVO[arbolesCont.size()]);
            ArbolCurricularVO[] arbolesOrdenados = desordenaTaxonesEnArboles(arboles);
            arbolesCont = Arrays.asList(arbolesOrdenados);
            os.setArbolesController(arbolesCont);
            //actualizamos los datos en sesion
            if (os.getMBOSesion() != null) {
                os.getMBOSesion().getClassification().setArbolesCurriculares(arbolesOrdenados);//Aadidos los arboles curriculares en la sesion
            }

        } catch (org.acegisecurity.AccessDeniedException ad) {
            throw new java.lang.Exception("catalogador.basico", ad);

        } catch (Exception e) {
            logger.error("Error Catalogacion, metodo guardarMetadatos. " + e);
            throw new java.lang.Exception("catalogador.basico", e);

        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    logger.error(e);
                }
            }
        }

    }

    public void cargarDatosSesion(ActionMapping mapping, CargarDatosSesionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        CatalogadorBSession os = this.getCatalogadorBSession(request);

        LomBasicoVO lomDatosSesion = new LomBasicoVO();
        EducationalVO ed = new EducationalVO();
        GeneralVO gn = new GeneralVO();
        ClassificationVO cl = new ClassificationVO();
        ed.setIdiomaDest(form.getIdiomaDestinatario());
        ed.setTipo(form.getTipoRecurso());
        gn.setDesc(form.getDescripcion());
        gn.setIdioma(form.getIdioma());
        gn.setTitulo(form.getTitulo());
        //recogemos los arboles de la sesion
        ArbolCurricularVO[] arboles = new ArbolCurricularVO[0];
        if (os != null) {//Recogidos arboles curriculares desde el objeto de sesion
            if (os.getArbolesController() != null) {
                List dpr = Arrays.asList(os.getArbolesController().toArray());
                arboles = (ArbolCurricularVO[]) dpr.toArray(new ArbolCurricularVO[dpr.size()]);
            }
        }
        cl.setArbolesCurriculares(arboles);
        lomDatosSesion.setEducational(ed);
        lomDatosSesion.setGeneral(gn);
        lomDatosSesion.setClassification(cl);
        os.setMBOSesion(lomDatosSesion);
        this.setCatalogadorBSession(request, os);
    }

    public boolean sonValidosMDBO(ActionMapping mapping, SonValidosMDBOForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // despues de validar metadatos viene aqui donde comprobaremos si el
        // resultado es true o false
        Collection mensajes = new ArrayList();

        ValidaVO datos = form.getValida();

        if (datos != null) {
            // leemos los resultados de la validacion
            String mens = datos.getResultadoValidacion().toString();
            StringTokenizer token = new StringTokenizer(mens, ";");
            while (token.hasMoreElements()) {
                mensajes.add(token.nextElement().toString());
                // token.nextElement();

            }
            form.setMensajesError(mensajes);

        } else {
            datos.setEsValidoManifest(new Boolean(false));//Devuelve false para la validacin
        }
        return datos.getEsValidoManifest().booleanValue();//Devuelve el resultado de la validacin, true o false

    }

    public void validarMetadatos(ActionMapping mapping, ValidarMetadatosForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        MDBasicosOblVO metadatosObl = new MDBasicosOblVO();
        metadatosObl.setTitulo(form.getTitulo());
        metadatosObl.setIdioma(form.getIdioma());
        metadatosObl.setDescripcion(form.getDescripcion());
        metadatosObl.setIdiomaDest(form.getIdiomaDestinatario());
        metadatosObl.setTipoRecurso(form.getTipoRecurso());
        metadatosObl.setContexto("");
        metadatosObl.setEdad("");
        metadatosObl.setProcesoCog("");

        CatalogadorBSession os = this.getCatalogadorBSession(request);

        LomBasicoVO lomDatosSesion = new LomBasicoVO();
        EducationalVO ed = new EducationalVO();
        GeneralVO gn = new GeneralVO();
        ClassificationVO cl = new ClassificationVO();
        ed.setIdiomaDest(form.getIdiomaDestinatario());
        ed.setTipo(form.getTipoRecurso());
        ed.setContexto("");
        ed.setEdad("");
        ed.setProcesoCog("");
        gn.setDesc(form.getDescripcion());
        gn.setIdioma(form.getIdioma());
        gn.setTitulo(form.getTitulo());
        if (logger.isDebugEnabled()) {

            logger.debug("Recogemos los campos del formulario");
        }
        //recogemos los arboles
        ArbolCurricularVO[] arboles = new ArbolCurricularVO[0];
        if (os != null) {//Recogemos los arboles del objeto de sesion
            if (os.getArbolesController() != null) {
                List dpr = Arrays.asList(os.getArbolesController().toArray());
                arboles = (ArbolCurricularVO[]) dpr.toArray(new ArbolCurricularVO[dpr.size()]);
            }
        }
        cl.setArbolesCurriculares(arboles);
        lomDatosSesion.setEducational(ed);
        lomDatosSesion.setGeneral(gn);
        lomDatosSesion.setClassification(cl);
        os.setMBOSesion(lomDatosSesion);
        this.setCatalogadorBSession(request, os);

        ValidaVO valida = null;
        try {
            valida = this.getSrvValidadorService().validarMDBasicosObl(metadatosObl);
        } catch (Exception e) {
            logger.error("CatalogadorBasico.validarMetadatos: error al llamar al servicio de validacion.");
        }
        form.setValida(valida);

    }

    public void eliminarArbol(ActionMapping mapping, EliminarArbolForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        boolean idArbolNoSeleccionado = false;
        try {
            CatalogadorBSession os = this.getCatalogadorBSession(request); //Recogemos el objeto de sesin   

            LomBasicoVO lomDatosSesion = new LomBasicoVO();
            EducationalVO ed = new EducationalVO();
            GeneralVO gn = new GeneralVO();
            ClassificationVO cl = new ClassificationVO();
            ed.setIdiomaDest(form.getIdiomaDestinatario());//recogemos idioma destinatario desde el formulario y insertamos en educationalVO
            ed.setTipo(form.getTipoRecurso());//recogemos tipo de recurso desde el formulario y insertamos en educationalVO
            ed.setContexto("");
            ed.setEdad("");
            ed.setProcesoCog("");
            gn.setDesc(form.getDescripcion());//recogemos descripcion desde el formulario y insertamos en generalVO
            gn.setIdioma(form.getIdioma());//recogemos idioma desde el formulario y insertamos en generalVO
            gn.setTitulo(form.getTitulo());//recogemos titulo desde el formulario y insertamos en generalVO
            //recogemos los arboles de la sesion
            ArbolCurricularVO[] arboles = new ArbolCurricularVO[0];
            if (os.getArbolesController() != null) {
                List dpr = Arrays.asList(os.getArbolesController().toArray());
                arboles = (ArbolCurricularVO[]) dpr.toArray(new ArbolCurricularVO[dpr.size()]);
            }
            if (arboles != null) {
                cl.setArbolesCurriculares(arboles);
                lomDatosSesion.setClassification(cl);//insertamos los arboles no nulos en el lomBasicoVO
            } else {
                cl.setArbolesCurriculares(new ArbolCurricularVO[0]);
                lomDatosSesion.setClassification(cl);//insertamos el arbol nulo en el lomBasicoVO
            }

            lomDatosSesion.setEducational(ed);//insertamos el educationalVO en el lomBasicoVO
            lomDatosSesion.setGeneral(gn);//insertamos el generalVO en el lomBasicoVO
            os.setMBOSesion(lomDatosSesion);//insertamos el lomBasicoVO en el objeto de sesion

            this.setCatalogadorBSession(request, os);
            if (logger.isDebugEnabled()) {

                logger.debug("Insertamos los valores del formulario en el objeto de sesion");
            }

            //      ******************************************************************************
            String[] idArboles = (String[]) request.getParameterValues("idArbol");

            if (idArboles != null && idArboles.length > 0) {

                LomBasicoVO lb = new LomBasicoVO();
                LomBasicoVO lb2;
                ClassificationVO cl2 = new ClassificationVO();
                GeneralVO g = new GeneralVO();
                //Insertamos valores vacios en los campo
                g.setDesc("");
                g.setIdioma("");
                g.setTitulo("");
                EducationalVO ed2 = new EducationalVO();
                ed2.setContexto("");
                ed2.setEdad("");
                ed2.setIdiomaDest("");
                ed2.setProcesoCog("");
                ed2.setTipo("");
                //recogemos los arboles del objeto de sesion
                ArbolCurricularVO[] datos = new ArbolCurricularVO[0];
                if (os != null) {
                    if (os.getArbolesController() != null) {
                        List dpr = Arrays.asList(os.getArbolesController().toArray());
                        datos = (ArbolCurricularVO[]) dpr.toArray(new ArbolCurricularVO[dpr.size()]);
                    }
                }

                if (datos != null) {
                    cl2.setArbolesCurriculares(datos);//Insertamos los arboles no nulos en clasification
                } else {
                    datos = new ArbolCurricularVO[0];
                    cl2.setArbolesCurriculares(datos);//Insertamos los arboles nulos en clasification
                }
                lb.setGeneral(g);
                lb.setEducational(ed2);
                lb.setClassification(cl2);

                lb2 = this.getSrvCatalogacionBasicaService().eliminarTaxonomiasEnLomBasico(lb, idArboles);
                //meto los arboles actuales en el objeto de sesion
                List datoAarbolController = Arrays.asList(lb2.getClassification().getArbolesCurriculares());
                os.setArbolesController(datoAarbolController);

                if (os.getMBOSesion() != null) {
                    //convierto de Collection a array 
                    datos = (ArbolCurricularVO[]) datoAarbolController
                            .toArray(new ArbolCurricularVO[datoAarbolController.size()]);
                    os.getMBOSesion().getClassification().setArbolesCurriculares(datos);
                }
                if (logger.isDebugEnabled()) {

                    logger.debug("Insertamos los arboles en el objeto de sesion");
                }
            } else {
                idArbolNoSeleccionado = true;
            }
        } catch (org.acegisecurity.AccessDeniedException ad) {
            throw new Exception("catalogador.basico", ad);

        } catch (Exception e) {
            logger.error("Error catBasico, mtodo eliminarArbol " + e);
            throw new Exception("catalogador.basico", e);
        }
        //Cambiamos el ValidatorException, para que no sea capturado por el Exception y lanze la jsp de error
        if (idArbolNoSeleccionado)
            throw new ValidatorException("{catalogadorBasico.EliminarTaxonomia}");

    }

    public void volverAEmpaquetador(ActionMapping mapping, VolverAEmpaquetadorForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //Recogemos el parametro para ir a PortalEmpaquetador
        String returnUrl = this.getCatalogadorBSession(request).getReturnURL();
        //      borramos datos de sesion
        request.getSession().removeAttribute(es.pode.catalogadorWeb.presentacion.CatalogadorBSession.SESSION_KEY);

        String url = HTTP + LdapUserDetailsUtils.getHost();
        if (returnUrl == null) {
            returnUrl = BARRA + request.getSession().getServletContext().getInitParameter("url_portada");
        }
        if (LdapUserDetailsUtils.getSubdominio() != null && !LdapUserDetailsUtils.getSubdominio().equals("")
                && !returnUrl.startsWith(LdapUserDetailsUtils.getSubdominio())) {
            returnUrl = LdapUserDetailsUtils.getSubdominio() + returnUrl;
        }
        url = url + returnUrl;
        response.sendRedirect(url);
    }

    public void realizarSubmit(ActionMapping mapping, RealizarSubmitForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String accion = form.getAccionSubmit();

    }

    public String recogeAccion(ActionMapping mapping, RecogeAccionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //Recogemos la accion a realizar
        String accion = form.getAccionSubmit();
        String resAction = "";
        ResourceBundle datosResources = I18n.getInstance().getResource("application-resources",
                (Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE));

        if (datosResources.getString("catalogadorBasico.Aceptar").equals(accion)) {
            resAction = "Guardar";
        } else if (datosResources.getString("catalogadorBasico.Validar").equals(accion)) {
            resAction = "Validar";
        } else if (datosResources.getString("catalogadorBasico.ArbolCurricular").equals(accion)) {
            resAction = "Arbol Curricular";
        } else if (datosResources.getString("catalogadorBasico.Eliminar").equals(accion)) {
            resAction = "Eliminar";
        } else if (datosResources.getString("catalogadorBasico.Cancelar").equals(accion)) {
            resAction = "Cancelar";
        } else if (accion == null || datosResources.getString("catalogadorBasico.Exportar").equals(accion)) {
            resAction = "Exportar";
        }

        return resAction;
    }

    public void exportarLomes(ActionMapping mapping, ExportarLomesForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        CatalogadorBSession catBas = this.getCatalogadorBSession(request);
        final int BUFFER_SIZE = 2048;

        DataHandler dh = null;
        try {
            dh = this.getSrvCatalogacionBasicaService().exportarLomes(catBas.getIdentificador(),
                    catBas.getUsuario(), form.getLomExportar(), catBas.getIdioma());

        } catch (Exception e) {
            logger.error(e);
            throw new ValidatorException("{catalogadorAvanzado.exportar.error.fichero}");
        }

        if (dh == null) {
            logger.error("Fichero  vacio. Abortamos descarga.");
            throw new ValidatorException("{catalogadorAvanzado.exportar.error.fichero}");
        }

        //        asignamos el titulo del fichero que vamos a exportar

        response.setContentType("text/xml;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=metadataLOMES.xml");
        OutputStream out = response.getOutputStream();
        InputStream in = dh.getInputStream();
        logger.debug("Descargando metadata.xml");
        byte[] buffer = new byte[BUFFER_SIZE];
        int count;
        while ((count = in.read(buffer, 0, BUFFER_SIZE)) != -1) {
            out.write(buffer, 0, count);
        }

        out.flush();
    }

    public void validarExportar(ActionMapping mapping, ValidarExportarForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String ficheroProperties = "/catalogadorBasico.properties";
        InputStream is;
        Properties prop = new Properties();
        MDBasicosOblVO metadatosObl = new MDBasicosOblVO();
        LomBasicoVO lomExportar = new LomBasicoVO();
        LomBasicoVO lomDatosSesion = this.getCatalogadorBSession(request).getMBOSesion();
        EducationalVO ed = new EducationalVO();
        GeneralVO gn = new GeneralVO();
        ClassificationVO cl = new ClassificationVO();

        is = this.getClass().getResourceAsStream(ficheroProperties);
        prop.load(is);

        if (form.getTitulo() != null || form.getIdioma() != null || form.getDescripcion() != null
                || form.getTipoRecurso() != null || form.getIdiomaDestinatario() != null
                || form.getArboles() != null) {

            ed.setIdiomaDest(form.getIdiomaDestinatario());
            ed.setTipo(form.getTipoRecurso());
            ed.setContexto("");
            ed.setEdad("");
            ed.setProcesoCog("");
            gn.setDesc(form.getDescripcion());
            gn.setIdioma(form.getIdioma());
            gn.setTitulo(form.getTitulo());

            if (lomDatosSesion != null && lomDatosSesion.getEducational() != null) {
                lomDatosSesion.getEducational().setIdiomaDest(form.getIdiomaDestinatario());
                lomDatosSesion.getEducational().setTipo(form.getTipoRecurso());
            }
            if (lomDatosSesion != null && lomDatosSesion.getGeneral() != null) {
                lomDatosSesion.getGeneral().setDesc(form.getDescripcion());
                lomDatosSesion.getGeneral().setIdioma(form.getIdioma());
                lomDatosSesion.getGeneral().setTitulo(form.getTitulo());
            }

        } else {

            ed.setIdiomaDest(lomDatosSesion.getEducational().getIdiomaDest() == null ? ""
                    : lomDatosSesion.getEducational().getIdiomaDest());
            ed.setTipo(lomDatosSesion.getEducational().getTipo() == null ? ""
                    : lomDatosSesion.getEducational().getTipo());
            ed.setContexto("");
            ed.setEdad("");
            ed.setProcesoCog("");
            gn.setDesc(lomDatosSesion.getGeneral().getDesc() == null ? "" : lomDatosSesion.getGeneral().getDesc());
            gn.setIdioma(
                    lomDatosSesion.getGeneral().getIdioma() == null ? "" : lomDatosSesion.getGeneral().getIdioma());
            gn.setTitulo(
                    lomDatosSesion.getGeneral().getTitulo() == null ? "" : lomDatosSesion.getGeneral().getTitulo());
        }

        //completo el objeto para validar      
        metadatosObl.setTitulo(gn.getTitulo());
        metadatosObl.setIdioma(gn.getIdioma());
        metadatosObl.setDescripcion(gn.getDesc());
        metadatosObl.setIdiomaDest(ed.getIdiomaDest());
        metadatosObl.setTipoRecurso(ed.getTipo());
        metadatosObl.setContexto("");
        metadatosObl.setEdad("");
        metadatosObl.setProcesoCog("");

        //      llamo al servicio validacion      
        ValidaVO valida = null;
        try {
            valida = this.getSrvValidadorService().validarMDBasicosObl(metadatosObl);

        } catch (Exception e) {
            logger.error("CatalogadorBasico.validarExportar: error al llamar al servicio de validacion.");
            throw new ValidatorException("{catalogadorBasico.exportar.advertencia.error}");
        }

        //traduccion para exportar
        String[] idxatraduc = new String[3];
        for (int cont = 0; cont < idxatraduc.length; cont++) {
            switch (cont) {
            case 0:
                idxatraduc[0] = gn.getIdioma();
                break;
            case 1:
                idxatraduc[1] = ed.getTipo();
                break;
            case 2:
                idxatraduc[2] = ed.getIdiomaDest();
                break;
            }

        }

        String[] l_id = { prop.getProperty("idioma"), prop.getProperty("tipoDeRecurso"),
                prop.getProperty("idiomaDestinatario") };

        TerminoYPadreVO[] terminosTraduc = this.getSrvVocabulariosControladosService()
                .crearTraduccionAIngles(idxatraduc);
        for (int cont = 0; cont < terminosTraduc.length; cont++) {//Cambiado el identificador del termino al nombre del termino en ingles
            if (l_id[0].equals(terminosTraduc[cont].getIdVocabulario())) {
                gn.setIdioma(terminosTraduc[cont].getNomTermino());
            } else if (l_id[1].equals(terminosTraduc[cont].getIdVocabulario())) {
                ed.setTipo(terminosTraduc[cont].getNomTermino());
            } else if (l_id[2].equals(terminosTraduc[cont].getIdVocabulario())) {
                ed.setIdiomaDest(terminosTraduc[cont].getNomTermino());
            }

        }

        //recogemos los arboles
        ArbolCurricularVO[] arboles = new ArbolCurricularVO[0];
        if (this.getCatalogadorBSession(request) != null) {//Recogemos los arboles del objeto de sesion
            if (this.getCatalogadorBSession(request).getArbolesController() != null) {
                List dpr = Arrays.asList(this.getCatalogadorBSession(request).getArbolesController().toArray());
                arboles = (ArbolCurricularVO[]) dpr.toArray(new ArbolCurricularVO[dpr.size()]);
            }
        }
        cl.setArbolesCurriculares(arboles);
        lomExportar.setEducational(ed);
        lomExportar.setGeneral(gn);
        lomExportar.setClassification(cl);

        form.setValida(valida);
        form.setLomExportar(lomExportar);
    }

    public boolean sonValidosExportar(ActionMapping mapping, SonValidosExportarForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        Collection mensajes = new ArrayList();

        ValidaVO datos = form.getValida();

        if (datos != null) {
            // leemos los errores de validacion
            String mens = datos.getResultadoValidacion().toString();
            StringTokenizer token = new StringTokenizer(mens, ";");
            while (token.hasMoreElements()) {
                mensajes.add(token.nextElement().toString());
                // token.nextElement();

            }
            form.setMensajesError(mensajes);

        } else {
            datos.setEsValidoManifest(new Boolean(false));//Devuelve false para la validacin
        }
        return datos.getEsValidoManifest().booleanValue();//Devuelve el resultado de la validacin, true o false

    }

    public String submitAdvertenciaExportar(ActionMapping mapping, SubmitAdvertenciaExportarForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        String accion = form.getAccion();
        String resAction = "";

        ResourceBundle datosResources = I18n.getInstance().getResource("application-resources",
                (Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE));

        if (datosResources.getString("catalogadorBasico.exportar.advertencia.exportar").equals(accion)) {
            resAction = "Exportar";
        } else if (datosResources.getString("catalogadorBasico.exportar.advertencia.volver").equals(accion)) {
            resAction = "Volver";
        } else {
            resAction = "Volver";
        }

        return resAction;

    }

    public boolean actualizados(ActionMapping mapping, ActualizadosForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        return form.isActualizados();

    }

    public void chequearDatos(ActionMapping mapping, ChequearDatosForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        if (form.getTitulo() == null && form.getIdioma() == null && form.getDescripcion() == null
                && form.getTipoRecurso() == null && form.getIdiomaDestinatario() == null
                && form.getArboles() == null) {
            //         verifico si el lomes esta vaco, si es asi, indico que est 
            //         actualizado para que se salte la pantalla de advertencia y siga a la pantalla de lomes no vlido
            if (lomesVacio(request))
                form.setActualizados(true);
            else
                form.setActualizados(false);
        } else {
            form.setActualizados(true);

        }

    }

    private boolean lomesVacio(HttpServletRequest request) throws Exception {
        boolean resultado = true;
        LomBasicoVO lom = this.getCatalogadorBSession(request).getMBOSesion();
        Collection arboles = this.getCatalogadorBSession(request).getArbolesController();
        if (lom != null) {
            if (lom.getGeneral() != null && lom.getGeneral().getTitulo() != null
                    && !lom.getGeneral().getTitulo().equals("") && lom.getGeneral().getIdioma() != null
                    && !lom.getGeneral().getIdioma().equals("") && lom.getGeneral().getDesc() != null
                    && !lom.getGeneral().getDesc().equals(""))
                resultado = false;
            if (lom.getEducational() != null && lom.getEducational().getTipo() != null
                    && !lom.getEducational().getTipo().equals("") && lom.getEducational().getIdiomaDest() != null
                    && !lom.getEducational().getIdiomaDest().equals(""))
                resultado = false;
            if (arboles != null && arboles.size() > 0)
                resultado = false;
        }
        return resultado;
    }

    public String comprobarLomesVacio(ActionMapping mapping, ComprobarLomesVacioForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        String resultado = "Vacio";
        try {
            if (!lomesVacio(request))
                resultado = "NoVacio";
        } catch (Exception e) {
            logger.debug("error comprobando lomes vacio");
        }

        return resultado;

    }

    public void subirFichero(ActionMapping mapping, SubirFicheroForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String ficheroProperties = "/catalogadorBasico.properties";
        InputStream is;
        try {
            is = this.getClass().getResourceAsStream(ficheroProperties);
            Properties prop = new Properties();
            prop.load(is);

            DataHandler dh = this.getCatalogadorBSession(request).getLomesImportado();

            // llamo al servicio de catalogacion para obtener un LomAvanzadoVO
            LomBasicoVO lom = null;
            try {
                lom = this.getSrvCatalogacionBasicaService().importarLomes(dh,
                        this.getCatalogadorBSession(request).getIdioma());
            } catch (Exception e) {
                if (logger.isDebugEnabled()) {
                    logger.debug("error al llamar al servicio");
                }
                this.saveErrorMessage(request, "catalogadorBasico.importar.error");
            }

            if (lom != null) {
                //busco las traducciones
                String[] l_id = { prop.getProperty("idioma"), prop.getProperty("tipoDeRecurso"),
                        prop.getProperty("idiomaDestinatario") };
                VocabularioVO[] vocabulario = this.getSrvVocabulariosControladosService().obtenerCombos(l_id,
                        this.getCatalogadorBSession(request).getIdioma());
                //vamos a ordenar vocabulario
                UtilidadesOrdenarCombos vocabularioOrdenado1 = new UtilidadesOrdenarCombos();
                VocabularioVO[] vocabularioOrdenado = vocabularioOrdenado1.ordenarVocabulariosVO(vocabulario);

                int longVocabulario = vocabularioOrdenado.length;

                TerminoYPadreVO[] terminoypadrear = new TerminoYPadreVO[longVocabulario];
                for (int i = 0; i < longVocabulario; i++) {
                    TerminoYPadreVO terminoypadreVO = new TerminoYPadreVO();
                    terminoypadreVO.setIdiomaTermino("en");
                    terminoypadreVO.setIdVocabulario(l_id[i]);
                    terminoypadreVO.setIdTermino("");
                    switch (i) {
                    case 0:
                        if ((lom.getGeneral() != null) && (lom.getGeneral().getIdioma() != null)) {
                            terminoypadreVO.setNomTermino(lom.getGeneral().getIdioma()); //terminoYPadreVO rellenado con idioma desde el lom basico
                        } else {
                            terminoypadreVO.setNomTermino("");
                        }
                        break;
                    case 1:
                        if ((lom.getEducational() != null) && (lom.getEducational().getTipo() != null)) {
                            terminoypadreVO.setNomTermino(lom.getEducational().getTipo());//terminoYPadre rellenado con tipo desde el lom basico
                        } else {
                            terminoypadreVO.setNomTermino("");
                        }

                        break;
                    case 2:
                        if ((lom.getEducational() != null) && (lom.getEducational().getIdiomaDest() != null)) {
                            terminoypadreVO.setNomTermino(lom.getEducational().getIdiomaDest());//terminoYPadre rellenado con idioma destinatario desde el lom basico
                        } else {
                            terminoypadreVO.setNomTermino("");
                        }

                        break;
                    }

                    terminoypadrear[i] = terminoypadreVO;

                    if (logger.isDebugEnabled()) {

                        logger.debug("Rellenado terminoypadreVO[" + i + "] con los datos del lom basico");
                    }
                }

                TerminoYPadreVO[] terminoYPadreVuelta = this.getSrvVocabulariosControladosService()
                        .obtenerIdTermino(terminoypadrear);

                String idi = terminoYPadreVuelta[0].getIdTermino();//Se recoge el idtermino del idioma si lo hay
                if (idi == null) {
                    idi = "";//No hay ningn idioma seleccionado por defecto
                }
                lom.getGeneral().setIdioma(idi);

                idi = terminoYPadreVuelta[1].getIdTermino();
                if (idi == null) {
                    idi = "";//No hay ningn tipo se recurso seleccionado por defecto
                }
                lom.getEducational().setTipo(idi);

                idi = terminoYPadreVuelta[2].getIdTermino();
                if (idi == null) {
                    idi = "";//No hay ningn idioma destinatario seleccionado por defecto
                }
                lom.getEducational().setIdiomaDest(idi);

                //mensaje de exito
                this.saveSuccessMessage(request, "catalogadorBasico.importar.exito");
                // cargo el lomavanzado obtenido en sesion
                this.getCatalogadorBSession(request).setMBOSesion(lom);
            }
            //elimino el lomes importado de sesion
            this.getCatalogadorBSession(request).setLomesImportado(null);

        } catch (org.acegisecurity.AccessDeniedException ad) {
            throw new java.lang.Exception("catalogador.basico", ad);

        } catch (Exception e) {
            logger.error("error en el catBasicoController, mtodo subirFichero");
            throw new java.lang.Exception("catalogador.basico", e);
        }
    }

    public String submitAdvertenciaImportar(ActionMapping mapping, SubmitAdvertenciaImportarForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        String accion = form.getAccion();
        String resAction = "";
        ResourceBundle datosResources = I18n.getInstance().getResource("application-resources",
                (Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE));

        if (datosResources.getString("catalogadorBasico.importar.advertencia.aceptar").equals(accion)) {
            resAction = "Aceptar";
        } else if (datosResources.getString("catalogadorBasico.importar.advertencia.cancelar").equals(accion)) {
            resAction = "Cancelar";
        }

        return resAction;

    }

    public String submitImportar(ActionMapping mapping, SubmitImportarForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        String accion = form.getAccion();
        String resAction = "";
        ResourceBundle datosResources = I18n.getInstance().getResource("application-resources",
                (Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE));
        if (datosResources.getString("catalogadorBasico.importar.aceptar").equals(accion)) {
            resAction = "Aceptar";

            if (form.getFichero() == null || form.getFichero().getFileName().equals(""))
                throw new ValidatorException("{catalogadorBasico.importar.error.ficherovacio}");

            //crear el datahandler
            InternetHeaders ih = new InternetHeaders();
            MimeBodyPart mbp = null;
            DataSource source = null;
            DataHandler dh = null;
            try {
                FormFile ff = (FormFile) form.getFichero();
                mbp = new MimeBodyPart(ih, ff.getFileData());
                source = new MimePartDataSource(mbp);
                dh = new DataHandler(source);
            } catch (Exception e) {
                if (logger.isDebugEnabled()) {
                    logger.debug("error al crear el datahandler");
                }
                throw new ValidatorException("{catalogadorBasico.importar.error}");
            }

            //validar el fichero
            Boolean valido = new Boolean(false);
            try {
                valido = this.getSrvValidadorService().obtenerValidacionLomes(dh);
            } catch (Exception e) {
                if (logger.isDebugEnabled()) {
                    logger.debug("error al llamar al servicio de validacin");
                }
                throw new ValidatorException("{catalogadorBasico.importar.error.novalido}");
            }

            if (!valido.booleanValue())
                throw new ValidatorException("{catalogadorBasico.importar.error.novalido}");

            //agregar el datahandler a sesion
            this.getCatalogadorBSession(request).setLomesImportado(dh);

        } else if (datosResources.getString("catalogadorBasico.importar.cancelar").equals(accion)) {
            resAction = "Cancelar";
        }

        return resAction;

    }

    public String guardarDatos(ActionMapping mapping, GuardarDatosForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //      Recogemos la accion a realizar
        String accion = form.getAccion();
        String resAction = "";
        ResourceBundle datosResources = I18n.getInstance().getResource("application-resources",
                (Locale) request.getSession().getAttribute(ConstantesAgrega.DEFAULT_LOCALE));

        if (datosResources.getString("catalogadorBasico.AceptarGuardar").equals(accion)) {
            resAction = "AceptarGuardar";
        } else if (datosResources.getString("catalogadorBasico.NoGuardar").equals(accion)) {
            resAction = "NoGuardar";
        } else if (datosResources.getString("catalogadorBasico.Cancelar").equals(accion)) {
            resAction = "Cancelar";
        }

        return resAction;
    }
}