From 602c4c4501dcd89cbce1d6ba61ba6bc75761d643 Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Sat, 18 Jan 2014 11:23:45 +0000
Subject: [PATCH] #396 feature - Getting all orgs from user including the children ones

---
 securis/src/main/java/net/curisit/securis/db/User.java |   26 ++++++++++++++++++++++----
 1 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/db/User.java b/securis/src/main/java/net/curisit/securis/db/User.java
index 1de7b9f..7f57cf8 100644
--- a/securis/src/main/java/net/curisit/securis/db/User.java
+++ b/securis/src/main/java/net/curisit/securis/db/User.java
@@ -3,7 +3,9 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -70,7 +72,7 @@
 	inverseJoinColumns =
 		{ @JoinColumn(name = "organization_id", referencedColumnName = "id") } //
 	)
-	private List<Organization> organizations;
+	private Set<Organization> organizations;
 
 	public String getUsername() {
 		return username;
@@ -160,17 +162,17 @@
 		this.lang = lang;
 	}
 
-	public List<Organization> getOrganizations() {
+	public Set<Organization> getOrganizations() {
 		return organizations;
 	}
 
-	public void setOrganizations(List<Organization> organizations) {
+	public void setOrganizations(Set<Organization> organizations) {
 		this.organizations = organizations;
 	}
 
 	@JsonProperty("organizations_ids")
 	public void setOrgsIds(List<Integer> orgsIds) {
-		organizations = new ArrayList<>();
+		organizations = new HashSet<>();
 		for (Integer orgid : orgsIds) {
 			Organization o = new Organization();
 			o.setId(orgid);
@@ -189,6 +191,22 @@
 		return ids;
 	}
 
+	@JsonIgnore
+	public Set<Integer> getAllOrgsIds() {
+		if (organizations == null)
+			return null;
+		Set<Integer> ids = new HashSet<>();
+		includeAllOrgs(this.organizations, ids);
+		return ids;
+	}
+
+	private void includeAllOrgs(Set<Organization> list, Set<Integer> orgIds) {
+		for (Organization org : list) {
+			orgIds.add(org.getId());
+			includeAllOrgs(org.getChildOrganizations(), orgIds);
+		}
+	}
+
 	static public class Rol {
 		static public final int ADVANCE = 0x01;
 		static public final int ADMIN = 0x02;

--
Gitblit v1.3.2