/***
* Copyright (c) 2009 Caelum - www.caelum.com.br/opensource All rights reserved.
*
* 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 br.com.caelum.vraptor.proxy;
import javax.enterprise.inject.Vetoed;
import com.thoughtworks.xstream.InitializationException;
import org.jboss.weld.bean.proxy.ProxyObject;
import org.jboss.weld.interceptor.util.proxy.TargetInstanceProxy;
/**
* Utility class to work with CDI proxies, allowing us to get objects without weld proxies. At this time this
* class only works with JBoss Weld, but since Weld is the only one that implements CDI 1.1, this is not a big
* trouble.
*
* @author Otávio Scherer Garcia
* @author Mario Amaral
*/
@Vetoed
public final class CDIProxies {
private CDIProxies(){
throw new InitializationException("Not allowed to initialize");
}
public static boolean isCDIProxy(Class<?> type) {
return ProxyObject.class.isAssignableFrom(type);
}
public static <T> Class<?> extractRawTypeIfPossible(Class<T> type) {
return isCDIProxy(type) ? type.getSuperclass() : type;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public static <T> T unproxifyIfPossible(T source) {
if (source instanceof TargetInstanceProxy) {
TargetInstanceProxy<T> target = (TargetInstanceProxy) source;
return target.getTargetInstance();
}
return source;
}
}