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/services/UserResource.java |  202 ++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 146 insertions(+), 56 deletions(-)

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 8048e89..8788a02 100644
--- a/securis/src/main/java/net/curisit/securis/services/UserResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/UserResource.java
@@ -1,10 +1,21 @@
 package net.curisit.securis.services;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 import javax.inject.Inject;
+import javax.inject.Provider;
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.FormParam;
 import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
@@ -14,10 +25,14 @@
 import javax.ws.rs.core.Response.Status;
 
 import net.curisit.integrity.commons.Utils;
+import net.curisit.securis.db.Organization;
+import net.curisit.securis.db.User;
 import net.curisit.securis.utils.TokenHelper;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import com.google.inject.persist.Transactional;
 
 /**
  * User resource
@@ -29,6 +44,9 @@
 
 	@Inject
 	TokenHelper tokenHelper;
+
+	@Inject
+	Provider<EntityManager> emProvider;
 
 	// private LicenseHelper licenseHelper = InjectorFactory.getInjector().getInstance(LicenseHelper.class);
 	private static final Logger log = LoggerFactory.getLogger(UserResource.class);
@@ -43,9 +61,134 @@
 	@GET
 	@Path("/")
 	@Produces(
-		{ MediaType.TEXT_PLAIN })
-	public Response index(@Context HttpServletRequest request) {
-		return Response.ok("User resource").build();
+		{ MediaType.APPLICATION_JSON })
+	public Response index() {
+		log.info("Getting users list ");
+
+		EntityManager em = emProvider.get();
+		TypedQuery<User> q = em.createNamedQuery("list-users", User.class);
+
+		List<User> list = q.getResultList();
+
+		return Response.ok(list).build();
+	}
+
+	/**
+	 * 
+	 * @return The user
+	 */
+	@GET
+	@Path("/{uid}")
+	@Produces(
+		{ MediaType.APPLICATION_JSON })
+	public Response get(@PathParam("uid") String uid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+		log.info("Getting user data for id: {}: ", uid);
+		if (uid == null || uid.equals("")) {
+			log.error("User ID is mandatory");
+			return Response.status(Status.NOT_FOUND).build();
+		}
+
+		EntityManager em = emProvider.get();
+		User lt = em.find(User.class, Integer.parseInt(uid));
+		if (lt == null) {
+			log.error("User with id {} not found in DB", uid);
+			return Response.status(Status.NOT_FOUND).build();
+		}
+		return Response.ok(lt).build();
+	}
+
+	@POST
+	@Path("/")
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Produces(
+		{ MediaType.APPLICATION_JSON })
+	@Transactional
+	public Response create(User user, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+		log.info("Creating new user");
+		EntityManager em = emProvider.get();
+		List<Organization> orgs = null;
+		List<Integer> orgsIds = user.getOrgsIds();
+		if (orgsIds != null && orgsIds.size() > 0) {
+			orgs = new ArrayList<>();
+			for (Integer orgId : orgsIds) {
+				Organization o = em.find(Organization.class, orgId);
+				if (o == null) {
+					log.error("User organization with id {} not found in DB", orgId);
+					return Response.status(Status.NOT_FOUND).header("SECURIS_ERROR", "User's organization not found with ID: " + orgId).build();
+				}
+				orgs.add(o);
+			}
+		}
+
+		user.setOrganizations(orgs);
+		user.setModificationTimestamp(new Date());
+		user.setLastLogin(null);
+		user.setCreationTimestamp(new Date());
+		em.persist(user);
+
+		return Response.ok(user).build();
+	}
+
+	@PUT
+	@POST
+	@Path("/{uid}")
+	@Transactional
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Produces(
+		{ MediaType.APPLICATION_JSON })
+	public Response modify(User user, @PathParam("uid") String uid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+		log.info("Modifying user with id: {}", uid);
+		EntityManager em = emProvider.get();
+		User currentUser = em.find(User.class, Integer.parseInt(uid));
+		if (currentUser == null) {
+			log.error("User with id {} not found in DB", uid);
+			return Response.status(Status.NOT_FOUND).header("SECURIS_ERROR", "User not found with ID: " + uid).build();
+		}
+
+		List<Organization> orgs = null;
+		List<Integer> orgsIds = user.getOrgsIds();
+		if (orgsIds != null && orgsIds.size() > 0) {
+			orgs = new ArrayList<>();
+			for (Integer orgId : orgsIds) {
+				Organization o = em.find(Organization.class, orgId);
+				if (o == null) {
+					log.error("User organization with id {} not found in DB", orgId);
+					return Response.status(Status.NOT_FOUND).header("SECURIS_ERROR", "User's user not found with ID: " + orgId).build();
+				}
+				orgs.add(o);
+			}
+		}
+
+		currentUser.setOrganizations(orgs);
+		currentUser.setFirstName(user.getFirstName());
+		currentUser.setLastName(user.getLastName());
+		currentUser.setRoles(user.getRoles());
+		currentUser.setLang(user.getLang());
+		currentUser.setModificationTimestamp(new Date());
+		currentUser.setPassword(user.getPassword());
+		currentUser.setLastLogin(user.getLastLogin());
+
+		em.persist(currentUser);
+
+		return Response.ok(currentUser).build();
+	}
+
+	@DELETE
+	@Path("/{uid}")
+	@Transactional
+	@Produces(
+		{ MediaType.APPLICATION_JSON })
+	public Response delete(@PathParam("uid") String uid, @Context HttpServletRequest request) {
+		log.info("Deleting app with id: {}", uid);
+		EntityManager em = emProvider.get();
+		User app = em.find(User.class, Integer.parseInt(uid));
+		if (app == null) {
+			log.error("User with id {} can not be deleted, It was not found in DB", uid);
+			return Response.status(Status.NOT_FOUND).build();
+		}
+
+		em.remove(app);
+		return Response.ok(Utils.createMap("success", true, "id", uid)).build();
 	}
 
 	@POST
