/**
   * Obtiene un Map cuyas claves son los ids de elementos del cuadro y sus valores la lista de
   * identificadores de documentos electrónicos asociados a una lista de elementos del cuadro de
   * clasificación.
   *
   * @param idsElementosCF Identificador de la lista de ids de elementos del cuadro de
   *     clasificación.
   * @return Listas de identificadores de documentos electrónicos.
   */
  public Map getDocumentos(List idsElementosCF) {
    Map idsDocumentos = new HashMap();

    StringBuffer qual =
        new StringBuffer()
            .append(" WHERE ")
            .append(DBUtils.generateInTokenField(CAMPO_ID_ELEMENTO_CF, idsElementosCF));

    TableDef tablaDocElectronicos = new TableDef(TABLE_NAME);

    StringBuffer sqlFrom = new StringBuffer().append(tablaDocElectronicos.getDeclaration());

    DbColumnDef[] COLS_DEF_QUERY = new DbColumnDef[] {CAMPO_ID_ELEMENTO_CF, CAMPO_ID_FICH};

    List documentos =
        getVOS(qual.toString(), sqlFrom.toString(), COLS_DEF_QUERY, DocDocumentoVO.class);

    for (int i = 0; i < documentos.size(); i++) {
      DocDocumentoVO documento = ((DocDocumentoVO) documentos.get(i));

      Object obj = idsDocumentos.get(documento.getIdObjeto());
      ArrayList elem = null;
      if (obj != null) elem = (ArrayList) obj;
      else elem = new ArrayList();

      elem.add(documento.getIdFich());
      idsDocumentos.put(documento.getIdObjeto(), elem);
    }

    return idsDocumentos;
  }
 /**
  * Elimina un conjunto de usuarios de un grupo
  *
  * @param idGrupo Identificador de grupo
  * @param idUsuario Lista de identificadores de usuario. En caso de ser null se eliminaran todos
  *     los usuarios del grupo
  */
 public void removeGrupoUsuario(String idGrupo, String[] idUsuario) {
   StringBuffer qual =
       new StringBuffer("WHERE ").append(DBUtils.generateEQTokenField(CAMPO_ID_GRUPO, idGrupo));
   if (idUsuario != null)
     qual.append(" AND ").append(DBUtils.generateInTokenField(CAMPO_ID_USUARIO, idUsuario));
   deleteVO(qual.toString(), TABLE_NAME);
 }
  /**
   * Obtiene la lista de documentos electrónicos de un elemento del cuadro de clasificación.
   *
   * @param idElementoCF Identificador del elemento del cuadro de clasificación.
   * @param idClfPadre Identificador del clasificador padre.
   * @param estados Lista de estados de los documentos.
   * @return Listas de documentos electrónicos.
   */
  public List getDocumentos(String idElementoCF, String idClfPadre, int[] estados) {

    // HashMap pairs = new HashMap();
    // pairs.put(TABLE_NAME,COL_DEFS);
    // pairs.put(DepositoElectronicoDBEntityImpl.TABLE_NAME,
    // new DbColumnDef [] {
    // new DbColumnDef("nombreDeposito",
    // DepositoElectronicoDBEntityImpl.CAMPO_NOMBRE) });
    // TODO ZMIGRACION BD - OUTER JOIN (PROBADO
    StringBuffer qual = new StringBuffer().append(" WHERE ");
    // .append(DBUtils.generateOuterJoinCondition(
    // DepositoElectronicoDBEntityImpl.CAMPO_ID_EXT,
    // CAMPO_ID_EXT_DEPOSITO))
    // .append(" AND ");

    if (StringUtils.isNotBlank(idElementoCF))
      qual.append(DBUtils.generateEQTokenField(CAMPO_ID_ELEMENTO_CF, idElementoCF)).append(" AND ");

    qual.append(DBUtils.generateEQTokenField(CAMPO_ID_CLF_PADRE, idClfPadre));

    if ((estados != null) && (estados.length > 0))
      qual.append(" AND ").append(DBUtils.generateInTokenField(CAMPO_ESTADO, estados));

    qual.append(" ORDER BY ").append(CAMPO_NOMBRE.getQualifiedName());

    TableDef tablaDocElectronicos = new TableDef(TABLE_NAME);
    JoinDefinition[] joins =
        new JoinDefinition[] {
          new JoinDefinition(
              new DbColumnDef(tablaDocElectronicos, CAMPO_ID_EXT_DEPOSITO),
              new DbColumnDef(
                  new TableDef(DepositoElectronicoDBEntityImpl.TABLE_NAME),
                  DepositoElectronicoDBEntityImpl.CAMPO_ID_EXT)),
        };

    StringBuffer sqlFrom = new StringBuffer();
    sqlFrom.append(DBUtils.generateLeftOuterJoinCondition(tablaDocElectronicos, joins));

    DbColumnDef[] COLS_DEF_QUERY =
        (DbColumnDef[])
            ArrayUtils.concat(
                new DbColumnDef[] {DepositoElectronicoDBEntityImpl.CAMPO_NOMBRE}, COL_DEFS);

    // List documentos = getVOS(qual.toString(), pairs,
    // DocDocumentoVO.class);
    List documentos =
        getVOS(qual.toString(), sqlFrom.toString(), COLS_DEF_QUERY, DocDocumentoVO.class);
    for (int i = 0; i < documentos.size(); i++)
      ((DocDocumentoVO) documentos.get(i)).setTipoObjeto(TipoObjeto.ELEMENTO_CF);

    return documentos;
  }
  /**
   * {@inheritDoc}
   *
   * @see docelectronicos.db.IDocDocumentoCFDBEntity#updateIdElementocf(java.lang.String,
   *     java.lang.String, java.lang.String[])
   */
  public void updateIdElementocf(
      String idElementocfAntiguo, String idElementoCfNuevo, String[] idsInternosDocumentos) {

    StringBuilder qual =
        new StringBuilder(DBUtils.WHERE)
            .append(DBUtils.generateEQTokenField(CAMPO_ID_ELEMENTO_CF, idElementocfAntiguo))
            .append(DBUtils.AND)
            .append(DBUtils.generateInTokenField(CAMPO_ID, idsInternosDocumentos));

    HashMap colToUpdate = new HashMap();
    colToUpdate.put(CAMPO_ID_ELEMENTO_CF, idElementoCfNuevo);
    updateFields(qual.toString(), colToUpdate, TABLE_NAME);
  }
  /*
   * (non-Javadoc)
   *
   * @see docelectronicos.db.IDocDocumentoCFDBEntity#update(java.lang.String,
   * int[], int)
   */
  public void update(String idObj, int[] estadosAActualizar, int nuevoEstado) {
    StringBuffer qual = new StringBuffer().append(" WHERE ");

    if (StringUtils.isNotBlank(idObj))
      qual.append(DBUtils.generateEQTokenField(CAMPO_ID_ELEMENTO_CF, idObj));

    if ((estadosAActualizar != null) && (estadosAActualizar.length > 0))
      qual.append(" AND ").append(DBUtils.generateInTokenField(CAMPO_ESTADO, estadosAActualizar));

    HashMap colToUpdate = new HashMap();
    colToUpdate.put(CAMPO_ESTADO, new Integer(nuevoEstado));
    updateFields(qual.toString(), colToUpdate, TABLE_NAME);
  }