From 59cdd2b7ebceae94fbecdb1eeb46a969666dc88f Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Fri, 10 Jan 2014 12:25:27 +0000
Subject: [PATCH] #394 feature - Added all catalog resources with refereced fields

---
 securis/src/main/java/net/curisit/securis/db/Organization.java |   57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 56 insertions(+), 1 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/db/Organization.java b/securis/src/main/java/net/curisit/securis/db/Organization.java
index 71a7ebc..04ac638 100644
--- a/securis/src/main/java/net/curisit/securis/db/Organization.java
+++ b/securis/src/main/java/net/curisit/securis/db/Organization.java
@@ -1,6 +1,7 @@
 package net.curisit.securis.db;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -17,7 +18,11 @@
 import javax.persistence.Table;
 
 import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.codehaus.jackson.annotate.JsonProperty;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Entity implementation class for Entity: organization
@@ -30,6 +35,9 @@
 @NamedQueries(
 	{ @NamedQuery(name = "list-organizations", query = "SELECT o FROM Organization o") })
 public class Organization implements Serializable {
+
+	@SuppressWarnings("unused")
+	private static final Logger log = LoggerFactory.getLogger(Organization.class);
 
 	private static final long serialVersionUID = 1L;
 
@@ -44,20 +52,28 @@
 	@Column(name = "creation_timestamp")
 	private Date creationTimestamp;
 
+	@JsonIgnore
+	// We don't include the users to limit the size of each row a the listing
 	@ManyToMany
 	@JoinTable(name = "user_organization", //
 	joinColumns =
 		{ @JoinColumn(name = "organization_id", referencedColumnName = "id") }, //
 	inverseJoinColumns =
-		{ @JoinColumn(name = "user_id", referencedColumnName = "username") })
+		{ @JoinColumn(name = "username", referencedColumnName = "username") })
 	private List<User> users;
 
+	@JsonIgnore
+	// We don't include the users to limit the size of each row a the listing
 	@ManyToOne
 	@JoinColumn(name = "org_parent_id")
 	private Organization parentOrganization;
 
 	public int getId() {
 		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
 	}
 
 	public String getName() {
@@ -108,4 +124,43 @@
 		this.parentOrganization = parentOrganization;
 	}
 
+	// Roberto: Following methods are necessary to include in the REST list response
+	// information about the referenced entities.
+	@JsonProperty("org_parent_id")
+	public void setParentOrgId(Integer orgId) {
+		parentOrganization = new Organization();
+		parentOrganization.setId(orgId);
+	}
+
+	@JsonProperty("org_parent_id")
+	public Integer getParentOrgId() {
+		return parentOrganization == null ? null : parentOrganization.getId();
+	}
+
+	@JsonProperty("org_parent_name")
+	public String getParentOrgName() {
+		return parentOrganization == null ? null : parentOrganization.getName();
+	}
+
+	@JsonProperty("users_ids")
+	public void setUsersIds(List<String> usersIds) {
+		users = new ArrayList<>();
+		for (String userid : usersIds) {
+			User u = new User();
+			u.setUsername(userid);
+			users.add(u);
+		}
+	}
+
+	@JsonProperty("users_ids")
+	public List<String> getUsersIds() {
+		if (users == null)
+			return null;
+		List<String> ids = new ArrayList<>();
+		for (User user : users) {
+			ids.add(user.getUsername());
+		}
+		return ids;
+	}
+
 }

--
Gitblit v1.3.2