package eu.eudat.migration.entities; import eu.eudat.migration.utils.JsonTypeConverter; import eu.eudat.models.data.admin.components.datasetprofile.Page; import eu.eudat.models.data.admin.components.datasetprofile.Section; import eu.eudat.models.data.admin.composite.DatasetProfile; import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollectionOption; import javax.persistence.*; import java.util.*; @Entity @Table(name = "templates") @SuppressWarnings("JpaAttributeTypeInspection") public class Template { @Id private Long id; private String title; private String description; private Boolean published; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "org_id") private Organization organization; private String locale; @Column(name = "is_default") private Boolean isDefault; @Column(name = "created_at") @Temporal(TemporalType.TIMESTAMP) private Date createdAt; @Column(name = "updated_at") @Temporal(TemporalType.TIMESTAMP) private Date updatedAt; private Short version; private Visibility visibility; @Column(name = "customization_of") private Long customizationOf; @Column(name = "family_id") private Long familyId; private Boolean archived; @Convert(converter = JsonTypeConverter.class) private Map links; @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "template_id") @OrderBy("number") @LazyCollection(LazyCollectionOption.FALSE) private List phases = new ArrayList<>(); @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "template_id") @LazyCollection(LazyCollectionOption.FALSE) private Set plans = new HashSet<>(); public enum Visibility { ORGANIZATION, PUBLIC } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Boolean getPublished() { return published; } public void setPublished(Boolean published) { this.published = published; } public Organization getOrganization() { return organization; } public void setOrganization(Organization organization) { this.organization = organization; } public String getLocale() { return locale; } public void setLocale(String locale) { this.locale = locale; } 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 Short getVersion() { return version; } public void setVersion(Short version) { this.version = version; } public Visibility getVisibility() { return visibility; } public void setVisibility(Visibility visibility) { this.visibility = visibility; } public Long getCustomizationOf() { return customizationOf; } public void setCustomizationOf(Long customizationOf) { this.customizationOf = customizationOf; } public Long getFamilyId() { return familyId; } public void setFamilyId(Long familyId) { this.familyId = familyId; } public Boolean getArchived() { return archived; } public void setArchived(Boolean archived) { this.archived = archived; } public Map getLinks() { return links; } public void setLinks(Map links) { this.links = links; } public Boolean getDefault() { return isDefault; } public void setDefault(Boolean aDefault) { isDefault = aDefault; } public List getPhases() { return phases; } public void setPhases(List phases) { this.phases = phases; } public Set getPlans() { return plans; } public void setPlans(Set plans) { this.plans = plans; } @Override public String toString() { return "Template{" + "id=" + id + ", title='" + title + '\'' + ", description='" + description + '\'' + ", published=" + published + ", organization=" + organization + ", locale='" + locale + '\'' + ", isDefault=" + isDefault + ", createdAt=" + createdAt + ", updatedAt=" + updatedAt + ", version=" + version + ", visibility=" + visibility + ", customizationOf=" + customizationOf + ", familyId=" + familyId + ", archived=" + archived + ", links=" + links + ", phases=" + phases + ", plans=" + plans + '}'; } public DatasetProfile buildDatasetProfile() { DatasetProfile datasetProfile = new DatasetProfile(); datasetProfile.setLabel(this.getTitle()); datasetProfile.setDescription(this.getDescription()); datasetProfile.setLanguage(this.getLocale()); datasetProfile.setStatus((short) 1); datasetProfile.setVersion(getVersion()); datasetProfile.setUsers(new ArrayList<>()); this.buildPages(datasetProfile); return datasetProfile; } public void buildPages(DatasetProfile datasetProfile) { List pages = new ArrayList<>(); List
sections = new ArrayList<>(); this.getPhases().forEach(phase -> { Page page = new Page(); page.setId(String.valueOf(UUID.randomUUID())); page.setOrdinal(Math.toIntExact(phase.getNumber()) - 1); page.setTitle(phase.getTitle()); pages.add(page); sections.addAll(phase.buildSections(page.getId())); }); datasetProfile.setPages(pages); datasetProfile.setSections(sections); } }