public Process createZanataPushProcess(
      final String baseUrl,
      final Integer contentSpecId,
      final String processName,
      final boolean contentSpecOnly,
      final boolean disableCopyTrans,
      final boolean allowUnfrozenPush,
      final String username,
      final String apikey)
      throws Failure {

    try {
      transaction.begin();
      entityManager.joinTransaction();

      // Load the content spec
      final ContentSpec contentSpec = getContentSpec(contentSpecId);
      final Number revision = EnversUtilities.getLatestRevision(entityManager, contentSpec);

      // Load the zanata details
      final ZanataDetails zanataDetails =
          createZanataDetails(contentSpec.getTranslationDetails(), username, apikey);

      // Fix the process name if one wasn't specified
      final String fixedProcessName =
          "Content Spec Translation Push for "
              + contentSpec.getId()
              + "-"
              + revision.intValue()
              + (isNullOrEmpty(processName) ? "" : (" - " + processName));

      // Create the process
      final Process entity = new Process();
      final PGProcess process = new PGProcess(entity);

      // Set the core fields
      entity.setType(ProcessType.TRANSLATION_PUSH);
      entity.setStartTime(new Date());
      process.setName(fixedProcessName);
      // TODO add user who started the process
      // process.setStartedBy();

      // Add the task
      process.addTask(
          new ZanataPushTask(
              baseUrl,
              contentSpecId,
              contentSpecOnly,
              disableCopyTrans,
              allowUnfrozenPush,
              zanataDetails));

      // Add the process to the content spec
      final ContentSpecToProcess contentSpecToProcess = new ContentSpecToProcess();
      contentSpecToProcess.setProcess(entity);
      contentSpec.addProcess(contentSpecToProcess);

      // Save the newly created process entity and content spec mapping
      entityManager.persist(entity);
      entityManager.persist(contentSpecToProcess);
      entityManager.flush();

      // Start the process
      processManager.startProcess(process);

      transaction.commit();

      return entity;
    } catch (JPPFException e) {
      throw RESTv1Utilities.processError(transaction, new InternalServerErrorException(e));
    } catch (Throwable e) {
      throw RESTv1Utilities.processError(transaction, e);
    }
  }
  public Process createZanataSyncProcess(
      final String baseUrl,
      final Integer contentSpecId,
      final String processName,
      final String locales,
      final String username,
      final String apikey)
      throws Failure {

    try {
      transaction.begin();
      entityManager.joinTransaction();

      // Load the content spec to make sure it exists
      final ContentSpec contentSpec = getContentSpec(contentSpecId);

      // Get the translation details
      final ZanataDetails zanataDetails =
          createZanataDetails(contentSpec.getTranslationDetails(), username, apikey);

      // Convert and check the locales
      final Collection<LocaleId> localeList =
          buildLocaleList(contentSpec.getTranslationDetails().getLocales(), locales);

      // Fix the process name if one wasn't specified
      final String fixedProcessName =
          "Content Spec Translation Sync for "
              + contentSpec.getId()
              + (isNullOrEmpty(processName) ? "" : (" - " + processName));

      // Create the process
      final Process entity = new Process();
      final PGProcess process = new PGProcess(entity);

      // Set the core fields
      entity.setType(ProcessType.TRANSLATION_SYNC);
      entity.setStartTime(new Date());
      process.setName(fixedProcessName);
      // TODO add user who started the process
      // process.setStartedBy();

      // Add the task
      process.addTask(new ZanataSyncTask(baseUrl, contentSpecId, localeList, zanataDetails));

      // Add the process to the content spec
      final ContentSpecToProcess contentSpecToProcess = new ContentSpecToProcess();
      contentSpecToProcess.setProcess(entity);
      contentSpec.addProcess(contentSpecToProcess);

      // Save the newly created process entity and content spec mapping
      entityManager.persist(entity);
      entityManager.persist(contentSpecToProcess);
      entityManager.flush();

      // Start the process
      processManager.startProcess(process);

      transaction.commit();

      return entity;
    } catch (JPPFException e) {
      throw RESTv1Utilities.processError(transaction, new InternalServerErrorException(e));
    } catch (Throwable e) {
      throw RESTv1Utilities.processError(transaction, e);
    }
  }