diff --git a/db/pom.xml b/db/pom.xml index 895cc0d..477b138 100644 --- a/db/pom.xml +++ b/db/pom.xml @@ -15,67 +15,84 @@ See the License for the specific language governing permissions and limitations under the License. --> - - 4.0.0 - - de.muehlencord.shared - shared-db - ejb - - - shared - de.muehlencord - 1.2-SNAPSHOT - - - shared-db - - - org.apache.commons - commons-lang3 - jar - - - ${project.groupId} - shared-util - - - - org.junit.jupiter - junit-jupiter-engine - test - - - - - org.slf4j - slf4j-api - - - org.slf4j - slf4j-log4j12 - test - - - javax - javaee-web-api - provided - - - - - - - - org.apache.maven.plugins - maven-ejb-plugin - - 3.1 - - **/persistence.xml - - - - - + + 4.0.0 + + de.muehlencord.shared + shared-db + ejb + + + shared + de.muehlencord + 1.2-SNAPSHOT + + + shared-db + + + org.apache.commons + commons-lang3 + jar + + + ${project.groupId} + shared-util + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + test + + + javax + javaee-web-api + provided + + + + + org.projectlombok + lombok + provided + 1.18.12 + + + + + + + + org.apache.maven.plugins + maven-ejb-plugin + + 3.1 + + **/persistence.xml + + + + + \ No newline at end of file diff --git a/db/src/main/java/de/muehlencord/shared/db/Audit.java b/db/src/main/java/de/muehlencord/shared/db/Audit.java index b55887a..b171cae 100644 --- a/db/src/main/java/de/muehlencord/shared/db/Audit.java +++ b/db/src/main/java/de/muehlencord/shared/db/Audit.java @@ -1,4 +1,4 @@ -/* +/* * Copyright 2019 Joern Muehlencord (joern@muehlencord.de). * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,77 +15,119 @@ */ package de.muehlencord.shared.db; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import java.io.Serializable; -import java.util.Date; +import java.time.LocalDateTime; +import java.time.ZoneOffset; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Embeddable; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; import javax.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; /** - * * @author Joern Muehlencord (joern@muehlencord.de) */ @Embeddable +@Getter +@Setter public class Audit implements Serializable { - private static final long serialVersionUID = -955765069412891842L; + private static final long serialVersionUID = -955765069412891842L; - @Basic(optional = false) - @NotNull - @Column(name = "created_on") - @Temporal(TemporalType.TIMESTAMP) - private Date createdOn; + @Basic(optional = false) + @NotNull + @Column(name = "valid_from") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime validFrom; - @Basic(optional = false) - @NotNull - @Column(name = "created_by") - private String createdBy; + @Column(name = "valid_to") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime validTo; - @Basic(optional = false) - @NotNull - @Column(name = "last_updated_on") - @Temporal(TemporalType.TIMESTAMP) - private Date lastUpdatedOn; + @Basic(optional = false) + @NotNull + @Column(name = "created_on") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime createdOn; - @Basic(optional = false) - @NotNull - @Column(name = "last_updated_by") - private String lastUpdatedBy; + @Basic(optional = false) + @NotNull + @Column(name = "created_by") + private String createdBy; - /* getter / setter */ - public Date getCreatedOn() { - return createdOn; - } + @Basic(optional = false) + @NotNull + @Column(name = "last_updated_on") + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + @JsonSerialize(using = LocalDateTimeSerializer.class) + private LocalDateTime lastUpdatedOn; - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } + @Basic(optional = false) + @NotNull + @Column(name = "last_updated_by") + private String lastUpdatedBy; - public String getCreatedBy() { - return createdBy; - } + public Audit() { + this.validFrom = LocalDateTime.now(ZoneOffset.UTC); + this.lastUpdatedOn = LocalDateTime.now(ZoneOffset.UTC); + this.createdOn = LocalDateTime.now(ZoneOffset.UTC); + } - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } + public Audit withNewAudit(String userName) { + LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC); + this.setCreatedBy(userName); + this.setCreatedOn(now); + this.setLastUpdatedBy(userName); + this.setLastUpdatedOn(now); + this.setValidFrom(now); + return this; + } - public Date getLastUpdatedOn() { - return lastUpdatedOn; - } + public Audit withEndDate() { + return withEndDate (LocalDateTime.now(ZoneOffset.UTC)); + } - public void setLastUpdatedOn(Date lastUpdatedOn) { - this.lastUpdatedOn = lastUpdatedOn; - } + private Audit withEndDate(LocalDateTime endDate) { + this.setValidTo(endDate); + return this; + } - public String getLastUpdatedBy() { - return lastUpdatedBy; - } + public Audit withValidFrom(final LocalDateTime validFrom) { + this.validFrom = validFrom; + return this; + } - public void setLastUpdatedBy(String lastUpdatedBy) { - this.lastUpdatedBy = lastUpdatedBy; - } + public Audit withValidTo(final LocalDateTime validTo) { + this.validTo = validTo; + return this; + } + + public Audit withCreatedOn(final LocalDateTime createdOn) { + this.createdOn = createdOn; + return this; + } + + public Audit withCreatedBy(final String createdBy) { + this.createdBy = createdBy; + return this; + } + + public Audit withLastUpdatedOn(final LocalDateTime lastUpdatedOn) { + this.lastUpdatedOn = lastUpdatedOn; + return this; + } + + public Audit withLastUpdatedBy(final String lastUpdatedBy) { + this.lastUpdatedBy = lastUpdatedBy; + return this; + } } diff --git a/db/src/main/java/de/muehlencord/shared/db/AuditListener.java b/db/src/main/java/de/muehlencord/shared/db/AuditListener.java index e002c7e..4188591 100644 --- a/db/src/main/java/de/muehlencord/shared/db/AuditListener.java +++ b/db/src/main/java/de/muehlencord/shared/db/AuditListener.java @@ -16,12 +16,14 @@ package de.muehlencord.shared.db; import de.muehlencord.shared.util.DateUtil; +import java.time.LocalDateTime; +import java.time.ZoneOffset; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Does not work, cannot Spring independet inject current username - implemented in AbstractController manually + * Does not work, cannot Spring independent inject current username - implemented in AbstractController manually * @author Joern Muehlencord (joern@muehlencord.de) */ public class AuditListener { @@ -37,8 +39,7 @@ public class AuditListener { auditable.setAudit(audit); } -// LocalDateTime now = LocalDateTime.now(); - Date now = DateUtil.getCurrentTimeInUTC(); + LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC); audit.setCreatedOn(now); audit.setLastUpdatedOn(now); // audit.setCreatedBy(LoggedUser.get()); // TODO where to get the user from @@ -52,8 +53,8 @@ public class AuditListener { public void preUpdate(Auditable auditable) { Audit audit = auditable.getAudit(); -// LocalDateTime now = LocalDateTime.now(); - Date now = DateUtil.getCurrentTimeInUTC(); + LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC); +// Date now = DateUtil.getCurrentTimeInUTC(); audit.setLastUpdatedOn(now); // audit.setUpdatedBy(LoggedUser.get()); // TODO where to get the user from if (LOGGER.isDebugEnabled()) { diff --git a/db/src/main/java/de/muehlencord/shared/db/CommonAbstractController.java b/db/src/main/java/de/muehlencord/shared/db/CommonAbstractController.java index 1f2e76a..d3a82a1 100644 --- a/db/src/main/java/de/muehlencord/shared/db/CommonAbstractController.java +++ b/db/src/main/java/de/muehlencord/shared/db/CommonAbstractController.java @@ -17,6 +17,9 @@ package de.muehlencord.shared.db; import de.muehlencord.shared.util.DateUtil; import java.io.Serializable; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -219,10 +222,10 @@ public abstract class CommonAbstractController { } if (onCreate) { audit.setCreatedBy(changedBy); - audit.setCreatedOn(DateUtil.getCurrentTimeInUTC()); + audit.setCreatedOn(LocalDateTime.now(ZoneOffset.UTC)); } audit.setLastUpdatedBy(changedBy); - audit.setLastUpdatedOn(DateUtil.getCurrentTimeInUTC()); + audit.setLastUpdatedOn(LocalDateTime.now(ZoneOffset.UTC)); return audit; } diff --git a/db/src/main/java/de/muehlencord/shared/db/NumericallyIdentifiedEntity.java b/db/src/main/java/de/muehlencord/shared/db/NumericallyIdentifiedEntity.java new file mode 100644 index 0000000..4fb8b79 --- /dev/null +++ b/db/src/main/java/de/muehlencord/shared/db/NumericallyIdentifiedEntity.java @@ -0,0 +1,25 @@ +package de.muehlencord.shared.db; + +import java.io.Serializable; +import javax.persistence.Basic; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + +@MappedSuperclass +public abstract class NumericallyIdentifiedEntity implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Basic(optional = false) + private Long id; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } +} diff --git a/pom.xml b/pom.xml index d17945e..7dea8e8 100644 --- a/pom.xml +++ b/pom.xml @@ -155,15 +155,20 @@ limitations under the License. com.fasterxml.jackson.core jackson-annotations - 2.9.9 + 2.11.2 jar com.fasterxml.jackson.core jackson-databind - 2.9.9.1 + 2.11.2 jar - + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.11.2 + org.apache.shiro shiro-core @@ -222,12 +227,20 @@ limitations under the License. poi-ooxml 4.0.1 - + com.inversoft prime-jwt 2.0.0 + + + + org.projectlombok + lombok + provided + 1.18.12 +