diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectContact.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java
similarity index 88%
rename from sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectContact.java
rename to sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java
index 498087e..2f5743b 100644
--- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectContact.java
+++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java
@@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
-package org.scientificcms.contenttypes;
+package org.scientificcms.contenttypes.sciproject;
import org.hibernate.envers.Audited;
import org.librecms.assets.ContactableEntity;
@@ -19,7 +19,7 @@ import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
-import static org.scientificcms.contenttypes.SciProjectConstants.*;
+import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*;
/**
*
@@ -28,7 +28,7 @@ import static org.scientificcms.contenttypes.SciProjectConstants.*;
@Entity
@Audited
@Table(name = "PROJECT_CONTACTS", schema = DB_SCHEMA)
-public class SciProjectContact implements Serializable{
+public class Contact implements Serializable{
private static final long serialVersionUID = 1L;
diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java
new file mode 100644
index 0000000..629c2bd
--- /dev/null
+++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java
@@ -0,0 +1,152 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.scientificcms.contenttypes.sciproject;
+
+import org.hibernate.envers.Audited;
+import org.libreccm.core.CcmObjects;
+import org.librecms.assets.Person;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@Entity
+@Audited
+@Table(name = "PROJECT_MEMBERSHIPS", schema = DB_SCHEMA)
+public class Membership implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name = "MEMBERSHIP_ID")
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long membershipId;
+
+ @Column(name = "MEMBER_ROLE", length = 255, nullable = true)
+ private String role;
+
+ @Column(name = "STATUS")
+ @Enumerated(EnumType.STRING)
+ private MembershipStatus status;
+
+ @ManyToOne
+ @JoinColumn(name = "PROJECT_ID")
+ private SciProject project;
+
+ @ManyToOne
+ @JoinColumn(name = "MEMBER_ID")
+ private Person member;
+
+ public long getMembershipId() {
+ return membershipId;
+ }
+
+ protected void setMembershipId(final long membershipId) {
+ this.membershipId = membershipId;
+ }
+
+ public String getRole() {
+ return role;
+ }
+
+ public void setRole(final String role) {
+ this.role = role;
+ }
+
+ public MembershipStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(final MembershipStatus status) {
+ this.status = status;
+ }
+
+ public SciProject getProject() {
+ return project;
+ }
+
+ protected void setProject(final SciProject project) {
+ this.project = project;
+ }
+
+ public Person getMember() {
+ return member;
+ }
+
+ protected void setMember(final Person member) {
+ this.member = member;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 37 * hash
+ + (int) (membershipId ^ (membershipId >>> 32));
+ hash = 37 * hash + Objects.hashCode(role);
+ hash = 37 * hash + Objects.hashCode(status);
+ hash = 37 * hash + CcmObjects.hashCodeUsingUuid(project);
+ hash = 37 * hash + CcmObjects.hashCodeUsingUuid(member);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof Membership)) {
+ return false;
+ }
+ final Membership other = (Membership) obj;
+ if (!other.canEqual(this)) {
+ return false;
+ }
+
+ if (membershipId != other.getMembershipId()) {
+ return false;
+ }
+ if (!Objects.equals(role, other.getRole())) {
+ return false;
+ }
+
+ if (!CcmObjects.equalsUsingUuid(project, other.getProject())) {
+ return false;
+ }
+ if (!CcmObjects.equalsUsingUuid(member, other.getMember())) {
+ return false;
+ }
+ if (status != other.getStatus()) {
+ return false;
+ }
+ return true;
+ }
+
+ public boolean canEqual(final Object obj) {
+
+ return obj instanceof Membership;
+ }
+
+}
diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipStatus.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipStatus.java
new file mode 100644
index 0000000..7fed859
--- /dev/null
+++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipStatus.java
@@ -0,0 +1,18 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.scientificcms.contenttypes.sciproject;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public enum MembershipStatus {
+
+ ACTIVE,
+ ASSOCIATED,
+ FORMER,
+
+}
diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProject.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProject.java
similarity index 93%
rename from sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProject.java
rename to sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProject.java
index 8ab317e..a2c5829 100644
--- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProject.java
+++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProject.java
@@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
-package org.scientificcms.contenttypes;
+package org.scientificcms.contenttypes.sciproject;
import com.arsdigita.cms.contenttypes.ui.SciProjectPropertiesStep;
import com.arsdigita.cms.ui.authoring.PageCreateForm;
@@ -30,7 +30,7 @@ import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;
-import static org.scientificcms.contenttypes.SciProjectConstants.*;
+import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*;
/**
*
@@ -110,6 +110,9 @@ public class SciProject extends ContentItem implements Serializable {
private LocalizedString fundingVolume;
@OneToMany(mappedBy = "project")
- private List contacts;
+ private List contacts;
+
+ @OneToMany(mappedBy = "project")
+ private List members;
}
diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectConstants.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectConstants.java
similarity index 91%
rename from sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectConstants.java
rename to sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectConstants.java
index 04111e3..7ce0d67 100644
--- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectConstants.java
+++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectConstants.java
@@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
-package org.scientificcms.contenttypes;
+package org.scientificcms.contenttypes.sciproject;
/**
*
diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectModule.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectModule.java
similarity index 95%
rename from sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectModule.java
rename to sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectModule.java
index b6924db..6c1959d 100644
--- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/SciProjectModule.java
+++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectModule.java
@@ -1,7 +1,7 @@
/**
* Add your license here, for example LGPL
*/
-package org.scientificcms.contenttypes;
+package org.scientificcms.contenttypes.sciproject;
import org.libreccm.modules.CcmModule;
import org.libreccm.modules.InitEvent;
diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java
new file mode 100644
index 0000000..2efc26e
--- /dev/null
+++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java
@@ -0,0 +1,194 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.scientificcms.contenttypes.sciproject;
+
+import org.hibernate.envers.Audited;
+import org.libreccm.core.CcmObjects;
+import org.librecms.assets.Organization;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@Entity
+@Audited
+@Table(name = "SPONSORING", schema = DB_SCHEMA)
+public class Sponsoring implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @Column(name = "SPONSORING_ID")
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long sponsoringId;
+
+ @Column(name = "FUNDING_CODE", length = 512, nullable = true)
+ private String fundingCode;
+
+ @Column(name = "SPONSOR_ORDER")
+ private long order;
+
+ @ManyToOne
+ @JoinColumn(name = "PROJECT_ID")
+ private SciProject project;
+
+ @ManyToOne
+ @JoinColumn(name = "SPONSOR_ID")
+ private Organization sponsor;
+
+ public long getSponsoringId() {
+ return sponsoringId;
+ }
+
+ protected void setSponsoringId(final long sponsoringId) {
+ this.sponsoringId = sponsoringId;
+ }
+
+ public String getFundingCode() {
+ return fundingCode;
+ }
+
+ public void setFundingCode(final String fundingCode) {
+ this.fundingCode = fundingCode;
+ }
+
+ public long getOrder() {
+ return order;
+ }
+
+ protected void setOrder(final long order) {
+ this.order = order;
+ }
+
+ public SciProject getProject() {
+ return project;
+ }
+
+ protected void setProject(final SciProject project) {
+ this.project = project;
+ }
+
+ public Organization getSponsor() {
+ return sponsor;
+ }
+
+ protected void setSponsor(final Organization sponsor) {
+ this.sponsor = sponsor;
+ }
+
+ @Override
+ public int hashCode() {
+
+ int hash = 3;
+ hash = 53 * hash
+ + (int) (sponsoringId ^ (sponsoringId >>> 32));
+ hash = 53 * hash + Objects.hashCode(fundingCode);
+ hash = 53 * hash + (int) (order ^ (order >>> 32));
+ hash = 53 * hash + CcmObjects.hashCodeUsingUuid(project);
+ hash = 53 * hash + CcmObjects.hashCodeUsingUuid(sponsor);
+ return hash;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof Sponsoring)) {
+ return false;
+ }
+ final Sponsoring other = (Sponsoring) obj;
+ if (!other.canEqual(this)) {
+ return false;
+ }
+ if (sponsoringId != other.getSponsoringId()) {
+ return false;
+ }
+ if (!Objects.equals(fundingCode, other.getFundingCode())) {
+ return false;
+ }
+ if (!CcmObjects.equalsUsingUuid(project, other.getProject())) {
+ return false;
+ }
+ if (!CcmObjects.equalsUsingUuid(sponsor, other.getSponsor())) {
+ return false;
+ }
+ return order == other.getOrder();
+ }
+
+
+ public boolean canEqual(final Object obj) {
+
+ return obj instanceof Sponsoring;
+ }
+
+ @Override
+ public final String toString() {
+
+ return toString("");
+ }
+
+ public String toString(final String data) {
+
+ final String projectStr;
+ if (project == null) {
+ projectStr = "";
+ } else {
+ projectStr = String.format("objectId = %d,"
+ + "uuid = \"%s\", "
+ + "name = \"%s\"",
+ project.getObjectId(),
+ project.getUuid(),
+ project.getDisplayName());
+ }
+
+ final String sponsorStr;
+ if (sponsor == null) {
+ sponsorStr = "";
+ } else {
+ sponsorStr = String.format("objectId = %d, "
+ + "uuid = \"%s\", "
+ + "name = \"%s\"",
+ sponsor.getObjectId(),
+ sponsor.getUuid(),
+ sponsor.getDisplayName());
+ }
+
+ return String.format("%s{ "
+ + "sponsoringId = %d, "
+ + "fundingCode = \"%s\", "
+ + "order = %d, "
+ + "project = { %s }, "
+ + "sponsor = { %s }%s"
+ + " }",
+ super.toString(),
+ sponsoringId,
+ fundingCode,
+ order,
+ projectStr,
+ sponsorStr,
+ data);
+ }
+
+}