Changeset 27987


Ignore:
Timestamp:
2013-08-06T16:41:04+12:00 (11 years ago)
Author:
sjm84
Message:

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

File:
1 edited

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                        }
Note: See TracChangeset for help on using the changeset viewer.