DomainObject.java

  1. package no.nav.data.common.storage.domain;

  2. import com.fasterxml.jackson.annotation.JsonIgnore;
  3. import no.nav.data.common.rest.ChangeStampResponse;

  4. import java.time.LocalDateTime;
  5. import java.util.Comparator;
  6. import java.util.UUID;
  7. import java.util.stream.Stream;

  8. public interface DomainObject {

  9.     UUID getId();

  10.     void setId(UUID id);

  11.     @JsonIgnore
  12.     ChangeStamp getChangeStamp();

  13.     @JsonIgnore
  14.     void setChangeStamp(ChangeStamp changeStamp);

  15.     default String type() {
  16.         return TypeRegistration.typeOf(getClass());
  17.     }

  18.     default ChangeStampResponse convertChangeStampResponse() {
  19.         if (getChangeStamp() == null) {
  20.             return null;
  21.         }
  22.         return ChangeStampResponse.builder()
  23.                 .lastModifiedBy(getChangeStamp().getLastModifiedBy())
  24.                 .lastModifiedDate(getChangeStamp().getLastModifiedDate() == null ? LocalDateTime.now() : getChangeStamp().getLastModifiedDate())
  25.                 .build();
  26.     }

  27.      static <T extends DomainObject> T max(T obj1, T obj2) {
  28.          return Stream.of(obj1, obj2).max(Comparator.comparing(o -> o.getChangeStamp().getCreatedDate())).orElse(null);
  29.     }
  30. }