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

com.microsoft.kiota.serialization.TextParseNode Maven / Gradle / Ivy

package com.microsoft.kiota.serialization;

import com.microsoft.kiota.PeriodAndDuration;

import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeParseException;
import java.util.Base64;
import java.util.EnumSet;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.function.Consumer;

/** ParseNode implementation for text/plain */
public class TextParseNode implements ParseNode {
    private final String text;
    private static final String NO_STRUCTURED_DATA_MESSAGE =
            "text does not support structured data";

    /**
     * Initializes a new instance of the {@link TextParseNode} class.
     * @param rawText the raw text to parse.
     */
    public TextParseNode(@Nonnull final String rawText) {
        Objects.requireNonNull(rawText, "parameter node cannot be null");
        text =
                rawText.startsWith("\"") && rawText.endsWith("\"")
                        ? rawText.substring(1, rawText.length() - 2)
                        : rawText;
    }

    @Nullable public ParseNode getChildNode(@Nonnull final String identifier) {
        throw new UnsupportedOperationException(NO_STRUCTURED_DATA_MESSAGE);
    }

    @Nullable public String getStringValue() {
        return text;
    }

    @Nullable public Boolean getBooleanValue() {
        return Boolean.parseBoolean(text);
    }

    @Nullable public Byte getByteValue() {
        return Byte.parseByte(text);
    }

    @Nullable public Short getShortValue() {
        return Short.parseShort(text);
    }

    @Nullable public BigDecimal getBigDecimalValue() {
        return new BigDecimal(text);
    }

    @Nullable public Integer getIntegerValue() {
        return Integer.parseInt(text);
    }

    @Nullable public Float getFloatValue() {
        return Float.parseFloat(text);
    }

    @Nullable public Double getDoubleValue() {
        return Double.parseDouble(text);
    }

    @Nullable public Long getLongValue() {
        return Long.parseLong(text);
    }

    @Nullable public UUID getUUIDValue() {
        return UUID.fromString(this.getStringValue());
    }

    @Nullable public OffsetDateTime getOffsetDateTimeValue() {
        try {
            return OffsetDateTime.parse(this.getStringValue());
        } catch (DateTimeParseException ex) {
            // Append UTC offset if it's missing
            try {
                LocalDateTime localDateTime = LocalDateTime.parse(this.getStringValue());
                return localDateTime.atOffset(ZoneOffset.UTC);
            } catch (DateTimeParseException ex2) {
                throw ex;
            }
        }
    }

    @Nullable public LocalDate getLocalDateValue() {
        return LocalDate.parse(this.getStringValue());
    }

    @Nullable public LocalTime getLocalTimeValue() {
        return LocalTime.parse(this.getStringValue());
    }

    @Nullable public PeriodAndDuration getPeriodAndDurationValue() {
        return PeriodAndDuration.parse(this.getStringValue());
    }

    @Nullable public  List getCollectionOfPrimitiveValues(@Nonnull final Class targetClass) {
        throw new UnsupportedOperationException(NO_STRUCTURED_DATA_MESSAGE);
    }

    @Nullable public  List getCollectionOfObjectValues(
            @Nonnull final ParsableFactory factory) {
        throw new UnsupportedOperationException(NO_STRUCTURED_DATA_MESSAGE);
    }

    @Nullable public > List getCollectionOfEnumValues(
            @Nonnull final ValuedEnumParser enumParser) {
        throw new UnsupportedOperationException(NO_STRUCTURED_DATA_MESSAGE);
    }

    @Nonnull public  T getObjectValue(@Nonnull final ParsableFactory factory) {
        throw new UnsupportedOperationException(NO_STRUCTURED_DATA_MESSAGE);
    }

    @Nullable public > T getEnumValue(@Nonnull final ValuedEnumParser enumParser) {
        final String rawValue = this.getStringValue();
        if (rawValue == null || rawValue.isEmpty()) {
            return null;
        }
        return enumParser.forValue(rawValue);
    }

    @Nullable public > EnumSet getEnumSetValue(
            @Nonnull final ValuedEnumParser enumParser) {
        throw new UnsupportedOperationException(NO_STRUCTURED_DATA_MESSAGE);
    }

    @Nullable public Consumer getOnBeforeAssignFieldValues() {
        return this.onBeforeAssignFieldValues;
    }

    @Nullable public Consumer getOnAfterAssignFieldValues() {
        return this.onAfterAssignFieldValues;
    }

    private Consumer onBeforeAssignFieldValues;

    public void setOnBeforeAssignFieldValues(@Nullable final Consumer value) {
        this.onBeforeAssignFieldValues = value;
    }

    private Consumer onAfterAssignFieldValues;

    public void setOnAfterAssignFieldValues(@Nullable final Consumer value) {
        this.onAfterAssignFieldValues = value;
    }

    @Nullable public byte[] getByteArrayValue() {
        final String base64 = this.getStringValue();
        if (base64 == null || base64.isEmpty()) {
            return null;
        }
        return Base64.getDecoder().decode(base64);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy