package hu.bme.mit.incquery.cep.casestudy.transaction.test; import static com.google.common.base.Preconditions.checkArgument; import hu.bme.mit.incquery.cep.api.ICepAdapter; import hu.bme.mit.incquery.cep.api.ICepRule; import hu.bme.mit.incquery.cep.api.ViatraCepManager; import hu.bme.mit.incquery.cep.casestudy.base.adapters.TransactionEventAdapter; import hu.bme.mit.incquery.cep.casestudy.transaction.Component; import hu.bme.mit.incquery.cep.casestudy.transaction.TransactionComponentA; import hu.bme.mit.incquery.cep.casestudy.transaction.TransactionComponentB; import hu.bme.mit.incquery.cep.casestudy.transaction.TransactionComponentC; import hu.bme.mit.incquery.cep.casestudy.transaction.TransactionFactory; import hu.bme.mit.incquery.cep.casestudy.transaction.TransactionModel; import hu.bme.mit.incquery.cep.casestudy.transaction.mapping.IncQuery2ViatraCep; import hu.bme.mit.incquery.cep.metamodels.internalsm.EventProcessingContext; import java.util.List; import java.util.Map; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import com.google.common.collect.Lists; public class IncQueryTester { private ICepAdapter adapter = new TransactionEventAdapter(); private static IncQueryTester instance; private IncQueryTester() { } public static IncQueryTester getInstance() { if (instance == null) { instance = new IncQueryTester(); } return instance; } private TransactionModel model; private Resource resource; private ResourceSet resourceSet; public void setup(ICepRule rule) { initializeEngine(rule); prepareModel(); new IncQuery2ViatraCep(resourceSet, adapter).registerRules(); } private void initializeEngine(ICepRule rule) { checkArgument(rule != null); ViatraCepManager.withContext(EventProcessingContext.CHRONICLE).addRule(rule); prepareModel(); } private void prepareModel() { model = TransactionFactory.eINSTANCE.createTransactionModel(); Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE; Map<String, Object> m = reg.getExtensionToFactoryMap(); m.put("transaction", new XMIResourceFactoryImpl()); resourceSet = new ResourceSetImpl(); resource = resourceSet.createResource(URI.createURI("transaction/model.tr")); resource.getContents().add(model); } public void simulate() { System.out.println("Compound events in model: " + model.getLatestCompoundEvent()); List<EventType> testSeries = Lists.newArrayList(EventType.A, EventType.B, EventType.C); for (int i = 0; i < 100000; i++) { for (EventType eventType : testSeries) { Component event = generateEvent(eventType); System.out.println("Refreshing model with " + event); model.setLatestComponentEvent(event); } } } private enum EventType { A, B, C } private Component generateEvent(EventType type) { String tId = "tr10"; String cId = "c123"; String sId = "s123"; switch (type) { case A: TransactionComponentA componentA = TransactionFactory.eINSTANCE.createTransactionComponentA(); componentA.setCustomerId(cId); componentA.setTransactionId(tId); return componentA; case B: TransactionComponentB componentB = TransactionFactory.eINSTANCE.createTransactionComponentB(); componentB.setTransactionId(tId); return componentB; case C: TransactionComponentC componentC = TransactionFactory.eINSTANCE.createTransactionComponentC(); componentC.setSupplierId(sId); componentC.setTransactionId(tId); return componentC; default: return null; } } public ResourceSet getResourceSet() { return resourceSet; } public TransactionModel getModel() { return model; } public void dispose() { instance = null; } }