use of javax.ws.rs.core.StreamingOutput in project onebusaway-application-modules by camsys.
the class AlertsFromRssResource method getAll.
@Path("/service-alerts")
@GET
@Produces("application/x-google-protobuff")
public Response getAll() {
final FeedMessage serviceAlertFeed = _alertsService.getServlceAlertFeed();
if (serviceAlertFeed == null) {
return Response.ok().build();
}
StreamingOutput stream = new StreamingOutput() {
@Override
public void write(OutputStream os) throws IOException, WebApplicationException {
// Service Alerts know how to write themselves as protocol buffers
serviceAlertFeed.writeTo(os);
}
};
Response response = Response.ok(stream).build();
return response;
}
use of javax.ws.rs.core.StreamingOutput in project lobcder by skoulouzis.
the class Archive method getZip.
/**
* Generates a zip archive of folder
*
* @param path the folder name
* @return the stream of the archive
*/
@GET
@Path("/getzip/{name:.+}")
public Response getZip(@PathParam("name") String path) {
class Folder {
private String path;
private LogicalData logicalData;
private Folder(String path, LogicalData logicalData) {
this.path = path;
this.logicalData = logicalData;
}
/**
* @return the path
*/
public String getPath() {
return path;
}
/**
* @param path the path to set
*/
public void setPath(String path) {
this.path = path;
}
/**
* @return the logicalData
*/
public LogicalData getLogicalData() {
return logicalData;
}
/**
* @param logicalData the logicalData to set
*/
public void setLogicalData(LogicalData logicalData) {
this.logicalData = logicalData;
}
}
final String rootPath;
if (path.endsWith("/")) {
rootPath = path.substring(0, path.length() - 1);
} else {
rootPath = path;
}
int index = rootPath.lastIndexOf('/');
final String rootName;
if (index != -1) {
rootName = rootPath.substring(index + 1);
} else {
rootName = rootPath;
}
if (rootName.isEmpty()) {
throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
}
final MyPrincipal principal = (MyPrincipal) request.getAttribute("myprincipal");
final JDBCatalogue catalogue = getCatalogue();
StreamingOutput result = new StreamingOutput() {
@Override
public void write(OutputStream out) throws IOException, WebApplicationException {
Stack<Folder> folders;
try (Connection connection = catalogue.getConnection()) {
LogicalData rootElement = catalogue.getLogicalDataByPath(io.milton.common.Path.path(rootPath), connection);
if (rootElement == null) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
try (ZipOutputStream zip = new ZipOutputStream(out)) {
ZipEntry ze;
folders = new Stack<>();
Permissions p = catalogue.getPermissions(rootElement.getUid(), rootElement.getOwner(), connection);
if (principal.canRead(p)) {
if (rootElement.isFolder()) {
folders.add(new Folder(rootName, rootElement));
} else {
ze = new ZipEntry(rootName);
zip.putNextEntry(ze);
List<PDRIDescr> pdris = catalogue.getPdriDescrByGroupId(rootElement.getPdriGroupId());
copyStream(pdris, zip);
zip.closeEntry();
getCatalogue().addViewForRes(rootElement.getUid());
}
}
while (!folders.isEmpty()) {
Folder folder = folders.pop();
ze = new ZipEntry(folder.getPath() + "/");
ze.setTime(folder.getLogicalData().getModifiedDate());
zip.putNextEntry(ze);
getCatalogue().addViewForRes(folder.getLogicalData().getUid());
for (LogicalData ld : catalogue.getChildrenByParentRef(folder.getLogicalData().getUid(), connection)) {
Permissions entry_p = catalogue.getPermissions(ld.getUid(), ld.getOwner(), connection);
if (principal.canRead(entry_p)) {
if (ld.isFolder()) {
folders.push(new Folder(folder.getPath() + "/" + ld.getName(), ld));
} else {
ze = new ZipEntry(folder.getPath() + "/" + ld.getName());
ze.setTime(ld.getModifiedDate());
zip.putNextEntry(ze);
copyStream(catalogue.getPdriDescrByGroupId(ld.getPdriGroupId()), zip);
zip.closeEntry();
getCatalogue().addViewForRes(ld.getUid());
}
}
}
}
}
} catch (Exception e) {
if (e instanceof WebApplicationException) {
throw (WebApplicationException) e;
} else {
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
}
}
}
};
Response.ResponseBuilder response = Response.ok(result, "application/zip");
return response.header("Content-Disposition", "attachment; filename=" + rootName + ".zip").build();
}
use of javax.ws.rs.core.StreamingOutput in project plugin-prov by ligoj.
the class TerraformResourceTest method applyTerraformInternal.
@Test
public void applyTerraformInternal() throws IOException, InterruptedException {
final File log = new File(MOCK_PATH, "main.log");
final File tf = new File(MOCK_PATH, "main.tf");
final TerraformResource resource = newResource(Mockito.mock(Terraforming.class), false);
applyTerraform(resource);
// Synchronization of sub processes
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> tf.exists() && log.exists() && IOUtils.toString(log.toURI(), "UTF-8").contains("show"));
Thread.yield();
Assertions.assertTrue(tf.exists());
Assertions.assertTrue(log.exists());
final String logString = IOUtils.toString(log.toURI(), "UTF-8");
Assertions.assertTrue(logString.contains("plan"));
Assertions.assertTrue(logString.contains("apply"));
Assertions.assertTrue(logString.contains("show"));
// Check the log file is well handled
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
((StreamingOutput) resource.getTerraformLog(subscription).getEntity()).write(bos);
Assertions.assertEquals(logString, bos.toString(StandardCharsets.UTF_8));
// Check the task status
final TerraformStatus task = resource.runner.getTask("service:prov:test:account");
Assertions.assertTrue(task.isFinished());
Assertions.assertFalse(task.isFailed());
Assertions.assertNotNull(task.getStart());
Assertions.assertNotNull(task.getAuthor());
Assertions.assertEquals(DEFAULT_USER, task.getAuthor());
Assertions.assertEquals("service:prov:test:account", task.getLocked().getId());
Assertions.assertNotNull(task.getEnd());
Assertions.assertEquals(TerraformStep.SHOW, task.getStep());
}
use of javax.ws.rs.core.StreamingOutput in project plugin-prov by ligoj.
the class TerraformResourceTest method getTerraform.
@Test
public void getTerraform() throws IOException {
final Terraforming terraforming = Mockito.mock(Terraforming.class);
((StreamingOutput) newResource(terraforming).getTerraform(subscription, "any.tf").getEntity()).write(new ByteArrayOutputStream());
Mockito.verify(terraforming).terraform(ArgumentMatchers.any(OutputStream.class), ArgumentMatchers.eq(subscription), ArgumentMatchers.any(QuoteVo.class));
// Coverage only
Assertions.assertEquals(TerraformStep.PLAN, TerraformStep.valueOf(TerraformStep.values()[0].name()));
}
use of javax.ws.rs.core.StreamingOutput in project OpenTripPlanner by opentripplanner.
the class Renderer method generateStreamingImageResponse.
public static Response generateStreamingImageResponse(final BufferedImage image, final MIMEImageFormat format) {
if (image == null) {
LOG.warn("response image is null");
}
StreamingOutput streamingOutput = new StreamingOutput() {
public void write(OutputStream outStream) {
try {
long t0 = System.currentTimeMillis();
ImageIO.write(image, format.type, outStream);
long t1 = System.currentTimeMillis();
LOG.debug("wrote image in {}msec", (int) (t1 - t0));
} catch (Exception e) {
LOG.error("exception while preparing image : {}", e.getMessage());
throw new WebApplicationException(e);
}
}
};
CacheControl cc = new CacheControl();
cc.setMaxAge(3600);
cc.setNoCache(false);
return Response.ok(streamingOutput).type(format.toString()).cacheControl(cc).build();
}
Aggregations