Benki: Sort into a sane folder structure, fix mapping bugs.

Change-Id: I55f5c0349dc580a24506648284ce6483dd952d8a
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/Openids.java b/src/main/java/eu/mulk/mulkcms2/benki/users/Openids.java
new file mode 100644
index 0000000..925584b
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/Openids.java
@@ -0,0 +1,20 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class Openids extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "openid", nullable = false, length = -1)
+  public String openid;
+
+  @ManyToOne
+  @JoinColumn(name = "user", referencedColumnName = "id", nullable = false)
+  public User user;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/RsaKey.java b/src/main/java/eu/mulk/mulkcms2/benki/users/RsaKey.java
new file mode 100644
index 0000000..6e3db81
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/RsaKey.java
@@ -0,0 +1,28 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import java.math.BigInteger;
+import java.util.Collection;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "rsa_keys", schema = "public", catalog = "benki")
+@IdClass(RsaKeyPK.class)
+public class RsaKey extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "modulus", nullable = false, precision = 0)
+  public BigInteger modulus;
+
+  @Id
+  @Column(name = "exponent", nullable = false, precision = 0)
+  public BigInteger exponent;
+
+  @OneToMany(mappedBy = "rsaKey")
+  public Collection<UserRsaKey> users;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/RsaKeyPK.java b/src/main/java/eu/mulk/mulkcms2/benki/users/RsaKeyPK.java
new file mode 100644
index 0000000..5b33ec8
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/RsaKeyPK.java
@@ -0,0 +1,60 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class RsaKeyPK implements Serializable {
+
+  private BigInteger modulus;
+  private BigInteger exponent;
+
+  @Column(name = "modulus", nullable = false, precision = 0)
+  @Id
+  public BigInteger getModulus() {
+    return modulus;
+  }
+
+  public void setModulus(BigInteger modulus) {
+    this.modulus = modulus;
+  }
+
+  @Column(name = "exponent", nullable = false, precision = 0)
+  @Id
+  public BigInteger getExponent() {
+    return exponent;
+  }
+
+  public void setExponent(BigInteger exponent) {
+    this.exponent = exponent;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+
+    RsaKeyPK rsaKeyPK = (RsaKeyPK) o;
+
+    if (modulus != null ? !modulus.equals(rsaKeyPK.modulus) : rsaKeyPK.modulus != null) {
+      return false;
+    }
+    if (exponent != null ? !exponent.equals(rsaKeyPK.exponent) : rsaKeyPK.exponent != null) {
+      return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = modulus != null ? modulus.hashCode() : 0;
+    result = 31 * result + (exponent != null ? exponent.hashCode() : 0);
+    return result;
+  }
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/User.java b/src/main/java/eu/mulk/mulkcms2/benki/users/User.java
new file mode 100644
index 0000000..fb1ed3b
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/User.java
@@ -0,0 +1,87 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import eu.mulk.mulkcms2.benki.accesscontrol.PageKey;
+import eu.mulk.mulkcms2.benki.accesscontrol.Role;
+import eu.mulk.mulkcms2.benki.bookmarx.Bookmark;
+import eu.mulk.mulkcms2.benki.generic.Post;
+import eu.mulk.mulkcms2.benki.lafargue.LazychatMessage;
+import eu.mulk.mulkcms2.benki.wiki.WikiPageRevision;
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import java.util.Collection;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity(name = "BenkiUser")
+@Table(name = "users", schema = "public", catalog = "benki")
+public class User extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "id", nullable = false)
+  public int id;
+
+  @Column(name = "first_name", nullable = true, length = -1)
+  public String firstName;
+
+  @Column(name = "middle_names", nullable = true, length = -1)
+  public String middleNames;
+
+  @Column(name = "last_name", nullable = true, length = -1)
+  public String lastName;
+
+  @Column(name = "email", nullable = true, length = -1)
+  public String email;
+
+  @Column(name = "website", nullable = true, length = -1)
+  public String website;
+
+  @Column(name = "status", nullable = true, length = -1)
+  public String status;
+
+  @OneToMany(mappedBy = "owner")
+  public Collection<Bookmark> bookmarks;
+
+  @OneToMany(mappedBy = "owner")
+  public Collection<LazychatMessage> lazychatMessages;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<Openids> openids;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<PageKey> pageKeys;
+
+  @OneToMany(mappedBy = "owner")
+  public Collection<Post> posts;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<UserDefaultTarget> defaultTargets;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<UserEmailAddress> emailAddresses;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<UserJid> jids;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<UserNickname> nicknames;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<UserRole> roles;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<UserRsaKey> rsaKeys;
+
+  @ManyToOne
+  @JoinColumn(name = "role", referencedColumnName = "id", nullable = false)
+  public Role ownedRole;
+
+  @OneToMany(mappedBy = "user")
+  public Collection<WebId> webids;
+
+  @OneToMany(mappedBy = "author")
+  public Collection<WikiPageRevision> wikiPageRevisions;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserDefaultTarget.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserDefaultTarget.java
new file mode 100644
index 0000000..ffa5ef7
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserDefaultTarget.java
@@ -0,0 +1,33 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import eu.mulk.mulkcms2.benki.accesscontrol.Role;
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "user_default_target", schema = "public", catalog = "benki")
+@IdClass(UserDefaultTargetPK.class)
+public class UserDefaultTarget extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "user", nullable = false)
+  public int userId;
+
+  @Id
+  @Column(name = "target", nullable = false)
+  public int targetId;
+
+  @ManyToOne
+  @JoinColumn(name = "user", referencedColumnName = "id", nullable = false)
+  public User user;
+
+  @ManyToOne
+  @JoinColumn(name = "target", referencedColumnName = "id", nullable = false)
+  public Role target;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserDefaultTargetPK.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserDefaultTargetPK.java
new file mode 100644
index 0000000..4a41e7b
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserDefaultTargetPK.java
@@ -0,0 +1,59 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class UserDefaultTargetPK implements Serializable {
+
+  private int userId;
+  private int targetId;
+
+  @Column(name = "user", nullable = false)
+  @Id
+  public int getUserId() {
+    return userId;
+  }
+
+  public void setUserId(int userId) {
+    this.userId = userId;
+  }
+
+  @Column(name = "target", nullable = false)
+  @Id
+  public int getTargetId() {
+    return targetId;
+  }
+
+  public void setTargetId(int targetId) {
+    this.targetId = targetId;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+
+    UserDefaultTargetPK that = (UserDefaultTargetPK) o;
+
+    if (userId != that.userId) {
+      return false;
+    }
+    if (targetId != that.targetId) {
+      return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = userId;
+    result = 31 * result + targetId;
+    return result;
+  }
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserEmailAddress.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserEmailAddress.java
new file mode 100644
index 0000000..9706407
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserEmailAddress.java
@@ -0,0 +1,22 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "user_email_addresses", schema = "public", catalog = "benki")
+public class UserEmailAddress extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "email", nullable = false, length = -1)
+  public String email;
+
+  @ManyToOne
+  @JoinColumn(name = "user", referencedColumnName = "id", nullable = false)
+  public User user;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserJid.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserJid.java
new file mode 100644
index 0000000..1c17ca8
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserJid.java
@@ -0,0 +1,28 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "user_jids", schema = "public", catalog = "benki")
+@IdClass(UserJidPK.class)
+public class UserJid extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "user", nullable = false)
+  public int userId;
+
+  @Id
+  @Column(name = "jid", nullable = false, length = -1)
+  public String jid;
+
+  @ManyToOne
+  @JoinColumn(name = "user", referencedColumnName = "id", nullable = false)
+  public User user;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserJidPK.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserJidPK.java
new file mode 100644
index 0000000..19eeaeb
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserJidPK.java
@@ -0,0 +1,59 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class UserJidPK implements Serializable {
+
+  private int userId;
+  private String jid;
+
+  @Column(name = "user", nullable = false)
+  @Id
+  public int getUserId() {
+    return userId;
+  }
+
+  public void setUserId(int userId) {
+    this.userId = userId;
+  }
+
+  @Column(name = "jid", nullable = false, length = -1)
+  @Id
+  public String getJid() {
+    return jid;
+  }
+
+  public void setJid(String jid) {
+    this.jid = jid;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+
+    UserJidPK userJidPK = (UserJidPK) o;
+
+    if (userId != userJidPK.userId) {
+      return false;
+    }
+    if (jid != null ? !jid.equals(userJidPK.jid) : userJidPK.jid != null) {
+      return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = userId;
+    result = 31 * result + (jid != null ? jid.hashCode() : 0);
+    return result;
+  }
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserNickname.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserNickname.java
new file mode 100644
index 0000000..b664cb9
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserNickname.java
@@ -0,0 +1,22 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "user_nicknames", schema = "public", catalog = "benki")
+public class UserNickname extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "nickname", nullable = false, length = -1)
+  public String nickname;
+
+  @ManyToOne
+  @JoinColumn(name = "user", referencedColumnName = "id", nullable = false)
+  public User user;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserRole.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserRole.java
new file mode 100644
index 0000000..d4c10bd
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserRole.java
@@ -0,0 +1,33 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import eu.mulk.mulkcms2.benki.accesscontrol.Role;
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "user_roles", schema = "public", catalog = "benki")
+@IdClass(UserRolePK.class)
+public class UserRole extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "user", nullable = false)
+  public int userId;
+
+  @Id
+  @Column(name = "role", nullable = false)
+  public int roleId;
+
+  @ManyToOne
+  @JoinColumn(name = "user", referencedColumnName = "id", nullable = false)
+  public User user;
+
+  @ManyToOne
+  @JoinColumn(name = "role", referencedColumnName = "id", nullable = false)
+  public Role role;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserRolePK.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserRolePK.java
new file mode 100644
index 0000000..5649ff4
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserRolePK.java
@@ -0,0 +1,59 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class UserRolePK implements Serializable {
+
+  private int userId;
+  private int roleId;
+
+  @Column(name = "user", nullable = false)
+  @Id
+  public int getUserId() {
+    return userId;
+  }
+
+  public void setUserId(int userId) {
+    this.userId = userId;
+  }
+
+  @Column(name = "role", nullable = false)
+  @Id
+  public int getRoleId() {
+    return roleId;
+  }
+
+  public void setRoleId(int roleId) {
+    this.roleId = roleId;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+
+    UserRolePK that = (UserRolePK) o;
+
+    if (userId != that.userId) {
+      return false;
+    }
+    if (roleId != that.roleId) {
+      return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = userId;
+    result = 31 * result + roleId;
+    return result;
+  }
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserRsaKey.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserRsaKey.java
new file mode 100644
index 0000000..33552e5
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserRsaKey.java
@@ -0,0 +1,51 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import java.math.BigInteger;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "user_rsa_keys", schema = "public", catalog = "benki")
+@IdClass(UserRsaKeyPK.class)
+public class UserRsaKey extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "user", nullable = false)
+  public int userId;
+
+  @Id
+  @Column(name = "modulus", nullable = false, precision = 0)
+  public BigInteger modulus;
+
+  @Id
+  @Column(name = "exponent", nullable = false, precision = 0)
+  public BigInteger exponent;
+
+  @ManyToOne
+  @JoinColumn(name = "user", referencedColumnName = "id", nullable = false)
+  public User user;
+
+  @ManyToOne
+  @JoinColumns({
+    @JoinColumn(
+        name = "modulus",
+        referencedColumnName = "modulus",
+        nullable = false,
+        insertable = false,
+        updatable = false),
+    @JoinColumn(
+        name = "exponent",
+        referencedColumnName = "exponent",
+        nullable = false,
+        insertable = false,
+        updatable = false)
+  })
+  public RsaKey rsaKey;
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/UserRsaKeyPK.java b/src/main/java/eu/mulk/mulkcms2/benki/users/UserRsaKeyPK.java
new file mode 100644
index 0000000..adcaeb6
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/UserRsaKeyPK.java
@@ -0,0 +1,75 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class UserRsaKeyPK implements Serializable {
+
+  private int userId;
+  private BigInteger modulus;
+  private BigInteger exponent;
+
+  @Column(name = "user", nullable = false)
+  @Id
+  public int getUserId() {
+    return userId;
+  }
+
+  public void setUserId(int userId) {
+    this.userId = userId;
+  }
+
+  @Column(name = "modulus", nullable = false, precision = 0)
+  @Id
+  public BigInteger getModulus() {
+    return modulus;
+  }
+
+  public void setModulus(BigInteger modulus) {
+    this.modulus = modulus;
+  }
+
+  @Column(name = "exponent", nullable = false, precision = 0)
+  @Id
+  public BigInteger getExponent() {
+    return exponent;
+  }
+
+  public void setExponent(BigInteger exponent) {
+    this.exponent = exponent;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+
+    UserRsaKeyPK that = (UserRsaKeyPK) o;
+
+    if (userId != that.userId) {
+      return false;
+    }
+    if (modulus != null ? !modulus.equals(that.modulus) : that.modulus != null) {
+      return false;
+    }
+    if (exponent != null ? !exponent.equals(that.exponent) : that.exponent != null) {
+      return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = userId;
+    result = 31 * result + (modulus != null ? modulus.hashCode() : 0);
+    result = 31 * result + (exponent != null ? exponent.hashCode() : 0);
+    return result;
+  }
+}
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/WebId.java b/src/main/java/eu/mulk/mulkcms2/benki/users/WebId.java
new file mode 100644
index 0000000..0a30ff1
--- /dev/null
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/WebId.java
@@ -0,0 +1,22 @@
+package eu.mulk.mulkcms2.benki.users;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "webids", schema = "public", catalog = "benki")
+public class WebId extends PanacheEntityBase {
+
+  @Id
+  @Column(name = "webid", nullable = false, length = -1)
+  public String webid;
+
+  @ManyToOne
+  @JoinColumn(name = "user", referencedColumnName = "id", nullable = false)
+  public User user;
+}