FormsPDFTaskTemplateDAO.java

/*
 * Copyright (c) 2002-2023, City of Paris
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  1. Redistributions of source code must retain the above copyright notice
 *     and the following disclaimer.
 *
 *  2. Redistributions in binary form must reproduce the above copyright notice
 *     and the following disclaimer in the documentation and/or other materials
 *     provided with the distribution.
 *
 *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
 *     contributors may be used to endorse or promote products derived from
 *     this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * License 1.0
 */
package fr.paris.lutece.plugins.workflow.modules.formspdf.business;

import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import fr.paris.lutece.plugins.workflow.modules.formspdf.service.FormsPDFPlugin;
import fr.paris.lutece.plugins.workflow.utils.WorkflowUtils;
import fr.paris.lutece.util.sql.DAOUtil;

public class FormsPDFTaskTemplateDAO implements IFormsPDFTaskTemplateDAO {
	
	 private static final String SQL_QUERY_SELECTALL = "SELECT id_template, name, id_form, is_generic, content, is_rte FROM workflow_task_formspdf_template";

	 private static final String SQL_QUERY_SELECT = SQL_QUERY_SELECTALL + " WHERE id_template = ?";
	 
	 private static final String SQL_QUERY_SELECT_WITH_FORM = "SELECT worklow_template.id_template, worklow_template.name, worklow_template.id_form, form.title, worklow_template.is_generic, worklow_template.content, worklow_template.is_rte FROM workflow_task_formspdf_template worklow_template"
	 		+ " LEFT JOIN forms_form form ON form.id_form = worklow_template.id_form";
	 
	 private static final String SQL_QUERY_SELECT_BY_ID_FORM_OR_GENERIC = SQL_QUERY_SELECTALL + " WHERE id_form = ? OR is_generic = true";
	 
	 private static final String SQL_QUERY_INSERT = "INSERT INTO workflow_task_formspdf_template ( name, id_form, is_generic, content, is_rte ) VALUES ( ?, ?, ?, ?, ? ) ";
	 
	 private static final String SQL_QUERY_DELETE = "DELETE FROM workflow_task_formspdf_template WHERE id_template = ? ";
	 
