예제 #1
0
int Servicios::recuperarLibro(unsigned int idLibro, Libro **libro)
{
	unsigned int offset = 0;

	string pathArbolPrimario = Parametros().getParametro(CARPETA_DATOS);
	pathArbolPrimario += NOMBRE_BMAS_PRIMARIO;

	ArbolBMasNumerico *arbolP = new ArbolBMasNumerico(pathArbolPrimario, TAMANIO_BLOQUE_BMAS_NUMERICO);

	resultadoOperacion resultado(OK) ;

	Registro* registro = arbolP->buscarRegistroNumerico(idLibro, &resultado);

	if (registro && resultado.getDescripcion() == "ENCONTRADO"){
		offset = registro->getReferencias()->front();
	}
	else{
		return ERROR_LIBRO_INEXISTENTE;
	}


	string rutaArcLibros = Parametros().getParametro(ARCHIVO_LIBROS);

	if (rutaArcLibros == "") return ERROR_RUTA_ARCHIVO_LIBROS;

	ArchivoLibros *archivo = new ArchivoLibros(rutaArcLibros);

	*libro = (archivo->recuperarLibro(offset));

	delete archivo;

	delete arbolP;

	return 0;
}
예제 #2
0
int Servicios::quitarArchivo(string unId)
{
	unsigned int id = atoi(unId.c_str());
	unsigned int offset = 0;

	cout<<"Eliminando libro "<<id<<"..."<<endl;

	//recuperar el offset del primario

	string pathArbolPrimario = Parametros().getParametro(CARPETA_DATOS);
	pathArbolPrimario += NOMBRE_BMAS_PRIMARIO;

	if (pathArbolPrimario == "") return ERROR_RUTA_BMAS_PRIMARIO;

	ArbolBMasNumerico *arbolP = new ArbolBMasNumerico(pathArbolPrimario, TAMANIO_BLOQUE_BMAS_NUMERICO);

	resultadoOperacion resultado(OK);

	Registro* registro = arbolP->buscarRegistroNumerico(id, &resultado);

	//TODO ver si esta recuperando bien el offset
	if (registro && resultado.getDescripcion() == "ENCONTRADO")
		offset = registro->getReferencias()->front();
	else
		return ERROR_LIBRO_INEXISTENTE;


//quitar de el archivo de registros variables

	string arcLibros = Parametros().getParametro(ARCHIVO_LIBROS);
	ArchivoLibros *archivo = new ArchivoLibros(arcLibros);
	Libro *libro = archivo->recuperarLibro(offset);
//	cout <<"Autor: "<< libro->getAutor() <<endl;
//	cout <<"Editorial: "<< libro->getEditorial() <<endl;
//	cout <<"Titulo: "<< libro->getTitulo() <<endl;
//	cout <<"Id: "<< libro->getId() <<endl;
//	cout <<"Cant.palabras: " << libro->getCantPalabras() << endl;
//	cout << "Presione ENTER para continuar...." << endl;
//	cin.get();

//	cout << "SACO EL LIBRO DEL ARCHIVO DE REGISTROS VARIABLES" << endl;
	archivo->suprimirLibro(offset);


//quitar del primario

	//cout << "QUITO DEL PRIMARIO EL ID" << endl;

	arbolP->eliminarNumerico(libro->getId());

	delete arbolP;

//quitar de los indices

	//cout << "SACO DE LOS INDICES" << endl;

	//cout << "SACO DE AUTORES" << endl;
	sacarDelArbol(NOMBRE_BMAS_AUTORES,libro->getAutor(),libro->getId());
	//cout << "Presione ENTER para continuar...." << endl;
	//cin.get();

	//cout << "SACO DE EDITORIALES" << endl;
	sacarDelArbol(NOMBRE_BMAS_EDITORIALES,libro->getEditorial(),libro->getId());
	///cout << "Presione ENTER para continuar...." << endl;
	//cin.get();

	//cout << "SACO DE TITULOS" << endl;
	sacarDelHash(NOMBRE_HASH_TITULOS,libro->getTitulo(),libro->getId());
	//cout << "Presione ENTER para continuar...." << endl;
	//cin.get();

	//cout << "SACO PALABRAS" << endl;
	//cout << "Procesando la quita del indice..." << endl;
	set<string> *palabras = libro->getListaPalabras();

	for (set<string>::iterator it = palabras->begin(); it != palabras->end(); it++)
	{
		sacarDelHash(NOMBRE_HASH_PALABRAS, *it ,libro->getId());
	}


//quitar de la lista de libros sin procesar
	//cout << "SACO DE LOS INDICES SIN PROCESAR" <<endl;
	SinIndice *listas  = SinIndice().getInstancia();
	listas->sacarLibroDeTodasLasListas(id);

	delete archivo;

	/*******************AGREGADO ENTREGA II*************************/


	string pathArbolPalabras = Parametros().getParametro(CARPETA_DATOS);
	pathArbolPalabras += NOMBRE_BMAS_PALABRAS;
	pathArbolPalabras += "_" + Util().UIntToString(id);

	resultadoOperacion resultadoOp(OK);


	ArbolBMasAlfabetico *arbolPal = new ArbolBMasAlfabetico(pathArbolPalabras, TAMANIO_BLOQUE_BMAS_PALABRAS);



	//recorrer el arbol de palabras
	Registro *reg = arbolPal->buscarRegistro("a",&resultadoOp);
	unsigned int lista;

	while (reg != NULL)
	{
		lista = reg->getReferenciai(1);
		ListasIds().eliminarLista(lista);
		reg = arbolPal->siguiente();
	}

	arbolPal->~ArbolBMasAlfabetico();

	Util().eliminarArchivo(pathArbolPalabras);

	/*******************AGREGADO ENTREGA II*************************/


	return 0;


}