int Servicios::procesarLibro(int indice) { int error = 0; SinIndice *listas = SinIndice().getInstancia(); list<unsigned int> *lista; switch(indice) { case INDICE_AUTORES :lista = listas->getPendientesAutores();break; case INDICE_EDITORIALES:lista = listas->getPendientesEditoriales();break; case INDICE_TITULOS:lista = listas->getPendientesTitulos();break; case INDICE_PALABRAS:lista = listas->getPendientesPalabras();break; } for (list<unsigned int>::iterator it = lista->begin(); it != lista->end(); it++) { Libro *libro = 0; int error = recuperarLibro((*it), &libro); 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(); switch(indice) { case INDICE_AUTORES :error = agregarIndiceAutores(libro);break; case INDICE_EDITORIALES:error = agregarIndiceEditoriales(libro);break; case INDICE_TITULOS:error = agregarIndiceTitulos(libro);break; case INDICE_PALABRAS:error = agregarIndicePalabras(libro);break; } delete libro; } //limpia la lista de ids pendientes de procesar switch(indice) { case INDICE_AUTORES :error = listas->limpiarListaAutores();break; case INDICE_EDITORIALES:error = listas->limpiarListaEditoriales();break; case INDICE_TITULOS:error = listas->limpiarListaTitulos();break; case INDICE_PALABRAS:error = listas->limpiarListaPalabras();break; } return error; }
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; }
int Servicios::obtenerLibro(string unId) { unsigned int id = atoi(unId.c_str()); fstream libro; string rutaSalida = Parametros().getParametro(CARPETA_SALIDA); string arcLibros = Parametros().getParametro(ARCHIVO_LIBROS); if (arcLibros == "") return ERROR_RUTA_ARCHIVO_LIBROS; ArchivoLibros *archivo = new ArchivoLibros(arcLibros); Libro *unLibro = NULL; //intento recuperar el libro int resultadoRecuperacion = 0; resultadoRecuperacion = recuperarLibro(id,&unLibro); if( resultadoRecuperacion == ERROR_LIBRO_INEXISTENTE){ return resultadoRecuperacion; }; // BORRAR // Parser *unParser = new Parser(); // unParser->parsear("./archivos/libros/Justin Somper - Vampiratas 3 - Emboscada en el Océano.txt"); // Libro *unLibro = unParser->getLibro(); //BORRAR string nombreArchivo = rutaSalida + unLibro->getTitulo(); nombreArchivo += ".txt"; libro.open(nombreArchivo.c_str(), ios::binary | ios::out); unsigned int tamanio; char* buff; string linea; //autor linea = "Autor: "; linea += unLibro->getAutor(); linea += "\n"; //editorial linea += "Editorial: "; linea += unLibro->getEditorial(); linea += "\n"; //titulo linea += "Titulo: "; linea += unLibro->getTitulo(); linea += "\n"; //texto linea += "\n\n...\n"; linea += unLibro->getTexto(); linea += "\n"; tamanio = linea.size(); buff= new char[tamanio]; memcpy(buff,linea.c_str(),tamanio); libro.write(buff,tamanio); delete [] buff; libro.close(); archivo->~ArchivoLibros(); unLibro->~Libro(); return 0; }