diff --git a/dmp-backend/web/src/main/java/eu/eudat/migration/controllers/MigrateController.java b/dmp-backend/web/src/main/java/eu/eudat/migration/controllers/MigrateController.java new file mode 100644 index 000000000..3652d7776 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/migration/controllers/MigrateController.java @@ -0,0 +1,51 @@ +package eu.eudat.migration.controllers; + +import eu.eudat.data.entities.DatasetProfile; +import eu.eudat.migration.dao.TemplateRepository; +import eu.eudat.migration.entities.Template; +import eu.eudat.migration.entities.User; +import eu.eudat.migration.services.DMPRoadmapService; +import eu.eudat.models.data.helpers.responses.ResponseItem; +import eu.eudat.types.ApiMessageCode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("/") +@ConditionalOnProperty(prefix = "roadmap", name="database.url") +public class MigrateController { + private final DMPRoadmapService roadmapMigration; + + @Autowired + public MigrateController(DMPRoadmapService roadmapMigration) { + this.roadmapMigration = roadmapMigration; + } + + @GetMapping(path = "template/all", produces = "application/json") + public ResponseEntity> getAllTemplates() { + return ResponseEntity.ok(this.roadmapMigration.getTemplates()); + } + + @GetMapping(path = "template/argos/memory", produces = "application/json") + public ResponseEntity> getDatasetProfiles() { + return ResponseEntity.ok(this.roadmapMigration.getDatesetProfiles()); + } + + @GetMapping(path = "user/all", produces = "application/json") + public ResponseEntity> getAllUsers() { + return ResponseEntity.ok(this.roadmapMigration.getUsers()); + } + + @GetMapping(path = "migration/execute", produces = "application/json") + public ResponseEntity migrate() { + this.roadmapMigration.migrate(); + return ResponseEntity.ok(new ResponseItem().status(ApiMessageCode.NO_MESSAGE)); + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/migration/controllers/TemplateController.java b/dmp-backend/web/src/main/java/eu/eudat/migration/controllers/TemplateController.java deleted file mode 100644 index 83c314b7d..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/migration/controllers/TemplateController.java +++ /dev/null @@ -1,44 +0,0 @@ -package eu.eudat.migration.controllers; - -import eu.eudat.data.entities.DatasetProfile; -import eu.eudat.migration.DMPRoadmapMigration; -import eu.eudat.migration.dao.TemplateRepository; -import eu.eudat.migration.entities.Template; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; - -@RestController -@RequestMapping("/template") -@ConditionalOnProperty(prefix = "roadmap", name="database.url") -public class TemplateController { - - private final TemplateRepository templateRepository; - private final DMPRoadmapMigration roadmapMigration; - - @Autowired - public TemplateController(TemplateRepository templateRepository, DMPRoadmapMigration roadmapMigration) { - this.templateRepository = templateRepository; - this.roadmapMigration = roadmapMigration; - } - - @GetMapping(path = "/all", produces = "application/json") - public ResponseEntity> getAllTemplates() { - return ResponseEntity.ok(this.templateRepository.findAll()); - } - - @GetMapping(path = "/argos/memory", produces = "application/json") - public ResponseEntity> getDatasetProfiles() { - return ResponseEntity.ok(this.roadmapMigration.getDatesetProfiles()); - } - - @GetMapping(path = "/argos/saved", produces = "application/json") - public ResponseEntity> getProfiles() { - return ResponseEntity.ok(this.roadmapMigration.getProfiles()); - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/migration/dao/UserRepository.java b/dmp-backend/web/src/main/java/eu/eudat/migration/dao/UserRepository.java new file mode 100644 index 000000000..f4b2307fd --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/migration/dao/UserRepository.java @@ -0,0 +1,9 @@ +package eu.eudat.migration.dao; + +import eu.eudat.migration.entities.User; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.data.jpa.repository.JpaRepository; + +@ConditionalOnProperty(prefix = "roadmap", name="database.url") +public interface UserRepository extends JpaRepository { +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Answer.java b/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Answer.java new file mode 100644 index 000000000..46b542c06 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Answer.java @@ -0,0 +1,106 @@ +package eu.eudat.migration.entities; + +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; + +import javax.persistence.*; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "answers") +public class Answer { + + @Id + private Long id; + private String text; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "user_id") + private User user; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "question_id") + private Question question; + @Column(name = "created_at") + @Temporal(TemporalType.TIMESTAMP) + private Date createdAt; + @Column(name = "updated_at") + @Temporal(TemporalType.TIMESTAMP) + private Date updatedAt; + @ManyToMany(cascade = CascadeType.ALL) + @JoinTable(name = "answers_question_options", + joinColumns = {@JoinColumn(name = "answer_id")}, + inverseJoinColumns = {@JoinColumn(name = "question_option_id")} + ) + @LazyCollection(LazyCollectionOption.FALSE) + private Set questionOptions = new HashSet<>(); + + @Override + public String toString() { + return "Answer{" + + "id=" + id + + ", text='" + text + '\'' + + ", user=" + user + + ", question=" + question + + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + + ", questionOptions=" + questionOptions + + '}'; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Question getQuestion() { + return question; + } + + public void setQuestion(Question question) { + this.question = question; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Set getQuestionOptions() { + return questionOptions; + } + + public void setQuestionOptions(Set questionOptions) { + this.questionOptions = questionOptions; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Perm.java b/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Perm.java new file mode 100644 index 000000000..9da3eafa0 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Perm.java @@ -0,0 +1,61 @@ +package eu.eudat.migration.entities; + +import javax.persistence.*; +import java.util.Date; + +@Entity +@Table(name = "perms") +public class Perm { + + @Id + private Long id; + private String name; + @Column(name = "created_at") + @Temporal(TemporalType.TIMESTAMP) + private Date createdAt; + @Column(name = "updated_at") + @Temporal(TemporalType.TIMESTAMP) + private Date updatedAt; + + @Override + public String toString() { + return "Perm{" + + "id=" + id + + ", name='" + name + '\'' + + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + + '}'; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Plan.java b/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Plan.java index 2135f330a..c5e7e8c98 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Plan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/migration/entities/Plan.java @@ -1,11 +1,13 @@ package eu.eudat.migration.entities; +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; + import javax.persistence.*; -import java.util.Date; +import java.util.*; @Entity @Table(name = "plans") -@SuppressWarnings("JpaAttributeTypeInspection") public class Plan { @Id @@ -51,6 +53,17 @@ public class Plan { private String ethicalIssuesReport; @Column(name = "funding_status") private FundingStatus fundingStatus; + @ManyToMany(cascade = CascadeType.ALL) + @JoinTable(name = "roles", + joinColumns = {@JoinColumn(name = "plan_id")}, + inverseJoinColumns = {@JoinColumn(name = "user_id")} + ) + @LazyCollection(LazyCollectionOption.FALSE) + private Set users = new HashSet<>(); + @OneToMany(cascade = CascadeType.ALL) + @JoinColumn(name = "plan_id") + @LazyCollection(LazyCollectionOption.FALSE) + private Set answers = new HashSet<>(); public enum Visibility { ORGANIZATION, @@ -224,4 +237,20 @@ public class Plan { public void setFundingStatus(FundingStatus fundingStatus) { this.fundingStatus = fundingStatus; } + + public Set getUsers() { + return users; + } + + public void setUsers(Set users) { + this.users = users; + } + + public Set getAnswers() { + return answers; + } + + public void setAnswers(Set answers) { + this.answers = answers; + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/migration/entities/User.java b/dmp-backend/web/src/main/java/eu/eudat/migration/entities/User.java new file mode 100644 index 000000000..d1dc20525 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/migration/entities/User.java @@ -0,0 +1,126 @@ +package eu.eudat.migration.entities; + +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; + +import javax.persistence.*; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "users") +public class User { + + @Id + private Long id; + private String firstname; + private String surname; + private String email; + @Column(name = "created_at") + @Temporal(TemporalType.TIMESTAMP) + private Date createdAt; + @Column(name = "updated_at") + @Temporal(TemporalType.TIMESTAMP) + private Date updatedAt; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "org_id") + private Organization organization; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "language_id") + private Language language; + @ManyToMany(cascade = CascadeType.ALL) + @JoinTable(name = "users_perms", + joinColumns = {@JoinColumn(name = "user_id")}, + inverseJoinColumns = {@JoinColumn(name = "perm_id")} + ) + @LazyCollection(LazyCollectionOption.FALSE) + private Set perms = new HashSet<>(); + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", firstname='" + firstname + '\'' + + ", surname='" + surname + '\'' + + ", email='" + email + '\'' + + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + + ", organization=" + organization + + ", language=" + language + + ", perms=" + perms + + '}'; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Organization getOrganization() { + return organization; + } + + public void setOrganization(Organization organization) { + this.organization = organization; + } + + public Language getLanguage() { + return language; + } + + public void setLanguage(Language language) { + this.language = language; + } + + public Set getPerms() { + return perms; + } + + public void setPerms(Set perms) { + this.perms = perms; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/migration/DMPRoadmapMigration.java b/dmp-backend/web/src/main/java/eu/eudat/migration/services/DMPRoadmapService.java similarity index 75% rename from dmp-backend/web/src/main/java/eu/eudat/migration/DMPRoadmapMigration.java rename to dmp-backend/web/src/main/java/eu/eudat/migration/services/DMPRoadmapService.java index d6f60ac52..cf8b08489 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/migration/DMPRoadmapMigration.java +++ b/dmp-backend/web/src/main/java/eu/eudat/migration/services/DMPRoadmapService.java @@ -1,13 +1,11 @@ -package eu.eudat.migration; +package eu.eudat.migration.services; import eu.eudat.logic.managers.AdminManager; import eu.eudat.logic.managers.MetricsManager; import eu.eudat.logic.services.ApiContext; import eu.eudat.migration.dao.TemplateRepository; -import eu.eudat.migration.entities.Question; -import eu.eudat.migration.entities.QuestionFormat; -import eu.eudat.migration.entities.Template; -import eu.eudat.migration.entities.Theme; +import eu.eudat.migration.dao.UserRepository; +import eu.eudat.migration.entities.*; import eu.eudat.models.data.admin.components.datasetprofile.Field; import eu.eudat.models.data.admin.components.datasetprofile.FieldSet; import eu.eudat.models.data.admin.components.datasetprofile.Page; @@ -17,43 +15,57 @@ import eu.eudat.models.data.components.commons.DefaultValue; import eu.eudat.models.data.components.commons.Multiplicity; import eu.eudat.models.data.components.commons.ViewStyle; import eu.eudat.models.data.components.commons.Visibility; +import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; +import eu.eudat.models.data.datasetwizard.DatasetWizardModel; +import eu.eudat.models.data.dmp.DataManagementPlanEditorModel; +import eu.eudat.models.data.user.composite.PagedDatasetProfile; import eu.eudat.types.MetricNames; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.CommandLineRunner; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.util.*; import java.util.stream.Collectors; -@Component +@Service @ConditionalOnProperty(prefix = "roadmap", name = "database.url") -public class DMPRoadmapMigration implements CommandLineRunner { - +public class DMPRoadmapService { + /** DMPRoadmap Repositories*/ private final TemplateRepository templateRepository; + private final UserRepository userRepository; + /** Argos beans */ private final ApiContext apiContext; private final MetricsManager metricsManager; - /** Profiles */ + /** Data */ private final List datasetProfiles = new ArrayList<>(); - private final List profiles = new ArrayList<>(); + private final List dmps = new ArrayList<>(); + private final List datasets = new ArrayList<>(); /** Metadata */ private final Map groups = new HashMap<>(); @Autowired - public DMPRoadmapMigration(TemplateRepository templateRepository, ApiContext apiContext, MetricsManager metricsManager) { + public DMPRoadmapService(TemplateRepository templateRepository, UserRepository userRepository, ApiContext apiContext, MetricsManager metricsManager) { this.templateRepository = templateRepository; + this.userRepository = userRepository; this.apiContext = apiContext; this.metricsManager = metricsManager; } - @Override - public void run(String... args) { + public void migrate() { List