org.jboss.weld.ejb.InternalEjbDescriptor Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, 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.weld.ejb;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
import org.jboss.weld.annotated.enhanced.MethodSignature;
import org.jboss.weld.annotated.enhanced.jlr.MethodSignatureImpl;
import org.jboss.weld.ejb.spi.BusinessInterfaceDescriptor;
import org.jboss.weld.ejb.spi.EjbDescriptor;
import org.jboss.weld.ejb.spi.helpers.ForwardingEjbDescriptor;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableSet;
/**
* More powerful version of {@link EjbDescriptor} that exposes Maps for some
* metadata. The {@link EjbDescriptor} to enhance should be passed to the
* constructor
*
* @author Pete Muir
*/
public class InternalEjbDescriptor extends ForwardingEjbDescriptor {
private static class BusinessInterfaceDescriptorToClassFunction implements Function, Class>> {
private static final BusinessInterfaceDescriptorToClassFunction INSTANCE = new BusinessInterfaceDescriptorToClassFunction();
@Override
public Class> apply(BusinessInterfaceDescriptor> input) {
return input.getInterface();
}
}
private final Class> objectInterface;
private final EjbDescriptor delegate;
private final Collection removeMethodSignatures;
private final Set> localBusinessInterfaces;
private final Set> remoteBusinessInterfaces;
public InternalEjbDescriptor(EjbDescriptor ejbDescriptor) {
this.delegate = ejbDescriptor;
this.objectInterface = findObjectInterface(ejbDescriptor.getLocalBusinessInterfaces());
removeMethodSignatures = new ArrayList();
if (ejbDescriptor.getRemoveMethods() != null) {
for (Method method : ejbDescriptor.getRemoveMethods()) {
removeMethodSignatures.add(new MethodSignatureImpl(method));
}
}
this.localBusinessInterfaces = ImmutableSet.copyOf(Collections2.transform(getLocalBusinessInterfaces(), BusinessInterfaceDescriptorToClassFunction.INSTANCE));
this.remoteBusinessInterfaces = ImmutableSet.copyOf(Collections2.transform(getRemoteBusinessInterfaces(), BusinessInterfaceDescriptorToClassFunction.INSTANCE));
}
@Override
public EjbDescriptor delegate() {
return delegate;
}
public Class> getObjectInterface() {
return objectInterface;
}
public Collection getRemoveMethodSignatures() {
return removeMethodSignatures;
}
private static Class> findObjectInterface(Collection> interfaces) {
if (interfaces != null && !interfaces.isEmpty()) {
return interfaces.iterator().next().getInterface();
} else {
return null;
}
}
public Set> getLocalBusinessInterfacesAsClasses() {
return localBusinessInterfaces;
}
public Set> getRemoteBusinessInterfacesAsClasses() {
return remoteBusinessInterfaces;
}
}