
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