All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.commercetools.sync.commons.helpers.BaseBatchValidator Maven / Gradle / Ivy

package com.commercetools.sync.commons.helpers;

import static org.apache.commons.lang3.StringUtils.isBlank;

import com.commercetools.api.models.common.AssetDraft;
import com.commercetools.api.models.common.Reference;
import com.commercetools.api.models.common.ResourceIdentifier;
import com.commercetools.api.models.customer.CustomerDraft;
import com.commercetools.api.models.type.CustomFieldsDraft;
import com.commercetools.sync.commons.BaseSyncOptions;
import com.commercetools.sync.commons.exceptions.SyncException;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.commons.lang3.tuple.ImmutablePair;

public abstract class BaseBatchValidator<
    ResourceDraftT,
    SyncOptionsT extends BaseSyncOptions,
    SyncStatisticsT extends BaseSyncStatistics> {
  private final SyncOptionsT syncOptions;
  private final SyncStatisticsT syncStatistics;

  public BaseBatchValidator(
      @Nonnull final SyncOptionsT syncOptions, @Nonnull final SyncStatisticsT syncStatistics) {
    this.syncOptions = syncOptions;
    this.syncStatistics = syncStatistics;
  }

  /**
   * Given the {@link List}<{@code D}> (e.g.{@link CustomerDraft}) of drafts this method
   * attempts to validate drafts and collect referenced keys from the draft and return an {@link
   * ImmutablePair}<{@link Set}<{@code D}>, ?> which contains the {@link Set} of valid
   * drafts and referenced keys.
   *
   * @param drafts the drafts to validate.
   * @return {@link ImmutablePair}<{@link Set}<{@code D}>, ?> which contains the {@link
   *     Set} of valid drafts and referenced keys.
   */
  public abstract ImmutablePair, ?> validateAndCollectReferencedKeys(
      @Nonnull final List drafts);

  protected  void collectReferencedKeyFromResourceIdentifier(
      @Nullable final ResourceIdentifier resourceIdentifier,
      @Nonnull final Consumer keyConsumer) {

    if (resourceIdentifier != null && !isBlank(resourceIdentifier.getKey())) {
      keyConsumer.accept(resourceIdentifier.getKey());
    }
  }

  protected void collectReferencedKeyFromCustomFieldsDraft(
      @Nullable final CustomFieldsDraft customFieldsDraft,
      @Nonnull final Consumer keyConsumer) {

    if (customFieldsDraft != null) {
      collectReferencedKeyFromResourceIdentifier(customFieldsDraft.getType(), keyConsumer);
    }
  }

  protected void collectReferencedKeysFromAssetDrafts(
      @Nullable final List assetDrafts, @Nonnull final Consumer keyConsumer) {

    if (assetDrafts != null) {
      assetDrafts.forEach(
          assetDraft ->
              collectReferencedKeyFromCustomFieldsDraft(assetDraft.getCustom(), keyConsumer));
    }
  }

  protected  void collectReferencedKeyFromReference(
      @Nullable final Reference reference, @Nonnull final Consumer keyInReferenceSupplier) {

    if (reference != null && !isBlank(reference.getId())) {
      keyInReferenceSupplier.accept(reference.getId());
    }
  }

  protected void handleError(@Nonnull final SyncException syncException) {
    this.syncOptions.applyErrorCallback(syncException);
    this.syncStatistics.incrementFailed();
  }

  protected void handleError(@Nonnull final String errorMessage) {
    handleError(new SyncException(errorMessage));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy