/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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. */ package org.apache.wicket.request.resource; import org.apache.wicket.Application; import org.apache.wicket.util.lang.Args; import org.apache.wicket.util.resource.ResourceUtils; /** * This is a ResourceReference to handle context-relative resources such as js, css and * picture files placed in a folder on the context root (ex: '/css/coolTheme.css'). * The class has a flag (see {@link #isMinifyIt()}) to decide if referenced resource can be * minified (ex: '/css/coolTheme.min.css') or not. * * @author Andrea Del Bene */ public class ContextRelativeResourceReference extends ResourceReference { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; /** Says if the resource name can be minified or not. */ private final boolean minifyIt; /** The minfied postfix. */ private final String minPostfix; /** * Instantiates a new context relative resource reference for the given name. The resource * will be minified in DEPLOYMENT mode and "min" will be used as postfix. * * @param name * the resource name */ public ContextRelativeResourceReference(final String name) { this(name, ResourceUtils.MIN_POSTFIX_DEFAULT, true); } /** * Instantiates a new context relative resource reference for the given name. * Parameter {@code minifyIt} says if the resource can be minified (true) or not (false). * * @param name * the resource name * @param minifyIt * says if the resource name can be minified or not */ public ContextRelativeResourceReference(final String name, final boolean minifyIt) { this(name, ResourceUtils.MIN_POSTFIX_DEFAULT, minifyIt); } /** * Instantiates a new context relative resource reference for the given name. We can * specify which postfix we want to use for minification with parameter @code minPostfix} * * @param name * the resource name * @param minPostfix * the minfied postfix */ public ContextRelativeResourceReference(final String name, final String minPostfix) { this(name, minPostfix, true); } /** * Instantiates a new context relative resource reference for the given name. We can * specify which postfix we want to use for minification with parameter @code minPostfix} * while parameter {@code minifyIt} says if the resource can be minified (true) or not (false). * @param name * the resource name * @param minPostfix * the minfied postfix * @param minifyIt * says if the resource name can be minified or not */ public ContextRelativeResourceReference(final String name, final String minPostfix, final boolean minifyIt) { super(name); Args.notNull(minPostfix, "minPostfix"); this.minPostfix = minPostfix; this.minifyIt = minifyIt; } /** * Build the context-relative resource for this resource reference. * * @param name * the resource name * @param minPostfix * the postfix to use to minify the resource name (typically "min") * @return the context-relative resource */ protected ContextRelativeResource buildContextRelativeResource(final String name, final String minPostfix) { String minifiedName = name; if (canBeMinified()) { minifiedName = ResourceUtils.getMinifiedName(name, minPostfix); } return new ContextRelativeResource(minifiedName); } /** * Says if the referenced resource can be minified. It returns {@code true} if * both flag {@link #minifyIt} and application's resource settings method * {@link org.apache.wicket.settings.ResourceSettings#getUseMinifiedResources()}} * are true. * * @return {@code true} if resource can be minified, {@code false} otherwise */ protected boolean canBeMinified() { return minifyIt && Application.exists() && Application.get().getResourceSettings().getUseMinifiedResources(); } @Override public final ContextRelativeResource getResource() { return buildContextRelativeResource(getName(), minPostfix); } /** * Returns the flag that says if the resource can be minified (true) or not (false). * * @return true, if resource can be minified */ public boolean isMinifyIt() { return minifyIt; } /** * Gets the minified postfix we use for this resource. * * @return the minified postfix */ public String getMinPostfix() { return minPostfix; } }