From 9fee79ecde9aaaff690e5f1913ef5fc75682d935 Mon Sep 17 00:00:00 2001 From: Arnold Galovics Date: Tue, 16 May 2023 17:19:10 +0200 Subject: [PATCH] FINERACT-1926: Minor fixes with module static weaving --- fineract-investor/build.gradle | 19 ++++ .../api/ExternalAssetOwnersApiResource.java | 2 +- .../domain/AbstractAuditableCustom.java | 87 +++++++++++++++++++ .../domain/AbstractPersistableCustom.java | 62 +++++++++++++ .../investor/domain/ExternalAssetOwner.java | 1 - .../domain/ExternalAssetOwnerTransfer.java | 1 - ...ExternalAssetOwnerTransferLoanMapping.java | 1 - .../resources/jpa/investor/persistence.xml | 37 ++++++++ .../core/domain/AbstractAuditableCustom.java | 2 + .../domain/AbstractPersistableCustom.java | 2 + 10 files changed, 210 insertions(+), 4 deletions(-) create mode 100644 fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableCustom.java create mode 100644 fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractPersistableCustom.java create mode 100644 fineract-investor/src/main/resources/jpa/investor/persistence.xml rename {fineract-core => fineract-provider}/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java (97%) rename {fineract-core => fineract-provider}/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java (96%) diff --git a/fineract-investor/build.gradle b/fineract-investor/build.gradle index 3d5d695d5..d6e05c3fd 100644 --- a/fineract-investor/build.gradle +++ b/fineract-investor/build.gradle @@ -23,6 +23,25 @@ apply plugin: 'eclipse' check.dependsOn('cucumber') +compileJava.doLast { + def mainSS = sourceSets.main + def source = mainSS.java.classesDirectory.get() + copy { + from file("src/main/resources/jpa/investor/persistence.xml") + into "${source}/META-INF/" + } + javaexec { + description = 'Performs EclipseLink static weaving of entity classes' + def target = source + main 'org.eclipse.persistence.tools.weaving.jpa.StaticWeave' + args '-persistenceinfo', source, '-classpath', sourceSets.main.runtimeClasspath, source, target + classpath sourceSets.main.runtimeClasspath + } + delete { + delete "${source}/META-INF/persistence.xml" + } +} + // Configuration for Swagger documentation generation task // https://github.com/swagger-api/swagger-core/tree/master/modules/swagger-gradle-plugin import org.apache.tools.ant.filters.ReplaceTokens diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java b/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java index 0213e26af..09744ce19 100644 --- a/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java @@ -33,7 +33,7 @@ import org.apache.commons.lang3.NotImplementedException; import org.apache.fineract.infrastructure.security.service.PlatformUserRightsContext; import org.springframework.stereotype.Component; -@Path("/external-asset-owners") +@Path("/v1/external-asset-owners") @Component @Tag(name = "External Asset Owners", description = "External Asset Owners") @RequiredArgsConstructor 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 new file mode 100644 index 000000000..a7b782623 --- /dev/null +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableCustom.java @@ -0,0 +1,87 @@ +/** + * 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 { + + 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 getCreatedBy() { + return Optional.ofNullable(this.createdBy); + } + + @Override + public void setCreatedBy(final Long createdBy) { + this.createdBy = createdBy; + } + + @Override + public Optional getCreatedDate() { + return null == this.createdDate ? Optional.empty() : Optional.of(this.createdDate); + } + + @Override + public void setCreatedDate(final LocalDateTime createdDate) { + this.createdDate = createdDate; + } + + @Override + public Optional getLastModifiedBy() { + return Optional.ofNullable(this.lastModifiedBy); + } + + @Override + public void setLastModifiedBy(final Long lastModifiedBy) { + this.lastModifiedBy = lastModifiedBy; + } + + @Override + public Optional 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/AbstractPersistableCustom.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractPersistableCustom.java new file mode 100644 index 000000000..d9dfae037 --- /dev/null +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractPersistableCustom.java @@ -0,0 +1,62 @@ +/** + * 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.io.Serializable; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.PostLoad; +import javax.persistence.PrePersist; +import javax.persistence.Transient; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.domain.Persistable; + +/** + * 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 +@Getter +@Setter +@NoArgsConstructor +public abstract class AbstractPersistableCustom implements Persistable, Serializable { + + private static final long serialVersionUID = 9181640245194392646L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Getter(onMethod = @__(@Override)) + private Long id; + + @Transient + @Setter(value = AccessLevel.NONE) + @Getter(onMethod = @__(@Override)) + private boolean isNew = true; + + @PrePersist + @PostLoad + void markNotNew() { + this.isNew = false; + } +} 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 ba186a81b..9214e61a2 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 @@ -25,7 +25,6 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; @Getter @Setter 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 a638ec802..1cc9ca1cb 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 @@ -27,7 +27,6 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; @Getter @Setter 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 37a9d4ac3..129e7a089 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 @@ -25,7 +25,6 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; @Getter @Setter diff --git a/fineract-investor/src/main/resources/jpa/investor/persistence.xml b/fineract-investor/src/main/resources/jpa/investor/persistence.xml new file mode 100644 index 000000000..105688157 --- /dev/null +++ b/fineract-investor/src/main/resources/jpa/investor/persistence.xml @@ -0,0 +1,37 @@ + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + false + + + + + diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java similarity index 97% rename from fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java rename to fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java index 01a229849..dcb4708d4 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java @@ -26,6 +26,8 @@ import org.springframework.data.domain.Auditable; import org.springframework.data.jpa.domain.AbstractAuditable; /** + * Make sure to modify the same class in the modules (fineract-investor, etc) + * * A custom copy of {@link AbstractAuditable} to override the column names used on database. It also uses Instant * instead of LocalDateTime for created and modified. * diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java similarity index 96% rename from fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java rename to fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java index 824374341..f313893ca 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java @@ -33,6 +33,8 @@ import lombok.Setter; import org.springframework.data.domain.Persistable; /** + * Make sure to modify the same class in the modules (fineract-investor, etc) + * * Abstract base class for entities. * * Inspired by {@link org.springframework.data.jpa.domain.AbstractPersistable}, but Id is always Long (and this class