Simples, mas prático
Galera, vou postar um exemplo bem simples de como realizar
dois tipo diferentes de busca aproximada utilizando metodos
nativos 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("") && !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("") && !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
if(regra.equals(""))
candidataRegra = palavraAtual.getClasseGramatical();
else
candidataRegra = regra+" "+palavraAtual.getClasseGramatical();
if((!palavraAtual.getClasseGramatical().equalsIgnoreCase("Nao Encontrada"))
&&(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+""+regraAtual.getModulo()+">";
}else{
bufferGlobal+=pilha+" ";
}
}
bufferGlobal+=palavraAtual.getGrafia()+" ";
pilha="";
regra="";
}
i++;
}
daoRegras.close();
frame.setTextoMarcado(bufferGlobal);
}
}
Nenhum comentário:
Postar um comentário