001package io.ebeaninternal.server.deploy.generatedproperty;
002
003import io.ebean.bean.EntityBean;
004import io.ebeaninternal.server.deploy.BeanProperty;
005
006/**
007 * Support java.time types as GeneratedProperty.
008 */
009public class GeneratedInsertJavaTime {
010
011  public static abstract class Base implements GeneratedProperty, GeneratedWhenCreated {
012
013    @Override
014    public boolean includeInUpdate() {
015      return false;
016    }
017
018    @Override
019    public boolean includeInAllUpdates() {
020      return false;
021    }
022
023    @Override
024    public boolean includeInInsert() {
025      return true;
026    }
027
028    @Override
029    public boolean isDDLNotNullable() {
030      return true;
031    }
032
033    @Override
034    public Object getUpdateValue(BeanProperty prop, EntityBean bean, long now) {
035      return prop.getValue(bean);
036    }
037  }
038
039  /**
040   * Instant support.
041   */
042  public static class InstantDT extends Base {
043
044    @Override
045    public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) {
046      return JavaTimeUtils.toInstant(now);
047    }
048  }
049
050  /**
051   * LocalDateTime support.
052   */
053  public static class LocalDT extends Base {
054
055    @Override
056    public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) {
057      return JavaTimeUtils.toLocalDateTime(now);
058    }
059  }
060
061  /**
062   * OffsetDateTime support.
063   */
064  public static class OffsetDT extends Base {
065
066    @Override
067    public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) {
068      return JavaTimeUtils.toOffsetDateTime(now);
069    }
070
071  }
072
073  /**
074   * ZonedDateTime support.
075   */
076  public static class ZonedDT extends Base {
077
078    @Override
079    public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) {
080      return JavaTimeUtils.toZonedDateTime(now);
081    }
082
083  }
084
085}