/** Removes all stored queries. */ public void removeAll() { for (Resource file : storedQueryDir().list()) { file.delete(); } }
private File createMyBogusStoredQueryDefinition() throws IOException { File storedQueryDir = storedQueryProvider.storedQueryDir().dir(); File storedQueryDefinition = new File(storedQueryDir, "MyBogusStoredQuery.xml"); Writer writer = new FileWriter(storedQueryDefinition); writer.write("This is not a well-formed query"); writer.close(); return storedQueryDefinition; } }
/** Lists all the stored queries provided. */ public List<StoredQuery> listStoredQueries() { Parser p = new Parser(new WFSConfiguration()); List<StoredQuery> queries = new ArrayList(); // add the default as mandated by spec queries.add(StoredQuery.DEFAULT); // add user created ones Resource dir = storedQueryDir(); for (Resource f : dir.list()) { try { queries.add(parseStoredQuery(f, p)); } catch (Exception e) { LOGGER.log(Level.WARNING, "Error occured parsing stored query: " + f, e); } } return queries; }
/** * Removes an existing stored query. * * @param query The stored query */ public void removeStoredQuery(StoredQuery query) { storedQueryDir().get(toFilename(query.getName())).delete(); }
/** * Retrieves a stored query by name. * * @param name Identifying name of the stored query. */ public StoredQuery getStoredQuery(String name) { // default? if (StoredQuery.DEFAULT.getName().equals(name)) { return StoredQuery.DEFAULT; } try { Resource res = storedQueryDir().get(toFilename(name)); if (res.getType() != Type.RESOURCE) { return null; } return parseStoredQuery(res); } catch (Exception e) { throw new RuntimeException("Error accessign stoed query: " + name, e); } }
/** * Persists a stored query, overwriting it if the query already exists. * * @param query The stored query. */ public void putStoredQuery(StoredQuery query) { try { Resource dir = storedQueryDir(); Resource f = dir.get(toFilename(query.getName())); if (f.getType() != Type.UNDEFINED) { // TODO: back up the old file in case there is an error during encoding } BufferedOutputStream bout = new BufferedOutputStream(f.out()); try { Encoder e = new Encoder(new WFSConfiguration()); e.setRootElementType(WFS.StoredQueryDescriptionType); e.encode( query.getQuery(), WFS.StoredQueryDescription, new BufferedOutputStream(bout)); bout.flush(); } finally { bout.close(); } } catch (IOException e) { throw new RuntimeException("i/o error listing stored queries", e); } }
@Test public void canRemoveAllStoredQueryDefinitions() throws IOException { File myStoredQueryDefinition = createMyStoredQueryDefinitionFile(storedQueryProvider.storedQueryDir().dir()); List<StoredQuery> queries = storedQueryProvider.listStoredQueries(); assertThat(queries, hasSize(2)); storedQueryProvider.removeAll(); assertThat(myStoredQueryDefinition.exists(), is(false)); assertThat(storedQueryProvider.getStoredQuery(MY_STORED_QUERY), is(nullValue())); }
@Test public void whenBogusStoredQueryDefinitionCreatedItIsNotReturnedInTheListOfStoredQueries() throws IOException { createMyStoredQueryDefinitionFile(storedQueryProvider.storedQueryDir().dir()); createMyBogusStoredQueryDefinition(); List<StoredQuery> queries = storedQueryProvider.listStoredQueries(); assertThat(queries, hasSize(2)); assertThat( storedQueryProvider.getStoredQuery("urn:ogc:def:query:OGC-WFS::GetFeatureById"), is(notNullValue())); assertThat(storedQueryProvider.getStoredQuery(MY_STORED_QUERY), is(notNullValue())); }
@Test public void whenStoredQueryDefinitionCreatedByFileItIsReturnedInTheListOfStoredQueries() throws IOException { createMyStoredQueryDefinitionFile(storedQueryProvider.storedQueryDir().dir()); List<StoredQuery> queries = storedQueryProvider.listStoredQueries(); assertThat(queries, hasSize(2)); assertThat( storedQueryProvider.getStoredQuery("urn:ogc:def:query:OGC-WFS::GetFeatureById"), is(notNullValue())); assertThat( storedQueryProvider.getStoredQuery(MY_STORED_QUERY).getName(), is(MY_STORED_QUERY)); }
@Test public void canRemoveStoredQueryDefinition() throws IOException { File myStoredQueryDefinition = createMyStoredQueryDefinitionFile(storedQueryProvider.storedQueryDir().dir()); List<StoredQuery> queries = storedQueryProvider.listStoredQueries(); assertThat(queries, hasSize(2)); StoredQuery myStoredQuery = storedQueryProvider.getStoredQuery(MY_STORED_QUERY); assertThat(myStoredQuery.getName(), is(MY_STORED_QUERY)); storedQueryProvider.removeStoredQuery(myStoredQuery); assertThat(myStoredQueryDefinition.exists(), is(false)); assertThat(storedQueryProvider.getStoredQuery(myStoredQuery.getName()), is(nullValue())); }
@Test public void storedQueryDefinitionIsNotRewrittenByListingTheQueries() throws IOException { // c.f. GEOS-7297 File myStoredQueryDefinition = createMyStoredQueryDefinitionFile(storedQueryProvider.storedQueryDir().dir()); try { myStoredQueryDefinition.setReadOnly(); List<StoredQuery> queries = storedQueryProvider.listStoredQueries(); assertThat(queries, hasSize(2)); assertThat( storedQueryProvider.getStoredQuery("urn:ogc:def:query:OGC-WFS::GetFeatureById"), is(notNullValue())); assertThat( storedQueryProvider.getStoredQuery(MY_STORED_QUERY).getName(), is(MY_STORED_QUERY)); } finally { myStoredQueryDefinition.setWritable(true); } }