@Path("spaces/{id}/blueprint")
@FenixAPIPublic
public Response spaceBlueprint(@PathParam("id") String oid, final @QueryParam("format") String format) {
final boolean isDwgFormat = format != null && format.equals("dwg");
final Space space = getDomainObject(oid, Space.class);
if (space == null) {
return Response.noContent().build();
}
StreamingOutput stream;
if (isDwgFormat) {
Optional<BlueprintFile> optional = space.getBlueprintFile();
if (!optional.isPresent()) {
optional = SpaceBlueprintsDWGProcessor.getSuroundingSpaceMostRecentBlueprint(space).getBlueprintFile();
}
final InputStream inputStream = optional.get().getStream();
stream = new StreamingOutput() {
@Override
public void write(OutputStream output) throws IOException, WebApplicationException {
ByteStreams.copy(inputStream, output);
}
};
} else {
stream = new StreamingOutput() {
@Override
public void write(OutputStream os) throws IOException, WebApplicationException {
Boolean isToViewOriginalSpaceBlueprint = false;
Boolean viewBlueprintNumbers = true;
Boolean isToViewIdentifications = true;
Boolean isToViewDoorNumbers = false;
BigDecimal scalePercentage = new BigDecimal(100);
DateTime now = new DateTime();
try {
SpaceBlueprintsDWGProcessor.writeBlueprint(space, now, isToViewOriginalSpaceBlueprint,
viewBlueprintNumbers, isToViewIdentifications, isToViewDoorNumbers, scalePercentage, os);
} catch (UnavailableException e) {
throw newApplicationError(Status.BAD_REQUEST, "problem found", "problem found");
}
os.flush();
}
};
}
final String contentType = isDwgFormat ? "application/dwg" : "image/jpeg";
final String filename = space.getExternalId() + (isDwgFormat ? ".dwg" : ".jpg");
return Response.ok(stream, contentType).header("Content-Disposition", "attachment; filename=" + filename).build();
}