/**
   * @see
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.AsociacionArchivosController#hayPrincipal(org.apache.struts.action.ActionMapping,
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.HayPrincipalForm,
   *     javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public final java.lang.String hayPrincipal(
      ActionMapping mapping,
      es.pode.empaquetador.presentacion.basico.asociar.archivos.HayPrincipalForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    AsociarSession asoSes = this.getAsociarSession(request);
    AsociacionArchivosSession asoArcSes = this.getAsociacionArchivosSession(request);
    if (asoArcSes.getFicheros().size() == 0) {
      if (logger.isDebugEnabled())
        logger.debug("la lista de ficheros a asociar esta vacia, lanzo una exception");
      throw new ValidatorException("{portalempaquetado.basico.asociar.error.sinficheros}");
    }
    String resultado = "No";
    if (asoSes.getHref() != null && !asoSes.getHref().equals("")) {
      resultado = "Si";
    } else if (asoArcSes.getFicheros().size() == 1) {
      //    		String nombre;
      FileVO file = (FileVO) asoArcSes.getFicheros().get(0);
      //    		ArchivoVO arc= (ArchivoVO)asoSes.getFicheros().get(0);
      //    		if(arc.getCarpetaPadre()!=null && !arc.getCarpetaPadre().equals(""))
      //    			nombre= arc.getCarpetaPadre()+"/"+ arc.getNombre();
      //    		else
      //    			nombre=  arc.getNombre();
      asoSes.setHref(file.getHref());
      resultado = "Si";
    }

    return resultado;
  }
  /**
   * @see
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.AsociacionArchivosController#recuperarFicheros(org.apache.struts.action.ActionMapping,
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.RecuperarFicherosForm,
   *     javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public final void recuperarFicheros(
      ActionMapping mapping,
      es.pode.empaquetador.presentacion.basico.asociar.archivos.RecuperarFicherosForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    AsociacionArchivosSession asoArcSes = this.getAsociacionArchivosSession(request);

    form.setFicheros(asoArcSes.getFicheros());
  }
  /**
   * @see
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.AsociacionArchivosController#desasociar(org.apache.struts.action.ActionMapping,
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.DesasociarForm,
   *     javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public final void desasociar(
      ActionMapping mapping,
      es.pode.empaquetador.presentacion.basico.asociar.archivos.DesasociarForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    AsociacionArchivosSession asoArcSes = this.getAsociacionArchivosSession(request);
    GestorArchivosSession archSes = this.getGestorArchivosSession(request);
    AsociarSession asoSes = this.getAsociarSession(request);
    List files = asoArcSes.getFicheros();

    ArchivoVO archivo = (ArchivoVO) archSes.getPath().get(archSes.getPath().size() - 1);
    if (logger.isDebugEnabled())
      logger.debug("voy a buscar el ArchivoVO con el nombre " + form.getNombre());
    ArchivoVO recu = buscarPorNombre(archivo, form.getNombre());
    String nombreFile;
    if (recu.getCarpetaPadre() != null && !recu.getCarpetaPadre().equals("")) {
      nombreFile = recu.getCarpetaPadre() + "/" + recu.getNombre();
    } else {
      nombreFile = recu.getNombre();
    }

    if (recu.getEsFichero().booleanValue()) {
      for (int i = 0; i < files.size(); i++) {
        if (((FileVO) files.get(i)).getHref().equals(nombreFile)) {
          files.remove(i);
          if (nombreFile.equals(asoSes.getHref())) {
            asoSes.setHref("");
          }
        }
      }
    } else {
      List listaBorrar = new ArrayList();
      listarFileVO(recu.getContenidos(), listaBorrar);
      boolean eliminado;
      for (int i = 0; i < listaBorrar.size(); i++) {
        eliminado = false;
        for (int j = 0; j < files.size() && !eliminado; j++) {
          if (((FileVO) files.get(j)).getHref().equals(((FileVO) listaBorrar.get(i)).getHref())) {
            if (files.get(j).equals(asoSes.getHref())) {
              asoSes.setHref("");
            }
            files.remove(j);
            eliminado = true;
          }
        }
      }
    }
  }
  /**
   * @see
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.AsociacionArchivosController#asociar(org.apache.struts.action.ActionMapping,
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.AsociarForm,
   *     javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public final void asociar(
      ActionMapping mapping,
      es.pode.empaquetador.presentacion.basico.asociar.archivos.AsociarForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    AsociacionArchivosSession asocArSes = this.getAsociacionArchivosSession(request);
    GestorArchivosSession archSes = this.getGestorArchivosSession(request);

    String nombre = form.getNombre();
    if (logger.isDebugEnabled()) logger.debug("voy a buscar el ArchivoVO con el nombre " + nombre);
    ArchivoVO archivo = (ArchivoVO) archSes.getPath().get(archSes.getPath().size() - 1);
    ArchivoVO recu = buscarPorNombre(archivo, nombre);

    Set tempSet = new HashSet(asocArSes.getFicheros());

    // primer caso .. recu es es un fichero... lo agrego a la lista sin mas
    if (recu.getEsFichero().booleanValue()) {
      String nombreFile;
      if (recu.getCarpetaPadre() != null && !recu.getCarpetaPadre().equals("")) {
        nombreFile = recu.getCarpetaPadre() + "/" + recu.getNombre();
      } else {
        nombreFile = recu.getNombre();
      }
      FileVO file = new FileVO();
      file.setHref(nombreFile);

      if (tempSet.add(file)) {
        asocArSes.getFicheros().add(file);
      }
    } else { // caso dos .. recu es una carpeta, por lo que debo agregar a la lista todos sus
      // contendios
      List filesTemp = new ArrayList();
      ArchivoVO[] archivos = recu.getContenidos();
      if (archivos != null && archivos.length > 0) {
        listarFileVO(archivos, filesTemp);
      }

      for (int i = 0; i < filesTemp.size(); i++) {
        if (tempSet.add(filesTemp.get(i))) {
          asocArSes.getFicheros().add(filesTemp.get(i));
        }
      }
    }
  }
  /**
   * @see
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.AsociacionArchivosController#aceptarFicheros(org.apache.struts.action.ActionMapping,
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.AceptarFicherosForm,
   *     javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public final void aceptarFicheros(
      ActionMapping mapping,
      es.pode.empaquetador.presentacion.basico.asociar.archivos.AceptarFicherosForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    if (form instanceof PrincipalSubmitFormImpl) {
      PrincipalSubmitFormImpl principalForm = (PrincipalSubmitFormImpl) form;
      if (principalForm.getPrincipal() == null) {
        if (logger.isDebugEnabled()) logger.debug("no se ha seleccionado ningun fichero principal");
        throw new ValidatorException("{portalempaquetado.basico.asociar.error.sinprincipal}");
      }
    }

    AsociacionArchivosSession asoArcSes = this.getAsociacionArchivosSession(request);
    AsociarSession asoSes = this.getAsociarSession(request);

    asoSes.setFicheros(asoArcSes.getFicheros());

    asoArcSes.setFicheros(null);
  }
  /**
   * @see
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.AsociacionArchivosController#recuperarDatos(org.apache.struts.action.ActionMapping,
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.RecuperarDatosForm,
   *     javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public final void recuperarDatos(
      ActionMapping mapping,
      es.pode.empaquetador.presentacion.basico.asociar.archivos.RecuperarDatosForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    AsociarSession asoSes = this.getAsociarSession(request);
    AsociacionArchivosSession asoArcSes = this.getAsociacionArchivosSession(request);
    //    	if(asoArcSes.getFicheros()==null)
    //    		asoArcSes.setFicheros(new ArrayList());

    EmpaquetadorSession empSes = this.getEmpaquetadorSession(request);
    GestorArchivosSession sesArch = this.getGestorArchivosSession(request);

    String idOde = empSes.getIdLocalizador();
    ArchivoVO arbol = this.getSrvGestorArchivosService().recuperarArbol(idOde);
    if (logger.isDebugEnabled()) logger.debug("creo la lista de path");

    List listaPath = sesArch.getPath();
    listaPath.set(0, arbol);
    for (int i = 1; i < listaPath.size(); i++) {
      ArchivoVO elemento = (ArchivoVO) listaPath.get(i);
      String nombre = elemento.getNombre();
      ArchivoVO elementoAnterior = (ArchivoVO) listaPath.get(i - 1);
      ArchivoVO[] arrayContenidos = elementoAnterior.getContenidos();

      ArchivoVO hijo = null;
      for (int j = 0; j < arrayContenidos.length && hijo == null; j++) {
        if (arrayContenidos[j].getNombre().equals(nombre)) {
          hijo = arrayContenidos[j];
        }
      }
      listaPath.set(i, hijo);
    }

    ArchivoVO[] lista = null;
    ArchivoVO ultimoEnPath = null;
    if (sesArch.getPath().size() != 1) {
      ultimoEnPath = (ArchivoVO) sesArch.getPath().get(sesArch.getPath().size() - 1);
      if (ultimoEnPath.getCarpetaPadre() == null) {
        lista = this.getSrvGestorArchivosService().listar(idOde, ultimoEnPath.getNombre());
      } else {

        lista =
            this.getSrvGestorArchivosService()
                .listar(idOde, ultimoEnPath.getCarpetaPadre() + "/" + ultimoEnPath.getNombre());
      }

    } else if (sesArch.getPath().size() == 1) {
      lista = this.getSrvGestorArchivosService().listar(idOde, null);
    }

    form.setFicheros(Arrays.asList(lista)); // ArchivoVO

    if (asoArcSes.getFicheros() == null) {
      if (logger.isDebugEnabled())
        logger.debug("lista de ficheros en asosiacionArchivoSession esta vacia... la relleno");
      asoArcSes.setFicheros(new ArrayList());
      asoArcSes.getFicheros().addAll(asoSes.getFicheros());
    }

    form.setFicherosSeleccionados(asoArcSes.getFicheros()); // FileVO
    form.setPath(sesArch.getPath());
    form.setArbol((ArchivoVO) sesArch.getPath().get(0));
  }