org.jboss.cdi.tck.tests.extensions.lifecycle.atd.AfterTypeDiscoveryObserver Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source
* Copyright 2013, Red Hat, Inc., and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* 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.cdi.tck.tests.extensions.lifecycle.atd;
import org.jboss.cdi.tck.tests.extensions.lifecycle.atd.lib.Bar;
import org.jboss.cdi.tck.tests.extensions.lifecycle.atd.lib.Boss;
import org.jboss.cdi.tck.tests.extensions.lifecycle.atd.lib.Foo;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
* @author Martin Kouba
* @author Tomas Remes
*/
public class AfterTypeDiscoveryObserver implements Extension {
private List> interceptors = null;
private List> alternatives = null;
private List> decorators = null;
private boolean bossObserved = false;
private boolean processProducerEventFiredForProducerMethod = false;
private boolean processProducerEventFiredForProducerField = false;
private DeltaAlternativeBean deltaAlternative = new DeltaAlternativeBean();
private DeltaInterceptorBean deltaInterceptor = new DeltaInterceptorBean();
private DeltaDecoratorBean deltaDecorator;
public void observeAfterTypeDiscovery(@Observes AfterTypeDiscovery event, BeanManager beanManager) {
event.getAlternatives().add(DeltaAlternative.class);
event.getInterceptors().add(DeltaInterceptor.class);
event.getDecorators().add(DeltaDecorator.class);
interceptors = Collections.unmodifiableList(new ArrayList>(event.getInterceptors()));
alternatives = Collections.unmodifiableList(new ArrayList>(event.getAlternatives()));
decorators = Collections.unmodifiableList(new ArrayList>(event.getDecorators()));
event.addAnnotatedType(beanManager.createAnnotatedType(Boss.class), AfterTypeDiscoveryObserver.class.getName());
// Bravo interceptor removed
for (Iterator> iterator = event.getInterceptors().iterator(); iterator.hasNext(); ) {
if (BravoInterceptor.class.equals(iterator.next())) {
iterator.remove();
}
}
// The order of decorators reverted
Collections.reverse(event.getDecorators());
// Remove first alternative - AlphaAlternative
event.getAlternatives().remove(0);
}
public void observeAfterBeanDiscovery(@Observes AfterBeanDiscovery event, BeanManager beanManager) {
AnnotatedType type = beanManager.createAnnotatedType(DeltaDecorator.class);
deltaDecorator = new DeltaDecoratorBean(type.getFields().iterator().next(), beanManager);
event.addBean(deltaAlternative);
event.addBean(deltaInterceptor);
event.addBean(deltaDecorator);
}
public void observeProcessAnnotatedType(@Observes ProcessAnnotatedType event) {
event.veto();
}
public void observeBossAnnotatedType(@Observes ProcessAnnotatedType event) {
bossObserved = true;
}
public void observeProcessProducerForProducerField(@Observes ProcessProducer event) {
processProducerEventFiredForProducerField = true;
}
public void observeProcessProducerForProducerMethod(@Observes ProcessProducer event) {
processProducerEventFiredForProducerMethod = true;
}
public List> getInterceptors() {
return interceptors;
}
public List> getAlternatives() {
return alternatives;
}
public List> getDecorators() {
return decorators;
}
public boolean isBossObserved() {
return bossObserved;
}
public boolean isProcessProcuderFieldObserved() {
return processProducerEventFiredForProducerField;
}
public boolean isProcessProcuderMethodObserved() {
return processProducerEventFiredForProducerMethod;
}
}