All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.agilecoders.wicket.sass.SassResourceStream Maven / Gradle / Ivy

The newest version!
package de.agilecoders.wicket.sass;

import java.net.URL;

import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.core.util.resource.UrlResourceStream;
import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.resource.AbstractStringResourceStream;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.ResourceStreamWrapper;
import java.time.Instant;

/**
 * A IResourceStream that loads the generated CSS content for Sass resources
 */
public class SassResourceStream extends AbstractStringResourceStream {
    private static final long serialVersionUID = 1L;
    /**
     * The LessSource for the root Sass resource.
     * Any LessSource can have children resources - imported resources
     */
    private final SassSource sassSource;

    /**
     * Constructor.
     *
     * @param sassStream The resource stream that loads the Sass content. Only UrlResourceStream is supported at the moment!
     * @param scopeClass The name of the class used as a scope to resolve "package!" dependencies/imports
     */
    public SassResourceStream(IResourceStream sassStream, String scopeClass) {
        Args.notNull(sassStream, "sassStream");

        while (sassStream instanceof ResourceStreamWrapper) {
            ResourceStreamWrapper wrapper = (ResourceStreamWrapper) sassStream;
            try {
                sassStream = wrapper.getDelegate();
            } catch (Exception x) {
                throw new WicketRuntimeException(x);
            }
        }

        if (!(sassStream instanceof UrlResourceStream)) {
            throw new IllegalArgumentException(String.format("%s can work only with %s",
                SassResourceStream.class.getSimpleName(), UrlResourceStream.class.getName()));
        }

        URL sassUrl = ((UrlResourceStream) sassStream).getURL();

        SassCacheManager cacheManager = SassCacheManager.get();

        this.sassSource = cacheManager.getSassContext(sassUrl, scopeClass);
    }

    @Override
    protected String getString() {
        SassCacheManager cacheManager = SassCacheManager.get();
        return cacheManager.getCss(sassSource);
    }

    @Override
    public Instant lastModifiedTime() {
        SassCacheManager cacheManager = SassCacheManager.get();
        return cacheManager.getLastModifiedTime(sassSource);
    }

    @Override
    public String getContentType() {
        return "text/css";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy