use of ddf.catalog.data.impl.ResultImpl in project ddf by codice.
the class TestRegistryStore method testRegistryGetIdNotNull.
@Test
public void testRegistryGetIdNotNull() throws Exception {
Filter filter = filterBuilder.attribute(Metacard.TAGS).is().like().text(RegistryConstants.REGISTRY_TAG);
queryResults.add(new ResultImpl(getDefaultMetacard()));
QueryRequest testRequest = new QueryRequestImpl(new QueryImpl(filter));
registryStore.setRegistryId("registryId");
registryStore.setId("d");
SourceResponse answer = registryStore.query(testRequest);
List<Result> testResults = answer.getResults();
assertThat(testResults.size(), is(1));
}
use of ddf.catalog.data.impl.ResultImpl in project ddf by codice.
the class WfsSource method query.
@Override
public SourceResponse query(QueryRequest request) throws UnsupportedQueryException {
Wfs wfs = factory.getClient();
Query query = request.getQuery();
LOGGER.debug("WFS Source {}: Received query: \n{}", getId(), query);
if (query.getStartIndex() < 1) {
throw new UnsupportedQueryException("Start Index is one-based and must be an integer greater than 0; should not be [" + query.getStartIndex() + "]");
}
SourceResponseImpl simpleResponse = null;
// WFS v1.0 specification does not support response indicating total
// number
// of features satisfying query constraints.
// Hence, we save off the original
// page size from the query request and create a copy of the query,
// changing
// the page size by a multiplier and the current page number of results
// so that
// more features are returned as the user pages through the results,
// getting
// a better sense of how many total features exist that satisfy the
// query.
int origPageSize = query.getPageSize();
if (origPageSize <= 0 || origPageSize > WFS_MAX_FEATURES_RETURNED) {
origPageSize = WFS_MAX_FEATURES_RETURNED;
}
QueryImpl modifiedQuery = new QueryImpl(query);
// Determine current page number of results being requested.
// Example: startIndex = 21 and origPageSize=10, then requesting to go
// to page number 3.
// Note: Integer division will truncate remainders so 4 / 2 will return 0 and not .5. Also,
// pages are numbered 1 - N so we add 1 to the result
int pageNumber = query.getStartIndex() / origPageSize + 1;
// Modified page size is based on current page number and a constant
// multiplier,
// but limited to a max value to prevent time consuming queries just to
// get an
// approximation of total number of features.
// So as page number increases the pageSize increases.
// Example:
// pageNumber=2, modifiedPageSize=60
// pageNumber=3, modifiedPageSize=90
int modifiedPageSize = Math.min(pageNumber * origPageSize * WFS_QUERY_PAGE_SIZE_MULTIPLIER, WFS_MAX_FEATURES_RETURNED);
LOGGER.debug("WFS Source {}: modified page size = {}", getId(), modifiedPageSize);
modifiedQuery.setPageSize(modifiedPageSize);
GetFeatureType getFeature = buildGetFeatureRequest(modifiedQuery);
try {
LOGGER.debug("WFS Source {}: Sending query ...", getId());
WfsFeatureCollection featureCollection = wfs.getFeature(getFeature);
if (featureCollection == null) {
throw new UnsupportedQueryException("Invalid results returned from server");
}
availabilityTask.updateLastAvailableTimestamp(System.currentTimeMillis());
LOGGER.debug("WFS Source {}: Received featureCollection with {} metacards.", getId(), featureCollection.getFeatureMembers().size());
// Only return the number of results originally asked for in the
// query, or the entire list of results if it is smaller than the
// original page size.
int numberOfResultsToReturn = Math.min(origPageSize, featureCollection.getFeatureMembers().size());
List<Result> results = new ArrayList<Result>(numberOfResultsToReturn);
int stopIndex = Math.min((origPageSize * pageNumber) + query.getStartIndex(), featureCollection.getFeatureMembers().size() + 1);
LOGGER.debug("WFS Source {}: startIndex = {}, stopIndex = {}, origPageSize = {}, pageNumber = {}", getId(), query.getStartIndex(), stopIndex, origPageSize, pageNumber);
for (int i = query.getStartIndex(); i < stopIndex; i++) {
Metacard mc = featureCollection.getFeatureMembers().get(i - 1);
mc = transform(mc, DEFAULT_WFS_TRANSFORMER_ID);
Result result = new ResultImpl(mc);
results.add(result);
debugResult(result);
}
Long totalHits = (long) featureCollection.getFeatureMembers().size();
simpleResponse = new SourceResponseImpl(request, results, totalHits);
} catch (WfsException wfse) {
LOGGER.debug(WFS_ERROR_MESSAGE, wfse);
throw new UnsupportedQueryException("Error received from WFS Server", wfse);
} catch (Exception ce) {
String msg = handleClientException(ce);
throw new UnsupportedQueryException(msg, ce);
}
return simpleResponse;
}
use of ddf.catalog.data.impl.ResultImpl in project ddf by codice.
the class TestAtomTransformer method testSimple.
@Test
public void testSimple() throws CatalogTransformerException, IOException, XpathException, SAXException {
// given
MetacardTransformer metacardTransformer = getXmlMetacardTransformerStub();
Action viewAction = mock(Action.class);
when(viewAction.getUrl()).thenReturn(new URL("http://host:80/" + SAMPLE_ID));
ActionProvider viewActionProvider = mock(ActionProvider.class);
when(viewActionProvider.getAction(isA(Metacard.class))).thenReturn(viewAction);
ActionProvider resourceActionProvider = mock(ActionProvider.class);
when(resourceActionProvider.getAction(isA(Metacard.class))).thenReturn(viewAction);
ActionProvider thumbnailActionProvider = mock(ActionProvider.class);
when(thumbnailActionProvider.getAction(isA(Metacard.class))).thenReturn(viewAction);
AtomTransformer transformer = new AtomTransformer();
transformer.setViewMetacardActionProvider(viewActionProvider);
transformer.setResourceActionProvider(resourceActionProvider);
transformer.setMetacardTransformer(metacardTransformer);
transformer.setThumbnailActionProvider(thumbnailActionProvider);
setDefaultSystemConfiguration();
SourceResponse response1 = mock(SourceResponse.class);
when(response1.getHits()).thenReturn(new Long(1));
when(response1.getRequest()).thenReturn(getStubRequest());
ResultImpl result1 = new ResultImpl();
MetacardStub metacard = new MetacardStub("");
metacard.setId(SAMPLE_ID);
metacard.setSourceId(SAMPLE_SOURCE_ID);
metacard.setCreatedDate(SAMPLE_DATE_TIME.toDate());
metacard.setModifiedDate(SAMPLE_DATE_TIME.toDate());
result1.setMetacard(metacard);
when(response1.getResults()).thenReturn(Arrays.asList((Result) result1));
SourceResponse response = response1;
Double relevanceScore = 0.3345;
result1.setRelevanceScore(relevanceScore);
// when
BinaryContent binaryContent = transformer.transform(response, null);
// then
assertThat(binaryContent.getMimeType(), is(AtomTransformer.MIME_TYPE));
byte[] bytes = binaryContent.getByteArray();
/* used to visualize */
IOUtils.write(bytes, new FileOutputStream(new File(TARGET_FOLDER + getMethodName() + ATOM_EXTENSION)));
String output = new String(bytes);
assertFeedCompliant(output);
assertEntryCompliant(output);
validateAgainstAtomSchema(bytes);
/* feed */
assertBasicFeedInfo(output, "1");
/* entry */
assertXpathEvaluatesTo(SAMPLE_SOURCE_ID, "/atom:feed/atom:entry/fs:resultSource/@fs:sourceId", output);
assertXpathEvaluatesTo("", "/atom:feed/atom:entry/fs:resultSource", output);
assertXpathEvaluatesTo(AtomTransformer.URN_CATALOG_ID + SAMPLE_ID, "/atom:feed/atom:entry/atom:id", output);
assertXpathEvaluatesTo(MetacardStub.DEFAULT_TITLE, "/atom:feed/atom:entry/atom:title", output);
assertXpathEvaluatesTo(Double.toString(relevanceScore), "/atom:feed/atom:entry/relevance:score", output);
assertXpathExists("/atom:feed/atom:entry/atom:content", output);
assertXpathEvaluatesTo(atomDateFormat.format(SAMPLE_DATE_TIME.toDate()), "/atom:feed/atom:entry/atom:published", output);
assertXpathEvaluatesTo(atomDateFormat.format(SAMPLE_DATE_TIME.toDate()), "/atom:feed/atom:entry/atom:updated", output);
assertXpathEvaluatesTo("application/xml", "/atom:feed/atom:entry/atom:content/@type", output);
assertXpathEvaluatesTo(MetacardStub.DEFAULT_TYPE, "/atom:feed/atom:entry/atom:category/@term", output);
assertXpathEvaluatesTo("1", "count(/atom:feed/atom:entry/georss:where)", output);
assertXpathEvaluatesTo("1", "count(/atom:feed/atom:entry/georss:where/gml:Point)", output);
assertXpathEvaluatesTo("56.3 13.3", "/atom:feed/atom:entry/georss:where/gml:Point", output);
assertXpathEvaluatesTo("3", "count(/atom:feed/atom:entry/atom:link)", output);
assertXpathExists("/atom:feed/atom:entry/atom:link[@rel='alternate']", output);
assertXpathExists("/atom:feed/atom:entry/atom:link[@rel='related']", output);
assertXpathEvaluatesTo("http://host:80/" + SAMPLE_ID, "/atom:feed/atom:entry/atom:link/@href", output);
}
use of ddf.catalog.data.impl.ResultImpl in project ddf by codice.
the class TestAtomTransformer method testEntryElementsComplyToAtomSpecification.
/**
* The following rules must be followed in order to be compliant with the Atom specification as
* defined by http://tools.ietf.org/html/rfc4287#section-4.1.2 <br/>
* "The following child elements are defined by this specification (note that the presence of
* some of these elements is required):
* <p>
* <li/>atom:entry elements MUST contain one or more atom:author elements, unless the atom:entry
* contains an atom:source element that contains an atom:author element or, in an Atom Feed
* Document, the atom:feed element contains an atom:author element itself.
* <p>
* <li/>atom:entry elements MAY contain any number of atom:category elements.
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:content element.
* <p>
* <li/>atom:entry elements MAY contain any number of atom:contributor elements.
* <p>
* <li/>atom:entry elements MUST contain exactly one atom:id element.
* <p>
* <li/>atom:entry elements that contain no child atom:content element MUST contain at least one
* atom:link element with a rel attribute value of "alternate".
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:link element with a rel
* attribute value of "alternate" that has the same combination of type and hreflang attribute
* values.
* <p>
* <li/>atom:entry elements MAY contain additional atom:link elements beyond those described
* above.
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:published element.
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:rights element.
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:source element.
* <p>
* <li/>atom:entry elements MUST contain an atom:summary element in either of the following
* cases:
* <p>
* <ul>
* the atom:entry contains an atom:content that has a "src" attribute (and is thus empty).
* </ul>
* <p>
* <ul>
* the atom:entry contains content that is encoded in Base64; i.e., the "type" attribute of
* atom:content is a MIME media type [MIMEREG], but is not an XML media type [RFC3023], does not
* begin with "text/", and does not end with "/xml" or "+xml".
* </ul>
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:summary element.
* <p>
* <li/>atom:entry elements MUST contain exactly one atom:title element.
* <p>
* <li/>atom:entry elements MUST contain exactly one atom:updated element."
*
* @throws CatalogTransformerException
* @throws IOException
* @throws SAXException
* @throws XpathException
*/
@Test
public void testEntryElementsComplyToAtomSpecification() throws IOException, CatalogTransformerException, XpathException, SAXException {
// given
AtomTransformer transformer = new AtomTransformer();
MetacardTransformer metacardTransformer = getXmlMetacardTransformerStub();
transformer.setMetacardTransformer(metacardTransformer);
setDefaultSystemConfiguration();
SourceResponse response = mock(SourceResponse.class);
when(response.getRequest()).thenReturn(getStubRequest());
ResultImpl result1 = new ResultImpl();
ResultImpl result2 = new ResultImpl();
MetacardStub metacard = new MetacardStub("");
metacard.setId(SAMPLE_ID);
MetacardStub metacard2 = new MetacardStub("");
metacard2.setId(SAMPLE_ID + 1);
result1.setMetacard(metacard);
result2.setMetacard(metacard2);
when(response.getResults()).thenReturn(Arrays.asList((Result) result1, result2));
// when
BinaryContent binaryContent = transformer.transform(response, null);
// then
byte[] bytes = binaryContent.getByteArray();
/* used to visualize */
IOUtils.write(bytes, new FileOutputStream(new File(TARGET_FOLDER + getMethodName() + ATOM_EXTENSION)));
String output = new String(bytes);
assertEntryCompliant(output);
}
use of ddf.catalog.data.impl.ResultImpl in project ddf by codice.
the class TestAtomTransformer method testNoSiteName.
@Test
public void testNoSiteName() throws IOException, CatalogTransformerException, XpathException, SAXException {
// given
MetacardTransformer metacardTransformer = getXmlMetacardTransformerStub();
AtomTransformer transformer = getConfiguredAtomTransformer(metacardTransformer, true);
SourceResponse response1 = mock(SourceResponse.class);
when(response1.getHits()).thenReturn(new Long(1));
when(response1.getRequest()).thenReturn(getStubRequest());
ResultImpl result1 = new ResultImpl();
MetacardStub metacard = new MetacardStub("");
metacard.setId(SAMPLE_ID);
metacard.setSourceId(null);
result1.setMetacard(metacard);
when(response1.getResults()).thenReturn(Arrays.asList((Result) result1));
SourceResponse response = response1;
Double relevanceScore = 0.3345;
result1.setRelevanceScore(relevanceScore);
// when
BinaryContent binaryContent = transformer.transform(response, null);
// then
assertThat(binaryContent.getMimeType(), is(AtomTransformer.MIME_TYPE));
byte[] bytes = binaryContent.getByteArray();
/* used to visualize */
IOUtils.write(bytes, new FileOutputStream(new File(TARGET_FOLDER + getMethodName() + ATOM_EXTENSION)));
String output = new String(bytes);
assertFeedCompliant(output);
assertEntryCompliant(output);
validateAgainstAtomSchema(bytes);
assertXpathEvaluatesTo(AtomTransformer.DEFAULT_SOURCE_ID, "/atom:feed/atom:entry/fs:resultSource/@fs:sourceId", output);
}
Aggregations