opa!
blz?
ta assim o looping da primeira versão que eu fiz ontem, que itera um List fixo..
eu nao postei ainda o novo looping, pq eu ainda to terminando de fazer a tag que aceita argumentos.. e ainda nao ta funcional...
//bloco que procura os loopings com o numero de vezes do tamanho de um List que recebe..
while (str.indexOf("[LOOP_TASK]") != -1) {
int inicio = str.indexOf("[LOOP_TASK]");
int fim = str.indexOf("[/LOOP_TASK]")+12;
String tag = str.substring(inicio,fim-12);
String valueTag = str.substring(inicio+11,fim-12);
str.replace(inicio,fim,appendaLoopTask(valueTag));
}
/método appendaLoopTask, que appenda todo locl de looping, inclusive com novas tags de valores..
private String appendaLoopTask(String tags) {
StringBuffer sb = new StringBuffer();
for(int i=0;i<listTasks.size();i++) {
sb.append(tags + "${LOOP}\n");
}
return sb.toString();
}
esse código ta até rapidinho, apesar dessa segunda versao que eu to fazendo ta entre 20 a 30% mais rapido pois instancia menos objetos e faz menos redundancias e ainda segui a dica do danielDestro em marcar aonde o código parou para nao varrer sempre desde o começo...
e mesmo assim com tudos esses defeitos, esse código parseia, interpreta e faz consultas no banco, troca os valores das tags, e ainda escreve um arquivo texto de tudo isso em apenas 298 milissegundos de um arquivo com 43kb com váááárias, eu disse várias tags a ser tartadas..
obs: a nova versao que eu to fazendo nao ta parecendo nada com esse código... pq esse código ta bem amarrado com a aplicação que usa..
agora, segue o código a ser parseado:
<!DOCTYPE HTML PUBLIC ""-//IETF//DTD HTML//EN"">
<html>
<head>
<meta http-equiv=""Content-Type""
content=""text/html; charset=iso-8859-1"">
<TITLE>TaskNotifier - Tarefas abertas de ${user.nomeCompleto}</TITLE></HEAD><BODY><BR>
<b>${user.nomeCompleto}</b>, <br>
Segue a lista de tarefas abertas: <br><br>
<ul>
[LOOP_TASK]
<li>
<b>${task.nomeProjeto}</b> - <i>${task.nomeTask}</i><br>
Tarefa criada em: ${task.dataCriacaoTask}<br>
Data de início da tarefa: ${task.dataInicioTask}<br>
Data de término: ${task.dataFimTask}<br>
Delegado a: ${user.nomeCompleto}<br>
Descrição: <i>${task.descricaoTask}</i><br>
</li><br>
task id: ${task.id}
[/LOOP_TASK]
user id: ${user.id}
user login ${user.userName}
</ul>
</body>
</html>
Obs: a tag de looping acaba rodando aproximandamente 15 vezes por usuário.. ou seja, esse código aí é parseado 18 vezes(numero de usuários) sendo que pra cada parse, o looping roda em média 15 vezes por usuário..
e pra cada aqruivo desse gerado, é enviado um email para o usuário..
abraços!
qdo eu terminar a segunda versao que eu to fazendo, eu passo pra quem quiser.