public BusinessArchive createBusinessArchive(
      final AbstractProcess process,
      final Configuration configuration,
      final Set<EObject> excludedObject,
      final boolean addProcessImage)
      throws Exception {

    checkArgument(configuration != null);
    BonitaStudioLog.info(
        "Building bar for process " + process.getName() + " (" + process.getVersion() + " )...",
        EnginePlugin.PLUGIN_ID);
    final DesignProcessDefinitionBuilder procBuilder = getProcessDefinitionBuilder();
    procBuilder.seteObjectNotExported(excludedObject);
    final DesignProcessDefinition def = procBuilder.createDefinition(process);

    if (def == null) {
      throw new Exception(Messages.cantDeployEmptyPool);
    }

    final BusinessArchiveBuilder builder = new BusinessArchiveBuilder().createNewBusinessArchive();
    builder.setProcessDefinition(def);

    builder.setParameters(getParameterMapFromConfiguration(configuration));
    final byte[] content = new ActorMappingExporter().toByteArray(configuration);
    if (content != null) {
      builder.setActorMapping(content);
    }

    for (final BARResourcesProvider resourceProvider : getBARResourcesProvider()) {
      resourceProvider.addResourcesForConfiguration(
          builder, process, configuration, excludedObject);
    }

    // Add forms resources
    final BARResourcesProvider provider = getBARApplicationResourcesProvider();
    if (provider != null) {
      provider.addResourcesForConfiguration(builder, process, configuration, excludedObject);
    }

    if (!(process instanceof SubProcessEvent)) {
      if (addProcessImage) {
        Display.getDefault()
            .syncExec(
                new Runnable() {

                  @Override
                  public void run() {
                    try {
                      addProcessImage(builder, process);
                    } catch (final CoreException e) {
                      BonitaStudioLog.error(e);
                    }
                  }
                });
      }
    }

    final BusinessArchive archive = builder.done();
    BonitaStudioLog.info(
        "Build complete for process " + process.getName() + " (" + process.getVersion() + " ).",
        EnginePlugin.PLUGIN_ID);
    return archive;
  }