@Override
  public Object[] create(ICreateContext context) {
    ServiceTask newServiceTask = new ServiceTask();
    newServiceTask.setName("Service Task");
    newServiceTask.setExtensionId(customServiceTaskId);

    // Process custom service tasks
    if (newServiceTask.isExtended()) {

      CustomServiceTask targetTask = findCustomServiceTask(newServiceTask);

      if (targetTask != null) {

        // Create custom property containing task name
        CustomProperty customServiceTaskProperty = new CustomProperty();

        customServiceTaskProperty.setId(
            ExtensionUtil.wrapCustomPropertyId(
                newServiceTask, ExtensionConstants.PROPERTY_ID_CUSTOM_SERVICE_TASK));
        customServiceTaskProperty.setName(ExtensionConstants.PROPERTY_ID_CUSTOM_SERVICE_TASK);
        customServiceTaskProperty.setSimpleValue(this.customServiceTaskId);

        newServiceTask.getCustomProperties().add(customServiceTaskProperty);
        newServiceTask.setImplementation(targetTask.getRuntimeClassname());
        newServiceTask.setName(targetTask.getName());
      }
    }

    addObjectToContainer(context, newServiceTask, newServiceTask.getName());

    return new Object[] {newServiceTask};
  }
  @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};
  }