package org.opennaas.core.resources.capability; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.opennaas.core.resources.descriptor.CapabilityDescriptor; import org.opennaas.core.resources.validation.CapabilityDescriptorValidator; import org.opennaas.core.resources.validation.ValidationException; /** * The AbstractCapabilityFactory is responsible for instantiating and initializing new capabilities for a resource * * @author Mathieu Lemay * */ public abstract class AbstractCapabilityFactory implements ICapabilityFactory { /** * Validator object used to ensure that the capability descriptor has the required information in it */ protected CapabilityDescriptorValidator validator = null; Log log = LogFactory.getLog(AbstractCapabilityFactory.class); // FIXME Other method to has identified a factory?? private String type = ""; public ICapability create(CapabilityDescriptor capabilityDescriptor, String resourceId) throws CapabilityException { ICapability capability = null; try { log.debug("Validating capability descriptor..."); doCapabilityDescriptorValidation(capabilityDescriptor); } catch (ValidationException ex) { throw new CapabilityException("Error creating capability", ex); } log.debug("Creating new Capability..."); capability = createCapability(capabilityDescriptor, resourceId); log.debug("Created capability!"); return capability; } private void doCapabilityDescriptorValidation(CapabilityDescriptor capabilityDescriptor) throws ValidationException { if (validator != null) { validator.validate(capabilityDescriptor); if (validator.hasErrors()) { throw new ValidationException(validator.getErrors()); } } } /** * Creates a capability based on a capability descriptor and returns it. * * @param capabilityDescriptor * @throws capabilityException */ public abstract ICapability createCapability(CapabilityDescriptor capabilityDescriptor, String resourceId) throws CapabilityException; /** * @param capabilityDescriptorValidator * the capabilityDescriptorValidator to set */ public void setCapabilityDescriptorValidator(CapabilityDescriptorValidator validator) { this.validator = validator; } public String getType() { return type; } public void setType(String type) { this.type = type; } }