Changeset 27987

Show
Ignore:
Timestamp:
06.08.2013 16:41:04 (6 years ago)
Author:
sjm84
Message:

If a file cannot be found in the given interface then check if it is in the base interface

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/URLFilter.java

    r27923 r27987  
    11package org.greenstone.gsdl3.core; 
    22 
     3import java.io.File; 
    34import java.io.IOException; 
     5import java.nio.file.Files; 
     6import java.nio.file.Paths; 
    47import java.util.ArrayList; 
    58import java.util.HashMap; 
     
    1013import javax.servlet.FilterConfig; 
    1114import javax.servlet.ServletException; 
     15import javax.servlet.ServletOutputStream; 
    1216import javax.servlet.ServletRequest; 
    1317import javax.servlet.ServletResponse; 
     
    1923import org.greenstone.gsdl3.util.GSXML; 
    2024import org.greenstone.gsdl3.util.UserContext; 
     25import org.greenstone.gsdl3.util.XMLConverter; 
    2126import org.w3c.dom.Document; 
    2227import org.w3c.dom.Element; 
     
    4954    protected static final String ASSOCIATED_FILE_PATH = "/index/assoc/"; 
    5055    protected static final String COLLECTION_FILE_PATH = "/collect/"; 
     56    protected static final String INTERFACE_PATH = "/interfaces/"; 
    5157 
    5258    protected static final String SYSTEM_SUBACTION_CONFIGURE = "configure"; 
     
    7379 
    7480            String url = hRequest.getRequestURI().toString(); 
     81            System.err.println("URL = " + url); 
    7582 
    7683            if (isURLRestricted(url)) 
     
    188195                        if (!found) 
    189196                        { 
     197                            return; 
     198                        } 
     199                    } 
     200                } 
     201            } 
     202            else if (url.contains(INTERFACE_PATH)) 
     203            { 
     204                String fileURL = url.replace(request.getServletContext().getContextPath(), ""); 
     205                File requestedFile = new File(request.getServletContext().getRealPath(fileURL)); 
     206                if (!requestedFile.exists()) 
     207                { 
     208                    int interfaceNameStart = fileURL.indexOf(INTERFACE_PATH) + INTERFACE_PATH.length(); 
     209                    int interfaceNameEnd = fileURL.indexOf("/", interfaceNameStart); 
     210                    String interfaceName = fileURL.substring(interfaceNameStart, interfaceNameEnd); 
     211                    String interfacesDir = fileURL.substring(0, interfaceNameStart); 
     212                    File interfaceConfigFile = new File(request.getServletContext().getRealPath(interfacesDir + interfaceName + "/interfaceConfig.xml")); 
     213 
     214                    if (interfaceConfigFile.exists()) 
     215                    { 
     216                        XMLConverter xmlC = new XMLConverter(); 
     217                        Document interfaceConfigDoc = xmlC.getDOM(interfaceConfigFile); 
     218 
     219                        String baseInterface = interfaceConfigDoc.getDocumentElement().getAttribute("baseInterface"); 
     220                        if (baseInterface.length() > 0) 
     221                        { 
     222                            File baseInterfaceFile = new File(request.getServletContext().getRealPath(fileURL.replace("/" + interfaceName + "/", "/" + baseInterface + "/"))); 
     223                            if (baseInterfaceFile.exists()) 
     224                            { 
     225                                ServletOutputStream out = response.getOutputStream(); 
     226                                out.write(Files.readAllBytes(Paths.get(baseInterfaceFile.getAbsolutePath()))); 
     227                            } 
    190228                            return; 
    191229                        }