/* * #%L * BroadleafCommerce Common Libraries * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ package org.broadleafcommerce.common.resource.service; import org.springframework.core.io.Resource; /** * Service responsible for interacting with YUI-compressor to minify JS/CSS resources. * * @author Andre Azzolini (apazzolini) */ public interface ResourceMinificationService { /** * Given the source byte[], will return a byte[] that represents the YUI-compressor minified version * of the byte[]. The behavior of this method is controlled via the following properties: * * <ul> * <li>minify.enabled - whether or not to actually perform minification</li> * <li>minify.linebreak - if set to a value other than -1, will enforce a linebreak at that value</li> * <li>minify.munge - if true, will replace variable names with shorter versions</li> * <li>minify.verbose - if true, will display extra logging information to the console</li> * <li>minify.preserveAllSemiColons - if true, will never remove semi-colons, even if two in a row exist</li> * <li>minify.disableOptimizations - if true, will disable some micro-optimizations that are performed</li> * </ul> * * @param filename * @param bytes * @return the minified bytes */ public byte[] minify(String filename, byte[] bytes); /** * Indicates whether or not the system is allowed to minify bundled resources. * * @return the value of the system property "minify.enabled" */ public boolean getEnabled(); /** * Indicates whether or not the system is allowed to attempt to minify individual files. This can be useful if * the YUI compressor is failing to minify JavaScript/CSS due to syntax errors and you are attempting to track * down which file is problematic. It should not be enabled in a production environment. * * @return the value of the system property "minify.allowSingleMinification" */ boolean getAllowSingleMinification(); /** * Delegates to {@link #minify(Resource, String)} where the filename argument is originalResource.getFilename(). * @param originalResource * @return */ Resource minify(Resource originalResource); /** * Given a {@link Resource}, will return a resource that represents the YUI-compressor minified version. * * The behavior of this method is controlled via the following properties: * * <ul> * <li>minify.enabled - whether or not to actually perform minification</li> * <li>minify.linebreak - if set to a value other than -1, will enforce a linebreak at that value</li> * <li>minify.munge - if true, will replace variable names with shorter versions</li> * <li>minify.verbose - if true, will display extra logging information to the console</li> * <li>minify.preserveAllSemiColons - if true, will never remove semi-colons, even if two in a row exist</li> * <li>minify.disableOptimizations - if true, will disable some micro-optimizations that are performed</li> * </ul> * * @param orginalResource * @param the name of resource * * @return The minified resource */ Resource minify(Resource originalResource, String filename); }