public ProcessingStep create( IProvisioningAgent agent, IProcessingStepDescriptor descriptor, IArtifactDescriptor context) { IExtensionRegistry registry = RegistryFactory.getRegistry(); IExtension extension = registry.getExtension(PROCESSING_STEPS_EXTENSION_ID, descriptor.getProcessorId()); Exception error; if (extension != null) { IConfigurationElement[] config = extension.getConfigurationElements(); try { Object object = config[0].createExecutableExtension("class"); // $NON-NLS-1$ ProcessingStep step = (ProcessingStep) object; step.initialize(agent, descriptor, context); return step; } catch (Exception e) { error = e; } } else error = new ProcessingStepHandlerException( NLS.bind( Messages.cannot_get_extension, PROCESSING_STEPS_EXTENSION_ID, descriptor.getProcessorId())); int severity = descriptor.isRequired() ? IStatus.ERROR : IStatus.INFO; ProcessingStep result = new EmptyProcessingStep(); result.setStatus( new Status( severity, Activator.ID, Messages.cannot_instantiate_step + descriptor.getProcessorId(), error)); return result; }