use of ddf.catalog.operation.ResourceResponse in project ddf by codice.
the class TestOpenSearchSource method testRetrieveResource.
/**
* Basic retrieve product case. Tests the url sent to the connection is correct.
*
* @throws ResourceNotSupportedException
* @throws IOException
* @throws ResourceNotFoundException
*/
@Test
public void testRetrieveResource() throws ResourceNotSupportedException, IOException, ResourceNotFoundException {
// given
FirstArgumentCapture answer = new FirstArgumentCapture(getBinaryData());
OpenSearchSource source = givenSource(answer);
Map<String, Serializable> requestProperties = new HashMap<String, Serializable>();
requestProperties.put(Metacard.ID, SAMPLE_ID);
// when
ResourceResponse response = source.retrieveResource(null, requestProperties);
Assert.assertEquals(3, response.getResource().getByteArray().length);
}
use of ddf.catalog.operation.ResourceResponse in project ddf by codice.
the class TestResourceMetacardTransformer method getResourceResponse.
private ResourceResponse getResourceResponse(Resource resource) {
ResourceResponse resourceResponse = mock(ResourceResponse.class);
when(resourceResponse.getResource()).thenReturn(resource);
return resourceResponse;
}
use of ddf.catalog.operation.ResourceResponse in project ddf by codice.
the class URLResourceReader method retrieveHttpProduct.
private ResourceResponse retrieveHttpProduct(URI resourceURI, String productName, String bytesToSkip, Map<String, Serializable> properties) throws ResourceNotFoundException {
try {
LOGGER.debug("Opening connection to: {}", resourceURI.toString());
WebClient client = getWebClient(resourceURI.toString(), properties);
Object subjectObj = properties.get(SecurityConstants.SECURITY_SUBJECT);
if (subjectObj != null) {
Subject subject = (Subject) subjectObj;
LOGGER.debug("Setting Subject on webclient: {}", subject);
RestSecurity.setSubjectOnClient(subject, client);
}
Response response = client.get();
MultivaluedMap<String, Object> headers = response.getHeaders();
List<Object> cdHeaders = headers.get(HttpHeaders.CONTENT_DISPOSITION);
if (cdHeaders != null && !cdHeaders.isEmpty()) {
String contentHeader = (String) cdHeaders.get(0);
productName = StringUtils.defaultIfBlank(handleContentDispositionHeader(contentHeader), productName);
}
String mimeType = getMimeType(resourceURI, productName);
Response clientResponse = client.get();
InputStream is = null;
Object entityObj = clientResponse.getEntity();
if (entityObj instanceof InputStream) {
is = (InputStream) entityObj;
if (Response.Status.OK.getStatusCode() != clientResponse.getStatus() && Response.Status.PARTIAL_CONTENT.getStatusCode() != clientResponse.getStatus()) {
String error = null;
try {
if (is != null) {
error = IOUtils.toString(is);
}
} catch (IOException ioe) {
LOGGER.debug("Could not convert error message to a string for output.", ioe);
}
String errorMsg = "Received error code while retrieving resource (status " + clientResponse.getStatus() + "): " + error;
throw new ResourceNotFoundException(errorMsg);
}
} else {
throw new ResourceNotFoundException("Received null response while retrieving resource.");
}
long responseBytesSkipped = 0L;
if (headers.getFirst(HttpHeaders.CONTENT_RANGE) != null) {
String contentRangeHeader = String.valueOf(headers.getFirst(HttpHeaders.CONTENT_RANGE));
responseBytesSkipped = Long.parseLong(StringUtils.substringBetween(contentRangeHeader.toLowerCase(), "bytes ", "-"));
}
alignStream(is, Long.parseLong(bytesToSkip), responseBytesSkipped);
return new ResourceResponseImpl(new ResourceImpl(new BufferedInputStream(is), mimeType, FilenameUtils.getName(productName)));
} catch (MimeTypeResolutionException | IOException | WebApplicationException e) {
LOGGER.info("Error retrieving resource", e);
throw new ResourceNotFoundException("Unable to retrieve resource at: " + resourceURI.toString(), e);
}
}
use of ddf.catalog.operation.ResourceResponse in project ddf by codice.
the class ResourceReaderTest method doVerification.
private ResourceResponse doVerification(URI uri, String filename, String expectedMimeType, Map<String, Serializable> arguments) throws URISyntaxException, IOException, ResourceNotFoundException {
URLResourceReader resourceReader = new TestURLResourceReader(mimeTypeMapper);
resourceReader.setRootResourceDirectories(ImmutableSet.of(ABSOLUTE_PATH + TEST_PATH));
// Test using the URL ResourceReader
LOGGER.info("URI: {}", uri.toString());
ResourceResponse resourceResponse = resourceReader.retrieveResource(uri, arguments);
Resource resource = resourceResponse.getResource();
assert (resource != null);
LOGGER.info("MimeType: {}", resource.getMimeType());
LOGGER.info("Got resource: {}", resource.getName());
String name = resource.getName();
assertNotNull(name);
assertThat(name, is(filename));
assertTrue(resource.getMimeType().toString().contains(expectedMimeType));
return resourceResponse;
}
use of ddf.catalog.operation.ResourceResponse in project ddf by codice.
the class ResourceReaderTest method testNameInContentDisposition.
@Test
public void testNameInContentDisposition() throws Exception {
URI uri = new URI(HTTP_SCHEME_PLUS_SEP + HOST + TEST_PATH + BAD_FILE_NAME);
Response mockResponse = mock(Response.class);
when(mockWebClient.get()).thenReturn(mockResponse);
MultivaluedMap<String, Object> map = new MultivaluedHashMap<>();
map.put(HttpHeaders.CONTENT_DISPOSITION, Arrays.<Object>asList("inline; filename=\"" + JPEG_FILE_NAME_1 + "\""));
when(mockResponse.getHeaders()).thenReturn(map);
when(mockResponse.getStatus()).thenReturn(Response.Status.OK.getStatusCode());
when(mockResponse.getEntity()).thenReturn(getBinaryData());
ResourceResponse response = verifyFileFromURLResourceReader(uri, JPEG_FILE_NAME_1, JPEG_MIME_TYPE, null);
// verify that we got the entire resource
assertEquals(5, response.getResource().getByteArray().length);
}
Aggregations