Example usage for org.springframework.web.servlet.resource TransformedResource TransformedResource

List of usage examples for org.springframework.web.servlet.resource TransformedResource TransformedResource

Introduction

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

Prototype

public TransformedResource(Resource original, byte[] transformedContent) 

Source Link

Usage

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;
    }//w  w  w  . jav a  2  s  .c o m

    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.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  a va2 s  .  c  o m*/

    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));
}