private OperationResponseImpl(ModelNode simpleResponse, Map<String, StreamEntry> inputStreams) { this.simpleResponse = simpleResponse; this.inputStreams = inputStreams; // TODO doing this here isn't so nice ModelNode header = simpleResponse.get(RESPONSE_HEADERS, ATTACHED_STREAMS); header.setEmptyList(); for (StreamEntry entry : inputStreams.values()) { ModelNode streamNode = new ModelNode(); streamNode.get(UUID).set(entry.getUUID()); streamNode.get(MIME_TYPE).set(entry.getMimeType()); header.add(streamNode); } }
private OperationResponseImpl(ModelNode simpleResponse, Map<String, StreamEntry> inputStreams) { this.simpleResponse = simpleResponse; this.inputStreams = inputStreams; // TODO doing this here isn't so nice ModelNode header = simpleResponse.get(RESPONSE_HEADERS, ATTACHED_STREAMS); header.setEmptyList(); for (StreamEntry entry : inputStreams.values()) { ModelNode streamNode = new ModelNode(); streamNode.get(UUID).set(entry.getUUID()); streamNode.get(MIME_TYPE).set(entry.getMimeType()); header.add(streamNode); } }
private static String determineMimeType(OperationResponse.StreamEntry entry, HttpServerExchange exchange) { // We see if the type provided by the response "matches" the ACCEPT header; if yes, use it // If not, use application/octet-stream to trigger the browser to treat it as a download String entryType = entry.getMimeType(); HeaderValues headerValues = exchange.getRequestHeaders().get(Headers.ACCEPT); if (headerValues == null || headerValues.size() == 0) { // The browser doesn't care return entryType; } String wildCard = null; int slash = entryType.indexOf('/'); if (slash > 0) { wildCard = entryType.substring(0, slash) + "/*"; } for (String acceptable : headerValues) { if ("*/*".equals(acceptable) || acceptable.contains(entryType) || (wildCard != null && acceptable.contains(wildCard))) { return entryType; } } return "application/octet-stream"; }
/** * Deal with streams attached to an operation response from a proxied domain process. * * @param context the context of the operation * @param responseNode the DMR response from the proxied process * @param streams the streams associated with the response */ public static void handleDomainOperationResponseStreams(final OperationContext context, final ModelNode responseNode, final List<OperationResponse.StreamEntry> streams) { if (responseNode.hasDefined(RESPONSE_HEADERS)) { ModelNode responseHeaders = responseNode.get(RESPONSE_HEADERS); // Strip out any stream header as the header created by this process is what counts responseHeaders.remove(ATTACHED_STREAMS); if (responseHeaders.asInt() == 0) { responseNode.remove(RESPONSE_HEADERS); } } for (OperationResponse.StreamEntry streamEntry : streams) { context.attachResultStream(streamEntry.getUUID(), streamEntry.getMimeType(), streamEntry.getStream()); } }
/** * Deal with streams attached to an operation response from a proxied domain process. * * @param context the context of the operation * @param responseNode the DMR response from the proxied process * @param streams the streams associated with the response */ public static void handleDomainOperationResponseStreams(final OperationContext context, final ModelNode responseNode, final List<OperationResponse.StreamEntry> streams) { if (responseNode.hasDefined(RESPONSE_HEADERS)) { ModelNode responseHeaders = responseNode.get(RESPONSE_HEADERS); // Strip out any stream header as the header created by this process is what counts responseHeaders.remove(ATTACHED_STREAMS); if (responseHeaders.asInt() == 0) { responseNode.remove(RESPONSE_HEADERS); } } for (OperationResponse.StreamEntry streamEntry : streams) { context.attachResultStream(streamEntry.getUUID(), streamEntry.getMimeType(), streamEntry.getStream()); } }
private void saveContent(CommandContext ctx, OperationResponse operationResponse, String uuid, Path filepath) throws IOException { OperationResponse.StreamEntry stream = operationResponse.getInputStream(uuid); if (stream.getMimeType() != null && stream.getMimeType().contains(format)) { try (InputStream in = stream.getStream()) { Files.copy(in, filepath, StandardCopyOption.REPLACE_EXISTING); ctx.printLine("Report saved in " + filepath); } } }
private void saveContent(CommandContext ctx, OperationResponse operationResponse, String uuid, Path filepath) throws IOException { OperationResponse.StreamEntry stream = operationResponse.getInputStream(uuid); if (stream.getMimeType() != null && stream.getMimeType().contains(format)) { try (InputStream in = stream.getStream()) { Files.copy(in, filepath, StandardCopyOption.REPLACE_EXISTING); ctx.printLine("Report saved in " + filepath); } } }