/**
   * @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#navegar(org.apache.struts.action.ActionMapping,
   *     es.pode.empaquetador.presentacion.basico.asociar.archivos.NavegarForm,
   *     javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public final void navegar(
      ActionMapping mapping,
      es.pode.empaquetador.presentacion.basico.asociar.archivos.NavegarForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    GestorSesion gs = new GestorSesion();

    GestorArchivosSession sesArch = this.getGestorArchivosSession(request);
    String referencia = form.getHref();
    List listaPath = sesArch.getPath();

    List ruta = new ArrayList();
    if (logger.isDebugEnabled()) logger.debug("Path es el primer ArchivoVO");
    ArchivoVO path = (ArchivoVO) listaPath.get(0);

    if (logger.isDebugEnabled())
      logger.debug("si el href está aki, se acaba, si no se hace recursividad");
    if (path.getHref().equals(referencia)) {
      ruta.add(path);
    } else {
      if (logger.isDebugEnabled())
        logger.debug("llama a un método recursivo para calcular la ruta");

      List tmpList = gs.rellenarBarraNavegacion(path.getContenidos(), referencia);
      ruta.add(path);
      if (tmpList != null && tmpList.size() > 0) {
        ruta.addAll(tmpList);
      }
    }
    sesArch.setPath(ruta);
    //    	if(!sesArch.getAccion().equals("Normal"))
    //    	{
    //    		sesArch.setModoPegar(true);
    //    	}
  }
  /**
   * @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));
  }