En esta ocasión realice un plugin muy básico para migrar datos desde un archivo en formato mar21 (.mrc) a una base de datos couchdb.
El funcionamiento es sencillo, se analiza el contenido del archivo se obtienen los campos y luego estos se insertan en una base de datos documental.
El funcionamiento es sencillo, se analiza el contenido del archivo se obtienen los campos y luego estos se insertan en una base de datos documental.
Simplemente seleccionando el archivo
Este plugin utiliza la biblioteca Marc4j
Aqui podemos ver el contenido del archivo Sesion.java
package org.avbravo.m21couchdb;
/**
*
* @author avbravo
*/
import com.fourspaces.couchdb.Database;
import com.fourspaces.couchdb.Document;
import com.fourspaces.couchdb.Session;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.JOptionPane;
import org.marc4j.MarcReader;
import org.marc4j.MarcStreamReader;
import org.marc4j.marc.DataField;
import org.marc4j.marc.Leader;
import org.marc4j.marc.Record;
import org.marc4j.marc.Subfield;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.awt.StatusDisplayer;
/**
*
* @author avbravo
*/
public class Sesion {
// private String ip = "localhost";
// private int puerto = 5984;
String directorio = "";
private static String urlArchivo;
Record record;
MarcReader reader;
Leader leader;
private static String ipCouchdb = "localhost";
private static int puertoCouchdb = 5984;
private static String userCouchdb;
private static String passwordCouchdb;
private static String prefijo;
private static String nuevo="si";
public static Session dbSession;
public static Database db;
public static Document doc;
// static DatabaseMetaData dmd;
int num_columnas;
// static List<String> ListaTablas = new ArrayList<String>();
static List<String> ListaMensajes = new ArrayList<String>();
int msgTypeError = NotifyDescriptor.ERROR_MESSAGE;
int msgType = NotifyDescriptor.INFORMATION_MESSAGE;
public static String getNuevo() {
return nuevo;
}
public static void setNuevo(String nuevo) {
Sesion.nuevo = nuevo;
}
public static String getUrlArchivo() {
return urlArchivo;
}
public static void setUrlArchivo(String urlArchivo) {
Sesion.urlArchivo = urlArchivo;
}
public static List<String> getListaMensajes() {
return ListaMensajes;
}
public static void setListaMensajes(List<String> ListaMensajes) {
Sesion.ListaMensajes = ListaMensajes;
}
public static String getPrefijo() {
return prefijo;
}
public static void setPrefijo(String prefijo) {
Sesion.prefijo = prefijo;
}
public String getIpCouchdb() {
return ipCouchdb;
}
public void setIpCouchdb(String ipCouchdb) {
this.ipCouchdb = ipCouchdb;
}
public String getPasswordCouchdb() {
return passwordCouchdb;
}
public void setPasswordCouchdb(String passwordCouchdb) {
this.passwordCouchdb = passwordCouchdb;
}
public int getPuertoCouchdb() {
return puertoCouchdb;
}
public void setPuertoCouchdb(int puertoCouchdb) {
this.puertoCouchdb = puertoCouchdb;
}
public String getUserCouchdb() {
return userCouchdb;
}
public void setUserCouchdb(String userCouchdb) {
this.userCouchdb = userCouchdb;
}
/*
* Agrega una tabla a la lista
*/
/*
*inicio
*/
public boolean ConectarCouchDB() {
try {
dbSession = new Session(ipCouchdb, puertoCouchdb);
String host = dbSession.getHost();
//
// dbSession
List<String> databasesCouchdb = dbSession.getDatabaseNames();
StatusDisplayer.getDefault().setStatusText("host..." + dbSession.getHost());
if (dbSession == null) {
return false;
}
return true;
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "ConectarCouchDB()\nMensaje: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
this.ListaMensajes.add("ConectarCouchDB) " + ex.getLocalizedMessage().toString());
StatusDisplayer.getDefault().setStatusText("ConectarCouchDB. Error " + ex.getMessage().toString());
}
return false;
}
public boolean CrearBaseDatos(String dbname) {
try {
db = dbSession.createDatabase(dbname);
if (db == null) {
return false;
}
return true;
} catch (Exception ex) {
// JOptionPane.showMessageDialog(null, "CrearBaseDatos()\nMensaje: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
this.ListaMensajes.add("CrearBaseDatos(String dbname) " + ex.getLocalizedMessage().toString());
StatusDisplayer.getDefault().setStatusText("CrearBaseDatos(String dbname). Error " + ex.getMessage().toString());
}
return false;
}
public boolean AbrirBaseDatos(String dbname) {
try {
db = dbSession.getDatabase(dbname);
if (db == null) {
return false;
}
return true;
} catch (Exception ex) {
// JOptionPane.showMessageDialog(null, "AbrirBaseDatos()\nMensaje: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
this.ListaMensajes.add("AbrirBaseDatos(String dbname) " + ex.getLocalizedMessage().toString());
StatusDisplayer.getDefault().setStatusText("AbrirBaseDatos(String dbname). Error " + ex.getMessage().toString());
}
return false;
}
public void AgregarDocumentos() {
try {
doc = new Document();
doc.setId("myid");
doc.put("nombre", "valor");
db.saveDocument(doc);
} catch (Exception ex) {
this.ListaMensajes.add("AgregarDocumentos " + ex.getLocalizedMessage().toString());
StatusDisplayer.getDefault().setStatusText("AgregarDocumentos(). Error " + ex.getMessage().toString());
}
}
public void MigrarArchivo(){
try {
CargarArchivo();
} catch (Exception ex) {
StatusDisplayer.getDefault().setStatusText("procesarTabla(). Error " + ex.getMessage().toString());
this.ListaMensajes.add("MigrarArchivo() " + ex.getLocalizedMessage().toString());
}
}
public boolean CargarArchivo() {
try {
InputStream in = new FileInputStream(urlArchivo);
if (in != null) {
reader = new MarcStreamReader(in);
while (reader.hasNext()) {
// obtener el registro completo mostrando todos los campos
record = reader.next();
System.out.println(record.toString());
ObtenerRegistroMarc();
// ObtenerValorCampos();
Campo856();
// break;
}
} else {
NotifyDescriptor d = new NotifyDescriptor.Message("No se encontro el archivo " + urlArchivo, msgTypeError);
DialogDisplayer.getDefault().notify(d);
}
return true;
} catch (Exception ex) {
NotifyDescriptor d = new NotifyDescriptor.Message(ex.getLocalizedMessage().toString(), msgTypeError);
DialogDisplayer.getDefault().notify(d);
}
return false;
}
public void ObtenerRegistroMarc() {
try {
doc = new Document();
leader = record.getLeader();
// System.out.println("leader: " + leader.toString());
//no se usa el id para que couchdb lo genere mejor
//doc.setId(id);
doc.put("leader", leader.toString());
String codigo, texto;
int largo;
List fields = record.getControlFields();
// System.out.println("(tags 001 a 009 size " + fields.size() + ")");
for (int i = 0; i < fields.size(); i++) {
//descompongo el elemento
largo = fields.get(i).toString().length();
// System.out.println(fields.get(i));
codigo = fields.get(i).toString().substring(0, 3);
texto = fields.get(i).toString().substring(4, largo);
// System.out.println("-----------> " + codigo + " --> " + texto);
doc.put(codigo, texto);
}
// returns fields for tags 010 through 999
List fields2 = record.getDataFields();
// System.out.println("tags 010 to 999 size " + fields2.size());
for (int i = 0; i < fields2.size(); i++) {
largo = fields2.get(i).toString().length();
// System.out.println(fields2.get(i));
codigo = fields2.get(i).toString().substring(0, 3);
texto = fields2.get(i).toString().substring(4, largo);
doc.put(codigo, texto);
}
Campo856();
db.saveDocument(doc);
System.out.println("--guardado----");
} catch (Exception ex) {
this.ListaMensajes.add("ObtenerRegistroMarc() " + ex.getLocalizedMessage().toString());
}
}
public void Campo856() {
try {
//------------------campo 245
DataField field = (DataField) record.getVariableField("856");
String tag = field.getTag();
char ind1 = field.getIndicator1();
char ind2 = field.getIndicator2();
// System.out.println("Tag: " + tag + " Indicator 1: " + ind1 + " Indicator 2: " + ind2);
List subfields = field.getSubfields();
Iterator i = subfields.iterator();
while (i.hasNext()) {
Subfield subfield = (Subfield) i.next();
char code = subfield.getCode();
String data2 = subfield.getData();
// System.out.println("Subfield code: " + code + " Data element: " + data2);
String x = String.valueOf(code);
if (x.equals("u")) {
doc.put("url", data2);
}
}
} catch (Exception ex) {
this.ListaMensajes.add("Campo856() " + ex.getLocalizedMessage().toString());
}
}
}
Comments