Pular para o conteúdo principal

Eventos

O Netuno permite que você injete eventos durante alguma fase de sua execução. Por exemplo, podemos injetar um evento que roda logo antes do setup construir a base de dados (que funciona mais ou menos como definir um script em netuno/apps/minha_app/server/setup/_start.js) ou um evento que roda logo após o processamento de construção da base de dados ser finalizado (que seria análogo ao netuno/apps/minha_app/server/setup/_end.js).

Para isso precisamos extender a classe org.netuno.tritao.event.EventBase. Vamos também definir a nossa package, que será a mesma definida nos tutoriais anteriores de serviços e recursos do Java Core.

package org.netuno.addon.calc.event;

import org.netuno.tritao.event.EventBase;

public class EventSetupStart extends EventBase {
// ...
}

Depois, criamos o constructor que usa o constructor da super classe EventBase para inicializar o evento:

package org.netuno.addon.calc.event;

import org.netuno.proteu.Proteu;
import org.netuno.tritao.event.EventBase;
import org.netuno.tritao.hili.Hili;

public class EventSetupStart extends EventBase {

public EventSetupStart(Proteu proteu, Hili hili) {
// ...
}
}

Além dos objetos do tipo Proteu e Hili, precisamos passar para o constructor da super classe o tipo de evento. Os tipos de evento estão definidos em import org.netuno.tritao.event.EventId. Também precisamos passar para o constructor um número inteiro que representa a ordem de execução do evento. Assim, registrando vários eventos para o mesmo tipo de evento, é possível controlar qual dos eventos será executado primeiro, qual será executado logo em seguida, e assim por diante. Um número como 100 é bom porque é possível colocar outros eventos que executarão antes dele (por exemplo, 50).

package org.netuno.addon.calc.event;

import org.netuno.proteu.Proteu;
import org.netuno.tritao.event.EventBase;
import org.netuno.tritao.hili.Hili;
import org.netuno.tritao.event.EventId;

public class EventSetupStart extends EventBase {

public EventSetupStart(Proteu proteu, Hili hili) {
super(proteu, hili, EventId.SETUP_START, 100);
}
}

Para referência, a lista completa de todos os tipos de eventos disponíveis pode ser encontrada em:

Voltando ao nosso código, vamos finalizar sobrescrevendo a função run:

package org.netuno.addon.calc.event;

import org.netuno.proteu.Proteu;
import org.netuno.psamata.Values;
import org.netuno.tritao.event.EventBase;
import org.netuno.tritao.event.EventId;
import org.netuno.tritao.hili.Hili;

public class EventSetupStart extends EventBase {

public EventSetupStart(Proteu proteu, Hili hili) {
super(proteu, hili, EventId.SETUP_START, 100);
}

@Override
public void run(Values data) {
System.out.println("CUSTOM SETUP START EVENT "+ data.toJSON());
}

}

O argumento data serve para que o evento receba dados adicionais. Por enquanto ele só é utilizado nos eventos relacionados às actions. Por exemplo, podemos criar um evento que executa toda vez que algo é salvo no banco de dados e então escreve uma mensagem no console do Netuno:

package org.netuno.addon.calc.event;

import org.netuno.proteu.Proteu;
import org.netuno.psamata.Values;
import org.netuno.tritao.db.DataItem;
import org.netuno.tritao.event.EventBase;
import org.netuno.tritao.event.EventId;
import org.netuno.tritao.hili.Hili;

public class EventActionSave extends EventBase {

public EventActionSave(Proteu proteu, Hili hili) {
super(proteu, hili, EventId.ACTION_SAVE, 100);
}

@Override
public void run(Values data) {
DataItem dataItem = data.get("dataItem");
System.out.println("SAVING " + dataItem.getFormName());
// or
System.out.println("SAVING " + data.get("dataItem", DataItem.class).getFormName());
}

}

Agora é só compilar a classe, se certificando de que o arquivo .class está na pasta:

  • netuno/core/web/WEB-INF/classes/org/netuno/addon/calc/event/

Ou produzir um arquivo JAR, certificando-se de que ele está na pasta:

  • netuno/lib/

Você pode ver os arquivos completos do projeto nesse link.