@Override
  public void add(final I_C_Order order) {
    Loggables.get().addLog("@Created@ " + order.getDocumentNo());

    orderGeneratedNotifier.notify(order, defaultNotificationRecipientId);

    countOrders.incrementAndGet();
  }
/**
 * Default {@link IOrdersCollector} implementation which is:
 *
 * <ul>
 *   <li>counts generated orders: {@link #getCountOrders()}
 *   <li>notifies on event bus that an order was generated
 * </ul>
 *
 * @author metas-dev <*****@*****.**>
 */
public class OrdersCollector implements IOrdersCollector {
  public static final OrdersCollector newInstance() {
    return new OrdersCollector();
  }

  private final AtomicInteger countOrders = new AtomicInteger(0);

  private static final String MSG_Event_Generated = "Event_ProcurementPurchaseOrderGenerated";
  private final DocumentEventBus<I_C_Order> orderGeneratedNotifier =
      DocumentEventBus.<I_C_Order>builder()
          .setLogger(ProcurementConstants.getLogger(OrdersCollector.class))
          .setTopic(ProcurementConstants.EVENTBUS_TOPIC_PurchaseOrderGenerated)
          .setEventAD_Message(MSG_Event_Generated)
          .setEventAD_MessageParamsExtractor(
              new Function<I_C_Order, Object[]>() {
                @Override
                public Object[] apply(final I_C_Order document) {
                  final I_C_BPartner bpartner = document.getC_BPartner();
                  final String bpValue = bpartner.getValue();
                  final String bpName = bpartner.getName();
                  return new Object[] {TableRecordReference.of(document), bpValue, bpName};
                }
              })
          .build();

  private int defaultNotificationRecipientId = -1;

  private OrdersCollector() {
    super();
    orderGeneratedNotifier.queueEventsUntilCurrentTrxCommit();
  }

  public void setDefaultNotificationRecipientId(final int defaultNotificationRecipientId) {
    this.defaultNotificationRecipientId = defaultNotificationRecipientId;
  }

  @Override
  public void add(final I_C_Order order) {
    Loggables.get().addLog("@Created@ " + order.getDocumentNo());

    orderGeneratedNotifier.notify(order, defaultNotificationRecipientId);

    countOrders.incrementAndGet();
  }

  public int getCountOrders() {
    return countOrders.get();
  }
}
 private OrdersCollector() {
   super();
   orderGeneratedNotifier.queueEventsUntilCurrentTrxCommit();
 }