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

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

Introduction

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

Prototype

Resource transform(HttpServletRequest request, Resource resource) throws IOException;

Source Link

Document

Transform the given resource.

Usage

From source file:org.broadleafcommerce.common.web.resource.transformer.BroadleafCachingResourceTransformer.java

@Override
public Resource transform(HttpServletRequest request, Resource resource,
        ResourceTransformerChain transformerChain) throws IOException {
    if (resourceTransformerCachingEnabled) {
        return super.transform(request, resource, transformerChain);
    } else {/*from   www.ja v a2  s . com*/
        return transformerChain.transform(request, resource);
    }
}

From source file:org.springframework.web.servlet.resource.AppCacheManifestTransfomer.java

@Override
public Resource transform(HttpServletRequest request, Resource resource,
        ResourceTransformerChain transformerChain) throws IOException {
    resource = transformerChain.transform(request, resource);

    String filename = resource.getFilename();
    if (!this.fileExtension.equals(StringUtils.getFilenameExtension(filename))) {
        return resource;
    }/*from w w w . j a va2  s .  com*/

    byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
    String content = new String(bytes, DEFAULT_CHARSET);

    if (!content.startsWith(MANIFEST_HEADER)) {
        if (logger.isTraceEnabled()) {
            logger.trace("AppCache manifest does not start with 'CACHE MANIFEST', skipping: " + resource);
        }
        return resource;
    }

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

    StringWriter contentWriter = new StringWriter();
    HashBuilder hashBuilder = new HashBuilder(content.length());

    Scanner scanner = new Scanner(content);
    SectionTransformer currentTransformer = this.sectionTransformers.get(MANIFEST_HEADER);
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        if (this.sectionTransformers.containsKey(line.trim())) {
            currentTransformer = this.sectionTransformers.get(line.trim());
            contentWriter.write(line + "\n");
            hashBuilder.appendString(line);
        } else {
            contentWriter
                    .write(currentTransformer.transform(line, hashBuilder, resource, transformerChain) + "\n");
        }
    }

    String hash = hashBuilder.build();
    contentWriter.write("\n" + "# Hash: " + hash);
    if (logger.isTraceEnabled()) {
        logger.trace("AppCache file: [" + resource.getFilename() + "] Hash: [" + hash + "]");
    }

    return new TransformedResource(resource, contentWriter.toString().getBytes(DEFAULT_CHARSET));
}

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

@Override
public Resource transform(HttpServletRequest request, Resource resource, ResourceTransformerChain chain)
        throws IOException {

    resource = chain.transform(request, resource);
    if (!this.fileExtension.equals(StringUtils.getFilenameExtension(resource.getFilename()))) {
        return resource;
    }//  w w w. ja va2s.  c  om

    byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
    String content = new String(bytes, DEFAULT_CHARSET);

    if (!content.startsWith(MANIFEST_HEADER)) {
        if (logger.isTraceEnabled()) {
            logger.trace("Manifest should start with 'CACHE MANIFEST', skip: " + resource);
        }
        return resource;
    }

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

    Scanner scanner = new Scanner(content);
    LineInfo previous = null;
    LineAggregator aggregator = new LineAggregator(resource, content);

    while (scanner.hasNext()) {
        String line = scanner.nextLine();
        LineInfo current = new LineInfo(line, previous);
        LineOutput lineOutput = processLine(current, request, resource, chain);
        aggregator.add(lineOutput);
        previous = current;
    }

    return aggregator.createResource();
}

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

@Override
public Resource transform(HttpServletRequest request, Resource resource,
        ResourceTransformerChain transformerChain) throws IOException {

    Resource transformed = this.cache.get(resource, Resource.class);
    if (transformed != null) {
        if (logger.isTraceEnabled()) {
            logger.trace("Found match: " + transformed);
        }//from   ww w.j  ava 2 s.c  o  m
        return transformed;
    }

    transformed = transformerChain.transform(request, resource);

    if (logger.isTraceEnabled()) {
        logger.trace("Putting transformed resource in cache: " + transformed);
    }
    this.cache.put(resource, transformed);

    return transformed;
}

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

@Override
public Resource transform(HttpServletRequest request, Resource resource,
        ResourceTransformerChain transformerChain) throws IOException {

    resource = transformerChain.transform(request, resource);

    String filename = resource.getFilename();
    if (!"css".equals(StringUtils.getFilenameExtension(filename))
            || resource instanceof GzipResourceResolver.GzippedResource) {
        return resource;
    }/*from w w w. j av a 2  s.  c om*/

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

    byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
    String content = new String(bytes, DEFAULT_CHARSET);

    SortedSet<ContentChunkInfo> links = new TreeSet<>();
    for (LinkParser parser : this.linkParsers) {
        parser.parse(content, links);
    }

    if (links.isEmpty()) {
        if (logger.isTraceEnabled()) {
            logger.trace("No links found.");
        }
        return resource;
    }

    int index = 0;
    StringWriter writer = new StringWriter();
    for (ContentChunkInfo linkContentChunkInfo : links) {
        writer.write(content.substring(index, linkContentChunkInfo.getStart()));
        String link = content.substring(linkContentChunkInfo.getStart(), linkContentChunkInfo.getEnd());
        String newLink = null;
        if (!hasScheme(link)) {
            String absolutePath = toAbsolutePath(link, request);
            newLink = resolveUrlPath(absolutePath, request, resource, transformerChain);
        }
        if (logger.isTraceEnabled()) {
            if (newLink != null && !newLink.equals(link)) {
                logger.trace("Link modified: " + newLink + " (original: " + link + ")");
            } else {
                logger.trace("Link not modified: " + link);
            }
        }
        writer.write(newLink != null ? newLink : link);
        index = linkContentChunkInfo.getEnd();
    }
    writer.write(content.substring(index));

    return new TransformedResource(resource, writer.toString().getBytes(DEFAULT_CHARSET));
}

From source file:org.springframework.web.servlet.resource.ResourceHttpRequestHandler.java

@Nullable
protected Resource getResource(HttpServletRequest request) throws IOException {
    String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    if (path == null) {
        throw new IllegalStateException("Required request attribute '"
                + HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE + "' is not set");
    }//from www  . ja  v a2  s. c  o m
    path = processPath(path);
    if (!StringUtils.hasText(path) || isInvalidPath(path)) {
        if (logger.isTraceEnabled()) {
            logger.trace("Ignoring invalid resource path [" + path + "]");
        }
        return null;
    }
    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 null;
            }
        } catch (IllegalArgumentException ex) {
            // ignore
        }
    }
    ResourceResolverChain resolveChain = new DefaultResourceResolverChain(getResourceResolvers());
    Resource resource = resolveChain.resolveResource(request, path, getLocations());
    if (resource == null || getResourceTransformers().isEmpty()) {
        return resource;
    }
    ResourceTransformerChain transformChain = new DefaultResourceTransformerChain(resolveChain,
            getResourceTransformers());
    resource = transformChain.transform(request, resource);
    return resource;
}