001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.wicket.request.handler.resource;
018
019import java.util.Locale;
020
021import org.apache.wicket.request.ILoggableRequestHandler;
022import org.apache.wicket.request.IRequestCycle;
023import org.apache.wicket.request.IRequestHandler;
024import org.apache.wicket.core.request.handler.logger.ResourceReferenceLogData;
025import org.apache.wicket.request.mapper.parameter.PageParameters;
026import org.apache.wicket.request.resource.IResource;
027import org.apache.wicket.request.resource.ResourceReference;
028import org.apache.wicket.util.lang.Args;
029
030/**
031 * Request handler for {@link ResourceReference}. This handler is only used to generate URLs.
032 * 
033 * @author Matej Knopp
034 */
035public class ResourceReferenceRequestHandler implements IRequestHandler, ILoggableRequestHandler
036{
037        private final ResourceReference resourceReference;
038
039        private final PageParameters pageParameters;
040
041        private ResourceReferenceLogData logData;
042
043        /**
044         * Construct.
045         * 
046         * @param resourceReference
047         */
048        public ResourceReferenceRequestHandler(ResourceReference resourceReference)
049        {
050                this(resourceReference, null);
051        }
052
053        /**
054         * Construct.
055         * 
056         * @param resourceReference
057         * @param pageParameters
058         */
059        public ResourceReferenceRequestHandler(ResourceReference resourceReference,
060                PageParameters pageParameters)
061        {
062                Args.notNull(resourceReference, "resourceReference");
063
064                this.resourceReference = resourceReference;
065                this.pageParameters = pageParameters != null ? pageParameters : new PageParameters();
066        }
067
068        /**
069         * @return resource reference
070         */
071        public ResourceReference getResourceReference()
072        {
073                return resourceReference;
074        }
075
076        /**
077         * @return page parameters
078         */
079        public PageParameters getPageParameters()
080        {
081                return pageParameters;
082        }
083
084        @Override
085        public void detach(IRequestCycle requestCycle)
086        {
087                if (logData == null)
088                        logData = new ResourceReferenceLogData(this);
089        }
090
091        @Override
092        public ResourceReferenceLogData getLogData()
093        {
094                return logData;
095        }
096
097        @Override
098        public void respond(IRequestCycle requestCycle)
099        {
100                new ResourceRequestHandler(getResourceReference().getResource(), getPageParameters()).respond(requestCycle);
101        }
102
103        /**
104         * @return reference locale
105         */
106        public Locale getLocale()
107        {
108                return getResourceReference().getLocale();
109        }
110
111        /**
112         * @return resource
113         */
114        public IResource getResource()
115        {
116                return getResourceReference().getResource();
117        }
118
119        /**
120         * @return style
121         */
122        public String getStyle()
123        {
124                return getResourceReference().getStyle();
125        }
126
127        /**
128         * @return variation
129         */
130        public String getVariation()
131        {
132                return getResourceReference().getVariation();
133        }
134
135        @Override
136        public String toString()
137        {
138                return "ResourceReferenceRequestHandler{" +
139                                "resourceReference=" + resourceReference +
140                                ", pageParameters=" + pageParameters +
141                                '}';
142        }
143}