Skip to content

Commit

Permalink
Merge pull request #3176 from dzhw/cschwartze/issue3129
Browse files Browse the repository at this point in the history
#3129 initial version of sponsor modification regarding funding ref
  • Loading branch information
cschwartze committed Dec 13, 2022
2 parents d863158 + ce0a602 commit 69c6f45
Show file tree
Hide file tree
Showing 30 changed files with 438 additions and 163 deletions.
5 changes: 5 additions & 0 deletions src/main/java/eu/dzhw/fdz/metadatamanagement/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,23 @@
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.core.env.Environment;
import org.springframework.core.env.SimpleCommandLinePropertySource;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

import eu.dzhw.fdz.metadatamanagement.common.config.Constants;
import eu.dzhw.fdz.metadatamanagement.common.config.JHipsterProperties;
import eu.dzhw.fdz.metadatamanagement.common.config.MetadataManagementProperties;
import lombok.extern.slf4j.Slf4j;

import com.github.cloudyrock.spring.v5.EnableMongock;

/**
* Main class boostrapping the application.
*/
@SpringBootApplication
@EnableConfigurationProperties({MetadataManagementProperties.class, JHipsterProperties.class})
@Slf4j
@EnableMongock
@EnableMongoRepositories("eu.dzhw.fdz.metadatamanagement.datapackagemanagement.repository.changelogs")
public class Application {
@Autowired
private Environment env;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import eu.dzhw.fdz.metadatamanagement.common.domain.I18nLink;
import eu.dzhw.fdz.metadatamanagement.common.domain.I18nString;
import eu.dzhw.fdz.metadatamanagement.common.domain.Person;
import eu.dzhw.fdz.metadatamanagement.common.domain.Sponsor;
import eu.dzhw.fdz.metadatamanagement.common.domain.util.Patterns;
import eu.dzhw.fdz.metadatamanagement.common.domain.validation.I18nStringEntireNotEmpty;
import eu.dzhw.fdz.metadatamanagement.common.domain.validation.I18nStringSize;
Expand Down Expand Up @@ -160,18 +161,13 @@ public class AnalysisPackage extends AbstractShadowableRdcDomainObject
+ ".i18n-string-entire-not-empty") I18nString> institutions;

/**
* The names of the sponsors which have sponsored the study or project from which this analysis
* package results.
*
* It can be empty but if present must be specified in German and English and it must not contain
* more than 512 characters.
* List of {@link Sponsor}s which have sponsored this data package.
*
* Must not be empty.
*/
@Valid
private List<@I18nStringSize(max = StringLengths.MEDIUM,
message = "analysis-package-management.error.analysis-package.sponsor.i18n-string-size")
@I18nStringEntireNotEmpty(
message = "analysis-package-management.error.sponsor.institution"
+ ".i18n-string-entire-not-empty") I18nString> sponsors;
@NotEmpty(message = "data-package-management.error.data-package.data-curators.not-empty")
private List<Sponsor> sponsors;

