@Override public Object[] create(ICreateContext context) { ServiceTask newServiceTask = new ServiceTask(); newServiceTask.setName("Service Task"); newServiceTask.setExtensionId(customServiceTaskId); newServiceTask.setAsynchronous(true); // Process custom service tasks if (newServiceTask.isExtended()) { CustomServiceTask targetTask = findCustomServiceTask(newServiceTask); if (targetTask != null) { // What should happen if the class contain more than one annotations? switch (targetTask.getDelegateType()) { case JAVA_DELEGATE_CLASS: newServiceTask.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_CLASS); newServiceTask.setImplementation(targetTask.getDelegateSpecification()); break; case EXPRESSION: newServiceTask.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION); newServiceTask.setImplementation(targetTask.getDelegateSpecification()); break; case JAVA_DELEGATE_EXPRESSION: newServiceTask.setImplementationType( ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); newServiceTask.setImplementation(targetTask.getDelegateSpecification()); break; } newServiceTask.setName(targetTask.getName()); } } addObjectToContainer(context, newServiceTask, newServiceTask.getName()); return new Object[] {newServiceTask}; }