@@ -64,18 +207,6 @@
 		return Response.ok(Utils.createMap("success", true, "token", tokenAuth)).build();
 	}
 
-	/**
-	 * @return the version of the three entities that can be synchronized (Users, DataSet and Settings)
-	 */
-	@GET
-	@Path("/{username}")
-	@Produces(
-		{ MediaType.APPLICATION_JSON })
-	// @RolesAllowed("advance")
-	public Response main(@PathParam("username") String username) {
-		return Response.ok().entity(Utils.createMap("name", "Pepito", "username", username)).build();
-	}
-
 	@GET
 	@Path("/logout")
 	@Produces(
@@ -84,45 +215,4 @@
 		request.getSession().invalidate();
 		return Response.ok().build();
 	}
-
-	//
-	// private <T> ServiceResponse<T> buildErrorResponse(ServiceResponse<T> response, String msgErrorCode) {
-	// response.setSuccess(false);
-	// response.setErrorMessage(localManager.getString(msgErrorCode));
-	// response.setErrorMessageCode(msgErrorCode);
-	// return response;
-	// }
-	//
-	// private Date calculateCaducation() {
-	// Integer licenseExpiration = systemParams.getParamAsInt(SystemParams.Keys.CONFIG_SERVER_LICENSE_EXPIRATION);
-	// if (licenseExpiration == null)
-	// licenseExpiration = DEFAULT_LICENSE_EXPIRATION;
-	// return Utils.addDays(new Date(), licenseExpiration);
-	// }
-	//
-	// private boolean validateLicense(String license) {
-	// BasicApplication ba = basicApplicationDao.findByLicense(license);
-	// return (ba != null);
-	// }
-	//
-	// private boolean validateVersion(int minorVersion, int majorVersion) {
-	// return (versionManager.getMajorVersion() == majorVersion);
-	// }
-	//
-	// private BasicApplication findBasicApp(String license) {
-	// BasicApplication ba = basicApplicationDao.findByLicense(license);
-	// return ba;
-	// }
-	//
-	// private License generateLicense() {
-	// // TODO complete all field of the license
-	// License license = new License();
-	// license.setCustomerCode(systemParams.getParam(SystemParams.Keys.CONFIG_COMMON_CUSTOMER_CODE));
-	// license.setCSCode(systemParams.getParam(SystemParams.Keys.CONFIG_COMMON_CS_CODE));
-	// license.setCRCLogo("00000000");
-	// license.setExpirationDate(calculateCaducation());
-	// license.setInstallCode(codeGenerator.generateInstalationNumber());
-	// return license;
-	// }
-
 }

--
Gitblit v1.3.2