View Javadoc
1   /*
2    * Copyright (c) 2002-2017, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.xmlpage.util;
35  
36  import fr.paris.lutece.plugins.xmlpage.service.XmlPageElement;
37  import fr.paris.lutece.plugins.xmlpage.service.XmlPageXslContent;
38  import fr.paris.lutece.portal.service.html.XmlTransformerService;
39  import fr.paris.lutece.portal.service.util.AppLogService;
40  
41  import java.util.HashMap;
42  import java.util.Map;
43  
44  import javax.xml.transform.stream.StreamSource;
45  
46  
47  /**
48   * Content utility class for selecting transformation result.
49   */
50  public class XmlPageContentUtils
51  {
52      private static final String PARAMETER_XSL_URL_XMLPAGE = "urlXmlpage";
53      private static final String PARAMETER_XSL_PATH_RESOURCES = "pathResources";
54      private static final String PATH_SEPARATOR = "/";
55  
56      /**
57       * Default constructor
58       */
59      protected XmlPageContentUtils(  )
60      {
61          // nothing to do
62      }
63  
64      /**
65       * Returns the Html Content of the XmlPageElement
66       * If the content is not found in cache, generate it and add it to the cache.
67       *
68       * @param xmlPageElement The XmlPageElement object
69       * @param strStyle style format wanted
70       * @return the html code of the dbPage
71       */
72      public static String getContent( XmlPageElement xmlPageElement, String strStyle, boolean tranformCache,
73          Map<String, String> mapParameters )
74      {
75          String strContent = "";
76  
77          if ( xmlPageElement != null )
78          {
79              XmlPageXslContent xslContent = xmlPageElement.getXslContent( strStyle );
80  
81              if ( xslContent != null )
82              {
83                  AppLogService.debug( "getContent for " + strStyle + " for page " + xmlPageElement.getName(  ) );
84  
85                  try
86                  {
87                      strContent = xslContent.getResultContent(  );
88  
89                      //If transform cache is not active or if content is not already transform
90                      if ( !tranformCache || ( strContent == null ) )
91                      {
92                          // Do the XSLT transformation of XML File
93                          AppLogService.debug( "Transformation of XML File " + xmlPageElement.getName(  ) + " using XSL" );
94  
95                          String strXmlFilePath = xmlPageElement.getXmlFilesDirectoryPath(  ).concat( PATH_SEPARATOR )
96                                                                .concat( xmlPageElement.getXmlFileName(  ) );
97                          String strXslFilePath = xmlPageElement.getXslFilesDirectoryPath(  ).concat( PATH_SEPARATOR )
98                                                                .concat( xslContent.getFileName(  ) );
99  
100                         StreamSource sourceXml = new StreamSource( strXmlFilePath );
101                         StreamSource sourceStyleSheet = new StreamSource( strXslFilePath );
102 
103                         Map<String, String> mapParams = new HashMap<String, String>(  );
104                         mapParams.put( PARAMETER_XSL_URL_XMLPAGE, xmlPageElement.getDisplayLink(  ) );
105                         mapParams.put( PARAMETER_XSL_PATH_RESOURCES, xmlPageElement.getResourceFilesDirectoryPath(  ) );
106 
107                         if ( mapParameters != null )
108                         {
109                             mapParams.putAll( mapParameters );
110                         }
111 
112                         XmlTransformerService xmlTransformerService = new XmlTransformerService(  );
113                         strContent = xmlTransformerService.transformBySourceWithXslCache( sourceXml, sourceStyleSheet,
114                                 strXslFilePath, mapParams, null );
115                         xslContent.setResultContent( strContent );
116                     }
117                 }
118                 catch ( Exception e )
119                 {
120                     AppLogService.error( e.getMessage(  ), e );
121 
122                     return null;
123                 }
124             }
125         }
126 
127         return strContent;
128     }
129 }