greenstone.org greenstone wiki greenstone trac planet greenstone

Changeset 16446

Show
Ignore:
Timestamp:
2008-07-17 23:28:27 (3 months ago)
Author:
davidb
Message:

Replacement of Java 1.5 code with Java 1.4 equivalent, plus tidied up indentation

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • greenstone3/trunk/src/java/org/greenstone/gsdl3/core/Skin.java

    r16374 r16446  
    1919public class Skin { 
    2020         
    21         public File rootDirectory ; 
    22         public Document config ; 
    23         private Receptionist receptionist ; 
    24          
    25         protected DOMParser parser = null; 
    26         TransformerFactory transformerFactory=null; 
    27          
    28         // delete this later?? 
    29         //protected XMLConverter converter = null; 
    30          
    31         private HashMap<String, String> xsltPagesByAction ;  
    32          
    33         public Skin(Page page, Receptionist receptionist) throws Exception{ 
    34                  
    35                 this.receptionist = receptionist ; 
    36                 this.transformerFactory = org.apache.xalan.processor.TransformerFactoryImpl.newInstance(); 
    37                 //this.converter = new XMLConverter(); 
    38                 transformerFactory.setURIResolver(new MyUriResolver()) ; 
    39                  
    40                 this.parser = new DOMParser(); 
    41             this.parser.setFeature("http://xml.org/sax/features/validation", true); 
    42             // don't try and load external DTD - no need if we are not validating, and may cause connection errors if a proxy is not set up. 
    43             this.parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 
    44             // a performance test showed that having this on lead to increased  
    45             // memory use for small-medium docs, and not much gain for large  
    46             // docs. 
    47             // http://www.sosnoski.com/opensrc/xmlbench/conclusions.html 
    48             this.parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false); 
    49                  
    50                  
    51                  
    52                 String siteHome = GSFile.siteHome(GlobalProperties.getGSDL3Home(), page.getSite()) ; 
    53                 Document collectUi = page.getCollectUi() ; 
    54                  
    55                 if (collectUi != null) { 
    56                         //System.out.println("looking for skin defined at collect level") ; 
    57                          
    58                         String collectHome = GSFile.collectionBaseDir(siteHome, page.getCollection()) ; 
    59                         Element xmlSkin = (Element) GSXML.getChildByTagName(collectUi.getFirstChild(), "skin") ; 
    60                         if (xmlSkin != null) { 
    61                                 //System.out.println("skin defined at collect level") ; 
     21    public File rootDirectory ; 
     22    public Document config ; 
     23    private Receptionist receptionist ; 
     24         
     25    protected DOMParser parser = null; 
     26    TransformerFactory transformerFactory=null; 
     27         
     28    // delete this later?? 
     29    //protected XMLConverter converter = null; 
     30         
     31    //private HashMap<String, String> xsltPagesByAction ;  // ***** 
     32    private HashMap xsltPagesByAction ;  
     33         
     34    public Skin(Page page, Receptionist receptionist) throws Exception{ 
     35                 
     36        this.receptionist = receptionist ; 
     37        this.transformerFactory = org.apache.xalan.processor.TransformerFactoryImpl.newInstance(); 
     38        //this.converter = new XMLConverter(); 
     39        transformerFactory.setURIResolver(new MyUriResolver()) ; 
     40                 
     41        this.parser = new DOMParser(); 
     42        this.parser.setFeature("http://xml.org/sax/features/validation", false); 
     43        // don't try and load external DTD - no need if we are not validating, and may cause connection errors if a proxy is not set up. 
     44        this.parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 
     45        // a performance test showed that having this on lead to increased  
     46        // memory use for small-medium docs, and not much gain for large  
     47        // docs. 
     48        // http://www.sosnoski.com/opensrc/xmlbench/conclusions.html 
     49        this.parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false); 
     50                 
     51                 
     52                 
     53        String siteHome = GSFile.siteHome(GlobalProperties.getGSDL3Home(), page.getSite()) ; 
     54        Document collectUi = page.getCollectUi() ; 
     55                 
     56        if (collectUi != null) { 
     57            //System.out.println("looking for skin defined at collect level") ; 
     58                         
     59            String collectHome = GSFile.collectionBaseDir(siteHome, page.getCollection()) ; 
     60            Element xmlSkin = (Element) GSXML.getChildByTagName(collectUi.getFirstChild(), "skin") ; 
     61            if (xmlSkin != null) { 
     62                //System.out.println("skin defined at collect level") ; 
    6263                                 
    63                                 boolean inherit = Boolean.parseBoolean(xmlSkin.getAttribute("inherit")) ; 
     64                String inherit_att = xmlSkin.getAttribute("inherit") ; 
     65                Boolean inherit_ref = Boolean.valueOf(inherit_att); 
     66                boolean inherit = inherit_ref.booleanValue(); 
    6467                                 
    65                                 if (inherit != true) { 
    66                                         boolean local = Boolean.parseBoolean(xmlSkin.getAttribute("local")) ; 
    67                                         if (local == true) { 
    68                                                 rootDirectory = new File(collectHome + File.separatorChar + "ui") ; 
    69                                         } else { 
    70                                                 String name = xmlSkin.getAttribute("name") ; 
    71                                                 rootDirectory = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "skins" + File.separatorChar + File.separatorChar + name) ; 
    72                                         } 
    73                                 }                                
    74                         } 
     68                if (inherit != true) { 
     69                     
     70                    String local_att = xmlSkin.getAttribute("local") ; 
     71                    Boolean local_ref = Boolean.valueOf(local_att); 
     72                    boolean local = local_ref.booleanValue(); 
     73 
     74                    if (local == true) { 
     75                        rootDirectory = new File(collectHome + File.separatorChar + "ui") ; 
     76                    } else { 
     77                        String name = xmlSkin.getAttribute("name") ; 
     78                        rootDirectory = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "skins" + File.separatorChar + File.separatorChar + name) ; 
     79                    } 
     80                }                                
     81            } 
     82        } 
     83                 
     84        Document siteUi = page.getSiteUi() ; 
     85                 
     86        if (rootDirectory == null && siteUi != null) { 
     87            //System.out.println("lookding for skin defined at site level") ; 
     88                         
     89            Element xmlSkin = (Element) GSXML.getChildByTagName(siteUi.getFirstChild(), "skin") ; 
     90            if (xmlSkin != null) { 
     91                //System.out.println("skin defined at site level") ; 
     92                String local_att = xmlSkin.getAttribute("local") ; 
     93                Boolean local_ref = Boolean.valueOf(local_att); 
     94                boolean local = local_ref.booleanValue(); 
     95 
     96                if (local == true) { 
     97                    rootDirectory = new File(siteHome + File.separatorChar + "ui") ; 
     98                } else { 
     99                    String name = xmlSkin.getAttribute("name") ; 
     100                    rootDirectory = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "skins" + File.separatorChar + name) ; 
    75101                } 
    76                  
    77                 Document siteUi = page.getSiteUi() ; 
    78                  
    79                 if (rootDirectory == null && siteUi != null) { 
    80                         //System.out.println("lookding for skin defined at site level") ; 
    81                          
    82                         Element xmlSkin = (Element) GSXML.getChildByTagName(siteUi.getFirstChild(), "skin") ; 
    83                         if (xmlSkin != null) { 
    84                                 //System.out.println("skin defined at site level") ; 
    85                                 boolean local = Boolean.parseBoolean(xmlSkin.getAttribute("local")) ; 
    86                                 if (local == true) { 
    87                                         rootDirectory = new File(siteHome + File.separatorChar + "ui") ; 
    88                                 } else { 
    89                                         String name = xmlSkin.getAttribute("name") ; 
    90                                         rootDirectory = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "skins" + File.separatorChar + name) ; 
    91                                 } 
    92                         }                                
    93                 } 
    94                  
    95                 if(rootDirectory == null) { 
    96                         rootDirectory = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "skins" + File.separatorChar + "default") ; 
    97                 } 
    98  
    99                  
    100                 File configFile = new File(rootDirectory.getAbsolutePath() + File.separatorChar + "skin.xml") ; 
    101                 config = receptionist.converter.getDOM(configFile, "utf-8"); 
    102                  
    103                  
    104                 // store which xslt pages are responsible for which actions 
    105                  
    106                 xsltPagesByAction = new HashMap() ; 
    107                  
    108                 NodeList actions = config.getElementsByTagName("action") ; 
    109                  
    110                 for (int ai=0 , an=actions.getLength() ; ai<an ; ai++){ 
    111                         Element action = (Element) actions.item(ai) ; 
    112                         String a = action.getAttribute("name") ; 
    113                          
    114                         String xsl = action.getAttribute("xslt") ; 
    115                         if (!xsl.equals(""))  
    116                                 xsltPagesByAction.put(a, xsl) ; 
    117                          
    118                         NodeList subactions = action.getElementsByTagName("subaction") ; 
    119                          
    120                         for (int si=0 , sn=subactions.getLength() ; si<sn ; si++){ 
    121                                 Element subaction = (Element) subactions.item(si) ; 
     102            }                            
     103        } 
     104                 
     105        if(rootDirectory == null) { 
     106            rootDirectory = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "skins" + File.separatorChar + "default") ; 
     107        } 
     108 
     109                 
     110        File configFile = new File(rootDirectory.getAbsolutePath() + File.separatorChar + "skin.xml") ; 
     111        config = receptionist.converter.getDOM(configFile, "utf-8"); 
     112                 
     113                 
     114        // store which xslt pages are responsible for which actions 
     115                 
     116        xsltPagesByAction = new HashMap() ; 
     117                 
     118        NodeList actions = config.getElementsByTagName("action") ; 
     119                 
     120        for (int ai=0 , an=actions.getLength() ; ai<an ; ai++){ 
     121            Element action = (Element) actions.item(ai) ; 
     122            String a = action.getAttribute("name") ; 
     123                         
     124            String xsl = action.getAttribute("xslt") ; 
     125            if (!xsl.equals("")) { 
     126                xsltPagesByAction.put(a, xsl) ; 
     127            } 
     128                         
     129            NodeList subactions = action.getElementsByTagName("subaction") ; 
     130                         
     131            for (int si=0 , sn=subactions.getLength() ; si<sn ; si++){ 
     132                Element subaction = (Element) subactions.item(si) ; 
    122133                                 
    123                                 String sa = subaction.getAttribute("name") ; 
    124                                 xsl = subaction.getAttribute("xslt") ; 
    125                                 xsltPagesByAction.put(a + "_" + sa, xsl) ; 
    126                         } 
    127                 } 
    128         } 
    129          
    130         private Document getXSLTDoc(String action, String subaction) throws Exception { 
    131                 //System.out.println("getting xslt for " + action + ", " + subaction) ; 
    132                  
    133                 String name = xsltPagesByAction.get(action + "_" + subaction) ; 
    134                  
    135                 if (name == null)  
    136                         name = xsltPagesByAction.get(action) ; 
    137                  
    138                 File xslt_file = new File(rootDirectory.getAbsolutePath() + File.separatorChar + "xsl" + File.separatorChar + name) ; 
    139                 //System.out.println("Skinning page using: " + xslt_file) ; 
    140                  
    141                 //if (!xslt_file.canRead())  
    142                 //      xslt_file = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "xslt" + File.separatorChar + "error.xsl") ; 
    143                  
    144                 FileReader reader = new FileReader(xslt_file); 
    145             InputSource xml_source = new InputSource(reader); 
    146             this.parser.parse(xml_source); 
    147             Document doc = this.parser.getDocument(); 
    148                  
    149                 return doc ; 
    150         } 
    151          
    152         private Document getPreprocessDoc() throws Exception { 
     134                String sa = subaction.getAttribute("name") ; 
     135                xsl = subaction.getAttribute("xslt") ; 
     136                xsltPagesByAction.put(a + "_" + sa, xsl) ; 
     137            } 
     138        } 
     139    } 
     140         
     141    private Document getXSLTDoc(String action, String subaction) throws Exception { 
     142        //System.out.println("getting xslt for " + action + ", " + subaction) ; 
     143                 
     144        String full_action = action + "_" + subaction; 
     145        String name = (String)xsltPagesByAction.get(full_action) ; 
     146                 
     147        if (name == null) { 
     148            name = (String)xsltPagesByAction.get(action); 
     149        } 
     150                 
     151        File xslt_file = new File(rootDirectory.getAbsolutePath() + File.separatorChar + "xsl" + File.separatorChar + name) ; 
     152        //System.out.println("Skinning page using: " + xslt_file) ; 
     153                 
     154        //if (!xslt_file.canRead())  
     155        //      xslt_file = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "xslt" + File.separatorChar + "error.xsl") ; 
     156                 
     157        FileReader reader = new FileReader(xslt_file); 
     158        InputSource xml_source = new InputSource(reader); 
     159        this.parser.parse(xml_source); 
     160        Document doc = this.parser.getDocument(); 
     161                 
     162        return doc ; 
     163    } 
     164         
     165    private Document getPreprocessDoc() throws Exception { 
    153166                                                               
    154                File xslt_file = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "xslt" + File.separatorChar + "preProcess.xsl") ; 
    155                  
    156                FileReader reader = new FileReader(xslt_file); 
    157             InputSource xml_source = new InputSource(reader); 
    158             this.parser.parse(xml_source); 
    159             Document doc = this.parser.getDocument(); 
     167        File xslt_file = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "xslt" + File.separatorChar + "preProcess.xsl") ; 
     168                 
     169        FileReader reader = new FileReader(xslt_file); 
     170        InputSource xml_source = new InputSource(reader); 
     171        this.parser.parse(xml_source); 
     172        Document doc = this.parser.getDocument(); 
    160173             
    161             return doc ;               
    162        
    163          
    164        private Document getLibraryDoc() throws Exception { 
     174        return doc ;           
     175   
     176         
     177    private Document getLibraryDoc() throws Exception { 
    165178         
    166                File xslt_file = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "xslt" + File.separatorChar + "library.xsl") ; 
    167                  
    168                FileReader reader = new FileReader(xslt_file); 
    169             InputSource xml_source = new InputSource(reader); 
    170             this.parser.parse(xml_source); 
    171             Document doc = this.parser.getDocument(); 
     179        File xslt_file = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "xslt" + File.separatorChar + "library.xsl") ; 
     180                 
     181        FileReader reader = new FileReader(xslt_file); 
     182        InputSource xml_source = new InputSource(reader); 
     183        this.parser.parse(xml_source); 
     184        Document doc = this.parser.getDocument(); 
    172185             
    173             return doc ;                 
    174         } 
    175          
    176          
    177         public Node transformPage(Page page) throws Exception{ 
    178                  
    179                 Element p = page.getPage() ; 
    180                 Element pr = page.getPageResponse() ; 
    181                 Element transformedPage = null ; 
    182                  
    183                 Element blah = receptionist.doc.createElement("Skin") ; 
    184                 blah.setAttribute("skinLocation", rootDirectory.getAbsolutePath()) ; 
    185                 pr.appendChild(blah) ; 
    186                  
    187                 Document sourceXml ; 
    188                 try { 
    189                         sourceXml = receptionist.converter.newDOM(); 
    190                         sourceXml.appendChild(sourceXml.importNode(p, true)); 
    191                 } catch (Exception e) { 
    192                         System.out.println("error loading source data") ; 
    193                         e.printStackTrace() ; 
    194                         return constructErrorPage(e) ; 
    195                 } 
    196                  
    197                 Document skinXsl ; 
    198                 try { 
    199                         skinXsl = getXSLTDoc(page.getAction(), page.getSubaction()) ; 
    200                 } catch (Exception e) { 
    201                         System.out.println("error loading skin xslt") ; 
    202                         e.printStackTrace() ; 
    203                         return constructErrorPage(e) ; 
    204                 } 
    205                  
    206                 Document preprocessingXsl  ; 
    207                 try { 
    208                         preprocessingXsl = getPreprocessDoc() ; 
    209                 } catch (Exception e) { 
    210                         System.out.println("error loading preprocessing xslt") ; 
    211                 e.printStackTrace() ; 
    212                         return constructErrorPage(e) ; 
    213                 } 
    214                  
    215                 Document libraryXsl ; 
    216                 try { 
    217                         libraryXsl = getLibraryDoc() ; 
    218                 } catch (Exception e) { 
    219                         System.out.println("error loading preprocessing xslt") ; 
    220                         e.printStackTrace() ; 
    221                         return constructErrorPage(e) ; 
    222                 } 
    223                  
    224                 // combine skin file and library variables/templates into one document.  
    225                 //   we dont just use xsl:import because the preprocessing stage needs  
    226                 //   to know what's available in the library. 
    227                  
    228                 Document skinAndLibraryXsl ; 
    229                 Document processedXsl = receptionist.converter.newDOM(); 
    230                 try { 
    231                          
    232                         skinAndLibraryXsl = receptionist.converter.newDOM(); 
    233                         Element root = skinAndLibraryXsl.createElement("skinAndLibraryXsl") ; 
    234                         skinAndLibraryXsl.appendChild(root) ; 
     186        return doc ;             
     187    } 
     188         
     189         
     190    public Node transformPage(Page page) throws Exception { 
     191                 
     192             
     193        Element p = page.getPage() ; 
     194        Element pr = page.getPageResponse() ; 
     195        Element transformedPage = null ; 
     196                 
     197        Element blah = receptionist.doc.createElement("Skin") ; 
     198        blah.setAttribute("skinLocation", rootDirectory.getAbsolutePath()) ; 
     199        pr.appendChild(blah) ; 
     200 
     201        Document sourceXml ; 
     202        try { 
     203            sourceXml = receptionist.converter.newDOM(); 
     204            sourceXml.appendChild(sourceXml.importNode(p, true)); 
     205        } catch (Exception e) { 
     206            System.out.println("error loading source data") ; 
     207            e.printStackTrace() ; 
     208            return constructErrorPage(e) ; 
     209        } 
     210 
     211        Document skinXsl ; 
     212        try { 
     213            skinXsl = getXSLTDoc(page.getAction(), page.getSubaction()) ; 
     214        } catch (Exception e) { 
     215            System.out.println("error loading skin xslt") ; 
     216            e.printStackTrace() ; 
     217            return constructErrorPage(e) ; 
     218        } 
     219                 
     220        Document preprocessingXsl  ; 
     221        try { 
     222            preprocessingXsl = getPreprocessDoc() ; 
     223        } catch (Exception e) { 
     224            System.out.println("error loading preprocessing xslt") ; 
     225            e.printStackTrace() ; 
     226            return constructErrorPage(e) ; 
     227        } 
     228                 
     229        Document libraryXsl ; 
     230        try { 
     231            libraryXsl = getLibraryDoc() ; 
     232        } catch (Exception e) { 
     233            System.out.println("error loading preprocessing xslt") ; 
     234            e.printStackTrace() ; 
     235            return constructErrorPage(e) ; 
     236        } 
     237                 
     238        // combine skin file and library variables/templates into one document.  
     239        //   we dont just use xsl:import because the preprocessing stage needs  
     240        //   to know what's available in the library. 
     241                 
     242        Document skinAndLibraryXsl ; 
     243        Document processedXsl = receptionist.converter.newDOM(); 
     244        try { 
     245                         
     246            skinAndLibraryXsl = receptionist.converter.newDOM(); 
     247            Element root = skinAndLibraryXsl.createElement("skinAndLibraryXsl") ; 
     248            skinAndLibraryXsl.appendChild(root) ; 
     249 
     250            Element s = skinAndLibraryXsl.createElement("skinXsl") ; 
     251            s.appendChild(skinAndLibraryXsl.importNode(skinXsl.getDocumentElement(), true)) ; 
     252            root.appendChild(s) ; 
     253 
     254            Element l = skinAndLibraryXsl.createElement("libraryXsl") ; 
     255            l.appendChild(skinAndLibraryXsl.importNode(libraryXsl.getDocumentElement(), true)) ; 
     256            root.appendChild(l) ; 
     257                         
     258                         
     259            // System.out.println("Pre - processing") ; 
     260            //pre-process the skin style sheet 
     261            Transformer preProcessor = transformerFactory.newTransformer(new DOMSource(preprocessingXsl)); 
     262            DOMResult result = new DOMResult(); 
     263            result.setNode(processedXsl); 
     264            preProcessor.transform(new DOMSource(skinAndLibraryXsl), result); 
     265        } catch (TransformerException e) { 
     266            e.printStackTrace() ; 
     267            return constructErrorPage(e) ; 
     268        }  catch (Exception e) { 
     269            System.out.println("error preprocessing the skin xslt") ; 
     270            e.printStackTrace() ; 
     271            return constructErrorPage(e) ; 
     272        } 
     273                 
     274        //return sourceXml.getDocumentElement() ; 
     275                 
     276        // Document finalPage = receptionist.converter.newDOM(); // **** 
     277        Document finalPageParsed = null; 
     278 
     279        //transform source doc 
     280        try { 
     281                 
     282            /* 
     283            //Tranform XSL DOM to String         
     284            TransformerFactory tf = TransformerFactory.newInstance(); 
     285            Transformer trans = tf.newTransformer(); 
     286            StringWriter sw = new StringWriter(); 
     287            trans.transform(new DOMSource(processedXsl), new StreamResult(sw)); 
     288            // String theXSLAnswer = sw.toString(); // **** 
     289                         
     290                         
     291            //Tranform XML DOM to String         
     292            TransformerFactory tf2 = TransformerFactory.newInstance(); 
     293            Transformer trans2 = tf2.newTransformer(); 
     294            StringWriter sw2 = new StringWriter(); 
     295            trans2.transform(new DOMSource(sourceXml), new StreamResult(sw2)); 
     296            //String theXMLAnswer = sw2.toString(); 
     297            */ 
     298 
     299            Transformer transformer = transformerFactory.newTransformer(new DOMSource(processedXsl)); 
     300            // transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"); 
     301            //DOMResult result = new DOMResult(); 
     302            //result.setNode(finalPage); 
     303                         
     304            //transformer.transform(new DOMSource(sourceXml), result2); 
     305            StringWriter result2 = new StringWriter(); 
     306            transformer.transform(new DOMSource(sourceXml), new StreamResult(result2)); 
     307 
     308            XMLConverter converter = new XMLConverter(); 
     309 
     310            finalPageParsed = converter.getDOM(result2.toString());                                      
     311                         
     312        } catch (TransformerException e) { 
     313            e.printStackTrace() ; 
     314            return constructErrorPage(e) ; 
     315        } catch (Exception e) { 
     316                 
     317            System.out.println("error transforming page") ; 
     318            e.printStackTrace() ; 
     319                         
     320            //return processedXsl.getDocumentElement() ; 
     321            return constructErrorPage(e) ; 
     322        } 
     323                         
     324        return finalPageParsed; 
     325    } 
     326         
     327    private Element constructErrorPage(TransformerException exception) { 
     328        Document doc = receptionist.doc; 
     329        Element page = doc.createElement("page") ; 
     330                 
     331        Element header = doc.createElement("h1") ; 
     332 
     333 
     334        // header.setTextContent("Error");  // Java 1.5 
     335        header.appendChild(doc.createTextNode("Error")); // Java 1.4 
     336 
     337        page.appendChild(header) ; 
     338                 
     339        Element prompt = doc.createElement("p") ; 
     340        // prompt.setTextContent("The following exception occured: ") ; 
     341        prompt.appendChild(doc.createTextNode("The following exception occured: "));  
     342        page.appendChild((prompt)) ; 
     343                 
     344        Element errorXml = doc.createElement("code") ; 
     345        //errorXml.setTextContent(exception.getMessageAndLocation()) ; 
     346        errorXml.appendChild(doc.createTextNode(exception.getMessageAndLocation())) ; 
     347        page.appendChild(errorXml) ; 
     348                 
     349        return page ; 
     350                 
     351    } 
     352         
     353    private Element constructErrorPage(Exception exception) { 
     354        Document doc = receptionist.doc; 
     355        Element page = doc.createElement("page") ; 
     356                 
     357        Element header = doc.createElement("h1") ; 
     358        //header.setTextContent("Error"); // Java 1.5 
     359        header.appendChild(doc.createTextNode("Error")); // Java 1.4 
     360 
     361        page.appendChild(header) ; 
     362                 
     363        Element prompt = doc.createElement("p") ; 
     364        // prompt.setTextContent("The following exception occured: ") ; 
     365        prompt.appendChild(doc.createTextNode("The following exception occured: "));  
     366 
     367        page.appendChild((prompt)) ; 
     368                 
     369        Element errorXml = doc.createElement("code") ; 
     370        //errorXml.setTextContent(exception.toString()) ; 
     371        errorXml.appendChild(doc.createTextNode(exception.toString())) ; 
     372        page.appendChild(errorXml) ; 
     373                 
     374        return page ; 
     375    } 
     376         
     377 
     378    private Element constructErrorPage(Element source, Document style, Exception exception)  
     379    { 
     380        Document doc = receptionist.doc; 
     381        Element page = doc.createElement("page") ; 
     382                 
     383        Element header = doc.createElement("h1") ; 
     384        //header.setTextContent("Error") ; // Java 1.5 
     385        header.appendChild(doc.createTextNode("Error")); // Java 1.4 
     386 
     387        page.appendChild(header) ; 
     388                 
     389        Element prompt = doc.createElement("p") ; 
     390        //prompt.setTextContent("The following exception occured: ") ; 
     391        prompt.appendChild(doc.createTextNode("The following exception occured: "));  
     392        page.appendChild((prompt)) ; 
     393                 
     394        Element errorXml = doc.createElement("code") ; 
     395        //errorXml.setTextContent(exception.getMessage()) ; 
     396        errorXml.appendChild(doc.createTextNode(exception.getMessage())) ; 
     397        page.appendChild(errorXml) ; 
     398                 
     399        /* 
     400          Element stackTrace = doc.createElement("ul") ; 
     401                 
     402          StackTraceElement[] st = exception.getStackTrace() ; 
     403          for (int i=0 ; i< st.length ; i++) { 
     404          Element ste = doc.createElement("li") ; 
     405          ste.setTextContent(st[i].toString()) ; 
     406          stackTrace.appendChild(ste) ; 
     407          } 
     408          errorMessage.appendChild(stackTrace) ; 
     409        */ 
     410                 
     411        Element sourceHeader = doc.createElement("h2") ; 
     412        //sourceHeader.setTextContent("Source page:") ; 
     413        sourceHeader.appendChild(doc.createTextNode("Source page:")) ; 
     414        page.appendChild(sourceHeader) ; 
     415                 
     416        Element sourceXml = doc.createElement("pre") ; 
     417        String source_pp = receptionist.converter.getPrettyString(source); 
     418        //sourceXml.setTextContent(source_pp) ; 
     419        sourceXml.appendChild(doc.createTextNode(source_pp)) ; 
     420        page.appendChild(sourceXml) ; 
     421                 
     422        Element styleHeader = doc.createElement("h2") ; 
     423        //styleHeader.setTextContent("Style page:") ; 
     424        styleHeader.appendChild(doc.createTextNode("Style page:")) ; 
     425        page.appendChild(styleHeader) ; 
     426                 
     427        Element styleXml = doc.createElement("pre") ; 
     428        String style_pp = receptionist.converter.getPrettyString(style); 
     429 
     430        //styleXml.setTextContent(style_pp); 
     431        styleXml.appendChild(doc.createTextNode(style_pp)); 
     432        page.appendChild(styleXml) ; 
     433                 
     434                 
     435        return (Element)page ; 
     436    } 
     437         
     438    private class MyUriResolver implements URIResolver { 
     439                 
     440        public Source resolve(String href, String base) { 
     441                         
     442            System.out.println("resolving href='" + href + "', base='" + base + "'") ; 
    235443                                                 
    236                         Element s = skinAndLibraryXsl.createElement("skinXsl") ; 
    237                         s.appendChild(skinAndLibraryXsl.importNode(skinXsl.getDocumentElement(), true)) ; 
    238                         root.appendChild(s) ; 
    239                          
    240                         Element l = skinAndLibraryXsl.createElement("libraryXsl") ; 
    241                         l.appendChild(skinAndLibraryXsl.importNode(libraryXsl.getDocumentElement(), true)) ; 
    242                         root.appendChild(l) ; 
    243                          
    244                          
    245                         System.out.println("Pre - processing") ; 
    246                         //pre-process the skin style sheet 
    247                         Transformer preProcessor = transformerFactory.newTransformer(new DOMSource(preprocessingXsl)); 
    248                         DOMResult result = new DOMResult(); 
    249                         result.setNode(processedXsl) ; 
    250                         preProcessor.transform(new DOMSource(skinAndLibraryXsl), result); 
    251                 } catch (TransformerException e) { 
    252                         return constructErrorPage(e) ; 
    253                 }  catch (Exception e) { 
    254                         System.out.println("error preprocessing the skin xslt") ; 
    255                         e.printStackTrace() ; 
    256                         return constructErrorPage(e) ; 
    257                 } 
    258                  
    259                 //return sourceXml.getDocumentElement() ; 
    260                  
    261                 // Document finalPage = receptionist.converter.newDOM(); // **** 
    262                 Document finalPageParsed = null; 
    263  
    264                 //transform source doc 
    265                 try { 
    266                  
    267                     /* 
    268                     //Tranform XSL DOM to String         
    269                         TransformerFactory tf = TransformerFactory.newInstance(); 
    270                         Transformer trans = tf.newTransformer(); 
    271                         StringWriter sw = new StringWriter(); 
    272                         trans.transform(new DOMSource(processedXsl), new StreamResult(sw)); 
    273                         // String theXSLAnswer = sw.toString(); // **** 
    274                          
    275                          
    276                         //Tranform XML DOM to String     
    277                         TransformerFactory tf2 = TransformerFactory.newInstance(); 
    278                         Transformer trans2 = tf2.newTransformer(); 
    279                         StringWriter sw2 = new StringWriter(); 
    280                         trans2.transform(new DOMSource(sourceXml), new StreamResult(sw2)); 
    281                         //String theXMLAnswer = sw2.toString(); 
    282                         */ 
    283  
    284                         Transformer transformer = transformerFactory.newTransformer(new DOMSource(processedXsl)); 
    285                         // transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"); 
    286                         //DOMResult result = new DOMResult(); 
    287                         //result.setNode(finalPage); 
    288                          
    289                         //transformer.transform(new DOMSource(sourceXml), result2); 
    290                         StringWriter result2 = new StringWriter(); 
    291                         transformer.transform(new DOMSource(sourceXml), new StreamResult(result2)); 
    292  
    293                         XMLConverter converter = new XMLConverter(); 
    294                         finalPageParsed = converter.getDOM(result2.toString());                                  
    295                          
    296                 } catch (TransformerException e) { 
    297                         return constructErrorPage(e) ; 
    298                 } catch (Exception e) { 
    299                  
    300                         System.out.println("error transforming page") ; 
    301                         e.printStackTrace() ; 
    302                          
    303                         //return processedXsl.getDocumentElement() ; 
    304                         return constructErrorPage(e) ; 
    305                 } 
    306                          
    307                 return finalPageParsed; 
    308         } 
    309          
    310         private Element constructErrorPage(TransformerException exception) { 
    311                 Element page = receptionist.doc.createElement("page") ; 
    312                  
    313                 Element header = receptionist.doc.createElement("h1") ; 
    314                 header.setTextContent("Error") ; 
    315                 page.appendChild(header) ; 
    316                  
    317                 Element prompt = receptionist.doc.createElement("p") ; 
    318                 prompt.setTextContent("The following exception occured: ") ; 
    319                 page.appendChild((prompt)) ; 
    320                  
    321                 Element errorXml = receptionist.doc.createElement("code") ; 
    322                 errorXml.setTextContent(exception.getMessageAndLocation()) ; 
    323                 page.appendChild(errorXml) ; 
    324                  
    325                 return page ; 
    326                  
    327         } 
    328          
    329         private Element constructErrorPage(Exception exception) { 
    330                 Element page = receptionist.doc.createElement("page") ; 
    331                  
    332                 Element header = receptionist.doc.createElement("h1") ; 
    333                 header.setTextContent("Error") ; 
    334                 page.appendChild(header) ; 
    335                  
    336                 Element prompt = receptionist.doc.createElement("p") ; 
    337                 prompt.setTextContent("The following exception occured: ") ; 
    338                 page.appendChild((prompt)) ; 
    339                  
    340                 Element errorXml = receptionist.doc.createElement("code") ; 
    341                 errorXml.setTextContent(exception.toString()) ; 
    342                 page.appendChild(errorXml) ; 
    343                  
    344                  
    345                 return page ; 
    346         } 
    347          
    348  
    349         private Element constructErrorPage(Element source, Document style, Exception exception) { 
    350                 Element page = receptionist.doc.createElement("page") ; 
    351                  
    352                 Element header = receptionist.doc.createElement("h1") ; 
    353                 header.setTextContent("Error") ; 
    354                 page.appendChild(header) ; 
    355                  
    356                 Element prompt = receptionist.doc.createElement("p") ; 
    357                 prompt.setTextContent("The following exception occured: ") ; 
    358                 page.appendChild((prompt)) ; 
    359                  
    360                 Element errorXml = receptionist.doc.createElement("code") ; 
    361                 errorXml.setTextContent(exception.getMessage()) ; 
    362                 page.appendChild(errorXml) ; 
    363                  
    364                 /* 
    365                 Element stackTrace = receptionist.doc.createElement("ul") ; 
    366                  
    367                 StackTraceElement[] st = exception.getStackTrace() ; 
    368                 for (int i=0 ; i< st.length ; i++) { 
    369                         Element ste = receptionist.doc.createElement("li") ; 
    370                         ste.setTextContent(st[i].toString()) ; 
    371                         stackTrace.appendChild(ste) ; 
    372                 } 
    373                 errorMessage.appendChild(stackTrace) ; 
    374                 */ 
    375                  
    376                 Element sourceHeader = receptionist.doc.createElement("h2") ; 
    377                 sourceHeader.setTextContent("Source page:") ; 
    378                 page.appendChild(sourceHeader) ; 
    379                  
    380                 Element sourceXml = receptionist.doc.createElement("pre") ; 
    381                 sourceXml.setTextContent(receptionist.converter.getPrettyString(source)) ; 
    382                 page.appendChild(sourceXml) ; 
    383                  
    384                 Element styleHeader = receptionist.doc.createElement("h2") ; 
    385                 styleHeader.setTextContent("Style page:") ; 
    386                 page.appendChild(styleHeader) ; 
    387                  
    388                 Element styleXml = receptionist.doc.createElement("pre") ; 
    389                 styleXml.setTextContent(receptionist.converter.getPrettyString(style)) ; 
    390                 page.appendChild(styleXml) ; 
    391                  
    392                  
    393                 return (Element)page ; 
    394         } 
    395          
    396         private class MyUriResolver implements URIResolver { 
    397                  
    398                 public Source resolve(String href, String base) { 
    399                          
    400                         System.out.println("resolving href='" + href + "', base='" + base + "'") ; 
    401                                                  
    402                         // check in the skin directory first 
    403                          
    404                         File file = new File(rootDirectory.getAbsolutePath() + File.separatorChar + "xslt" + File.separatorChar + href) ; 
    405                          
    406                         // then check in the xslt library directory 
    407                         if (!file.canRead())  
    408                                 file = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "xslt" + File.separatorChar + href) ; 
    409                          
    410                         if (file.canRead()) { 
    411                                 Source source = new StreamSource(file) ; 
    412                                 return source ; 
    413                         } else 
    414                                 return null ; 
    415                 } 
    416                  
    417         } 
     444            // check in the skin directory first 
     445                         
     446            File file = new File(rootDirectory.getAbsolutePath() + File.separatorChar + "xslt" + File.separatorChar + href) ; 
     447                         
     448            // then check in the xslt library directory 
     449            if (!file.canRead())  
     450                file = new File(GlobalProperties.getGSDL3Home() + File.separatorChar + "ui" + File.separatorChar + "xslt" + File.separatorChar + href) ; 
     451                         
     452            if (file.canRead()) { 
     453                Source source = new StreamSource(file) ; 
     454                return source ; 
     455            } else 
     456                return null ; 
     457        } 
     458                 
     459    } 
    418460         
    419461 
  • greenstone3/trunk/src/java/org/greenstone/gsdl3/core/SkinnedReceptionist.java

    r16374 r16446  
    11package org.greenstone.gsdl3.core; 
    22 
    3 import java.util.*
    4 import java.io.*
     3import java.util.*
     4import java.io.*
    55 
    66import org.w3c.dom.NodeList;  
     
    1111import org.greenstone.gsdl3.util.*; 
    1212 
    13 import javax.xml.xpath.*
     13