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

hope.kola.contract.assertj.model.ObjectFragmentTrait Maven / Gradle / Ivy

There is a newer version: 1.1.2-RELEASE
Show newest version
package hope.kola.contract.assertj.model;

import com.squareup.javapoet.CodeBlock;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

/** This is to transform the runtime Object to defined value */
public interface ObjectFragmentTrait {

  default CodeBlock.Builder ofBigInteger(final BigInteger value) {
    return CodeBlock.builder().add("new $T($S)", BigInteger.class, value.toString());
  }

  default CodeBlock.Builder ofBigInteger(final String value) {
    return CodeBlock.builder().add("new $T($S)", BigInteger.class, value);
  }

  default CodeBlock.Builder ofBigDecimal(final BigDecimal value) {
    return CodeBlock.builder().add("new $T($S)", BigDecimal.class, value.toPlainString());
  }

  default CodeBlock.Builder ofBigDecimal(final String value) {
    return CodeBlock.builder().add("new $T($S)", BigDecimal.class, value);
  }

  /**
   * From runtime to definition
   *
   * @param value runtime {@link LocalDate}
   * @return {@link CodeBlock.Builder}
   */
  default CodeBlock.Builder ofLocalDate(final LocalDate value) {
    return CodeBlock.builder()
        .add(
            "$T.of($L, $L, $L)",
            LocalDate.class,
            value.getYear(),
            // 1~12
            value.getMonth().getValue(),
            value.getDayOfMonth());
  }

  /**
   * {@link LocalDate#parse(CharSequence)}
   *
   * @param value {@link LocalDate} style string
   * @return {@link CodeBlock.Builder}
   */
  default CodeBlock.Builder ofLocalDate(final String value) {
    return CodeBlock.builder().add("$T.parse($S)", LocalDate.class, value);
  }

  /**
   * {@link LocalDate#parse(CharSequence, DateTimeFormatter)}
   *
   * @param value {@link LocalDate} style string
   * @param pattern customized pattern
   * @return {@link CodeBlock.Builder}
   */
  default CodeBlock.Builder ofLocalDate(final String value, final String pattern) {
    return CodeBlock.builder()
        .add(
            "$T.parse($S, $T.ofPattern($S))",
            LocalDate.class,
            value,
            DateTimeFormatter.class,
            pattern);
  }

  /**
   * @see {@link LocalDateTime#of(int, int, int, int, int, int, int)}
   * @param value
   * @return
   */
  default CodeBlock.Builder ofLocalDateTime(final LocalDateTime value) {
    return CodeBlock.builder()
        .add(
            "$T.of($L, $L, $L, $L, $L, $L, $L)",
            LocalDateTime.class,
            value.getYear(),
            value.getMonth().getValue(),
            value.getDayOfMonth(),
            value.getHour(),
            value.getMinute(),
            value.getSecond(),
            value.getNano());
  }

  /**
   * {@link LocalDateTime#parse(CharSequence)}
   *
   * @param value {@link LocalDateTime} style string
   * @return {@link CodeBlock.Builder}
   */
  default CodeBlock.Builder ofLocalDateTime(final String value) {
    return CodeBlock.builder().add("$T.parse($S)", LocalDateTime.class, value);
  }

  /**
   * {@link LocalDateTime#parse(CharSequence, DateTimeFormatter)}
   *
   * @param value {@link LocalDateTime} style string
   * @param pattern customized pattern
   * @return {@link CodeBlock.Builder}
   */
  default CodeBlock.Builder ofLocalDateTime(final String value, final String pattern) {
    return CodeBlock.builder()
        .add(
            "$T.parse($S, $T.ofPattern($S))",
            LocalDateTime.class,
            value,
            DateTimeFormatter.class,
            pattern);
  }

  /**
   * Converter runtime {@link LocalTime} to definition
   *
   * @param value the {@link LocalTime}
   * @return {@link CodeBlock.Builder}
   */
  default CodeBlock.Builder ofLocalTime(final LocalTime value) {
    return CodeBlock.builder()
        // LocalTime.of(int hour, int minute, int second, int nanoOfSecond)
        .add(
            "$T.of($L, $L, $L, $L)",
            LocalTime.class,
            value.getHour(),
            value.getMinute(),
            value.getSecond(),
            value.getNano());
  }

  /**
   * {@link LocalTime#parse(CharSequence)}
   *
   * @param value given local time value present
   * @return
   */
  default CodeBlock.Builder ofLocalTime(final String value) {
    return CodeBlock.builder().add("$T.parse($S)", LocalTime.class, value);
  }

  /**
   * {@link LocalTime#parse(CharSequence, DateTimeFormatter)}
   *
   * @param value given local time value present
   * @param pattern, the time pattern
   * @return {@link CodeBlock.Builder}
   */
  default CodeBlock.Builder ofLocalTime(final String value, final String pattern) {
    return CodeBlock.builder()
        .add(
            "$T.parse($S, $T.ofPattern($S))",
            LocalTime.class,
            value,
            DateTimeFormatter.class,
            pattern);
  }

  default CodeBlock.Builder ofUUID(final UUID value) {
    return CodeBlock.builder().add("$T.fromString($S)", UUID.class, value.toString());
  }

  default CodeBlock.Builder ofUUID(final String value) {
    return CodeBlock.builder().add("$T.from($S)", UUID.class, value);
  }

  default CodeBlock.Builder ofInstant(final Instant value) {
    return CodeBlock.builder().add("$T.ofEpochMilli($L)", Instant.class, value.toEpochMilli());
  }

  default CodeBlock.Builder ofInstant(final Long value) {
    return CodeBlock.builder().add("$T.ofEpochMilli($L)", Instant.class, value);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy