use of ddf.catalog.operation.Query in project ddf by codice.
the class CqlRequest method createQueryRequest.
public QueryRequest createQueryRequest(String localSource, FilterBuilder filterBuilder) {
Query query = new QueryImpl(createFilter(filterBuilder), start, count, parseSort(sort), true, timeout);
String source = parseSrc(localSource);
QueryRequest queryRequest;
if (CACHE_SOURCE.equals(source)) {
queryRequest = new QueryRequestImpl(query, true);
queryRequest.getProperties().put("mode", "cache");
} else {
queryRequest = new QueryRequestImpl(query, Collections.singleton(source));
queryRequest.getProperties().put("mode", "update");
}
return queryRequest;
}
use of ddf.catalog.operation.Query in project ddf by codice.
the class CatalogFrameworkImplTest method testPreQueryStopExecution.
@Test(expected = FederationException.class)
public void testPreQueryStopExecution() throws UnsupportedQueryException, FederationException, SourceUnavailableException {
MockMemoryProvider provider = new MockMemoryProvider("Provider", "Provider", "v1.0", "DDF", new HashSet<ContentType>(), true, new Date());
FederationStrategy federationStrategy = mock(FederationStrategy.class);
QueryRequest request = mock(QueryRequest.class);
when(request.getQuery()).thenReturn(mock(Query.class));
PreQueryPlugin stopQueryPlugin = new PreQueryPlugin() {
@Override
public QueryRequest process(QueryRequest input) throws PluginExecutionException, StopProcessingException {
throw new StopProcessingException("Testing that the framework will stop the query.");
}
};
FrameworkProperties frameworkProperties = new FrameworkProperties();
frameworkProperties.setPreQuery(Arrays.asList(stopQueryPlugin));
frameworkProperties.setFederationStrategy(federationStrategy);
frameworkProperties.setCatalogProviders(Collections.singletonList(provider));
CatalogFrameworkImpl framework = createFramework(frameworkProperties);
framework.query(request);
}
use of ddf.catalog.operation.Query in project ddf by codice.
the class TagsFilterQueryPluginTest method setup.
@Before
public void setup() {
CatalogProvider catProvider1 = mock(CatalogProvider.class);
CatalogProvider catProvider2 = mock(CatalogProvider.class);
CatalogProvider catProvider3 = mock(CatalogProvider.class);
when(catProvider1.getId()).thenReturn("cat1");
when(catProvider2.getId()).thenReturn("cat2");
when(catProvider3.getId()).thenReturn("cat3");
ImmutableList<CatalogProvider> catalogProviders = ImmutableList.of(catProvider1, catProvider2, catProvider3);
filterAdapter = mock(FilterAdapter.class);
filterBuilder = mock(FilterBuilder.class);
plugin = new TagsFilterQueryPlugin(catalogProviders, filterAdapter, filterBuilder);
source = mock(CatalogProvider.class);
when(source.getId()).thenReturn("cat2");
cache = mock(SourceCache.class);
when(cache.getId()).thenReturn("cache");
queryRequest = mock(QueryRequest.class);
query = mock(Query.class);
when(queryRequest.getQuery()).thenReturn(query);
}
use of ddf.catalog.operation.Query in project ddf by codice.
the class OpenSearchSource method query.
@Override
public SourceResponse query(QueryRequest queryRequest) throws UnsupportedQueryException {
String methodName = "query";
LOGGER.trace(methodName);
final SourceResponse response;
Subject subject = null;
if (queryRequest.hasProperties()) {
Object subjectObj = queryRequest.getProperties().get(SecurityConstants.SECURITY_SUBJECT);
subject = (Subject) subjectObj;
}
Query query = queryRequest.getQuery();
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Received query: {}", query);
FilterTransformer transform = new FilterTransformer();
transform.setIndentation(2);
try {
LOGGER.trace(transform.transform(query));
} catch (TransformerException e) {
LOGGER.debug("Error transforming query to XML", e);
}
}
final OpenSearchFilterVisitorObject openSearchFilterVisitorObject = (OpenSearchFilterVisitorObject) query.accept(openSearchFilterVisitor, new OpenSearchFilterVisitorObject());
final ContextualSearch contextualSearch = openSearchFilterVisitorObject.getContextualSearch();
final SpatialSearch spatialSearch = createCombinedSpatialSearch(openSearchFilterVisitorObject.getPointRadiusSearches(), openSearchFilterVisitorObject.getGeometrySearches(), numMultiPointRadiusVertices, distanceTolerance);
final TemporalFilter temporalSearch = openSearchFilterVisitorObject.getTemporalSearch();
final String idSearch = StringUtils.defaultIfEmpty((String) queryRequest.getPropertyValue(Metacard.ID), openSearchFilterVisitorObject.getId());
final Map<String, String> searchPhraseMap = contextualSearch == null ? new HashMap<>() : contextualSearch.getSearchPhraseMap();
// specified.
if (MapUtils.isNotEmpty(searchPhraseMap) || spatialSearch != null || temporalSearch != null) {
if (StringUtils.isNotEmpty(idSearch)) {
LOGGER.debug("Ignoring the id search {}. Querying the source with the keyword, temporal, and/or spatial OpenSearch parameters", idSearch);
}
final WebClient restWebClient = factory.getWebClientForSubject(subject);
if (restWebClient == null) {
throw new UnsupportedQueryException(UNABLE_TO_CREATE_RWC);
}
response = doOpenSearchQuery(queryRequest, subject, spatialSearch, temporalSearch, searchPhraseMap, restWebClient);
} else if (StringUtils.isNotEmpty(idSearch)) {
final WebClient restWebClient;
try {
restWebClient = newRestClient(query, idSearch, false, subject);
} catch (URISyntaxException e) {
throw new UnsupportedQueryException(UNABLE_TO_CREATE_RWC, e);
}
if (restWebClient == null) {
throw new UnsupportedQueryException(UNABLE_TO_CREATE_RWC);
}
response = doQueryById(queryRequest, restWebClient);
} else {
LOGGER.debug("The OpenSearch Source only supports id searches or searches with certain keyword, \"{}\" temporal, or \"{}\" spatial criteria, but the query was {}. See the documentation for more details about supported searches.", OpenSearchConstants.SUPPORTED_TEMPORAL_SEARCH_TERM, OpenSearchConstants.SUPPORTED_SPATIAL_SEARCH_TERM, query);
throw new UnsupportedQueryException("OpenSearch query parameters could not be created from the query criteria.");
}
setSourceId(response);
LOGGER.trace(methodName);
return response;
}
use of ddf.catalog.operation.Query in project ddf by codice.
the class OpenSearchParserImplTest method populateSearchOptionsWithSubject.
@Test
public void populateSearchOptionsWithSubject() {
SortBy sortBy = new SortByImpl(Result.TEMPORAL, SortOrder.DESCENDING);
Filter filter = mock(Filter.class);
Query query = new QueryImpl(filter, 0, 2000, sortBy, true, 30000);
QueryRequest queryRequest = new QueryRequestImpl(query);
String principalName = "principalName";
Subject subject = getMockSubject(principalName);
openSearchParser.populateSearchOptions(webClient, queryRequest, subject, Arrays.asList("q,src,mr,start,count,mt,dn,lat,lon,radius,bbox,polygon,dtstart,dtend,dateName,filter,sort".split(",")));
assertQueryParameterPopulated(OpenSearchConstants.COUNT);
assertQueryParameterPopulated(OpenSearchConstants.MAX_RESULTS, MAX_RESULTS);
assertQueryParameterPopulated(OpenSearchConstants.MAX_TIMEOUT, TIMEOUT);
assertQueryParameterPopulated(OpenSearchParserImpl.USER_DN, principalName);
assertQueryParameterPopulated(OpenSearchConstants.SORT, DESCENDING_TEMPORAL_SORT);
}
Aggregations