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 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)