This is an automated email from the ASF dual-hosted git repository.
arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new debc8e94a FINERACT-1926: Fineract Asset Externalization models - [x]
JPA model changes
debc8e94a is described below
commit debc8e94a4d96887bf7b5b15f49b84d1f534df68
Author: Janos Haber <[email protected]>
AuthorDate: Wed May 17 15:04:19 2023 +0200
FINERACT-1926: Fineract Asset Externalization models
- [x] JPA model changes
---
.../businessdate/domain/BusinessDateType.java | 0
.../infrastructure/core/domain/ActionContext.java | 0
.../core/domain/AuditableFieldsConstants.java | 0
.../core/domain/FineractContext.java | 0
.../core/domain/FineractPlatformTenant.java | 0
.../domain/FineractPlatformTenantConnection.java | 0
.../infrastructure/core/service/DateUtils.java | 0
.../core/service/ThreadLocalContextUtil.java | 0
.../investor/domain/AbstractAuditableCustom.java | 87 -------------------
.../AbstractAuditableWithUTCDateTimeCustom.java | 99 ++++++++++++++++++++++
.../investor/domain/ExternalAssetOwner.java | 2 +-
.../domain/ExternalAssetOwnerTransfer.java | 8 +-
.../ExternalAssetOwnerTransferLoanMapping.java | 9 +-
13 files changed, 113 insertions(+), 92 deletions(-)
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/businessdate/domain/BusinessDateType.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/domain/BusinessDateType.java
similarity index 100%
rename from
fineract-provider/src/main/java/org/apache/fineract/infrastructure/businessdate/domain/BusinessDateType.java
rename to
fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/domain/BusinessDateType.java
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/ActionContext.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/ActionContext.java
similarity index 100%
rename from
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/ActionContext.java
rename to
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/ActionContext.java
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AuditableFieldsConstants.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AuditableFieldsConstants.java
similarity index 100%
rename from
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AuditableFieldsConstants.java
rename to
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AuditableFieldsConstants.java
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractContext.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractContext.java
similarity index 100%
rename from
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractContext.java
rename to
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractContext.java
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenant.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenant.java
similarity index 100%
rename from
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenant.java
rename to
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenant.java
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java
similarity index 100%
rename from
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java
rename to
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/FineractPlatformTenantConnection.java
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java
similarity index 100%
rename from
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java
rename to
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/DateUtils.java
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/ThreadLocalContextUtil.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/ThreadLocalContextUtil.java
similarity index 100%
rename from
fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/ThreadLocalContextUtil.java
rename to
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/ThreadLocalContextUtil.java
diff --git
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableCustom.java
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableCustom.java
deleted file mode 100644
index a7b782623..000000000
---
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableCustom.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.fineract.investor.domain;
-
-import java.time.LocalDateTime;
-import java.util.Optional;
-import javax.persistence.Column;
-import javax.persistence.MappedSuperclass;
-import org.springframework.data.domain.Auditable;
-
-/**
- * This class is a copy paste from the fineract-provider module since
EclipseLink not weaves the class properly if it's
- * placed in the fineract-core module.
- */
-@MappedSuperclass
-public abstract class AbstractAuditableCustom extends
AbstractPersistableCustom implements Auditable<Long, Long, LocalDateTime> {
-
- private static final long serialVersionUID = 141481953116476081L;
-
- @Column(name = "createdby_id")
- private Long createdBy;
-
- @Column(name = "created_date")
- private LocalDateTime createdDate;
-
- @Column(name = "lastmodifiedby_id")
- private Long lastModifiedBy;
-
- @Column(name = "lastmodified_date")
- private LocalDateTime lastModifiedDate;
-
- @Override
- public Optional<Long> getCreatedBy() {
- return Optional.ofNullable(this.createdBy);
- }
-
- @Override
- public void setCreatedBy(final Long createdBy) {
- this.createdBy = createdBy;
- }
-
- @Override
- public Optional<LocalDateTime> getCreatedDate() {
- return null == this.createdDate ? Optional.empty() :
Optional.of(this.createdDate);
- }
-
- @Override
- public void setCreatedDate(final LocalDateTime createdDate) {
- this.createdDate = createdDate;
- }
-
- @Override
- public Optional<Long> getLastModifiedBy() {
- return Optional.ofNullable(this.lastModifiedBy);
- }
-
- @Override
- public void setLastModifiedBy(final Long lastModifiedBy) {
- this.lastModifiedBy = lastModifiedBy;
- }
-
- @Override
- public Optional<LocalDateTime> getLastModifiedDate() {
- return null == this.lastModifiedDate ? Optional.empty() :
Optional.of(this.lastModifiedDate);
- }
-
- @Override
- public void setLastModifiedDate(final LocalDateTime lastModifiedDate) {
- this.lastModifiedDate = lastModifiedDate;
- }
-}
diff --git
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableWithUTCDateTimeCustom.java
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableWithUTCDateTimeCustom.java
new file mode 100644
index 000000000..cca8f6eeb
--- /dev/null
+++
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableWithUTCDateTimeCustom.java
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.investor.domain;
+
+import static
org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.CREATED_BY_DB_FIELD;
+import static
org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.CREATED_DATE_DB_FIELD;
+import static
org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.LAST_MODIFIED_BY_DB_FIELD;
+import static
org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.LAST_MODIFIED_DATE_DB_FIELD;
+
+import java.time.OffsetDateTime;
+import java.util.Optional;
+import javax.persistence.Column;
+import javax.persistence.MappedSuperclass;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.apache.fineract.infrastructure.core.service.DateUtils;
+import org.springframework.data.domain.Auditable;
+import org.springframework.data.jpa.domain.AbstractAuditable;
+
+/**
+ * A custom copy of {@link AbstractAuditable} to override the column names
used on database. It also uses OffsetDateTime
+ * for created and modified. The datetimes will be converted from tenant TZ to
UTC before storing (automatically
+ * happens) and converted from System TZ to tenant TZ after fetching from DB
+ *
+ * Abstract base class for auditable entities. Stores the audit values in
persistent fields.
+ */
+@MappedSuperclass
+@Getter
+@Setter
+@NoArgsConstructor
+public abstract class AbstractAuditableWithUTCDateTimeCustom extends
AbstractPersistableCustom
+ implements Auditable<Long, Long, OffsetDateTime> {
+
+ private static final long serialVersionUID = 141481953116476081L;
+
+ @Column(name = CREATED_BY_DB_FIELD, nullable = false)
+ @Setter(onMethod = @__(@Override))
+ private Long createdBy;
+
+ @Column(name = CREATED_DATE_DB_FIELD, nullable = false)
+ @Setter(onMethod = @__(@Override))
+ private OffsetDateTime createdDate;
+
+ @Column(name = LAST_MODIFIED_BY_DB_FIELD, nullable = false)
+ @Setter(onMethod = @__(@Override))
+ private Long lastModifiedBy;
+
+ @Column(name = LAST_MODIFIED_DATE_DB_FIELD, nullable = false)
+ @Setter(onMethod = @__(@Override))
+ private OffsetDateTime lastModifiedDate;
+
+ @Override
+ public Optional<Long> getCreatedBy() {
+ return Optional.ofNullable(this.createdBy);
+ }
+
+ @Override
+ public Optional<OffsetDateTime> getCreatedDate() {
+ if (this.createdDate == null) {
+ return Optional.empty();
+ } else {
+ return Optional.of(this.createdDate
+
.withOffsetSameInstant(DateUtils.getDateTimeZoneOfTenant().getRules().getOffset(this.createdDate.toInstant())));
+ }
+ }
+
+ @Override
+ public Optional<Long> getLastModifiedBy() {
+ return Optional.ofNullable(this.lastModifiedBy);
+ }
+
+ @Override
+ public Optional<OffsetDateTime> getLastModifiedDate() {
+ if (this.lastModifiedDate == null) {
+ return Optional.empty();
+ } else {
+ return Optional.of(this.lastModifiedDate
+
.withOffsetSameInstant(DateUtils.getDateTimeZoneOfTenant().getRules().getOffset(this.lastModifiedDate.toInstant())));
+ }
+ }
+
+}
diff --git
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java
index 9214e61a2..774018991 100644
---
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java
+++
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java
@@ -31,7 +31,7 @@ import lombok.Setter;
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "m_external_asset_owner")
-public class ExternalAssetOwner extends AbstractAuditableCustom {
+public class ExternalAssetOwner extends AbstractAuditableWithUTCDateTimeCustom
{
@Column(name = "external_id", nullable = false, length = 100, unique =
true)
private String externalId;
diff --git
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java
index 1cc9ca1cb..10108fcba 100644
---
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java
+++
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java
@@ -22,6 +22,8 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.AccessLevel;
import lombok.Getter;
@@ -33,11 +35,15 @@ import lombok.Setter;
@Table(name = "m_external_asset_owner_transfer")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
-public class ExternalAssetOwnerTransfer extends AbstractAuditableCustom {
+public class ExternalAssetOwnerTransfer extends
AbstractAuditableWithUTCDateTimeCustom {
@Column(name = "owner_id")
private Long ownerId;
+ @ManyToOne
+ @JoinColumn(name = "owner_id", insertable = false, updatable = false)
+ private ExternalAssetOwner owner;
+
@Column(name = "external_id", length = 100)
private String externalId;
diff --git
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java
index 129e7a089..86aea1f14 100644
---
a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java
+++
b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java
@@ -20,6 +20,8 @@ package org.apache.fineract.investor.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.AccessLevel;
import lombok.Getter;
@@ -31,12 +33,13 @@ import lombok.Setter;
@Table(name = "m_external_asset_owner_transfer_loan_mapping")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
-public class ExternalAssetOwnerTransferLoanMapping extends
AbstractAuditableCustom {
+public class ExternalAssetOwnerTransferLoanMapping extends
AbstractAuditableWithUTCDateTimeCustom {
@Column(name = "loan_id", nullable = false)
private Long loanId;
- @Column(name = "owner_transfer_id")
- private Long ownerTransferId;
+ @ManyToOne
+ @JoinColumn(name = "owner_transfer_id", insertable = false, updatable =
false)
+ private ExternalAssetOwnerTransfer ownerTransfer;
}