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

io.castled.apps.connectors.hubspot.HubspotErrorParser Maven / Gradle / Ivy

package io.castled.apps.connectors.hubspot;

import com.fasterxml.jackson.core.type.TypeReference;
import com.google.inject.Singleton;
import io.castled.apps.connectors.hubspot.client.HubspotErrorCategory;
import io.castled.apps.connectors.hubspot.client.dtos.BatchObjectError;
import io.castled.apps.connectors.hubspot.client.dtos.RecordError;
import io.castled.commons.errors.CastledError;
import io.castled.commons.errors.errorclassifications.ExternallyCategorizedError;
import io.castled.commons.errors.errorclassifications.InvalidFieldValueError;
import io.castled.commons.errors.errorclassifications.UnclassifiedError;
import io.castled.utils.JsonUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Singleton
public class HubspotErrorParser {

    private static final Pattern INVALID_FIELD_VALUE_PATTERN = Pattern.compile("Property values were not valid: (.*)");

    public CastledError parseError(RecordError recordError) {
        return new UnclassifiedError(recordError.getExtraContext());
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    private static class InvalidValueError {
        private String message;
        private String error;
        private String name;

    }

    public CastledError parseError(BatchObjectError batchObjectError) {
        if (batchObjectError == null) {
            return new UnclassifiedError("Unknown error");
        }
        if (batchObjectError.getCategory() == null) {
            return new UnclassifiedError(Optional.ofNullable(batchObjectError.getMessage()).orElse("unknown error"));
        }
        if (batchObjectError.getCategory().equals(HubspotErrorCategory.VALIDATION_ERROR.name())) {
            return parseInvalidFieldValueError(batchObjectError);
        }
        return new ExternallyCategorizedError(batchObjectError.getCategory(), batchObjectError.getMessage());
    }

    private CastledError parseInvalidFieldValueError(BatchObjectError batchObjectError) {
        Matcher matcher = INVALID_FIELD_VALUE_PATTERN.matcher(batchObjectError.getMessage());
        if (matcher.find()) {
            List invalidValueErrors = JsonUtils.jsonStringToTypeReference(matcher.group(1), new TypeReference>() {
            });
            if (invalidValueErrors.size() == 1) {
                InvalidValueError invalidValueError = invalidValueErrors.get(0);
                return new InvalidFieldValueError(invalidValueError.getName(), invalidValueError.getError(), invalidValueError.getMessage());
            }
        }
        return new ExternallyCategorizedError(batchObjectError.getCategory(), batchObjectError.getMessage());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy