Mercurial > lada > lada-server
comparison src/main/java/de/intevation/lada/rest/LProbeService.java @ 305:f0e1caad6027
Use sql queries from config to get proben.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Fri, 16 Aug 2013 14:41:40 +0200 |
parents | f4701a64e8a3 |
children | 5844d7457dde |
comparison
equal
deleted
inserted
replaced
304:2d3f293899e8 | 305:f0e1caad6027 |
---|---|
1 package de.intevation.lada.rest; | 1 package de.intevation.lada.rest; |
2 | 2 |
3 import java.util.ArrayList; | 3 import java.util.ArrayList; |
4 import java.util.List; | 4 import java.util.List; |
5 import java.util.Map; | |
5 import java.util.logging.Logger; | 6 import java.util.logging.Logger; |
6 | 7 |
7 import javax.enterprise.context.RequestScoped; | 8 import javax.enterprise.context.RequestScoped; |
8 import javax.inject.Inject; | 9 import javax.inject.Inject; |
9 import javax.inject.Named; | 10 import javax.inject.Named; |
17 import javax.ws.rs.core.Context; | 18 import javax.ws.rs.core.Context; |
18 import javax.ws.rs.core.HttpHeaders; | 19 import javax.ws.rs.core.HttpHeaders; |
19 import javax.ws.rs.core.MultivaluedMap; | 20 import javax.ws.rs.core.MultivaluedMap; |
20 import javax.ws.rs.core.UriInfo; | 21 import javax.ws.rs.core.UriInfo; |
21 | 22 |
23 import org.apache.commons.io.IOUtils; | |
24 import org.jboss.resteasy.plugins.providers.multipart.InputPart; | |
25 import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput; | |
26 import org.json.JSONArray; | |
27 import org.json.JSONException; | |
28 import org.json.JSONObject; | |
29 | |
22 import de.intevation.lada.auth.Authentication; | 30 import de.intevation.lada.auth.Authentication; |
23 import de.intevation.lada.auth.AuthenticationException; | 31 import de.intevation.lada.auth.AuthenticationException; |
24 import de.intevation.lada.auth.AuthenticationResponse; | 32 import de.intevation.lada.auth.AuthenticationResponse; |
25 import de.intevation.lada.auth.Authorization; | 33 import de.intevation.lada.auth.Authorization; |
34 import de.intevation.lada.data.LProbeRepository; | |
26 import de.intevation.lada.data.QueryBuilder; | 35 import de.intevation.lada.data.QueryBuilder; |
27 import de.intevation.lada.data.Repository; | 36 import de.intevation.lada.data.Repository; |
28 import de.intevation.lada.model.LProbe; | 37 import de.intevation.lada.model.LProbe; |
29 import de.intevation.lada.model.LProbeInfo; | 38 import de.intevation.lada.model.LProbeInfo; |
30 | 39 import de.intevation.lada.utils.QueryTools; |
31 import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput; | |
32 | 40 |
33 /** | 41 /** |
34 * This class produces a RESTful service to read, write and update | 42 * This class produces a RESTful service to read, write and update |
35 * LProbe objects. | 43 * LProbe objects. |
36 * | 44 * |
132 authentication.authorizedGroups(header); | 140 authentication.authorizedGroups(header); |
133 QueryBuilder<LProbeInfo> builder = | 141 QueryBuilder<LProbeInfo> builder = |
134 new QueryBuilder<LProbeInfo>( | 142 new QueryBuilder<LProbeInfo>( |
135 repository.getEntityManager(), | 143 repository.getEntityManager(), |
136 LProbeInfo.class); | 144 LProbeInfo.class); |
137 builder.or("netzbetreiberId", auth.getNetzbetreiber()); | 145 |
138 builder.or("fertig", Boolean.TRUE); | |
139 MultivaluedMap<String, String> params = info.getQueryParameters(); | 146 MultivaluedMap<String, String> params = info.getQueryParameters(); |
140 if (params.isEmpty()) { | 147 if (params.isEmpty() || !params.containsKey("qid")) { |
141 return repository.filter(builder.getQuery()); | 148 return repository.filter(builder.getQuery()); |
142 } | 149 } |
143 QueryBuilder<LProbeInfo> mstBuilder = builder.getEmptyBuilder(); | 150 String qid = params.getFirst("qid"); |
144 if (params.keySet().contains("mstId")) { | 151 JSONObject query = QueryTools.getQueryById(qid); |
145 String[] paramValues = params.getFirst("mstId").split(","); | 152 List<String> filters = new ArrayList<String>(); |
146 for (String pv: paramValues) { | 153 List<String> results = new ArrayList<String>(); |
147 mstBuilder.or("mstId", pv); | 154 String sql = ""; |
148 } | 155 try { |
149 builder.and(mstBuilder); | 156 sql = query.getString("sql"); |
150 } | 157 JSONArray jFilters = query.getJSONArray("filters"); |
151 QueryBuilder<LProbeInfo> umwBuilder = builder.getEmptyBuilder(); | 158 for (int i = 0; i < jFilters.length(); i++) { |
152 if (params.keySet().contains("umwId")) { | 159 JSONObject jFilter = jFilters.getJSONObject(i); |
153 String[] paramValues = params.getFirst("umwId").split(","); | 160 filters.add(jFilter.getString("dataIndex")); |
154 for (String pv: paramValues) { | 161 } |
155 umwBuilder.or("umwId", pv); | 162 JSONArray jResults = query.getJSONArray("result"); |
156 } | 163 for (int i = 0; i < jResults.length(); i++) { |
157 builder.and(umwBuilder); | 164 JSONObject jResult = jResults.getJSONObject(i); |
158 } | 165 results.add(jResult.getString("dataIndex")); |
159 QueryBuilder<LProbeInfo> beginBuilder = builder.getEmptyBuilder(); | 166 } |
160 if (params.keySet().contains("bedin")) { | 167 } |
161 String[] paramValues = params.getFirst("begin").split(","); | 168 catch (JSONException e) { |
162 for (String pv: paramValues) { | 169 return new Response(false, 603, new ArrayList<LProbeInfo>()); |
163 beginBuilder.or("probeentnahmeBegin", pv); | 170 } |
164 } | 171 |
165 builder.and(beginBuilder); | 172 if (sql == null || sql.length() == 0) { |
166 } | 173 return new Response(false, 603, new ArrayList<LProbeInfo>()); |
167 builder.distinct(); | 174 } |
168 return repository.filter(builder.getQuery()); | 175 LProbeRepository lpr = (LProbeRepository)repository; |
176 String subselect = "(select * from l_probe_info where "; | |
177 List<String> netzbetreiberIds = auth.getNetzbetreiber(); | |
178 boolean first = true; | |
179 for (String netzbetreiberId: netzbetreiberIds) { | |
180 if (first) { | |
181 subselect += "netzbetreiber_id = '" + netzbetreiberId + "' "; | |
182 first = false; | |
183 } | |
184 else { | |
185 subselect += "or netzbetreiber_id = '" + netzbetreiberId + "' "; | |
186 } | |
187 } | |
188 subselect += "or fertig = true) as lp"; | |
189 sql = sql.replace("l_probe", subselect); | |
190 return lpr.filterFree(sql, filters, results, params); | |
169 } | 191 } |
170 catch(AuthenticationException ae) { | 192 catch(AuthenticationException ae) { |
171 return new Response(false, 699, new ArrayList<LProbe>()); | 193 return new Response(false, 699, new ArrayList<LProbe>()); |
172 } | 194 } |
173 } | 195 } |