From c8eb07e8dc020346aaee0d859040ccabb79349bd Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Fri, 17 Jan 2014 12:26:05 +0000
Subject: [PATCH] #395 feature - Changes in REST API for license system

---
 securis/src/main/java/net/curisit/securis/db/License.java                   |  189 +++++++++++++++++++++++++++----
 securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java |    7 
 securis/src/main/java/net/curisit/securis/services/UserResource.java        |    2 
 securis/src/main/java/net/curisit/securis/db/LicenseType.java               |    9 +
 securis/src/main/java/net/curisit/securis/db/Pack.java                      |   99 ++++++++++++++++
 5 files changed, 276 insertions(+), 30 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/db/License.java b/securis/src/main/java/net/curisit/securis/db/License.java
index fb4ce46..6ef4659 100644
--- a/securis/src/main/java/net/curisit/securis/db/License.java
+++ b/securis/src/main/java/net/curisit/securis/db/License.java
@@ -14,6 +14,8 @@
 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;
 
 /**
@@ -36,22 +38,45 @@
 
 	private String code;
 
-	@Column(name = "creation_timestamp")
-	private Date creationTimestamp;
-
-	@ManyToOne
-	@JoinColumn(name = "organization_id")
-	private Organization organization;
-
+	@JsonIgnore
 	@ManyToOne
 	@JoinColumn(name = "pack_id")
 	private Pack pack;
 
+	@JsonIgnore
 	@ManyToOne
 	@JoinColumn(name = "created_by")
 	private User createdBy;
 
-	private int numLicenses;
+	@JsonIgnore
+	@ManyToOne
+	@JoinColumn(name = "canceled_by")
+	private User canceledBy;
+
+	private int status;
+
+	@JoinColumn(name = "full_name")
+	private String fullName;
+
+	private String email;
+
+	@Column(name = "creation_timestamp")
+	private Date creationTimestamp;
+
+	@Column(name = "modification_timestamp")
+	private Date modificationTimestamp;
+
+	@Column(name = "activation_timestamp")
+	private Date activationTimestamp;
+
+	@Column(name = "cancelation_timestamp")
+	private Date cancelationTimestamp;
+
+	@Column(name = "send_timestamp")
+	private Date sendTimestamp;
+
+	@Column(name = "last_access_timestamp")
+	private Date lastAccessTimestamp;
 
 	public int getId() {
 		return id;
@@ -73,28 +98,12 @@
 		this.creationTimestamp = creationTimestamp;
 	}
 
-	public Organization getOrganization() {
-		return organization;
-	}
-
-	public void setOrganization(Organization organization) {
-		this.organization = organization;
-	}
-
 	public User getCreatedBy() {
 		return createdBy;
 	}
 
 	public void setCreatedBy(User createdBy) {
 		this.createdBy = createdBy;
-	}
-
-	public int getNumLicenses() {
-		return numLicenses;
-	}
-
-	public void setNumLicenses(int numLicenses) {
-		this.numLicenses = numLicenses;
 	}
 
 	public Pack getPack() {
@@ -105,4 +114,136 @@
 		this.pack = pack;
 	}
 
+	@JsonProperty("created_by_id")
+	public String getCreatedById() {
+		return createdBy == null ? null : createdBy.getUsername();
+	}
+
+	@JsonProperty("created_by_id")
+	public void setCreatedById(String username) {
+		if (username == null) {
+			createdBy = null;
+		} else {
+			createdBy = new User();
+			createdBy.setUsername(username);
+		}
+	}
+
+	@JsonProperty("canceled_by_id")
+	public String getCanceledById() {
+		return canceledBy == null ? null : canceledBy.getUsername();
+	}
+
+	@JsonProperty("canceled_by_id")
+	public void setCanceledById(String username) {
+		if (username == null) {
+			canceledBy = null;
+		} else {
+			canceledBy = new User();
+			canceledBy.setUsername(username);
+		}
+	}
+
+	@JsonProperty("pack_code")
+	public String getLicenseTypcode() {
+		return pack == null ? null : pack.getCode();
+	}
+
+	@JsonProperty("pack_id")
+	public Integer getOrgId() {
+		return pack == null ? null : pack.getId();
+	}
+
+	@JsonProperty("pack_id")
+	public void setOrgId(Integer idPack) {
+		if (idPack == null) {
+			pack = null;
+		} else {
+			pack = new Pack();
+			pack.setId(idPack);
+		}
+	}
+
+	public int getStatus() {
+		return status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public Date getModificationTimestamp() {
+		return modificationTimestamp;
+	}
+
+	public void setModificationTimestamp(Date modificationTimestamp) {
+		this.modificationTimestamp = modificationTimestamp;
+	}
+
+	public String getFullName() {
+		return fullName;
+	}
+
+	public void setFullName(String fullName) {
+		this.fullName = fullName;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public Date getActivationTimestamp() {
+		return activationTimestamp;
+	}
+
+	public void setActivationTimestamp(Date activationTimestamp) {
+		this.activationTimestamp = activationTimestamp;
+	}
+
+	public Date getSendTimestamp() {
+		return sendTimestamp;
+	}
+
+	public void setSendTimestamp(Date sendTimestamp) {
+		this.sendTimestamp = sendTimestamp;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public User getCanceledBy() {
+		return canceledBy;
+	}
+
+	public void setCanceledBy(User canceledBy) {
+		this.canceledBy = canceledBy;
+	}
+
+	public Date getCancelationTimestamp() {
+		return cancelationTimestamp;
+	}
+
+	public void setCancelationTimestamp(Date cancelationTimestamp) {
+		this.cancelationTimestamp = cancelationTimestamp;
+	}
+
+	public Date getLastAccessTimestamp() {
+		return lastAccessTimestamp;
+	}
+
+	public void setLastAccessTimestamp(Date lastAccessTimestamp) {
+		this.lastAccessTimestamp = lastAccessTimestamp;
+	}
+
+	public static class Status {
+		public static final int CREATED = 0;
+		public static final int SENT = 1;
+		public static final int ACTIVE = 2;
+		public static final int CANCELED = 3;
+	}
 }
diff --git a/securis/src/main/java/net/curisit/securis/db/LicenseType.java b/securis/src/main/java/net/curisit/securis/db/LicenseType.java
index a805a98..ecc0253 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseType.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseType.java
@@ -14,6 +14,7 @@
 import javax.persistence.Table;
 
 import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonIgnore;
 import org.codehaus.jackson.annotate.JsonIgnoreProperties;
 import org.codehaus.jackson.annotate.JsonProperty;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
@@ -30,7 +31,7 @@
 @Entity
 @Table(name = "license_type")
 @NamedQueries(
-	{ @NamedQuery(name = "list-license_types", query = "SELECT new map(lt.id as id, lt.code as code, lt.name as name, lt.description as description, lt.creationTimestamp as creationTimestamp, ap.id as application_id, ap.name as application_name) FROM LicenseType lt inner join lt.application ap") })
+	{ @NamedQuery(name = "list-license_types", query = "SELECT lt FROM LicenseType lt") })
 public class LicenseType implements Serializable {
 
 	private static final Logger log = LoggerFactory.getLogger(LicenseType.class);
@@ -47,6 +48,7 @@
 	@Column(name = "creation_timestamp")
 	private Date creationTimestamp;
 
+	@JsonIgnore
 	@ManyToOne
 	@JoinColumn(name = "application_id")
 	private Application application;
@@ -83,6 +85,11 @@
 		return application;
 	}
 
+	@JsonProperty("application_name")
+	public String getParentOrgName() {
+		return application == null ? null : application.getName();
+	}
+
 	@JsonProperty("application_id")
 	public Integer getApplicationId() {
 		log.info("application  " + application);
diff --git a/securis/src/main/java/net/curisit/securis/db/Pack.java b/securis/src/main/java/net/curisit/securis/db/Pack.java
index 4c93f08..39e99ab 100644
--- a/securis/src/main/java/net/curisit/securis/db/Pack.java
+++ b/securis/src/main/java/net/curisit/securis/db/Pack.java
@@ -17,6 +17,8 @@
 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;
 
 /**
@@ -42,25 +44,34 @@
 	@Column(name = "creation_timestamp")
 	private Date creationTimestamp;
 
+	@JsonIgnore
 	@ManyToOne
 	@JoinColumn(name = "organization_id")
 	private Organization organization;
 
+	@JsonIgnore
 	@ManyToOne
 	@JoinColumn(name = "license_type_id")
 	private LicenseType licenseType;
 
+	@JsonIgnore
 	@ManyToOne
 	@JoinColumn(name = "created_by")
 	private User createdBy;
 
+	@JsonIgnore
 	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "pack")
 	private Set<License> licenses;
 
+	@JoinColumn(name = "num_licenses")
 	private int numLicenses;
 
 	public int getId() {
 		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
 	}
 
 	public String getCode() {
@@ -111,4 +122,92 @@
 		this.numLicenses = numLicenses;
 	}
 
+	@JsonProperty("num_activations")
+	public int getNumActivations() {
+		if (licenses == null)
+			return 0;
+		int num = 0;
+		for (License lic : licenses) {
+			if (lic.getStatus() == License.Status.ACTIVE)
+				num++;
+		}
+		return num;
+	}
+
+	/**
+	 * Counts all created licenses, It counts active licenses and licenses waiting for activation This number will be used to control the max number of licenses created. Ignore canceled licenses.
+	 * 
+	 * @return
+	 */
+	@JsonProperty("num_creations")
+	public int getNumCreations() {
+		if (licenses == null)
+			return 0;
+		int num = 0;
+		for (License lic : licenses) {
+			if (lic.getStatus() != License.Status.CANCELED)
+				num++;
+		}
+		return num;
+	}
+
+	/**
+	 * Number of available licenses in this pack
+	 * 
+	 * @return
+	 */
+	@JsonProperty("num_available")
+	public int getNumAvailables() {
+		return numLicenses - getNumCreations();
+	}
+
+	@JsonProperty("organization_name")
+	public String getOrgName() {
+		return organization == null ? null : organization.getName();
+	}
+
+	@JsonProperty("application_name")
+	public String getAppName() {
+		if (licenseType == null)
+			return null;
+		Application app = licenseType.getApplication();
+		return app == null ? null : app.getName();
+	}
+
+	@JsonProperty("organization_id")
+	public Integer getOrgId() {
+		return organization == null ? null : organization.getId();
+	}
+
+	@JsonProperty("organization_id")
+	public void setOrgId(Integer idOrg) {
+		if (idOrg == null) {
+			organization = null;
+		} else {
+			organization = new Organization();
+			organization.setId(idOrg);
+		}
+	}
+
+	@JsonProperty("license_type_id")
+	public Integer getLicTypeId() {
+		return licenseType == null ? null : licenseType.getId();
+	}
+
+	@JsonProperty("created_by_id")
+	public String getCreatedById() {
+		return createdBy == null ? null : createdBy.getUsername();
+	}
+
+	@JsonProperty("created_by_id")
+	public void setCreatedById(String username) {
+		createdBy = new User();
+		createdBy.setUsername(username);
+	}
+
+	@JsonProperty("licensetype_code")
+	public String getLicenseTypcode() {
+		return licenseType == null ? null : licenseType.getCode();
+	}
+
 }
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
index e805b47..5179ff6 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -6,7 +6,7 @@
 import javax.inject.Inject;
 import javax.inject.Provider;
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
+import javax.persistence.TypedQuery;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -64,9 +64,8 @@
 		log.info("Getting license types list ");
 
 		EntityManager em = emProvider.get();
-		Query q = em.createNamedQuery("list-license_types");
-		@SuppressWarnings("unchecked")
-		List<Object> list = q.getResultList();
+		TypedQuery<LicenseType> q = em.createNamedQuery("list-license_types", LicenseType.class);
+		List<LicenseType> list = q.getResultList();
 
 		return Response.ok(list).build();
 	}
diff --git a/securis/src/main/java/net/curisit/securis/services/UserResource.java b/securis/src/main/java/net/curisit/securis/services/UserResource.java
index 28fab1d..0b5e208 100644
--- a/securis/src/main/java/net/curisit/securis/services/UserResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/UserResource.java
@@ -208,7 +208,7 @@
 
 		request.getSession().setAttribute("username", user);
 		if ("no".equals(password))
-			return Response.status(Status.FORBIDDEN).build();
+			return Response.status(Status.UNAUTHORIZED).build();
 		String tokenAuth = tokenHelper.generateToken(user);
 		return Response.ok(Utils.createMap("success", true, "token", tokenAuth)).build();
 	}

--
Gitblit v1.3.2