/*
* Guardado2Plano.java
*
* Created on 2 de julio de 2006, 20:00
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package telefono.almacen;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordFilter;
import javax.microedition.rms.RecordStore;
import telefono.almacen.AlmacenMicropocha.RmsFiltro;
/** cuando se crea una instancia de esta clase, con un Pool, realiza todos los
* guardados pendientes en el pool y muere.
* el hilo es de baja prioridad.
* @depercated use GuardadoDaemon instead
*/
class Guardado2Plano implements Runnable
{
private Pool pool=null;
/** constructor/ejecutor
* contruye una instancia del escritor de pendingWrites y lo ejecuta
* @param async indica si realizaremos la operaci�n en 2� plano
* @param p pool de escrituras pendientes
*/
public Guardado2Plano(Pool p)
{
this(p,true);
}
/** constructor/ejecutor
* contruye una instancia del escritor de pendingWrites y lo ejecuta
* @param async indica si realizaremos la operaci�n en 2� plano
* @param p pool de escrituras pendientes
*/
public Guardado2Plano(Pool p,boolean async)
{
pool=p;
if(async)
{
Thread yo=new Thread(this);
yo.setPriority(Thread.MIN_PRIORITY);
yo.start();
}
else
{
run();
}
}
synchronized public void run()
{
PendingWrite pw;
for(pw=pool.pop();pw!=null;pw=pool.pop())
{
guardar(pw.nombre,pw.valor);
}
}
/** guarda los datos en un slot
* @param nombre nombre del slot
* @param datos datos para introducir en el slot
**/
private void guardar(String nombre,byte[]datos)
{
RecordStore rs=null;
try
{
//buscar y borrar elemto con mismo nombre
borrar(nombre);
rs=RecordStore.openRecordStore(AlmacenMicropocha.RMS_ID,true);
//grabar elemento
rs.addRecord(datos,0,datos.length);
rs.closeRecordStore();
}
catch (Exception e)
{
e.printStackTrace();
}
}
/** borra un slot
* @throws java.util.NoSuchElementException nunca
* @throws java.io.IOException Error rms
*/
public void borrar(String nombre) throws java.io.IOException, java.util.NoSuchElementException
{
RecordStore rs=null;
try
{
rs=RecordStore.openRecordStore(AlmacenMicropocha.RMS_ID,true);
//buscar y borrar elemto con mismo nombre
RecordFilter filtro=new AlmacenMicropocha.RmsFiltro(nombre);
RecordEnumeration re=rs.enumerateRecords(filtro,null,false);
while(re.hasNextElement())
{
int el=re.nextRecordId();
rs.deleteRecord(el);
}
rs.closeRecordStore();
}
catch (Exception e)
{
throw new java.io.IOException(e.getMessage());
}
}
}