Simples, mas prático
Autor: Marcello Novaes | Publicado: 2006-11-24T20:53:00-02:00

Galera, vou postar um exemplo bem simples de como realizardois tipo diferentes de busca aproximada utilizando metodosnativos do DB4o, sem precisar fazer nada de novo.Nossa classe de dominio:public class Regra { private String padrao; private String tratamento; private String modulo; public String getModulo() {     return modulo; } public void setModulo(String modulo) {     this.modulo = modulo; } public String getPadrao() {     return padrao; } public void setPadrao(String padrao) {     this.padrao = padrao; } public String getTratamento() {     return tratamento; } public void setTratamento(String tratamento) {     this.tratamento = tratamento; }} Parte 2: DAO Nossa classe DAO:import com.db4o.Db4o;import com.db4o.ObjectContainer;import com.db4o.ObjectSet;import com.db4o.query.Constraint;import com.db4o.query.Query;import dominio.Palavra;import dominio.Regra;public class DAORegra {   public ObjectContainer db;    public DAORegra(){        }    public void open(String idioma){       this.db = Db4o.openFile("memoria/regras/"+idioma+".regras");   }    public void close(){       this.db.close();   }    public void store(String padrao, String tratamento,String modulo){       Regra regra = new Regra();       if(!padrao.equalsIgnoreCase("") &&amp; !tratamento.equalsIgnoreCase("")){                    regra.setPadrao(padrao.toUpperCase());                    ObjectSet result = db.get(regra);                    if(result.size() != 0){               regra = (Regra) result.next();           }                    regra.setModulo(modulo);           regra.setPadrao(padrao.toUpperCase());           regra.setTratamento(tratamento.toUpperCase());           db.set(regra);           db.commit();       }         }     public String[] getRegras(String padrao, String tratamento,String modulo){       Regra regra = new Regra();            Query query=db.query();       query.constrain(Regra.class);            Constraint constrPadrao=null,constrModulo=null,constrTratamento=null;            constrPadrao=query.descend("modulo").constrain(modulo);                 if(!padrao.equalsIgnoreCase("")){           constrPadrao=query.descend("padrao").constrain(padrao.toUpperCase()).startsWith(true);       }            if(!tratamento.equalsIgnoreCase("")){           constrPadrao=query.descend("tratamento").constrain(tratamento.toUpperCase()).startsWith(true);       }            ObjectSet result = query.execute();                 String[] regras = new String[result.size()];            if(result.size() == 0){           regras = new String[1];           regras[0] = "Nao Encontrada nenhuma ocorrência";       }else{           for(int i=0;i           regra = (Regra) result.next();               regras[i] = regra.getPadrao()+" : "+regra.getTratamento();           }       }            return regras;   }    public void delete(String padrao, String tratamento,String modulo){       Regra regra = new Regra();       regra.setModulo(modulo);            if(!padrao.equalsIgnoreCase("") &&amp; !tratamento.equalsIgnoreCase("")){           regra.setPadrao(padrao.toUpperCase());           regra.setTratamento(tratamento.toUpperCase());                    ObjectSet result = db.get(regra);                      if(result.size() != 0){               regra = (Regra) result.next();               db.delete(regra);               db.commit();           }       }        }    public Regra existeRegraIgual(String padrao){       Regra regra = new Regra();            Query query=db.query();       query.constrain(Regra.class);            Constraint constr=null;       constr=query.descend("padrao").constrain(padrao);            ObjectSet result = query.execute();            regra = (Regra) result.next();            return regra;   }    public int existeRegra(String padrao){       Regra regra = new Regra();            Query query=db.query();       query.constrain(Regra.class);            Constraint constr=null;       constr=query.descend("padrao").constrain(padrao.toUpperCase()).startsWith(true);            ObjectSet result = query.execute();                 return result.size();   } }Utilizando isso:(frame.getPalavras() retorna palavras é um vetor Palavra[], presumam isso):public class aplicarRegras {       public aplicarRegras(frameGeral frame){        Palavra palavraAtual;        Regra    regraAtual;        Palavra[] palavras = frame.getPalavras();        String bufferGlobal="",regra="", pilha="", candidataRegra="", idioma=frame.getIdiomaDeEntrada();        DAORegra    daoRegras    = new DAORegra();        daoRegras.open(idioma);        int i = 0;        while(i            palavraAtual = palavras[i];            if(regra.equals(""))                    candidataRegra  = palavraAtual.getClasseGramatical();            else                                   candidataRegra = regra+" "+palavraAtual.getClasseGramatical();            if((!palavraAtual.getClasseGramatical().equalsIgnoreCase("Nao Encontrada"))                &&amp;(daoRegras.existeRegra(candidataRegra)>0)){                    regra = candidataRegra;                    if(pilha.equals(""))                                pilha  = palavraAtual.getGrafia();                    else                                               pilha += " "+palavraAtual.getGrafia();            }else{                               if(!pilha.equals("")){                    regraAtual = daoRegras.existeRegraIgual(regra);                    if(regraAtual != null){                        bufferGlobal+="<"+regraAtual.getModulo()+">"+pilha+"";                    }else{                        bufferGlobal+=pilha+" ";                    }                }                bufferGlobal+=palavraAtual.getGrafia()+" ";                pilha="";                regra="";            }            i++;        }        daoRegras.close();        frame.setTextoMarcado(bufferGlobal);    }      }