Example usage for org.springframework.web.reactive.resource ResourceTransformerChain transform

List of usage examples for org.springframework.web.reactive.resource ResourceTransformerChain transform

Introduction

In this page you can find the example usage for org.springframework.web.reactive.resource ResourceTransformerChain transform.

Prototype

Mono<Resource> transform(ServerWebExchange exchange, Resource resource);

Source Link

Document

Transform the given resource.

Usage

From source file:org.springframework.web.reactive.resource.AppCacheManifestTransformer.java

@Override
public Mono<Resource> transform(ServerWebExchange exchange, Resource inputResource,
        ResourceTransformerChain chain) {

    return chain.transform(exchange, inputResource).flatMap(outputResource -> {
        String name = outputResource.getFilename();
        if (!this.fileExtension.equals(StringUtils.getFilenameExtension(name))) {
            return Mono.just(outputResource);
        }/*from  w  w  w. j a v a 2 s.com*/
        DataBufferFactory bufferFactory = exchange.getResponse().bufferFactory();
        Flux<DataBuffer> flux = DataBufferUtils.read(outputResource, bufferFactory, StreamUtils.BUFFER_SIZE);
        return DataBufferUtils.join(flux).flatMap(dataBuffer -> {
            CharBuffer charBuffer = DEFAULT_CHARSET.decode(dataBuffer.asByteBuffer());
            DataBufferUtils.release(dataBuffer);
            String content = charBuffer.toString();
            return transform(content, outputResource, chain, exchange);
        });
    });
}

From source file:org.springframework.web.reactive.resource.CachingResourceTransformer.java

@Override
public Mono<Resource> transform(ServerWebExchange exchange, Resource resource,
        ResourceTransformerChain transformerChain) {

    Resource cachedResource = this.cache.get(resource, Resource.class);
    if (cachedResource != null) {
        if (logger.isTraceEnabled()) {
            logger.trace("Found match: " + cachedResource);
        }//from  ww w  . ja  va  2s.com
        return Mono.just(cachedResource);
    }

    return transformerChain.transform(exchange, resource).doOnNext(transformed -> {
        if (logger.isTraceEnabled()) {
            logger.trace("Putting transformed resource in cache: " + transformed);
        }
        this.cache.put(resource, transformed);
    });
}

From source file:org.springframework.web.reactive.resource.CssLinkResourceTransformer.java

@Override
public Mono<Resource> transform(ServerWebExchange exchange, Resource inputResource,
        ResourceTransformerChain transformerChain) {

    return transformerChain.transform(exchange, inputResource).flatMap(ouptputResource -> {
        String filename = ouptputResource.getFilename();
        if (!"css".equals(StringUtils.getFilenameExtension(filename))
                || inputResource instanceof GzipResourceResolver.GzippedResource) {
            return Mono.just(ouptputResource);
        }//from w  w w .j a  va 2 s  . com

        if (logger.isTraceEnabled()) {
            logger.trace("Transforming resource: " + ouptputResource);
        }

        DataBufferFactory bufferFactory = exchange.getResponse().bufferFactory();
        Flux<DataBuffer> flux = DataBufferUtils.read(ouptputResource, bufferFactory, StreamUtils.BUFFER_SIZE);
        return DataBufferUtils.join(flux).flatMap(dataBuffer -> {
            CharBuffer charBuffer = DEFAULT_CHARSET.decode(dataBuffer.asByteBuffer());
            DataBufferUtils.release(dataBuffer);
            String cssContent = charBuffer.toString();
            return transformContent(cssContent, ouptputResource, transformerChain, exchange);
        });
    });
}

From source file:org.springframework.web.reactive.resource.ResourceWebHandler.java

protected Mono<Resource> getResource(ServerWebExchange exchange) {

    String name = HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE;
    PathContainer pathWithinHandler = exchange.getRequiredAttribute(name);
    String path = processPath(pathWithinHandler.value());
    if (!StringUtils.hasText(path) || isInvalidPath(path)) {
        if (logger.isTraceEnabled()) {
            logger.trace("Ignoring invalid resource path [" + path + "]");
        }//w  w w .jav a2s  .co m
        return Mono.empty();
    }

    if (path.contains("%")) {
        try {
            // Use URLDecoder (vs UriUtils) to preserve potentially decoded UTF-8 chars
            if (isInvalidPath(URLDecoder.decode(path, "UTF-8"))) {
                if (logger.isTraceEnabled()) {
                    logger.trace("Ignoring invalid resource path with escape sequences [" + path + "].");
                }
                return Mono.empty();
            }
        } catch (IllegalArgumentException ex) {
            // ignore
        } catch (UnsupportedEncodingException ex) {
            return Mono.error(Exceptions.propagate(ex));
        }
    }

    ResourceResolverChain resolveChain = createResolverChain();
    return resolveChain.resolveResource(exchange, path, getLocations()).flatMap(resource -> {
        ResourceTransformerChain transformerChain = createTransformerChain(resolveChain);
        return transformerChain.transform(exchange, resource);
    });
}