Changeset 7519


Ignore:
Timestamp:
11/27/06 12:23:38 (5 years ago)
Author:
sys
Message:

Chargement des xsl à la demande

Location:
trunk/Jav_CO/com/scenari/m/co/donnee
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXsl.java

    r7478 r7519  
    7979 
    8080        /** Template Xsl */ 
    81         protected Templates fTemplate = null; 
     81        protected Object fTemplate = null; 
    8282 
    8383        /** 
     
    170170        public void wSetValue(IHComposantType pCompType, String pValue, IHContextDonnee pContextDonnee) throws Exception { 
    171171                if (pValue != null) { 
    172                         xLoadTemplates(pCompType, pValue, pContextDonnee.hGetDocSource()); 
    173                 } 
    174                 xInitDonneeFc(pCompType); 
     172                        XMLReader vXmlReader = HPoolXmlReader.hGet().hGetXmlReader(true, false); 
     173                        try { 
     174                                IHSource vDocSource = pContextDonnee.hGetDocSource(); 
     175                                TransformerFactory vTransFact = new TransformerFactoryImpl(); 
     176                                vDocSource.hSetAliasResolver((IHAliasResolver) pCompType); 
     177 
     178                                vTransFact.setURIResolver(vDocSource); 
     179                                vXmlReader.setEntityResolver(vDocSource); 
     180                                SAXSource vSource = null; 
     181                                InputSource vInputSource = new InputSource(new StringReader(pValue.trim())); 
     182                                vInputSource.setSystemId(vDocSource.hGetSystemId()); 
     183                                vSource = new SAXSource(vXmlReader, vInputSource); 
     184                                fTemplate = vTransFact.newTemplates(vSource); 
     185                        } catch (Exception e) { 
     186                                fTemplate = null; 
     187                                throw (Exception) HLogMgr.hAddMessage(e, "Echec à la compilation d'un template XSL du composant type '" + pCompType + "':\n" + pValue); 
     188                        } finally { 
     189                                HPoolXmlReader.hGet().hFreeXmlReader(vXmlReader); 
     190                        } 
     191                } 
    175192        } 
    176193 
     
    182199         */ 
    183200        public void wSetValueParRef(IHComposantType pCompType, IHSource pDocSource) throws java.lang.Exception { 
    184                 xLoadTemplates(pCompType, null, pDocSource); 
    185                 xInitDonneeFc(pCompType); 
     201                fTemplate = pDocSource; 
    186202        } 
    187203 
     
    207223        protected final void xGetValue(IHDialog pDialog, IWAgent pAgent, Object pArguments, Result pResult) throws Exception { 
    208224 
    209                 if (fTemplate != null) { 
     225                IWComposant vComposant = pAgent.hGetComposant(); 
     226                Templates vTemplate = xGetTemplate(vComposant.hGetComposantType()); 
     227 
     228                if (vTemplate != null) { 
    210229 
    211230                        // On execute la XSL 
     
    215234                                        vTo = System.currentTimeMillis(); 
    216235                                } 
    217                                 IWComposant vComposant = pAgent.hGetComposant(); 
    218  
    219                                 Transformer vTransformer = fTemplate.newTransformer(); 
     236 
     237                                Transformer vTransformer = vTemplate.newTransformer(); 
    220238 
    221239                                IHSource vResolver = vComposant.hGetUnivers().hGetEspacePublications().hFindSource(null); 
     
    249267 
    250268        /** 
    251          * Initialise la donnee lors de sa déclaration dans la feuille de 
    252          * comportement. 
    253          *  
    254          * @param pCompType 
    255          *            com.scenari.m.co.composant.IHComposantType 
    256          */ 
    257         protected void xInitDonneeFc(IHComposantType pCompType) throws Exception { 
    258         } 
    259  
    260         /** 
    261          * Crée un templates. 
    262          *  
    263          */ 
    264         public final void xLoadTemplates(IHComposantType pCompType, String pContent, IHSource pDocSource) throws Exception { 
    265                 XMLReader vXmlReader = HPoolXmlReader.hGet().hGetXmlReader(true, false); 
    266                 try { 
    267                         TransformerFactory vTransFact = new TransformerFactoryImpl(); 
    268                         pDocSource.hSetAliasResolver((IHAliasResolver) pCompType); 
    269  
    270                         vTransFact.setURIResolver(pDocSource); 
    271                         vXmlReader.setEntityResolver(pDocSource); 
    272                         SAXSource vSource = null; 
    273                         if (pContent == null) { 
    274                                 // Le XSL est en ressource associée 
    275                                 // On mémorise la source et on cherche si ce template a édja été 
    276                                 // calculé. 
    277                                 InputStream vStream = pDocSource.hGetInputStream(); 
    278                                 if (vStream == null) { throw HLogMgr.hNewException("Le fichier template XSL '" + pDocSource + "' est introuvable."); } 
     269         * Récupération du template (compilation si nécessaire). 
     270         * 
     271         */ 
     272        protected synchronized Templates xGetTemplate(IHComposantType pCompType) throws Exception { 
     273                if (fTemplate ==null) return null; 
     274                if (fTemplate instanceof Templates) { 
     275                        //Template déjà compilé 
     276                        return (Templates) fTemplate; 
     277                } else { 
     278                        //Template à compiler 
     279                        IHSource vDocSource = (IHSource) fTemplate; 
     280                        XMLReader vXmlReader = HPoolXmlReader.hGet().hGetXmlReader(true, false); 
     281                        try { 
     282                                TransformerFactory vTransFact = new TransformerFactoryImpl(); 
     283                                vDocSource.hSetAliasResolver((IHAliasResolver) pCompType); 
     284 
     285                                vTransFact.setURIResolver(vDocSource); 
     286                                vXmlReader.setEntityResolver(vDocSource); 
     287                                InputStream vStream = vDocSource.hGetInputStream(); 
     288                                if (vStream == null) { throw HLogMgr.hNewException("Le fichier template XSL '" + vDocSource + "' est introuvable."); } 
    279289                                InputSource vInputSource = new InputSource(vStream); 
    280                                 vInputSource.setSystemId(pDocSource.hGetSystemId()); 
    281                                 vSource = new SAXSource(vXmlReader, vInputSource); 
     290                                vInputSource.setSystemId(vDocSource.hGetSystemId()); 
     291                                SAXSource vSource = new SAXSource(vXmlReader, vInputSource); 
    282292                                try { 
    283293                                        fTemplate = vTransFact.newTemplates(vSource); 
     
    285295                                        vStream.close(); 
    286296                                } 
    287                         } else { 
    288                                 // Le XSL est directement défini dans la feuille de comportement 
    289                                 InputSource vInputSource = new InputSource(new StringReader(pContent.trim())); 
    290                                 vInputSource.setSystemId(pDocSource.hGetSystemId()); 
    291                                 vSource = new SAXSource(vXmlReader, vInputSource); 
    292                                 fTemplate = vTransFact.newTemplates(vSource); 
     297 
     298                        } catch (Exception e) { 
     299                                fTemplate = null; 
     300                                throw (Exception) HLogMgr.hAddMessage(e, "Echec à la compilation d'un template XSL du composant type '" + pCompType + "':\n" + vDocSource.toString()); 
     301                        } finally { 
     302                                HPoolXmlReader.hGet().hFreeXmlReader(vXmlReader); 
    293303                        } 
    294  
    295                 } catch (Exception e) { 
    296                         fTemplate = null; 
    297                         throw (Exception) HLogMgr.hAddMessage(e, "Echec à la compilation d'un template XSL du composant type '" + pCompType + "':\n" + ((pContent == null) ? pDocSource.toString() : pContent)); 
    298                 } finally { 
    299                         HPoolXmlReader.hGet().hFreeXmlReader(vXmlReader); 
     304                        return (Templates)fTemplate; 
    300305                } 
    301306        } 
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXslDouble.java

    r7478 r7519  
    132132         *  
    133133         */ 
    134         public final IAgentData wSetComposant(IWComposant pComposant, Element pNodeRoot, IHSource pSource) throws Exception { 
     134        public IAgentData wSetComposant(IWComposant pComposant, Element pNodeRoot, IHSource pSource) throws Exception { 
    135135 
    136136                // On execute le XSL 
    137                 Transformer vTransformer = fTemplate.newTransformer(); 
     137                Transformer vTransformer = xGetTemplate(pComposant.hGetComposantType()).newTransformer(); 
    138138 
    139139                IHSource vResolver = pComposant.hGetUnivers().hGetEspaceSources().hFindSource(null); 
     
    177177         *  
    178178         */ 
    179         public final void xLoadTemplates(IWComposant pComposant, String pSource) throws Exception { 
     179        protected final void xLoadTemplates(IWComposant pComposant, String pSource) throws Exception { 
    180180 
    181181                if (pSource != null && !pSource.equals("")) { 
     
    191191                                vTransFact.setURIResolver(vResolver); 
    192192                                SAXSource vSource = null; 
    193  
    194                                 // On cree la SaxSource en simulant l'URI dans la feuille de 
    195                                 // comportement pour permettre l'import d'entités externes. 
    196                                 // ** mis en commentaire : Pourquoi url de la FC et pas du 
    197                                 // composant puisqu'one est au niveau statique (sys, 
    198                                 // 2002/02/06)** 
    199                                 // String vUri = 
    200                                 // pComposant.hGetComposantType().hGetPrescrFormation().wGetUriSourceFC(); 
    201                                 // vResolver.hSetUriDocSource(vUri); 
    202193                                vXmlReader.setEntityResolver(vResolver); 
    203194                                InputSource vInputSource = new InputSource(new StringReader(pSource.trim())); 
    204195                                vInputSource.setSystemId(vResolver.hGetSystemId()); 
    205196                                vSource = new SAXSource(vXmlReader, vInputSource); 
    206                                 // vSource.setSystemId(vUri); 
    207  
     197                                 
    208198                                // On cree le template 
    209199                                fTemplate = vTransFact.newTemplates(vSource); 
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXslDynamique.java

    r7478 r7519  
    5050 
    5151import com.scenari.m.co.agent.IWAgent; 
    52 import com.scenari.m.co.composant.IHComposantType; 
    5352import com.scenari.m.co.composant.IWComposant; 
    5453import com.scenari.m.co.dialog.IHDialog; 
     
    121120        } 
    122121 
    123         /** 
    124          *  
    125          * Initialise la donnee lors de sa déclaration dans la feuille de comportement. 
    126          *  
    127          * @param pCompType com.scenari.m.co.composant.IHComposantType 
    128          */ 
    129         protected final void xInitDonneeFc(IHComposantType pCompType) throws Exception { 
    130         } 
    131  
    132122} 
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXslMonoTemplate.java

    r7478 r7519  
    3939package com.scenari.m.co.donnee; 
    4040 
    41 import java.io.StringReader; 
    4241import java.io.StringWriter; 
    43 import java.io.Writer; 
    4442 
    4543import javax.xml.transform.Transformer; 
    46 import javax.xml.transform.TransformerFactory; 
    47 import javax.xml.transform.dom.DOMResult; 
    4844import javax.xml.transform.dom.DOMSource; 
    49 import javax.xml.transform.sax.SAXSource; 
    5045import javax.xml.transform.stream.StreamResult; 
    5146 
    52 import org.w3c.dom.Document; 
    5347import org.w3c.dom.Element; 
    54 import org.w3c.dom.Node; 
    55 import org.xml.sax.InputSource; 
    56 import org.xml.sax.XMLReader; 
    5748 
    58 import com.scenari.m.co.agent.IWAgent; 
    5949import com.scenari.m.co.composant.IHComposantType; 
    6050import com.scenari.m.co.composant.IWComposant; 
    61 import com.scenari.m.co.dialog.IHDialog; 
    6251import com.scenari.s.co.source.IHAliasResolver; 
    6352import com.scenari.s.co.source.IHSource; 
    64 import com.scenari.s.fw.log.HLogMgr; 
    6553import com.scenari.s.fw.log.HTrace; 
    6654import com.scenari.s.fw.log.HTraceMgr; 
    67 import com.scenari.s.fw.util.xml.HPoolXmlReader; 
    6855import com.scenari.s.fw.utils.HPoolBuffer; 
    69 import com.scenari.xsldom.xalan.processor.TransformerFactoryImpl; 
    7056 
    7157/** 
     
    7561 *  
    7662 */ 
    77 public class WDonneeXslMonoTemplate extends WDonneeXsl implements Cloneable { 
     63public class WDonneeXslMonoTemplate extends WDonneeXslDouble implements Cloneable { 
    7864 
    7965        public static HTrace sTraceXslMonoTemplate = HTraceMgr.hRegister(WDonneeXslMonoTemplate.class.getName(), "Affiche le XSL produit par le premier xsl d'une donnée de type 'xsl-monotemplate'."); 
     
    9682         *  
    9783         *  
    98          * @see com.scenari.m.co.donnee.IData#getLevel() 
    99          */ 
    100         public final int getLevel() { 
    101                 return IAgentData.LEVEL_DYNAMIQUE; 
    102         } 
    103  
    104         /** 
    105          *  
    106          *  
    107          * @see com.scenari.m.co.donnee.IData#getString(com.scenari.m.co.dialog.IHDialog, 
    108          *      java.lang.Object, java.lang.Object) 
    109          */ 
    110         public final String getString(IHDialog pDialog, Object pOwner, Object pArguments) throws Exception { 
    111                 StringWriter vWriter = HPoolBuffer.get().hGetStringWriter(); 
    112                 xGetValue(pDialog, (IWAgent) pOwner, pArguments, new StreamResult(vWriter)); 
    113                 String vResult = vWriter.getBuffer().substring(0); 
    114                 HPoolBuffer.get().hFreeStringWriter(vWriter); 
    115                 return vResult; 
    116         } 
    117          
    118     public final Node getNode(IHDialog pDialog, Object pOwner, Object pArguments) throws java.lang.Exception { 
    119         Document vDoc = HDonneeUtils.hCreateDoc(); 
    120         xGetValue(pDialog, (IWAgent) pOwner, pArguments, new DOMResult(vDoc)); 
    121         return vDoc; 
    122     } 
    123  
    124         /** 
    125          *  
    126          *  
    127          * @see com.scenari.m.co.donnee.IData#writeValue(java.io.Writer, 
    128          *      com.scenari.m.co.dialog.IHDialog, java.lang.Object, 
    129          *      java.lang.Object) 
    130          */ 
    131         public final void writeValue(Writer pWriter, IHDialog pDialog, Object pOwner, Object pArguments) throws Exception { 
    132                 xGetValue(pDialog, (IWAgent) pOwner, pArguments, new StreamResult(pWriter)); 
    133         } 
    134  
    135         /** 
    136          *  
    137          *  
    13884         * @see com.scenari.m.co.donnee.IAgentData#wSetComposant(com.scenari.m.co.composant.IWComposant, 
    13985         *      org.w3c.dom.Element, IHSource) 
     
    14490                IHComposantType vCompType = pComposant.hGetComposantType(); 
    14591 
    146                 Transformer vTransformer = fTemplate.newTransformer(); 
     92                Transformer vTransformer = xGetTemplate(pComposant.hGetComposantType()).newTransformer(); 
    14793 
    14894                IHSource vResolver = pComposant.hGetUnivers().hGetEspaceSources().hFindSource(null); 
     
    213159 
    214160        } 
    215  
    216         /** 
    217          * Crée un templates 
    218          */ 
    219         public final void xLoadTemplates(IWComposant pComposant, String pSource) throws Exception { 
    220  
    221                 if (pSource != null && !pSource.equals("")) { 
    222                         XMLReader vXmlReader = HPoolXmlReader.hGet().hGetXmlReader(true, false); 
    223                         try { 
    224                                 // On prépare... 
    225                                 TransformerFactory vTransFact = new TransformerFactoryImpl(); 
    226  
    227                                 IHSource vResolver = pComposant.hGetUnivers().hGetEspaceSources().hFindSource(null); 
    228                                 vResolver.hSetAliasResolver((IHAliasResolver) pComposant); 
    229  
    230                                 vTransFact.setURIResolver(vResolver); 
    231                                 SAXSource vSource = null; 
    232  
    233                                 vXmlReader.setEntityResolver(vResolver); 
    234                                 InputSource vInputSource = new InputSource(new StringReader(pSource.trim())); 
    235                                 vInputSource.setSystemId(vResolver.hGetSystemId()); 
    236                                 vSource = new SAXSource(vXmlReader, vInputSource); 
    237  
    238                                 // On cree le template 
    239                                 fTemplate = vTransFact.newTemplates(vSource); 
    240  
    241                         } catch (Exception e) { 
    242                                 fTemplate = null; 
    243                                 throw (Exception) HLogMgr.hAddMessage(e, "Echec à la compilation d'un template XSL de '" + pComposant.toString() + "':\n" + pSource); 
    244                         } finally { 
    245                                 HPoolXmlReader.hGet().hFreeXmlReader(vXmlReader); 
    246                         } 
    247                 } 
    248         } 
    249161} 
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXslOnSrcDynamique.java

    r7458 r7519  
    4343import org.w3c.dom.Element; 
    4444 
    45 import com.scenari.m.co.composant.IHComposantType; 
    4645import com.scenari.m.co.composant.IWComposant; 
    4746import com.scenari.m.co.dialog.IHDialog; 
     
    9897    } 
    9998 
    100     /** 
    101      * Initialise la donnee lors de sa déclaration dans la feuille de comportement. 
    102      *  
    103      * @param pCompType com.scenari.m.co.composant.IHComposantType 
    104      */ 
    105     protected final void xInitDonneeFc(IHComposantType pCompType) throws Exception { 
    106     } 
    107  
    10899} 
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXslOnSrcDynamique2.java

    r7478 r7519  
    122122        IWComposant vComposant = vAgent.hGetComposant(); 
    123123 
    124         Transformer vTransformer = fTemplate.newTransformer(); 
     124        Transformer vTransformer = xGetTemplate(vComposant.hGetComposantType()).newTransformer(); 
    125125 
    126126        IHSource vResolver = vComposant.hGetUnivers().hGetEspacePublications().hFindSource(null); 
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXslStatique.java

    r7458 r7519  
    104104 
    105105        //On execute le XSL 
    106         Transformer vTransformer = fTemplate.newTransformer(); 
     106        Transformer vTransformer = xGetTemplate(pComposant.hGetComposantType()).newTransformer(); 
    107107 
    108108        IHSource vResolver = pComposant.hGetUnivers().hGetEspaceSources().hFindSource(null); 
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXslWebMacro.java

    r7458 r7519  
    109109                IHComposantType vCompType = pComposant.hGetComposantType(); 
    110110 
    111                 Transformer vTransformer = fTemplate.newTransformer(); 
     111                Transformer vTransformer = xGetTemplate(vCompType).newTransformer(); 
    112112 
    113113                IHSource vResolver = pComposant.hGetUnivers().hGetEspaceSources().hFindSource(null); 
  • trunk/Jav_CO/com/scenari/m/co/donnee/WDonneeXslXPath.java

    r7458 r7519  
    107107 
    108108        //On execute le XSL 
    109         Transformer vTransformer = fTemplate.newTransformer(); 
     109        Transformer vTransformer = xGetTemplate(pComposant.hGetComposantType()).newTransformer(); 
    110110 
    111111        IHSource vResolver = pComposant.hGetUnivers().hGetEspaceSources().hFindSource(null); 
Note: See TracChangeset for help on using the changeset viewer.