001/*
002 *  Copyright 2022 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 */
016package org.ametys.site;
017
018import java.io.File;
019import java.io.FilenameFilter;
020import java.util.Map;
021
022import org.apache.avalon.framework.parameters.Parameters;
023import org.apache.cocoon.environment.Redirector;
024import org.apache.cocoon.environment.SourceResolver;
025
026/**
027 * Invalidates cached shared images for all sites
028 */
029public class InvalidateSharedResourcesImageAction extends InvalidateImagesAction
030{
031    @Override
032    public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception
033    {
034        String path = parameters.getParameter("path");
035        
036        File root = SiteCacheHelper.getRootCache();
037        
038        for (File site : root.listFiles(new SiteFilter()))
039        {
040            String fullPath = site.getName() + "/" + path;
041            
042            File[] files = getImages(root, fullPath);
043            
044            if (files != null)
045            {
046                for (File file : files)
047                {
048                    int j = fullPath.lastIndexOf('/');
049                    String folder = j != -1 ? fullPath.substring(0, j) : "";
050                    
051                    String imagePath = folder + "/" + file.getName();
052                    invalidatePage(root, imagePath);
053                }
054            }
055        }
056        
057        return EMPTY_MAP;
058    }
059    
060    class SiteFilter implements FilenameFilter
061    {
062        @Override
063        public boolean accept(File dir, String name)
064        {
065            return !name.equals("plugins") && !name.equals("skins");
066        }
067    }
068}