rsanchez
2017-06-07 89a0646d18da6f3290a883121e38f4086a6fb37e
securis/src/main/java/net/curisit/securis/services/PackResource.java
....@@ -1,6 +1,7 @@
11 package net.curisit.securis.services;
22
33 import java.security.Principal;
4
+import java.util.ArrayList;
45 import java.util.Date;
56 import java.util.HashSet;
67 import java.util.List;
....@@ -21,8 +22,10 @@
2122 import javax.ws.rs.Produces;
2223 import javax.ws.rs.core.Context;
2324 import javax.ws.rs.core.MediaType;
25
+import javax.ws.rs.core.MultivaluedMap;
2426 import javax.ws.rs.core.Response;
2527 import javax.ws.rs.core.Response.Status;
28
+import javax.ws.rs.core.UriInfo;
2629
2730 import org.apache.logging.log4j.LogManager;
2831 import org.apache.logging.log4j.Logger;
....@@ -80,33 +83,63 @@
8083 @Path("/")
8184 @Securable
8285 @Produces({ MediaType.APPLICATION_JSON })
83
- public Response index(@Context BasicSecurityContext bsc) {
86
+ public Response index(@Context UriInfo uriInfo, @Context BasicSecurityContext bsc) {
8487 LOG.info("Getting packs list ");
88
+ MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
8589
8690 // EntityManager em = emProvider.get();
8791 em.clear();
8892
93
+ TypedQuery<Pack> q = createQuery(queryParams, bsc);
94
+ if (q == null) {
95
+ return Response.ok().build();
96
+ }
97
+
98
+ List<Pack> list = q.getResultList();
99
+
100
+ return Response.ok(list).build();
101
+ }
102
+
103
+ private String generateWhereFromParams(boolean addWhere, MultivaluedMap<String, String> queryParams) {
104
+ List<String> conditions = new ArrayList<>();
105
+ if (queryParams.containsKey("organizationId")) {
106
+ conditions.add(String.format("pa.organization.id = %s", queryParams.getFirst("organizationId")));
107
+ }
108
+ if (queryParams.containsKey("applicationId")) {
109
+ conditions.add(String.format("pa.licenseType.application.id = %s", queryParams.getFirst("applicationId")));
110
+ }
111
+ if (queryParams.containsKey("licenseTypeId")) {
112
+ conditions.add(String.format("pa.licenseType.id = %s", queryParams.getFirst("licenseTypeId")));
113
+ }
114
+ String connector = addWhere ? " where " : " and ";
115
+ return (conditions.isEmpty() ? "" : connector) + String.join(" and ", conditions);
116
+ }
117
+
118
+ private TypedQuery<Pack> createQuery(MultivaluedMap<String, String> queryParams, BasicSecurityContext bsc) {
89119 TypedQuery<Pack> q;
120
+ String hql = "SELECT pa FROM Pack pa";
90121 if (bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN)) {
91
- LOG.info("Getting all packs for user: " + bsc.getUserPrincipal());
92
- q = em.createNamedQuery("list-packs", Pack.class);
122
+ hql += generateWhereFromParams(true, queryParams);
123
+ q = em.createQuery(hql, Pack.class);
93124 } else {
94125 if (bsc.getApplicationsIds() == null || bsc.getApplicationsIds().isEmpty()) {
95
- return Response.ok().build();
126
+ return null;
96127 }
97128 if (bsc.getOrganizationsIds() == null || bsc.getOrganizationsIds().isEmpty()) {
98
- q = em.createNamedQuery("list-packs-by-apps", Pack.class);
129
+ hql += " where pa.licenseType.application.id in :list_ids_app ";
99130 } else {
100
- q = em.createNamedQuery("list-packs-by-orgs-apps", Pack.class);
131
+ hql += " where pa.organization.id in :list_ids_org and pa.licenseType.application.id in :list_ids_app ";
132
+ }
133
+ hql += generateWhereFromParams(false, queryParams);
134
+ q = em.createQuery(hql, Pack.class);
135
+ if (hql.contains("list_ids_org")) {
101136 q.setParameter("list_ids_org", bsc.getOrganizationsIds());
102137 }
103138 q.setParameter("list_ids_app", bsc.getApplicationsIds());
104139 LOG.info("Getting packs from orgs: {} and apps: {}", bsc.getOrganizationsIds(), bsc.getApplicationsIds());
105140 }
106141
107
- List<Pack> list = q.getResultList();
108
-
109
- return Response.ok(list).build();
142
+ return q;
110143 }
111144
112145 private Response generateErrorUnathorizedAccess(Pack pack, Principal user) {