Ignore:
Timestamp:
2012-10-17T13:51:35+13:00 (12 years ago)
Author:
sjm84
Message:

Changing how collection text is retrieved so that they can contain gsf elements. The downside is that it <fragment> elements turn up in the HTML. Possibly need a better solution in the future

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/XSLTUtil.java

    r26315 r26325  
    1919package org.greenstone.gsdl3.util;
    2020
     21import java.io.ByteArrayInputStream;
    2122import java.io.File;
    2223import java.text.SimpleDateFormat;
     
    2627import java.util.HashMap;
    2728import java.util.Locale;
     29
     30import javax.xml.parsers.DocumentBuilder;
     31import javax.xml.parsers.DocumentBuilderFactory;
    2832
    2933import net.tanesha.recaptcha.ReCaptcha;
     
    5054        _stringVariables.put(name, value);
    5155    }
    52    
     56
    5357    public static String getString(String name)
    5458    {
    5559        return _stringVariables.get(name);
    5660    }
    57    
     61
    5862    /* some tests */
    5963    public static boolean equals(String s1, String s2)
     
    292296    }
    293297
    294     public static String getCollectionText(String collection, String site_name, String lang, String key)
    295     {
    296       return getCollectionTextWithArgs(collection, site_name, lang, key, null);
    297     }
    298 
    299   public static String getCollectionText(String collection, String site_name, String lang, String key, String args_str)
    300   {
    301 
    302     String[] args = null;
    303     if (args_str != null && !args_str.equals(""))
    304       {
    305     args = StringUtils.split(args_str, ";");
    306       }
    307 
    308     return getCollectionTextWithArgs(collection, site_name, lang, key, args);
    309   }
     298    public static Node getCollectionText(String collection, String site_name, String lang, String key)
     299    {
     300        return getCollectionTextWithArgs(collection, site_name, lang, key, null);
     301    }
     302
     303    public static Node getCollectionText(String collection, String site_name, String lang, String key, String args_str)
     304    {
     305
     306        String[] args = null;
     307        if (args_str != null && !args_str.equals(""))
     308        {
     309            args = StringUtils.split(args_str, ";");
     310        }
     311
     312        return getCollectionTextWithArgs(collection, site_name, lang, key, args);
     313    }
    310314
    311315    // xslt didn't like calling the function with Node varargs, so have this hack for now
    312     public static String getCollectionTextWithDOM(String collection, String site_name, String lang, String key, Node n1)
     316    public static Node getCollectionTextWithDOM(String collection, String site_name, String lang, String key, Node n1)
    313317    {
    314318        return getCollectionTextWithDOMMulti(collection, site_name, lang, key, n1);
    315319    }
    316320
    317     public static String getCollectionTextWithDOM(String collection, String site_name, String lang, String key, Node n1, Node n2)
     321    public static Node getCollectionTextWithDOM(String collection, String site_name, String lang, String key, Node n1, Node n2)
    318322    {
    319323        return getCollectionTextWithDOMMulti(collection, site_name, lang, key, n1, n2);
    320324    }
    321325
    322     public static String getCollectionTextWithDOM(String collection, String site_name, String lang, String key, Node n1, Node n2, Node n3)
     326    public static Node getCollectionTextWithDOM(String collection, String site_name, String lang, String key, Node n1, Node n2, Node n3)
    323327    {
    324328        return getCollectionTextWithDOMMulti(collection, site_name, lang, key, n1, n2, n3);
    325329    }
    326330
    327     public static String getCollectionTextWithDOM(String collection, String site_name, String lang, String key, Node n1, Node n2, Node n3, Node n4)
     331    public static Node getCollectionTextWithDOM(String collection, String site_name, String lang, String key, Node n1, Node n2, Node n3, Node n4)
    328332    {
    329333        return getCollectionTextWithDOMMulti(collection, site_name, lang, key, n1, n2, n3, n4);
    330334    }
    331335
    332     public static String getCollectionTextWithDOMMulti(String collection, String site_name, String lang, String key, Node... nodes)
     336    public static Node getCollectionTextWithDOMMulti(String collection, String site_name, String lang, String key, Node... nodes)
    333337    {
    334338        int num_nodes = nodes.length;
     
    340344            for (int i = 0; i < num_nodes; i++)
    341345            {
    342 
    343346                String node_str = XMLConverter.getString(nodes[i]);
    344347                args[i] = node_str;
     
    348351    }
    349352
    350   public static String getCollectionTextWithArgs(String collection, String site_name, String lang, String key, String [] args) {
    351 
    352         CollectionClassLoader class_loader = new CollectionClassLoader(XSLTUtil.class.getClassLoader(), GSFile.siteHome(GlobalProperties.getGSDL3Home(), site_name), collection);
    353         Dictionary dict = new Dictionary(collection, lang, class_loader);
    354         String result = dict.get(key, args);
    355         if (result != null)
    356         {
    357             return result;
    358         }
    359         return "text:" + collection + ":" + key;
    360 
     353    public static Node getCollectionTextWithArgs(String collection, String site_name, String lang, String key, String[] args)
     354    {
     355        try
     356        {
     357            DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
     358
     359            CollectionClassLoader class_loader = new CollectionClassLoader(XSLTUtil.class.getClassLoader(), GSFile.siteHome(GlobalProperties.getGSDL3Home(), site_name), collection);
     360            Dictionary dict = new Dictionary(collection, lang, class_loader);
     361            String result = dict.get(key, args);
     362            if (result != null)
     363            {
     364                return docBuilder.parse(new ByteArrayInputStream(("<fragment>" + result + "</fragment>").getBytes())).getDocumentElement();
     365            }
     366            return docBuilder.parse(new ByteArrayInputStream(("<fragment>" + "text:" + collection + ":" + key + "</fragment>").getBytes())).getDocumentElement();
     367        }
     368        catch (Exception ex)
     369        {
     370            return null;
     371        }
    361372    }
    362373
Note: See TracChangeset for help on using the changeset viewer.