	 private static final String SQL_QUERY_UPDATE = "UPDATE workflow_task_formspdf_template SET name = ?, id_form = ?, is_generic = ?, content = ?, is_rte = ? WHERE id_template = ?";
	 @Override
	 public void insert(FormsPDFTaskTemplate formsPDFTaskTemplate)
	 {
		try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT, Statement.RETURN_GENERATED_KEYS, FormsPDFPlugin.getPlugin( ) ) )
        {
			int nIndex = 0;
			daoUtil.setString( ++nIndex, formsPDFTaskTemplate.getName() );
			daoUtil.setInt( ++nIndex, formsPDFTaskTemplate.getIdForm());
			daoUtil.setBoolean( ++nIndex, formsPDFTaskTemplate.isGeneric());
			daoUtil.setString( ++nIndex, formsPDFTaskTemplate.getContent() );
			daoUtil.setBoolean( ++nIndex, formsPDFTaskTemplate.isRte() );
			
			daoUtil.executeUpdate( );
			
			if ( daoUtil.nextGeneratedKey( ) )
			{
				formsPDFTaskTemplate.setId( daoUtil.getGeneratedKeyInt( 1 ) );
			}
        }
	 }
	 
	 @Override
	 public void store(FormsPDFTaskTemplate formsPDFTaskTemplate)
	 {
		 try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE, FormsPDFPlugin.getPlugin( ) ))
		 {

			 int nIndex = 0;
			 daoUtil.setString(++nIndex, formsPDFTaskTemplate.getName());
			 daoUtil.setInt(++nIndex, formsPDFTaskTemplate.getIdForm());
			 daoUtil.setBoolean(++nIndex, formsPDFTaskTemplate.isGeneric());
			 daoUtil.setString(++nIndex, formsPDFTaskTemplate.getContent());
			 daoUtil.setBoolean(++nIndex, formsPDFTaskTemplate.isRte());

			 daoUtil.setInt(++nIndex, formsPDFTaskTemplate.getId());

			 daoUtil.executeUpdate();
		 }
	 }
	 
	 @Override
	 public FormsPDFTaskTemplate load( int nIdTemplate )
	 {
		try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT, FormsPDFPlugin.getPlugin( ) ))
		{
			daoUtil.setInt(1, nIdTemplate);
			daoUtil.executeQuery();

			FormsPDFTaskTemplate formsPDFTaskTemplate = null;

			if (daoUtil.next())
			{
				formsPDFTaskTemplate = dataToObject(daoUtil);
			}

			return formsPDFTaskTemplate;
		}
	}
	
	@Override
	public List<FormsPDFTaskTemplate> loadByIdFormPlusGenerics( int nIdForm )
	{
		List<FormsPDFTaskTemplate> listFormsPDFTaskTemplate = new ArrayList<>();
		
		try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_BY_ID_FORM_OR_GENERIC, FormsPDFPlugin.getPlugin( ) ))
		{
			daoUtil.setInt(1, nIdForm);

			daoUtil.executeQuery();
			while (daoUtil.next())
			{
				listFormsPDFTaskTemplate.add(dataToObject(daoUtil));
			}
		}
		return listFormsPDFTaskTemplate;
	}
	 
	@Override
	public void delete( int nIdTemplate )
	{
	    try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE, FormsPDFPlugin.getPlugin( ) ))
		{
			daoUtil.setInt( 1, nIdTemplate );
			daoUtil.executeUpdate( );
		}
	}
	
	@Override
	public List<FormsPDFTaskTemplate> selectAll()
	{
		List<FormsPDFTaskTemplate> listFormsPDFTaskTemplate = new ArrayList<>();

		try (	DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL, FormsPDFPlugin.getPlugin( ) ))
		{
			daoUtil.executeQuery();
			while (daoUtil.next())
			{
				listFormsPDFTaskTemplate.add(dataToObject(daoUtil));
			}
		}
		return listFormsPDFTaskTemplate;
	}
	
	@Override
	public List<FormsPDFTaskTemplateDTO> selectAllWithForms()
	{
		List<FormsPDFTaskTemplateDTO> listFormsPDFTaskTemplateDto = new ArrayList<>();
		
		try ( DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_WITH_FORM, WorkflowUtils.getPlugin( ) ) )
        {
            daoUtil.executeQuery( );
            while ( daoUtil.next( ) )
            {
            	listFormsPDFTaskTemplateDto.add( dataToObjectDto( daoUtil ) );
            }
        }
        return listFormsPDFTaskTemplateDto;
	}
	
	private FormsPDFTaskTemplateDTO dataToObjectDto(DAOUtil daoUtil)
	{
		FormsPDFTaskTemplate formsPDFTaskTemplate = dataToObject(daoUtil);
		FormsPDFTaskTemplateDTO formsPDFTaskTemplateDto = new FormsPDFTaskTemplateDTO();
		formsPDFTaskTemplateDto.setId(formsPDFTaskTemplate.getId());
		formsPDFTaskTemplateDto.setName(formsPDFTaskTemplate.getName());
		formsPDFTaskTemplateDto.setGeneric(formsPDFTaskTemplate.isGeneric());
		formsPDFTaskTemplateDto.setIdForm(formsPDFTaskTemplate.getIdForm());
		formsPDFTaskTemplateDto.setContent(formsPDFTaskTemplate.getContent());
		formsPDFTaskTemplateDto.setRte(formsPDFTaskTemplate.isRte());
		formsPDFTaskTemplateDto.setFormTitle(daoUtil.getString( "title" ));
		
		return formsPDFTaskTemplateDto;
	}
	
	private FormsPDFTaskTemplate dataToObject(DAOUtil daoUtil)
	{
		FormsPDFTaskTemplate formsPDFTaskTemplate = new FormsPDFTaskTemplate( );

		formsPDFTaskTemplate.setId( daoUtil.getInt( "id_template" ) );
		formsPDFTaskTemplate.setName( daoUtil.getString( "name" ) );
		formsPDFTaskTemplate.setIdForm(daoUtil.getInt( "id_form" ) );
		formsPDFTaskTemplate.setGeneric(daoUtil.getBoolean( "is_generic" ) );
		formsPDFTaskTemplate.setContent( daoUtil.getString( "content" ) );
		formsPDFTaskTemplate.setRte( daoUtil.getBoolean( "is_rte" ) );
		
		return formsPDFTaskTemplate;
	}
}