PageDAO.java

  1. /*
  2.  * Copyright (c) 2002-2022, City of 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.portal.business.page;

  35. import fr.paris.lutece.portal.business.portlet.Portlet;
  36. import fr.paris.lutece.portal.business.portlet.PortletHome;
  37. import fr.paris.lutece.portal.service.image.ImageResource;
  38. import fr.paris.lutece.util.ReferenceList;
  39. import fr.paris.lutece.util.sql.DAOUtil;

  40. import java.sql.Statement;
  41. import java.sql.Timestamp;

  42. import java.util.ArrayList;
  43. import java.util.Collection;
  44. import java.util.List;

  45. /**
  46.  * This class porvides Data Access methods for Page objects
  47.  */
  48. public final class PageDAO implements IPageDAO
  49. {
  50.     // Constants
  51.     private static final String SQL_QUERY_SELECT = "SELECT a.id_parent, a.name, a.description, a.id_template, b.file_name, "
  52.             + " a.page_order, a.status, a.role , a.code_theme , a.node_status , a.image_content, a.mime_type, "
  53.             + "  a.date_update, a.meta_keywords, a.meta_description, a.id_authorization_node, a.display_date_update, a.is_manual_date_update FROM core_page a, core_page_template b WHERE a.id_template = b.id_template AND a.id_page = ? ";
  54.     private static final String SQL_QUERY_SELECT_WITHOUT_IMAGE_CONTENT = "SELECT a.id_parent, a.name, a.description, a.id_template, b.file_name, "
  55.             + " a.page_order, a.status, a.role , a.code_theme , a.node_status , a.mime_type, "
  56.             + "  a.date_update, a.meta_keywords, a.meta_description FROM core_page a INNER JOIN "
  57.             + " core_page_template b ON (a.id_template = b.id_template) WHERE a.id_page = ? ";
  58.     private static final String SQL_QUERY_SELECT_BY_ID_PORTLET = "SELECT a.id_page, a.id_parent, a.name, a.description, a.id_template, "
  59.             + " a.page_order, a.status, a.role , a.code_theme , a.node_status , a.image_content, a.mime_type, "
  60.             + "  a.meta_keywords, a.meta_description,a.id_authorization_node FROM core_page a,core_portlet b WHERE a.id_page = b.id_page AND b.id_portlet = ? ";
  61.     private static final String SQL_QUERY_INSERT = "INSERT INTO core_page ( id_parent , name , description, date_update, "
  62.             + " id_template,  page_order, status, role, date_creation, code_theme , node_status, image_content , mime_type ,  "
  63.             + " meta_keywords, meta_description,id_authorization_node, display_date_update, is_manual_date_update ) "
  64.             + " VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";
  65.     private static final String SQL_QUERY_DELETE = "DELETE FROM core_page WHERE id_page = ?";
  66.     private static final String SQL_QUERY_UPDATE = "UPDATE core_page SET id_parent = ?,  name = ?, description = ? , date_update = ? , "
  67.             + " id_template = ? , page_order = ? , status = ? , role = ? , code_theme = ? , node_status = ? , "
  68.             + " image_content = ? , mime_type = ? , meta_keywords = ?, meta_description = ? , id_authorization_node=? , display_date_update=? , is_manual_date_update=?"
  69.             + " WHERE id_page = ?";
  70.     private static final String SQL_QUERY_CHECKPK = "SELECT id_page FROM core_page WHERE id_page = ?";
  71.     private static final String SQL_QUERY_CHILDPAGE = "SELECT id_page , id_parent, name, description, "
  72.             + " page_order , status , role, code_theme, image_content, mime_type , meta_keywords, meta_description, date_update,id_authorization_node, display_date_update, is_manual_date_update "
  73.             + " FROM core_page WHERE id_parent = ? ORDER BY page_order";
  74.     private static final String SQL_QUERY_CHILDPAGE_MINIMAL_DATA = "SELECT id_page ,id_parent, name, description, role FROM core_page "
  75.             + " WHERE id_parent = ? ORDER BY page_order";
  76.     private static final String SQL_QUERY_SELECTALL = "SELECT id_page , id_parent,  name, description, date_update, "
  77.             + " page_order, status, role, code_theme, image_content, mime_type , meta_keywords, meta_description,id_authorization_node, display_date_update, is_manual_date_update  FROM core_page ";
  78.     private static final String SQL_QUERY_BY_ROLE_KEY = "SELECT id_page , id_parent,  name, description, date_update, "
  79.             + " page_order, status, role, code_theme, image_content, mime_type , meta_keywords, meta_description,id_authorization_node, display_date_update, is_manual_date_update  FROM core_page WHERE role = ? ";
  80.     private static final String SQL_QUERY_SELECT_PORTLET = "SELECT id_portlet FROM core_portlet WHERE id_page = ? ORDER BY portlet_order";
  81.     private static final String SQL_QUERY_UPDATE_PAGE_DATE = "UPDATE core_page SET date_update = ? WHERE id_page = ?";
  82.     private static final String SQL_QUERY_SELECTALL_NODE_PAGE = "SELECT id_page, name FROM core_page WHERE node_status = 0";
  83.     private static final String SQL_QUERY_NEW_CHILD_PAGE_ORDER = "SELECT max(page_order) FROM core_page WHERE id_parent = ?";
  84.     private static final String SQL_QUERY_CHECK_PAGE_EXIST = "SELECT id_page FROM core_page " + " WHERE id_page = ? ";
  85.     private static final String SQL_QUERY_SELECT_LAST_MODIFIED_PAGE = "SELECT id_page, id_parent, name, description, id_template, "
  86.             + " page_order, status, role , code_theme , node_status , mime_type, "
  87.             + "  date_update, meta_keywords, meta_description,id_authorization_node, display_date_update, is_manual_date_update  FROM core_page "
  88.             + " ORDER BY date_update DESC LIMIT 1";

  89.     // ImageResource queries
  90.     private static final String SQL_QUERY_SELECT_RESOURCE_IMAGE = " SELECT image_content , mime_type FROM core_page " + " WHERE id_page = ? ";
  91.     private static final String SQL_QUERY_SELECT_CHILD_PAGE_FOR_MODIFY_AUTORISATION_NODE = "  SELECT id_page FROM core_page  "
  92.             + "WHERE id_parent=? AND( id_authorization_node IS NULL OR id_page != id_authorization_node ) ";
  93.     private static final String SQL_QUERY_UPDATE_AUTORISATION_NODE = " UPDATE core_page SET id_authorization_node = ? WHERE id_page=? ";

  94.     // /////////////////////////////////////////////////////////////////////////////////////
  95.     // Access methods to data

  96.     /**
  97.      * {@inheritDoc}
  98.      */
  99.     public void insert( Page page )
  100.     {
  101.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT, Statement.RETURN_GENERATED_KEYS ) )
  102.         {
  103.             page.setOrigParentPageId( page.getParentPageId( ) );

  104.             int nIndex = 1;
  105.             daoUtil.setInt( nIndex++, page.getParentPageId( ) );
  106.             daoUtil.setString( nIndex++, page.getName( ) );
  107.             daoUtil.setString( nIndex++, page.getDescription( ) );
  108.             daoUtil.setTimestamp( nIndex++, new Timestamp( new java.util.Date( ).getTime( ) ) );
  109.             daoUtil.setInt( nIndex++, page.getPageTemplateId( ) );
  110.             daoUtil.setInt( nIndex++, page.getOrder( ) );
  111.             daoUtil.setInt( nIndex++, page.getStatus( ) );
  112.             daoUtil.setString( nIndex++, page.getRole( ) );

  113.             daoUtil.setTimestamp( nIndex++, page.getDateUpdate( ) == null ? new Timestamp( new java.util.Date( ).getTime( ) ) : page.getDateUpdate( ) );
  114.             daoUtil.setString( nIndex++, page.getCodeTheme( ) );
  115.             daoUtil.setInt( nIndex++, page.getNodeStatus( ) );
  116.             daoUtil.setBytes( nIndex++, page.getImageContent( ) );
  117.             daoUtil.setString( nIndex++, page.getMimeType( ) );

  118.             if ( ( page.getMetaKeywords( ) != null ) && ( page.getMetaKeywords( ).length( ) > 0 ) )
  119.             {
  120.                 daoUtil.setString( nIndex++, page.getMetaKeywords( ) );
  121.             }
  122.             else
  123.             {
  124.                 daoUtil.setString( nIndex++, null );
  125.             }

  126.             if ( ( page.getMetaDescription( ) != null ) && ( page.getMetaDescription( ).length( ) > 0 ) )
  127.             {
  128.                 daoUtil.setString( nIndex++, page.getMetaDescription( ) );
  129.             }
  130.             else
  131.             {
  132.                 daoUtil.setString( nIndex++, null );
  133.             }

  134.             if ( page.getIdAuthorizationNode( ) != null )
  135.             {
  136.                 daoUtil.setInt( nIndex++, page.getIdAuthorizationNode( ) );
  137.             }
  138.             else
  139.             {
  140.                 daoUtil.setIntNull( nIndex++ );
  141.             }
  142.             daoUtil.setBoolean( nIndex++, page.getDisplayDateUpdate( ) );
  143.             daoUtil.setBoolean( nIndex, page.getIsManualDateUpdate( ) );

  144.             daoUtil.executeUpdate( );

  145.             if ( daoUtil.nextGeneratedKey( ) )
  146.             {
  147.                 page.setId( daoUtil.getGeneratedKeyInt( 1 ) );
  148.             }
  149.         }
  150.     }

  151.     /**
  152.      * {@inheritDoc}
  153.      */
  154.     public Page load( int nPageId, boolean bPortlets )
  155.     {
  156.         Page page = new Page( );
  157.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT ) )
  158.         {
  159.             daoUtil.setInt( 1, nPageId );

  160.             daoUtil.executeQuery( );

  161.             if ( daoUtil.next( ) )
  162.             {
  163.                 page.setId( nPageId );
  164.                 page.setParentPageId( daoUtil.getInt( 1 ) );
  165.                 page.setOrigParentPageId( daoUtil.getInt( 1 ) );
  166.                 page.setName( daoUtil.getString( 2 ) );
  167.                 page.setDescription( daoUtil.getString( 3 ) );
  168.                 page.setPageTemplateId( daoUtil.getInt( 4 ) );
  169.                 page.setTemplate( daoUtil.getString( 5 ) );
  170.                 page.setOrder( daoUtil.getInt( 6 ) );
  171.                 page.setStatus( daoUtil.getInt( 7 ) );
  172.                 page.setRole( daoUtil.getString( 8 ) );
  173.                 page.setCodeTheme( daoUtil.getString( 9 ) );
  174.                 page.setNodeStatus( daoUtil.getInt( 10 ) );
  175.                 page.setImageContent( daoUtil.getBytes( 11 ) );
  176.                 page.setMimeType( daoUtil.getString( 12 ) );
  177.                 page.setDateUpdate( daoUtil.getTimestamp( 13 ) );
  178.                 page.setMetaKeywords( daoUtil.getString( 14 ) );
  179.                 page.setMetaDescription( daoUtil.getString( 15 ) );

  180.                 if ( daoUtil.getObject( 16 ) != null )
  181.                 {
  182.                     page.setIdAuthorizationNode( daoUtil.getInt( 16 ) );
  183.                 }

  184.                 page.setDisplayDateUpdate( daoUtil.getBoolean( 17 ) );
  185.                 page.setIsManualDateUpdate( daoUtil.getBoolean( 18 ) );

  186.                 // Patch perfs : close connection before loadPortlets
  187.                 daoUtil.free( );

  188.                 // Loads the portlets contained into the page
  189.                 if ( bPortlets )
  190.                 {
  191.                     loadPortlets( page );
  192.                 }
  193.             }

  194.         }

  195.         return page;
  196.     }

  197.     /**
  198.      * {@inheritDoc}
  199.      */
  200.     public Page loadWithoutImageContent( int nPageId, boolean bPortlets )
  201.     {
  202.         Page page = new Page( );
  203.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_WITHOUT_IMAGE_CONTENT ) )
  204.         {
  205.             daoUtil.setInt( 1, nPageId );

  206.             daoUtil.executeQuery( );

  207.             if ( daoUtil.next( ) )
  208.             {
  209.                 page.setId( nPageId );
  210.                 page.setParentPageId( daoUtil.getInt( 1 ) );
  211.                 page.setOrigParentPageId( daoUtil.getInt( 1 ) );
  212.                 page.setName( daoUtil.getString( 2 ) );
  213.                 page.setDescription( daoUtil.getString( 3 ) );
  214.                 page.setPageTemplateId( daoUtil.getInt( 4 ) );
  215.                 page.setTemplate( daoUtil.getString( 5 ) );
  216.                 page.setOrder( daoUtil.getInt( 6 ) );
  217.                 page.setStatus( daoUtil.getInt( 7 ) );
  218.                 page.setRole( daoUtil.getString( 8 ) );
  219.                 page.setCodeTheme( daoUtil.getString( 9 ) );
  220.                 page.setNodeStatus( daoUtil.getInt( 10 ) );
  221.                 page.setMimeType( daoUtil.getString( 11 ) );
  222.                 page.setDateUpdate( daoUtil.getTimestamp( 12 ) );
  223.                 page.setMetaKeywords( daoUtil.getString( 13 ) );
  224.                 page.setMetaDescription( daoUtil.getString( 14 ) );

  225.                 if ( daoUtil.getObject( 15 ) != null )
  226.                 {
  227.                     page.setIdAuthorizationNode( daoUtil.getInt( 15 ) );
  228.                 }

  229.                 // Patch perfs : close connection before loadPortlets
  230.                 daoUtil.free( );

  231.                 // Loads the portlets contained into the page
  232.                 if ( bPortlets )
  233.                 {
  234.                     loadPortlets( page );
  235.                 }
  236.             }
  237.         }

  238.         return page;
  239.     }

  240.     /**
  241.      * {@inheritDoc}
  242.      */
  243.     public Page loadPageByIdPortlet( int nPorletId )
  244.     {
  245.         Page page = new Page( );
  246.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_BY_ID_PORTLET ) )
  247.         {
  248.             daoUtil.setInt( 1, nPorletId );

  249.             daoUtil.executeQuery( );

  250.             if ( daoUtil.next( ) )
  251.             {
  252.                 page.setId( daoUtil.getInt( 1 ) );
  253.                 page.setParentPageId( daoUtil.getInt( 2 ) );
  254.                 page.setOrigParentPageId( daoUtil.getInt( 2 ) );
  255.                 page.setName( daoUtil.getString( 3 ) );
  256.                 page.setDescription( daoUtil.getString( 4 ) );
  257.                 page.setPageTemplateId( daoUtil.getInt( 5 ) );
  258.                 page.setOrder( daoUtil.getInt( 6 ) );
  259.                 page.setStatus( daoUtil.getInt( 7 ) );
  260.                 page.setRole( daoUtil.getString( 8 ) );
  261.                 page.setCodeTheme( daoUtil.getString( 9 ) );
  262.                 page.setNodeStatus( daoUtil.getInt( 10 ) );
  263.                 page.setImageContent( daoUtil.getBytes( 11 ) );
  264.                 page.setMimeType( daoUtil.getString( 12 ) );
  265.                 page.setMetaKeywords( daoUtil.getString( 13 ) );
  266.                 page.setMetaDescription( daoUtil.getString( 14 ) );
  267.                 page.setIdAuthorizationNode( daoUtil.getInt( 15 ) );
  268.             }

  269.         }

  270.         return page;
  271.     }

  272.     /**
  273.      * {@inheritDoc}
  274.      */
  275.     public void delete( int nPageId )
  276.     {
  277.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE ) )
  278.         {
  279.             daoUtil.setInt( 1, nPageId );

  280.             daoUtil.executeUpdate( );
  281.         }
  282.     }

  283.     /**
  284.      * {@inheritDoc}
  285.      */
  286.     public void store( Page page )
  287.     {
  288.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE ) )
  289.         {

  290.             daoUtil.setInt( 1, page.getParentPageId( ) );
  291.             daoUtil.setString( 2, page.getName( ) );
  292.             daoUtil.setString( 3, page.getDescription( ) );
  293.             daoUtil.setTimestamp( 4, page.getDateUpdate( ) == null ? new Timestamp( new java.util.Date( ).getTime( ) ) : page.getDateUpdate( ) );
  294.             daoUtil.setInt( 5, page.getPageTemplateId( ) );
  295.             daoUtil.setInt( 6, page.getOrder( ) );
  296.             daoUtil.setInt( 7, page.getStatus( ) );
  297.             daoUtil.setString( 8, page.getRole( ) );
  298.             daoUtil.setString( 9, page.getCodeTheme( ) );
  299.             daoUtil.setInt( 10, page.getNodeStatus( ) );
  300.             daoUtil.setBytes( 11, page.getImageContent( ) );
  301.             daoUtil.setString( 12, page.getMimeType( ) );

  302.             if ( ( page.getMetaKeywords( ) != null ) && ( page.getMetaKeywords( ).length( ) > 0 ) )
  303.             {
  304.                 daoUtil.setString( 13, page.getMetaKeywords( ) );
  305.             }
  306.             else
  307.             {
  308.                 daoUtil.setString( 13, null );
  309.             }

  310.             if ( ( page.getMetaDescription( ) != null ) && ( page.getMetaDescription( ).length( ) > 0 ) )
  311.             {
  312.                 daoUtil.setString( 14, page.getMetaDescription( ) );
  313.             }
  314.             else
  315.             {
  316.                 daoUtil.setString( 14, null );
  317.             }

  318.             if ( page.getIdAuthorizationNode( ) != null )
  319.             {
  320.                 daoUtil.setInt( 15, page.getIdAuthorizationNode( ) );
  321.             }
  322.             else
  323.             {
  324.                 daoUtil.setIntNull( 15 );
  325.             }

  326.             daoUtil.setBoolean( 16, page.getDisplayDateUpdate( ) );
  327.             daoUtil.setBoolean( 17, page.getIsManualDateUpdate( ) );

  328.             daoUtil.setInt( 18, page.getId( ) );

  329.             daoUtil.executeUpdate( );
  330.         }
  331.     }

  332.     /**
  333.      * Checks if the page identifier exists
  334.      *
  335.      * @param nKey
  336.      *            The page identifier
  337.      * @return true if the identifier exists, false if not
  338.      */
  339.     boolean checkPrimaryKey( int nKey )
  340.     {
  341.         boolean check = false;
  342.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_CHECKPK ) )
  343.         {

  344.             daoUtil.setInt( 1, nKey );
  345.             daoUtil.executeQuery( );

  346.             if ( daoUtil.next( ) )
  347.             {
  348.                 check = true;
  349.             }
  350.         }
  351.         return check;
  352.     }

  353.     /**
  354.      * loads the portlets list contained into the page
  355.      *
  356.      * @param page
  357.      *            The object page
  358.      */
  359.     void loadPortlets( Page page )
  360.     {
  361.         List<Integer> portletIds = new ArrayList<>( );
  362.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_PORTLET ) )
  363.         {
  364.             daoUtil.setInt( 1, page.getId( ) );

  365.             daoUtil.executeQuery( );

  366.             // Patch perfs : get query responses and close connection before getting portlet

  367.             while ( daoUtil.next( ) )
  368.             {
  369.                 portletIds.add( Integer.valueOf( daoUtil.getInt( 1 ) ) );
  370.             }

  371.         }

  372.         ArrayList<Portlet> pageColl = new ArrayList<>( );

  373.         for ( Integer nPortletId : portletIds )
  374.         {
  375.             Portlet portlet = PortletHome.findByPrimaryKey( nPortletId );
  376.             pageColl.add( portlet );
  377.         }

  378.         page.setPortlets( pageColl );
  379.     }

  380.     /**
  381.      * {@inheritDoc}
  382.      */
  383.     public Collection<Page> selectChildPages( int nParentPageId )
  384.     {
  385.         Collection<Page> pageList = new ArrayList<>( );
  386.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_CHILDPAGE ) )
  387.         {
  388.             daoUtil.setInt( 1, nParentPageId );

  389.             daoUtil.executeQuery( );

  390.             while ( daoUtil.next( ) )
  391.             {
  392.                 Page page = new Page( );

  393.                 page.setId( daoUtil.getInt( 1 ) );
  394.                 page.setParentPageId( daoUtil.getInt( 2 ) );
  395.                 page.setOrigParentPageId( daoUtil.getInt( 2 ) );
  396.                 page.setName( daoUtil.getString( 3 ) );
  397.                 page.setDescription( daoUtil.getString( 4 ) );
  398.                 page.setOrder( daoUtil.getInt( 5 ) );
  399.                 page.setStatus( daoUtil.getInt( 6 ) );
  400.                 page.setRole( daoUtil.getString( 7 ) );
  401.                 page.setCodeTheme( daoUtil.getString( 8 ) );
  402.                 page.setImageContent( daoUtil.getBytes( 9 ) );
  403.                 page.setMimeType( daoUtil.getString( 10 ) );
  404.                 page.setMetaKeywords( daoUtil.getString( 11 ) );
  405.                 page.setMetaDescription( daoUtil.getString( 12 ) );
  406.                 page.setDateUpdate( daoUtil.getTimestamp( 13 ) );

  407.                 if ( daoUtil.getObject( 14 ) != null )
  408.                 {
  409.                     page.setIdAuthorizationNode( daoUtil.getInt( 14 ) );
  410.                 }
  411.                 page.setDisplayDateUpdate( daoUtil.getBoolean( 15 ) );
  412.                 page.setIsManualDateUpdate( daoUtil.getBoolean( 16 ) );

  413.                 pageList.add( page );
  414.             }

  415.         }

  416.         return pageList;
  417.     }

  418.     /**
  419.      * {@inheritDoc}
  420.      */
  421.     public Collection<Page> selectChildPagesMinimalData( int nParentPageId )
  422.     {
  423.         Collection<Page> pageList = new ArrayList<>( );
  424.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_CHILDPAGE_MINIMAL_DATA ) )
  425.         {
  426.             daoUtil.setInt( 1, nParentPageId );

  427.             daoUtil.executeQuery( );

  428.             while ( daoUtil.next( ) )
  429.             {
  430.                 Page page = new Page( );
  431.                 page.setId( daoUtil.getInt( 1 ) );
  432.                 page.setParentPageId( daoUtil.getInt( 2 ) );
  433.                 page.setOrigParentPageId( daoUtil.getInt( 2 ) );
  434.                 page.setName( daoUtil.getString( 3 ) );
  435.                 page.setDescription( daoUtil.getString( 4 ) );
  436.                 page.setRole( daoUtil.getString( 5 ) );
  437.                 pageList.add( page );
  438.             }

  439.         }

  440.         return pageList;
  441.     }

  442.     /**
  443.      * {@inheritDoc}
  444.      */
  445.     public List<Page> selectAllPages( )
  446.     {
  447.         List<Page> pageList = new ArrayList<>( );
  448.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL ) )
  449.         {
  450.             daoUtil.executeQuery( );

  451.             while ( daoUtil.next( ) )
  452.             {
  453.                 Page page = new Page( );

  454.                 page.setId( daoUtil.getInt( 1 ) );
  455.                 page.setParentPageId( daoUtil.getInt( 2 ) );
  456.                 page.setOrigParentPageId( daoUtil.getInt( 2 ) );
  457.                 page.setName( daoUtil.getString( 3 ) );
  458.                 page.setDescription( daoUtil.getString( 4 ) );
  459.                 page.setDateUpdate( daoUtil.getTimestamp( 5 ) );
  460.                 page.setOrder( daoUtil.getInt( 6 ) );
  461.                 page.setStatus( daoUtil.getInt( 7 ) );
  462.                 page.setRole( daoUtil.getString( 8 ) );
  463.                 page.setCodeTheme( daoUtil.getString( 9 ) );
  464.                 page.setImageContent( daoUtil.getBytes( 10 ) );
  465.                 page.setMimeType( daoUtil.getString( 11 ) );
  466.                 page.setMetaKeywords( daoUtil.getString( 12 ) );
  467.                 page.setMetaDescription( daoUtil.getString( 13 ) );

  468.                 if ( daoUtil.getObject( 14 ) != null )
  469.                 {
  470.                     page.setIdAuthorizationNode( daoUtil.getInt( 14 ) );
  471.                 }
  472.                 page.setDisplayDateUpdate( daoUtil.getBoolean( 15 ) );
  473.                 page.setIsManualDateUpdate( daoUtil.getBoolean( 16 ) );

  474.                 pageList.add( page );
  475.             }

  476.         }

  477.         return pageList;
  478.     }

  479.     /**
  480.      * {@inheritDoc}
  481.      */
  482.     public void invalidatePage( int nPageId )
  483.     {
  484.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE_PAGE_DATE ) )
  485.         {

  486.             daoUtil.setTimestamp( 1, new Timestamp( new java.util.Date( ).getTime( ) ) );
  487.             daoUtil.setInt( 2, nPageId );

  488.             daoUtil.executeUpdate( );
  489.         }
  490.     }

  491.     /**
  492.      * {@inheritDoc}
  493.      */
  494.     public ReferenceList getPagesList( )
  495.     {
  496.         ReferenceList listPages = new ReferenceList( );
  497.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL_NODE_PAGE ) )
  498.         {
  499.             daoUtil.executeQuery( );

  500.             while ( daoUtil.next( ) )
  501.             {
  502.                 Page page = new Page( );
  503.                 page.setId( daoUtil.getInt( 1 ) );
  504.                 page.setName( daoUtil.getString( 2 ) );
  505.                 listPages.addItem( page.getId( ), page.getName( ) + " ( " + page.getId( ) + " )" );
  506.             }

  507.         }

  508.         return listPages;
  509.     }

  510.     /**
  511.      * Return the list of all the pages filtered by Lutece Role specified in parameter
  512.      *
  513.      * @param strRoleKey
  514.      *            The Lutece Role key
  515.      * @return a collection of pages
  516.      */
  517.     public Collection<Page> getPagesByRoleKey( String strRoleKey )
  518.     {
  519.         Collection<Page> pageList = new ArrayList<>( );
  520.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_BY_ROLE_KEY ) )
  521.         {
  522.             daoUtil.setString( 1, strRoleKey );

  523.             daoUtil.executeQuery( );

  524.             while ( daoUtil.next( ) )
  525.             {
  526.                 Page page = new Page( );

  527.                 page.setId( daoUtil.getInt( 1 ) );
  528.                 page.setParentPageId( daoUtil.getInt( 2 ) );
  529.                 page.setOrigParentPageId( daoUtil.getInt( 2 ) );
  530.                 page.setName( daoUtil.getString( 3 ) );
  531.                 page.setDescription( daoUtil.getString( 4 ) );
  532.                 page.setDateUpdate( daoUtil.getTimestamp( 5 ) );
  533.                 page.setOrder( daoUtil.getInt( 6 ) );
  534.                 page.setStatus( daoUtil.getInt( 7 ) );
  535.                 page.setRole( daoUtil.getString( 8 ) );
  536.                 page.setCodeTheme( daoUtil.getString( 9 ) );
  537.                 page.setImageContent( daoUtil.getBytes( 10 ) );
  538.                 page.setMimeType( daoUtil.getString( 11 ) );
  539.                 page.setMetaKeywords( daoUtil.getString( 12 ) );
  540.                 page.setMetaDescription( daoUtil.getString( 13 ) );

  541.                 if ( daoUtil.getObject( 14 ) != null )
  542.                 {
  543.                     page.setIdAuthorizationNode( daoUtil.getInt( 14 ) );
  544.                 }

  545.                 page.setDisplayDateUpdate( daoUtil.getBoolean( 15 ) );
  546.                 page.setIsManualDateUpdate( daoUtil.getBoolean( 16 ) );

  547.                 pageList.add( page );
  548.             }

  549.         }

  550.         return pageList;
  551.     }

  552.     /**
  553.      * {@inheritDoc}
  554.      */
  555.     public int selectNewChildPageOrder( int nParentPageId )
  556.     {
  557.         int nPageOrder;
  558.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_NEW_CHILD_PAGE_ORDER ) )
  559.         {
  560.             daoUtil.setInt( 1, nParentPageId );
  561.             daoUtil.executeQuery( );

  562.             if ( !daoUtil.next( ) )
  563.             {
  564.                 // if the table is empty
  565.                 nPageOrder = 1;
  566.             }

  567.             nPageOrder = daoUtil.getInt( 1 ) + 1;

  568.         }

  569.         return nPageOrder;
  570.     }

  571.     /**
  572.      * {@inheritDoc}
  573.      */
  574.     public ImageResource loadImageResource( int nIdPage )
  575.     {
  576.         ImageResource image = null;
  577.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_RESOURCE_IMAGE ) )
  578.         {
  579.             daoUtil.setInt( 1, nIdPage );
  580.             daoUtil.executeQuery( );

  581.             if ( daoUtil.next( ) )
  582.             {
  583.                 image = new ImageResource( );
  584.                 image.setImage( daoUtil.getBytes( 1 ) );
  585.                 image.setMimeType( daoUtil.getString( 2 ) );
  586.             }

  587.         }

  588.         return image;
  589.     }

  590.     /**
  591.      * Tests if page exist
  592.      *
  593.      * @param nPageId
  594.      *            The identifier of the document
  595.      * @return true if the page existed, false otherwise
  596.      */
  597.     public boolean checkPageExist( int nPageId )
  598.     {
  599.         boolean bPageExisted = false;
  600.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_CHECK_PAGE_EXIST ) )
  601.         {

  602.             daoUtil.setInt( 1, nPageId );
  603.             daoUtil.executeQuery( );

  604.             if ( daoUtil.next( ) )
  605.             {
  606.                 bPageExisted = true;
  607.             }

  608.         }

  609.         return bPageExisted;
  610.     }

  611.     /**
  612.      * {@inheritDoc}
  613.      */
  614.     public Page loadLastModifiedPage( )
  615.     {
  616.         Page page = null;
  617.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_LAST_MODIFIED_PAGE ) )
  618.         {

  619.             daoUtil.executeQuery( );

  620.             if ( daoUtil.next( ) )
  621.             {
  622.                 page = new Page( );

  623.                 int nIndex = 1;
  624.                 page.setId( daoUtil.getInt( nIndex++ ) );
  625.                 page.setParentPageId( daoUtil.getInt( nIndex++ ) );
  626.                 page.setOrigParentPageId( page.getParentPageId( ) );
  627.                 page.setName( daoUtil.getString( nIndex++ ) );
  628.                 page.setDescription( daoUtil.getString( nIndex++ ) );
  629.                 page.setPageTemplateId( daoUtil.getInt( nIndex++ ) );
  630.                 page.setOrder( daoUtil.getInt( nIndex++ ) );
  631.                 page.setStatus( daoUtil.getInt( nIndex++ ) );
  632.                 page.setRole( daoUtil.getString( nIndex++ ) );
  633.                 page.setCodeTheme( daoUtil.getString( nIndex++ ) );
  634.                 page.setNodeStatus( daoUtil.getInt( nIndex++ ) );
  635.                 page.setMimeType( daoUtil.getString( nIndex++ ) );
  636.                 page.setDateUpdate( daoUtil.getTimestamp( nIndex++ ) );
  637.                 page.setMetaKeywords( daoUtil.getString( nIndex++ ) );
  638.                 page.setMetaDescription( daoUtil.getString( nIndex++ ) );

  639.                 if ( daoUtil.getObject( nIndex ) != null )
  640.                 {
  641.                     page.setIdAuthorizationNode( daoUtil.getInt( nIndex ) );
  642.                 }
  643.                 nIndex++;
  644.                 page.setDisplayDateUpdate( daoUtil.getBoolean( nIndex++ ) );
  645.                 page.setIsManualDateUpdate( daoUtil.getBoolean( nIndex++ ) );
  646.             }

  647.         }

  648.         return page;
  649.     }

  650.     /**
  651.      * {@inheritDoc }
  652.      */
  653.     public void updateAutorisationNode( int nIdPage, Integer nIdAutorisationNode )
  654.     {
  655.         StringBuilder strSQl = new StringBuilder( );
  656.         strSQl.append( SQL_QUERY_UPDATE_AUTORISATION_NODE );

  657.         try ( DAOUtil daoUtil = new DAOUtil( strSQl.toString( ) ) )
  658.         {

  659.             if ( nIdAutorisationNode != null )
  660.             {
  661.                 daoUtil.setInt( 1, nIdAutorisationNode );
  662.             }
  663.             else
  664.             {
  665.                 daoUtil.setIntNull( 1 );
  666.             }

  667.             daoUtil.setInt( 2, nIdPage );

  668.             daoUtil.executeUpdate( );
  669.         }
  670.     }

  671.     /**
  672.      * {@inheritDoc }
  673.      */
  674.     public List<Integer> selectPageForChangeAutorisationNode( int nIdParentPage )
  675.     {
  676.         List<Integer> listIdPage = new ArrayList<>( );
  677.         try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_CHILD_PAGE_FOR_MODIFY_AUTORISATION_NODE ) )
  678.         {

  679.             daoUtil.setInt( 1, nIdParentPage );

  680.             daoUtil.executeQuery( );

  681.             while ( daoUtil.next( ) )
  682.             {
  683.                 listIdPage.add( daoUtil.getInt( 1 ) );
  684.             }

  685.         }

  686.         return listIdPage;
  687.     }
  688. }