argos/dmp-backend/roadmap/src/main/java/eu/eudat/migration/entities/Template.java

255 lines
6.3 KiB
Java

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<String, Object> links;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "template_id")
@OrderBy("number")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Phase> phases = new ArrayList<>();
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "template_id")
@LazyCollection(LazyCollectionOption.FALSE)
private Set<Plan> 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<String, Object> getLinks() {
return links;
}
public void setLinks(Map<String, Object> links) {
this.links = links;
}
public Boolean getDefault() {
return isDefault;
}
public void setDefault(Boolean aDefault) {
isDefault = aDefault;
}
public List<Phase> getPhases() {
return phases;
}
public void setPhases(List<Phase> phases) {
this.phases = phases;
}
public Set<Plan> getPlans() {
return plans;
}
public void setPlans(Set<Plan> 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<Page> pages = new ArrayList<>();
List<Section> 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);
}
}