@Override protected void execute() throws Exception { String queriesXML = getXML(); Map<String, PathQuery> toSave = new HashMap<String, PathQuery>(); int version = getVersion(); Reader r = new StringReader(queriesXML); Map<String, PathQuery> queries; try { queries = PathQueryBinding.unmarshalPathQueries(r, version); } catch (Exception e) { throw new BadRequestException("Could not de-serialize queries: " + e.getMessage()); } for (String name : queries.keySet()) { PathQuery pq = queries.get(name); pq.setTitle(name); if (!pq.isValid()) { problems.add(name + ": " + formatMessage(pq.verifyQuery())); } else { Set<String> missingBags = new HashSet<String>(); for (String bag : pq.getBagNames()) { if (!knownBags.contains(bag)) { missingBags.add(bag); } } if (missingBags.isEmpty()) { toSave.put(name, pq); } else { problems.add(name + " references the following missing lists: " + missingBags); } } } if (toSave.size() != queries.size()) { throw new BadRequestException("Errors with queries. " + StringUtils.join(problems, "\n")); } try { Map<String, String> saved = saveQueries(toSave); Iterator<Entry<String, String>> it = saved.entrySet().iterator(); while (it.hasNext()) { Entry<String, String> pair = it.next(); addResultItem(pair, it.hasNext()); } } catch (Exception e) { throw new ServiceException("Failed to save queries", e); } }
@Override protected void execute() throws Exception { String queriesXML = getXML(); int version = getVersion(); Reader r = new StringReader(queriesXML); Map<String, PathQuery> queries = PathQueryBinding.unmarshalPathQueries(r, version); for (String name : queries.keySet()) { PathQuery pq = queries.get(name); if (!pq.isValid()) { problems.add(name + ": " + formatMessage(pq.verifyQuery())); } else { Set<String> missingBags = new HashSet<String>(); for (String bag : pq.getBagNames()) { if (!knownBags.contains(bag)) { missingBags.add(bag); } } if (missingBags.isEmpty()) { toSave.put(name, pq); } else { problems.add(name + " references the following missing lists: " + missingBags); } } } if (toSave.size() != queries.size()) { throw new BadRequestException("Errors with queries. " + StringUtils.join(problems, "\n")); } try { profile.saveQueries(toSave, saved); } catch (Exception e) { for (String name : saved) { profile.deleteQuery(name); } throw new ServiceException("Failed to save queries", e); } }