/**
* Start time:00:45:05 2009-02-04<br>
* Project: mobicents-jainslee-server-core<br>
*
* @author <a href="mailto:baranowb@gmail.com">baranowb - Bartosz Baranowski
* </a>
* @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
*/
package org.mobicents.slee.container.component;
import java.util.HashSet;
import java.util.Set;
import javax.slee.ComponentID;
import javax.slee.EventTypeID;
import javax.slee.management.ComponentDescriptor;
import javax.slee.management.DependencyException;
import javax.slee.management.DeploymentException;
import javax.slee.management.LibraryID;
import javax.slee.resource.ResourceAdaptorTypeDescriptor;
import javax.slee.resource.ResourceAdaptorTypeID;
import org.mobicents.slee.container.component.deployment.jaxb.descriptors.ResourceAdaptorTypeDescriptorImpl;
import org.mobicents.slee.container.component.deployment.jaxb.descriptors.common.references.MEventTypeRef;
import org.mobicents.slee.container.component.deployment.jaxb.descriptors.common.references.MLibraryRef;
import org.mobicents.slee.container.component.deployment.jaxb.descriptors.ratype.MActivityType;
/**
* Start time:00:45:05 2009-02-04<br>
* Project: mobicents-jainslee-server-core<br>
*
* @author <a href="mailto:baranowb@gmail.com">baranowb - Bartosz Baranowski
* </a>
* @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
*/
public class ResourceAdaptorTypeComponent extends SleeComponent {
/**
* the ratype descriptor
*/
private final ResourceAdaptorTypeDescriptorImpl descriptor;
/**
* the aci factory interface
*/
private Class<?> activityContextInterfaceFactoryInterface;
/**
* the aci factory concrete class, generated by SLEE
*/
private Class<?> activityContextInterfaceFactoryConcreteClass;
/**
* Resource adaptor SBB interface
*/
private Class<?> resourceAdaptorSBBInterface = null;
/**
* the JAIN SLEE specs descriptor
*/
private ResourceAdaptorTypeDescriptor specsDescriptor = null;
/**
* the instance of the aci factory for this ra type
*/
private Object activityContextInterfaceFactory;
/**
*
* @param descriptor
*/
public ResourceAdaptorTypeComponent(
ResourceAdaptorTypeDescriptorImpl descriptor) {
this.descriptor = descriptor;
}
/**
* Retrieves the ratype descriptor
* @return
*/
public ResourceAdaptorTypeDescriptorImpl getDescriptor() {
return descriptor;
}
/**
* Retrieves the ratype id
* @return
*/
public ResourceAdaptorTypeID getResourceAdaptorTypeID() {
return descriptor.getResourceAdaptorTypeID();
}
/**
* Retrieves the aci factory concrete class, generated by SLEE
* @return
*/
public Class<?> getActivityContextInterfaceFactoryConcreteClass() {
return activityContextInterfaceFactoryConcreteClass;
}
/**
* Retrieves the aci factory interface
* @return
*/
public Class<?> getActivityContextInterfaceFactoryInterface() {
return activityContextInterfaceFactoryInterface;
}
/**
* Sets the aci factory concrete class, generated by SLEE
* @param activityContextInterfaceFactoryConcreteClass
*/
public void setActivityContextInterfaceFactoryConcreteClass(
Class<?> activityContextInterfaceFactoryConcreteClass) {
this.activityContextInterfaceFactoryConcreteClass = activityContextInterfaceFactoryConcreteClass;
}
/**
* Sets the aci factory interface
* @param activityContextInterfaceFactoryInterface
*/
public void setActivityContextInterfaceFactoryInterface(
Class<?> activityContextInterfaceFactoryInterface) {
this.activityContextInterfaceFactoryInterface = activityContextInterfaceFactoryInterface;
}
@Override
boolean addToDeployableUnit() {
return getDeployableUnit().getResourceAdaptorTypeComponents().put(getResourceAdaptorTypeID(), this) == null;
}
@Override
public Set<ComponentID> getDependenciesSet() {
return descriptor.getDependenciesSet();
}
@Override
public boolean isSlee11() {
return descriptor.isSlee11();
}
@Override
public ComponentID getComponentID() {
return getResourceAdaptorTypeID();
}
@Override
public boolean validate() throws DependencyException, DeploymentException {
// FIXME use validator when available
return true;
}
public Class<?> getResourceAdaptorSBBInterface() {
return resourceAdaptorSBBInterface;
}
public void setResourceAdaptorSBBInterface(Class<?> resourceAdaptorSBBInterface) {
this.resourceAdaptorSBBInterface = resourceAdaptorSBBInterface;
}
/**
* Retrieves the instance of the aci factory for this ra type
* @return
*/
public Object getActivityContextInterfaceFactory() {
return activityContextInterfaceFactory;
}
/**
* Sets the instance of the aci factory for this ra type
* @param activityContextInterfaceFactory
*/
public void setActivityContextInterfaceFactory(
Object activityContextInterfaceFactory) {
this.activityContextInterfaceFactory = activityContextInterfaceFactory;
}
/**
* Retrieves the JAIN SLEE specs descriptor
* @return
*/
public ResourceAdaptorTypeDescriptor getSpecsDescriptor() {
if (specsDescriptor == null) {
Set<LibraryID> libraryIDSet = new HashSet<LibraryID>();
for (MLibraryRef mLibraryRef : getDescriptor().getLibraryRefs()) {
libraryIDSet.add(mLibraryRef.getComponentID());
}
LibraryID[] libraryIDs = libraryIDSet.toArray(new LibraryID[libraryIDSet.size()]);
Set<String> activityTypeSet = new HashSet<String>();
for (MActivityType mActivityType : getDescriptor().getActivityTypes()) {
activityTypeSet.add(mActivityType.getActivityTypeName());
}
String[] activityTypes = activityTypeSet.toArray(new String[activityTypeSet.size()]);
Set<EventTypeID> eventTypeSet = new HashSet<EventTypeID>();
for (MEventTypeRef mEventTypeRef : getDescriptor().getEventTypeRefs()) {
eventTypeSet.add(mEventTypeRef.getComponentID());
}
EventTypeID[] eventTypes = eventTypeSet.toArray(new EventTypeID[eventTypeSet.size()]);
String raInterface = getDescriptor().getResourceAdaptorInterface() == null ? null : getDescriptor().getResourceAdaptorInterface().getResourceAdaptorInterfaceName();
specsDescriptor = new ResourceAdaptorTypeDescriptor(getResourceAdaptorTypeID(),getDeployableUnit().getDeployableUnitID(),getDeploymentUnitSource(),libraryIDs,activityTypes,raInterface,eventTypes);
}
return specsDescriptor;
}
@Override
public ComponentDescriptor getComponentDescriptor() {
return getSpecsDescriptor();
}
@Override
public void processSecurityPermissions() throws DeploymentException {
//Do nothing?
}
@Override
public void undeployed() {
super.undeployed();
specsDescriptor = null;
activityContextInterfaceFactory = null;
activityContextInterfaceFactoryConcreteClass = null;
activityContextInterfaceFactoryInterface = null;
resourceAdaptorSBBInterface = null;
}
}