Package telefono.almacen

Source Code of telefono.almacen.AlmacenMicropocha$RmsFiltro

/*
* AlmacenMicropocha.java
*
* Created on 25 de febrero de 2006, 18:21
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/

package telefono.almacen;

import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordFilter;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreNotOpenException;
import telefono.Partida;

/**
*
* @author Enrique Vicent Ramis
*/
public class AlmacenMicropocha implements telefono.Almacen
{  
    /**identificador rms*/
    public static final String RMS_ID="MicroPocha";
   
    telefono.MicroPocha micropocha;
    private final static String savename="auto";
    Pool pool;
    private GuardadoDemonio guardador;
   
    /**clase auxiliar para filtrar registros por id*/
    public static class RmsFiltro implements RecordFilter
    {
        private String criterio;
        public  RmsFiltro(String criterio)
        {
            this.criterio=criterio;
        }
       
        public boolean matches(byte[] b)
        {
            String paquete=new String(b);
            return getId(paquete).equals(criterio);
        }
    }
   
    /** Creates a new instance of AlmacenMicropocha */
    public AlmacenMicropocha(telefono.MicroPocha m)
    {
        this.micropocha=m;
        this.pool=new Pool();
        guardador=new GuardadoDemonio(pool);               
    }
   
    /** guarda la partida actual en el slot autom?tico
     * adem�s el amacenado se hace en segundo plano.
     * si recibe m�s de una petici�n de guadado mientras est� procesando otra
     * petici�n anterior, procesar� directamente la �ltima, descartando el resto
     * ya que de todos modos se sobreescribir�an, es m�s r�pido descartarlas.
     * 
     **/
    public void guardar() throws java.io.IOException
    {
        guardar(savename);
    }
   
    /** guarda la partida actual con el nombre dado 
     * @param nombre nombre del slot destino */
    public void guardar(String nombre) throws java.io.IOException
    {
        if(nombre.indexOf('|')!=-1)
            throw new java.io.IOException("error no se admiten nombres con el caracter |");
        StringBuffer xml=new StringBuffer(nombre);
        xml.append('|');
        micropocha.toXml(xml);
        byte [] buffer=xml.toString().getBytes();
        pool.add(nombre,buffer);
    }
   
    /** carga la partida almacenada enel slot autom?tico */
    public String cargar() throws java.io.IOException
    {
        return cargar(savename);
    }
   
    /** carga la partid almacenada en un slot con el nombre dado */
    public String cargar(String nombre) throws java.io.IOException
    {
        byte[]result=null;
        RecordStore rs=null;
        try
        {
            rs=RecordStore.openRecordStore(RMS_ID,true);
            //buscar y borrar elemto con mismo nombre
            RecordFilter filtro=new RmsFiltro(nombre);
            RecordEnumeration re=rs.enumerateRecords(filtro,null,false);
            while(re.hasNextElement())
            {
                int el=re.nextRecordId();
                result=rs.getRecord(el);
            }
            rs.closeRecordStore();
        }
        catch (Exception e)
        {
            throw new java.io.IOException(e.getMessage());
        }
        String ret= getRecord(new String(result));
        System.err.println(ret);
        return ret;
    }
   
    /** borra una partida de 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(RMS_ID,true);
            //buscar y borrar elemto con mismo nombre
            RecordFilter filtro=new 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());
        }
    }
   
    /** obtiene una lista de las partidas existentes */
    public String [] getExistentes()
    {
        String[]result=null;
        RecordStore rs=null;
        try
        {
            rs=RecordStore.openRecordStore(RMS_ID,true);
            //buscar y borrar elemto con mismo nombre
            RecordEnumeration re=rs.enumerateRecords(null,null,false);
            result=new String[re.numRecords()];
            for(int i=0;i<result.length;i++)
            {
                String el=new String(re.nextRecord());
                result[i]=getId(el);
            }
            rs.closeRecordStore();
        }
        catch (Exception e)
        {
            //throw new java.io.IOException(e.getMessage());
        }
        return result;
    }
   
    /** dado un registro obtiene su identificador
     *
     * un registro tiene el formato identificador|<xml...
     * donde <xml... es la representacion de la partida en xml
     * @param registro registro de rms
     * @return identificador
     */
    static public String getId(String registro)
    {
        int idLng;
        idLng=registro.indexOf('|');
        if(idLng==-1)
            return new String();
        else
            return registro.substring(0,idLng);
    }
   
    /** dado un registro obtiene sus datos
     * un registro tiene el formato identificador|<xml...
     * donde <xml... es la representacion de la partida en xml
     * @param registro registro de rms
     * @return datos sin identificador ni separador de campo
     */
    static public String getRecord(String registro)
    {
        int idLng;
        idLng=registro.indexOf('|');
        if(idLng==-1)
            return "";
        else
            return registro.substring(idLng+1);
    }
   
}


TOP

Related Classes of telefono.almacen.AlmacenMicropocha$RmsFiltro

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.