001// Licensed under the Apache License, Version 2.0 (the "License");
002// you may not use this file except in compliance with the License.
003// You may obtain a copy of the License at
004//
005// http://www.apache.org/licenses/LICENSE-2.0
006//
007// Unless required by applicable law or agreed to in writing, software
008// distributed under the License is distributed on an "AS IS" BASIS,
009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
010// See the License for the specific language governing permissions and
011// limitations under the License.
012
013package org.apache.tapestry5.internal.services.assets;
014
015import org.apache.tapestry5.ContentType;
016import org.apache.tapestry5.ioc.Resource;
017import org.apache.tapestry5.services.assets.ResourceDependencies;
018import org.apache.tapestry5.services.assets.StreamableResource;
019import org.apache.tapestry5.services.assets.StreamableResourceProcessing;
020import org.apache.tapestry5.services.assets.StreamableResourceSource;
021
022import java.io.IOException;
023
024/**
025 * Adds ;charset=utf-8 for text/* resources with no specific character set. This assumes that all test resources are
026 * in UTF-8.
027 *
028 * @since 5.4
029 */
030public class UTF8ForTextAssets extends DelegatingSRS
031{
032    public UTF8ForTextAssets(StreamableResourceSource delegate)
033    {
034        super(delegate);
035    }
036
037    @Override
038    public StreamableResource getStreamableResource(Resource baseResource, StreamableResourceProcessing processing, ResourceDependencies dependencies) throws IOException
039    {
040        StreamableResource resource = delegate.getStreamableResource(baseResource, processing, dependencies);
041
042        ContentType contentType = resource.getContentType();
043
044        if (contentType.getBaseType().equals("text")
045                && ! contentType.hasParameters()
046                && processing != StreamableResourceProcessing.FOR_AGGREGATION)
047        {
048            return resource.withContentType(contentType.withCharset("utf-8"));
049        }
050
051        return resource;
052    }
053}