diff --git a/core/src/main/java/se/su/dsv/scipro/group/Group.java b/core/src/main/java/se/su/dsv/scipro/group/Group.java index c85082e740..11aecf59e8 100644 --- a/core/src/main/java/se/su/dsv/scipro/group/Group.java +++ b/core/src/main/java/se/su/dsv/scipro/group/Group.java @@ -18,30 +18,124 @@ public class Group extends DomainObject { public static final int STRING_MAX_LENGTH = 255; + // ---------------------------------------------------------------------------------- + // Basic JPA-mappings + // ---------------------------------------------------------------------------------- @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(length = STRING_MAX_LENGTH) @Basic(optional = false) + @Column(name = "title", length = STRING_MAX_LENGTH) private String title; @Basic(optional = true) + @Column(name = "description") private String description; + @Basic + @Column(name = "active") + private boolean active = true; + + // ---------------------------------------------------------------------------------- + // JPA-mappings of foreign keys in this table (project_group) referencing other tables. + // ---------------------------------------------------------------------------------- //Creator, should be a supervisor @ManyToOne(optional = false) - @JoinColumn(name = "user_id") + @JoinColumn(name = "user_id", referencedColumnName = "id") private User user; + // ---------------------------------------------------------------------------------- + // @ManyToMany JPA-mappings + // ---------------------------------------------------------------------------------- @ManyToMany - @JoinTable( - name = "project_group_project", - joinColumns = @JoinColumn(name = "project_group_id"), - inverseJoinColumns = @JoinColumn(name = "project_id")) + @JoinTable(name = "project_group_project", + joinColumns = @JoinColumn(name = "project_group_id", referencedColumnName = "id"), + inverseJoinColumns = @JoinColumn(name = "project_id", referencedColumnName = "id")) private Set<Project> projects = new HashSet<>(); - private boolean active = true; + // ---------------------------------------------------------------------------------- + // Properties (Getters and Setters) + // ---------------------------------------------------------------------------------- + @Override + public Long getId() { + return this.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 this.description; + } + + public void setDescription(String description) { + this.description = description; + } + + public boolean isActive() { + return this.active; + } + + public void setActive(boolean active) { + this.active = active; + } + + public User getUser() { + return this.user; + } + + public void setUser(User user) { + this.user = user; + } + + public Set<Project> getProjects() { + return projects; + } + + public void setProjects(Set<Project> projects) { + this.projects = projects; + } + + // ---------------------------------------------------------------------------------- + // Methods Common To All Objects + // ---------------------------------------------------------------------------------- + @Override + public boolean equals(final Object o) { + if (o == this) return true; + if (!(o instanceof Group)) return false; + final Group other = (Group) o; + return other.canEqual(this) + && Objects.equals(this.getId(), other.getId()); + } + + @Override + public int hashCode() { + return Objects.hashCode(this.getId()); + } + + @Override + public String toString() { + return "Group(id=" + this.getId() + ", title=" + this.getTitle() + ", description=" + + this.getDescription() + ", user=" + this.getUser() + ", projects=" + + this.getProjects() + ", active=" + this.isActive() + ")"; + } + + // ---------------------------------------------------------------------------------- + // Other methods + // ---------------------------------------------------------------------------------- + protected boolean canEqual(final Object other) { + return other instanceof Group; + } public boolean isAuthor(final User user) { for (Project project : projects) { @@ -58,76 +152,4 @@ public class Group extends DomainObject { .filter(member -> member.getType() != Member.Type.REVIEWER) .toList(); } - - public Set<Project> getProjects() { - return projects; - } - - public String getTitle() { - return title; - } - - @Override - public Long getId() { - return this.id; - } - - public String getDescription() { - return this.description; - } - - public User getUser() { - return this.user; - } - - public boolean isActive() { - return this.active; - } - - public void setId(Long id) { - this.id = id; - } - - public void setTitle(String title) { - this.title = title; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setUser(User user) { - this.user = user; - } - - public void setProjects(Set<Project> projects) { - this.projects = projects; - } - - public void setActive(boolean active) { - this.active = active; - } - - @Override - public String toString() { - return "Group(id=" + this.getId() + ", title=" + this.getTitle() + ", description=" + this.getDescription() + ", user=" + this.getUser() + ", projects=" + this.getProjects() + ", active=" + this.isActive() + ")"; - } - - @Override - public boolean equals(final Object o) { - if (o == this) return true; - if (!(o instanceof Group)) return false; - final Group other = (Group) o; - return other.canEqual(this) - && Objects.equals(this.getId(), other.getId()); - } - - protected boolean canEqual(final Object other) { - return other instanceof Group; - } - - @Override - public int hashCode() { - return Objects.hashCode(this.getId()); - } -} \ No newline at end of file +} diff --git a/core/src/main/resources/db/migration/V389__harmonize_table_attribute_name.sql b/core/src/main/resources/db/migration/V389__harmonize_table_attribute_name.sql index 55688a4701..7de3184163 100644 --- a/core/src/main/resources/db/migration/V389__harmonize_table_attribute_name.sql +++ b/core/src/main/resources/db/migration/V389__harmonize_table_attribute_name.sql @@ -2887,6 +2887,48 @@ alter table `mail_event_non_user_recipient` foreign key (mail_event_id) references mail_event (id) on delete cascade on update cascade; +/* + * Step 21: project_group and project_group_project + */ + +-- table: project_group + +alter table `project_group` drop foreign key `FK_user_id`; +alter table `project_group` drop key `FK_user_id`; + +alter table `project_group` change `active` `active` bit(1) not null after `description`; + +alter table `project_group` + add constraint fk_project_group_user_id + foreign key (user_id) references user (id) + on delete cascade on update cascade; + +-- table: project_group_project + +alter table `project_group_project` drop foreign key `FK_project_id`; +alter table `project_group_project` drop foreign key `FK_project_group_id`; + +alter table `project_group_project` drop key `FK_project_id`; +alter table `project_group_project` drop key `FK_project_group_id`; + +alter table `project_group_project` + add constraint fk_project_group_project_project_group_id + foreign key (project_group_id) references project_group (id) + on delete cascade on update cascade; + +alter table `project_group_project` + add constraint fk_project_group_project_project_id + foreign key (project_id) references project (id) + on delete cascade on update cascade; + +/* + * Step 22: ??? + */ + + + + + /* Useful SQL >>> SQL query for FK-to: