public void launchSuperviseSmsSending(final List<SMSBroker> smsMessageList) {
    // use hashCode of smsMessage

    final long now = System.currentTimeMillis();

    final String jobName = "superviseSmsSending" + now;
    final String keyName = SuperviseSmsSending.SUPERVISE_SMS_BROKER_KEY;
    final String groupName = Scheduler.DEFAULT_GROUP;

    try {
      for (SMSBroker smsMessage : smsMessageList) {
        if (logger.isDebugEnabled()) {
          logger.debug(
              "smsMessage in launchSuperviseSmsSending is : "
                  + " - smsMessage id is : "
                  + smsMessage.getId()
                  + " - smsMessage content is : "
                  + smsMessage.getMessage()
                  + " - smsMessage phone is : "
                  + smsMessage.getRecipient());
        }
      }

      // create DataMap
      final JobDataMap jobDataMap = new JobDataMap();
      jobDataMap.put(keyName, smsMessageList);

      // create trigger
      final Trigger trigger = new SimpleTrigger(jobName, groupName);

      trigger.setVolatility(false);
      trigger.setStartTime(new Date(now));

      if (logger.isDebugEnabled()) {
        logger.debug(
            "Launching job with parameter : \n"
                + " - jobName : "
                + jobName
                + "\n"
                + " - groupName : "
                + groupName
                + "\n");
      }

      JobDetail jobDetail = new JobDetail(jobName, groupName, SuperviseSmsSending.class);
      jobDetail.setJobDataMap(jobDataMap);

      scheduler.scheduleJob(jobDetail, trigger);

      if (logger.isDebugEnabled()) {
        logger.debug("Job successfully launched");
      }
    } catch (SchedulerException e) {
      logger.warn(
          "An error occurs launching the job with parameter : \n"
              + " - jobName : "
              + jobName
              + "\n"
              + " - groupName : "
              + groupName
              + "\n");
    }
  }
  public static org.quartz.Trigger convertTriggerToNativeObject(Trigger spagobiTrigger) {
    org.quartz.Trigger quartzTrigger;

    logger.debug("IN");

    quartzTrigger = null;
    try {
      Assert.assertNotNull(spagobiTrigger, "Input parameter [spagobiTrigger] csannot be null");

      if (spagobiTrigger.isRunImmediately()) {

        quartzTrigger = TriggerUtils.makeImmediateTrigger(spagobiTrigger.getName(), 0, 10000);
        quartzTrigger.setJobName(spagobiTrigger.getJob().getName());
        quartzTrigger.setJobGroup(spagobiTrigger.getJob().getGroupName());
        JobDataMap jobDataMap =
            convertParametersToNativeObject(spagobiTrigger.getJob().getParameters());
        quartzTrigger.setJobDataMap(jobDataMap);

      } else {

        if (spagobiTrigger.isSimpleTrigger()) {
          quartzTrigger = new org.quartz.SimpleTrigger();
        } else {
          org.quartz.CronTrigger quartzCronTrigger = new org.quartz.CronTrigger();
          String quartzCronExpression =
              convertCronExpressionToNativeObject(
                  spagobiTrigger.getChronExpression(), spagobiTrigger.getStartTime());
          quartzCronTrigger.setCronExpression(quartzCronExpression);
          quartzTrigger = quartzCronTrigger;
          // dirty trick
          spagobiTrigger
              .getJob()
              .addParameter(
                  SPAGOBI_CRON_EXPRESSION, spagobiTrigger.getChronExpression().getExpression());
        }

        quartzTrigger.setName(spagobiTrigger.getName());
        quartzTrigger.setDescription(spagobiTrigger.getDescription());
        if (spagobiTrigger.getGroupName() == null) {
          quartzTrigger.setGroup(Scheduler.DEFAULT_GROUP);
        } else {
          quartzTrigger.setGroup(spagobiTrigger.getGroupName());
        }

        quartzTrigger.setStartTime(spagobiTrigger.getStartTime());
        if (spagobiTrigger.getEndTime() != null) {
          quartzTrigger.setEndTime(spagobiTrigger.getEndTime());
        }
        quartzTrigger.setJobName(spagobiTrigger.getJob().getName());
        if (spagobiTrigger.getJob().getGroupName() == null) {
          quartzTrigger.setJobGroup(Scheduler.DEFAULT_GROUP);
        } else {
          quartzTrigger.setJobGroup(spagobiTrigger.getJob().getGroupName());
        }

        quartzTrigger.setVolatility(spagobiTrigger.getJob().isVolatile());

        JobDataMap jobDataMap =
            convertParametersToNativeObject(spagobiTrigger.getJob().getParameters());
        quartzTrigger.setJobDataMap(jobDataMap);
      }
    } catch (Throwable t) {
      throw new SpagoBIRuntimeException(
          "An unexpected error occured while converting Trigger to native object", t);
    } finally {
      logger.debug("OUT");
    }

    return quartzTrigger;
  }