/*
* Copyright (C) 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.errai.cdi.event.client;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import org.jboss.errai.cdi.client.event.FinishEvent;
import org.jboss.errai.cdi.client.event.ReceivedEvent;
import org.jboss.errai.cdi.client.qualifier.A;
import org.jboss.errai.cdi.client.qualifier.B;
import org.jboss.errai.cdi.client.qualifier.C;
import org.jboss.errai.enterprise.client.cdi.events.BusReadyEvent;
import org.jboss.errai.ioc.client.api.EntryPoint;
/**
* Test module used by {@see EventProducerIntegrationTest}.
*
* @author Christian Sadilek <csadilek@redhat.com>
*/
@EntryPoint
public class EventProducerTestModule {
private boolean busReadyEventReceived = false;
private Runnable verifier;
private final static Map<String, List<String>> receivedEventsOnServer = new HashMap<String, List<String>>();
@Inject
private Event<String> event;
@Inject @A
private Event<String> eventA;
@Inject @B
private Event<String> eventB;
@Inject @C
private Event<String> eventC;
@Inject @A @B
private Event<String> eventAB;
@Inject @B @C
private Event<String> eventBC;
@Inject @A @C
private Event<String> eventAC;
@Inject @A @B @C
private Event<String> eventABC;
@Inject
private Event<FinishEvent> finishEvent;
public boolean getBusReadyEventsReceived() {
return busReadyEventReceived;
}
/**
* count the {@link BusReadyEvent}
*/
public void onBusReady(@Observes BusReadyEvent event) {
busReadyEventReceived = true;
}
public void fireAll() {
fire();
fireA();
fireB();
fireC();
fireAB();
fireAC();
fireBC();
fireABC();
fireFinishEvent();
}
public void fire() {
event.fire("");
}
public void fireA() {
eventA.fire("A");
}
public void fireB() {
eventB.fire("B");
}
public void fireC() {
eventC.fire("C");
}
public void fireAB() {
eventAB.fire("AB");
}
public void fireBC() {
eventBC.fire("BC");
}
public void fireAC() {
eventAC.fire("AC");
}
public void fireABC() {
eventABC.fire("ABC");
}
public void fireFinishEvent() {
finishEvent.fire(new FinishEvent());
}
public Event<String> getEvent() {
return event;
}
public Event<String> getEventA() {
return eventA;
}
public Event<String> getEventB() {
return eventB;
}
public Event<String> getEventC() {
return eventC;
}
public Event<String> getEventAB() {
return eventAB;
}
public Event<String> getEventBC() {
return eventBC;
}
public Event<String> getEventAC() {
return eventAC;
}
public Event<String> getEventABC() {
return eventABC;
}
public void collectResults(@Observes ReceivedEvent event) {
if (event.getEvent().equals("FINISH")) {
if (verifier != null) {
verifier.run();
}
}
List<String> events = receivedEventsOnServer.get(event.getReceiver());
if (events == null)
events = new ArrayList<String>();
if (events.contains(event.getEvent())) {
throw new RuntimeException(event.getReceiver() + " received " + event.getEvent() + " twice!");
}
events.add(event.getEvent());
receivedEventsOnServer.put(event.getReceiver(), events);
}
public static Map<String, List<String>> getReceivedEventsOnServer() {
return receivedEventsOnServer;
}
public static void clearReceivedEventsOnServer() {
receivedEventsOnServer.clear();
}
public void setResultVerifier(Runnable verifier) {
this.verifier = verifier;
}
}