/**
* The license of this analysis package. Markdown is supported.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import eu.dzhw.fdz.metadatamanagement.common.domain.I18nString;
import eu.dzhw.fdz.metadatamanagement.common.domain.Person;
import eu.dzhw.fdz.metadatamanagement.common.domain.Sponsor;
import eu.dzhw.fdz.metadatamanagement.common.domain.projections.AbstractRdcDomainObjectProjection;

/**
Expand All @@ -20,7 +21,7 @@ public interface AnalysisPackageSubDocumentProjection

List<I18nString> getInstitutions();

List<I18nString> getSponsors();
List<Sponsor> getSponsors();

List<Person> getAuthors();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package eu.dzhw.fdz.metadatamanagement.analysispackagemanagement.repository.changelogs;

import org.bson.Document;

import com.github.cloudyrock.mongock.ChangeLog;
import com.github.cloudyrock.mongock.ChangeSet;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
* Recreating sponsor data after model modification (e.g. fundingRef).
*
* @author cschwartze
*/
@Slf4j
@ChangeLog
public class RecreateSponsorsChangeLog {

/**
* Recreating sponsor data after model modification.
*
* @param db Mongo db client.
*/
@ChangeSet(order = "1", id = "recreateAnalysisPackageSponsors", author = "cschwartze", runAlways = true)
public void recreateSponsors(MongoDatabase db) {
MongoCollection<Document> analysisPackages = db.getCollection("analysis_packages");
List results = new ArrayList<>();
analysisPackages.find().into(results);
results.forEach(analysisPckg -> {
Object id = ((Document) analysisPckg).get("dataAcquisitionProjectId");
List<Document> sponsors = ((Document) analysisPckg).getList("sponsors", Document.class);
if (sponsors != null) {
if (sponsors.get(0).keySet().contains("de")) {
log.info("Recreate sponsors for " + id);
List newSponsors = new ArrayList<>();
sponsors.forEach(s -> {
Document newSponsor = Document.parse("{\"name\" : " + s.toJson() + ", \"fundingRef\" : null}");
newSponsors.add(newSponsor);
});
((Document) analysisPckg).append("sponsors", newSponsors);
if (analysisPackages.findOneAndReplace(
Filters.eq("dataAcquisitionProjectId", id), (Document) analysisPckg) != null) {
log.info("Sponsors for analysis package " + id + " recreated.");
} else {
log.warn("Sponsors for analysis package " + id + " could not recreated.");
}
}
if (sponsors.get(0).keySet().contains("name")) {
log.info("Sponsor data appears to have already been migrated for analysis package " + id + ".");
}
}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package eu.dzhw.fdz.metadatamanagement.common.domain;

import java.io.Serializable;

import org.javers.core.metamodel.annotation.ValueObject;

import eu.dzhw.fdz.metadatamanagement.common.domain.validation.I18nStringSize;
import eu.dzhw.fdz.metadatamanagement.common.domain.validation.StringLengths;
import eu.dzhw.fdz.metadatamanagement.common.domain.validation.I18nStringEntireNotEmpty;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* A representation of a sponsor.
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Builder
@ValueObject
public class Sponsor implements Serializable {

private static final long serialVersionUID = -2205399590286037466L;

/**
* The name of the sponsor which has sponsored the study or project from which this data
* package results.
*
* It must be specified in German and English and it must not contain more than 512 characters.
*/
@I18nStringSize(max = StringLengths.MEDIUM,
message = "data-package-management.error.data-package.sponsor.i18n-string-size")
@I18nStringEntireNotEmpty(
message = "data-package-management.error.data-package.sponsor.i18n-string-size")
private I18nString name;

/**
* The funding reference number.
*
* May be a number or a combination of numbers, letters and/or special characters.
*/
private String fundingRef;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import eu.dzhw.fdz.metadatamanagement.common.domain.I18nLink;
import eu.dzhw.fdz.metadatamanagement.common.domain.I18nString;
import eu.dzhw.fdz.metadatamanagement.common.domain.Person;
import eu.dzhw.fdz.metadatamanagement.common.domain.Sponsor;
import eu.dzhw.fdz.metadatamanagement.common.domain.util.Patterns;
import eu.dzhw.fdz.metadatamanagement.common.domain.validation.I18nStringEntireNotEmpty;
import eu.dzhw.fdz.metadatamanagement.common.domain.validation.I18nStringEntireNotEmptyOptional;
Expand Down Expand Up @@ -150,17 +151,13 @@ public class DataPackage extends AbstractShadowableRdcDomainObject
private I18nString studySeries;

/**
* The names of the sponsors which have sponsored the study or project from which this data
* package results.
* List of {@link Sponsor}s which have sponsored this data package.
*
* It must be specified in German and English and it must not contain more than 512 characters.
* Must not be empty.
*/
@NotEmpty(message = "data-package-management.error.data-package.sponsors.not-null")
private List<@I18nStringSize(max = StringLengths.MEDIUM,
message = "data-package-management.error.data-package.sponsor.i18n-string-size")
@I18nStringEntireNotEmpty(
message = "data-package-management.error.sponsor.institution"
+ ".i18n-string-entire-not-empty") I18nString> sponsors;
@Valid
@NotEmpty(message = "data-package-management.error.data-package.data-curators.not-empty")
private List<Sponsor> sponsors;

/**
* List of {@link Person}s which have performed this dataPackage.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import eu.dzhw.fdz.metadatamanagement.common.domain.I18nString;
import eu.dzhw.fdz.metadatamanagement.common.domain.Person;
import eu.dzhw.fdz.metadatamanagement.common.domain.Sponsor;
import eu.dzhw.fdz.metadatamanagement.common.domain.projections.AbstractRdcDomainObjectProjection;

/**
Expand All @@ -22,7 +23,7 @@ public interface DataPackageSubDocumentProjection

List<I18nString> getInstitutions();

List<I18nString> getSponsors();
List<Sponsor> getSponsors();

List<Person> getProjectContributors();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package eu.dzhw.fdz.metadatamanagement.datapackagemanagement.repository.changelogs;

import org.bson.Document;

import com.github.cloudyrock.mongock.ChangeLog;
import com.github.cloudyrock.mongock.ChangeSet;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
* Recreating sponsor data after model modification (e.g. fundingRef).
*
* @author cschwartze
*/
@Slf4j
@ChangeLog
public class RecreateSponsorsChangeLog {

/**
* Recreating sponsor data after model modification.
*
* @param db Mongo db client.
*/
@ChangeSet(order = "1", id = "recreateDataPackageSponsors", author = "cschwartze", runAlways = true)
public void recreateSponsors(MongoDatabase db) {
MongoCollection<Document> dataPackages = db.getCollection("data_packages");
List results = new ArrayList<>();
dataPackages.find().into(results);
results.forEach(dataPckg -> {
Object id = ((Document) dataPckg).get("dataAcquisitionProjectId");
List<Document> sponsors = ((Document) dataPckg).getList("sponsors", Document.class);
if (sponsors != null) {
if (sponsors.get(0).keySet().contains("de")) {
log.info("Recreate sponsors for " + id);
List newSponsors = new ArrayList<>();
sponsors.forEach(s -> {
Document newSponsor = Document.parse("{\"name\" : " + s.toJson() + ", \"fundingRef\" : null}");
newSponsors.add(newSponsor);
});
((Document) dataPckg).append("sponsors", newSponsors);
if (dataPackages.findOneAndReplace(
Filters.eq("dataAcquisitionProjectId", id), (Document) dataPckg) != null) {
log.info("Sponsors for data package " + id + " recreated.");
} else {
log.warn("Sponsors for data package " + id + " could not recreated.");
}
}
if (sponsors.get(0).keySet().contains("name")) {
log.info("Sponsor data appears to have already been migrated for data package " + id + ".");
}
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import eu.dzhw.fdz.metadatamanagement.analysispackagemanagement.domain.AnalysisPackage;
import eu.dzhw.fdz.metadatamanagement.common.domain.I18nString;
import eu.dzhw.fdz.metadatamanagement.common.domain.Sponsor;
import eu.dzhw.fdz.metadatamanagement.datapackagemanagement.domain.projection.DataPackageSubDocumentProjection;
import eu.dzhw.fdz.metadatamanagement.projectmanagement.domain.Configuration;
import eu.dzhw.fdz.metadatamanagement.projectmanagement.domain.Release;
Expand Down Expand Up @@ -38,7 +39,7 @@ public class AnalysisPackageSearchDocument extends AnalysisPackage
private List<DataPackageNestedDocument> nestedDataPackages = new ArrayList<>();

private List<I18nString> nestedInstitutions = new ArrayList<>();
private List<I18nString> nestedSponsors = new ArrayList<>();
private List<Sponsor> nestedSponsors = new ArrayList<>();

private Release release = null;
private Configuration configuration = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import eu.dzhw.fdz.metadatamanagement.common.domain.AbstractRdcDomainObject;
import eu.dzhw.fdz.metadatamanagement.common.domain.I18nString;
import eu.dzhw.fdz.metadatamanagement.common.domain.Person;
import eu.dzhw.fdz.metadatamanagement.common.domain.Sponsor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
Expand All @@ -34,7 +35,7 @@ public class AnalysisPackageSubDocument extends AbstractRdcDomainObject

private List<I18nString> institutions;

private List<I18nString> sponsors;
private List<Sponsor> sponsors;

private I18nString title;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import eu.dzhw.fdz.metadatamanagement.common.domain.Country;
import eu.dzhw.fdz.metadatamanagement.common.domain.I18nString;
import eu.dzhw.fdz.metadatamanagement.common.domain.Period;
import eu.dzhw.fdz.metadatamanagement.common.domain.Sponsor;
import eu.dzhw.fdz.metadatamanagement.conceptmanagement.domain.projections.ConceptSubDocumentProjection;
import eu.dzhw.fdz.metadatamanagement.datapackagemanagement.domain.DataPackage;
import eu.dzhw.fdz.metadatamanagement.datasetmanagement.domain.DataSet;
Expand Down Expand Up @@ -73,7 +74,7 @@ public class DataPackageSearchDocument extends DataPackage implements SearchDocu
private List<AnalysisPackageNestedDocument> nestedAnalysisPackages = new ArrayList<>();

private List<I18nString> nestedInstitutions = new ArrayList<>();
private List<I18nString> nestedSponsors = new ArrayList<>();
private List<Sponsor> nestedSponsors = new ArrayList<>();

private Release release = null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import eu.dzhw.fdz.metadatamanagement.common.domain.AbstractRdcDomainObject;
import eu.dzhw.fdz.metadatamanagement.common.domain.I18nString;
import eu.dzhw.fdz.metadatamanagement.common.domain.Person;
import eu.dzhw.fdz.metadatamanagement.common.domain.Sponsor;
import eu.dzhw.fdz.metadatamanagement.datapackagemanagement.domain.projection.DataPackageSubDocumentProjection;
import lombok.EqualsAndHashCode;
import lombok.Getter;
Expand Down Expand Up @@ -34,7 +35,7 @@ public class DataPackageSubDocument extends AbstractRdcDomainObject

private List<I18nString> institutions;

private List<I18nString> sponsors;
private List<Sponsor> sponsors;

private I18nString studySeries;

Expand Down
6 changes: 6 additions & 0 deletions src/main/resources/config/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ spring:
- file:src/main/webapp/
- classpath:public/

mongock:
enabled: true
change-logs-scan-package:
- eu.dzhw.fdz.metadatamanagement.datapackagemanagement.repository.changelogs
- eu.dzhw.fdz.metadatamanagement.analysispackagemanagement.repository.changelogs

logging:
level:
eu.dzhw.fdz.metadatamanagement: debug
Expand Down

0 comments on commit 69c6f45

Please sign in to comment.