001/*
002 *  Copyright 2016 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016
017package org.ametys.plugins.core.ui.minimize.js;
018
019import java.io.Serializable;
020import java.util.List;
021
022import org.apache.avalon.framework.service.ServiceException;
023import org.apache.avalon.framework.service.ServiceManager;
024import org.apache.cocoon.environment.ObjectModelHelper;
025import org.apache.cocoon.environment.Request;
026
027import org.ametys.core.DevMode;
028import org.ametys.core.DevMode.DEVMODE;
029import org.ametys.core.minimize.js.MinimizeJSManager;
030import org.ametys.core.resources.ProxiedContextPathProvider;
031import org.ametys.plugins.core.ui.minimize.AbstractMinimizeReader;
032import org.ametys.plugins.core.ui.minimize.HashCache.UriData;
033
034/**
035 * This generator generates a single JS file to load all ui items js files.
036 * Can generates a list of imports of directly intergrates all js files.
037 */
038public class MinimizeJSReader extends AbstractMinimizeReader
039{
040    /** SourceMapCache */
041    private MinimizeJSManager _jSMinimizeManager;
042    private ProxiedContextPathProvider _proxiedContextPathProvider;
043
044    @Override
045    public void service(ServiceManager smanager) throws ServiceException
046    {
047        super.service(smanager);
048        
049        _jSMinimizeManager = (MinimizeJSManager) manager.lookup(MinimizeJSManager.ROLE);
050        _proxiedContextPathProvider = (ProxiedContextPathProvider) manager.lookup(ProxiedContextPathProvider.ROLE);
051    }
052    
053    
054    @Override
055    public String getMimeType()
056    {
057        return "text/javascript;charset=utf-8";
058    }
059    
060    @Override
061    public Serializable getKey()
062    {
063        return super.getKey() + "*" + _proxiedContextPathProvider.getContextPath();
064    }
065    
066    @Override
067    protected String _handleFiles(List<UriData> files)
068    {
069        Request request = ObjectModelHelper.getRequest(objectModel);
070        boolean generateSourceMap = !DEVMODE.PRODUCTION.equals(DevMode.getDeveloperMode(request));
071        
072        return _jSMinimizeManager.minimizeAndAggregateURIs(files, source + ".js", generateSourceMap);
073    }
074}