/* * Copyright (c) 2002-2013, Mairie de 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 ${businessClass.packageName}; import fr.paris.lutece.portal.service.plugin.Plugin; import fr.paris.lutece.util.sql.DAOUtil; import java.util.ArrayList; import java.util.Collection; /** * This class provides Data Access methods for ${businessClass.businessClass} objects */ public final class ${businessClass.businessClass}DAO implements I${businessClass.businessClass}DAO { // Constants private static final String SQL_QUERY_NEW_PK = "SELECT max( ${businessClass.primaryKey} ) FROM ${businessClass.businessTableName}"; private static final String SQL_QUERY_SELECT = "SELECT <#list businessClass.attributes as attribute>${attribute.attributeName}<#if attribute_has_next>, FROM ${businessClass.businessTableName} WHERE ${businessClass.primaryKey} = ?"; private static final String SQL_QUERY_INSERT = "INSERT INTO ${businessClass.businessTableName} ( <#list businessClass.attributes as attribute>${attribute.attributeName}<#if attribute_has_next>, ) VALUES ( <#list businessClass.attributes as attribute>?<#if attribute_has_next>, ) "; private static final String SQL_QUERY_DELETE = "DELETE FROM ${businessClass.businessTableName} WHERE ${businessClass.primaryKey} = ? "; private static final String SQL_QUERY_UPDATE = "UPDATE ${businessClass.businessTableName} SET <#list businessClass.attributes as attribute>${attribute.attributeName} = ?<#if attribute_has_next>, WHERE ${businessClass.primaryKey} = ?"; private static final String SQL_QUERY_SELECTALL = "SELECT <#list businessClass.attributes as attribute>${attribute.attributeName}<#if attribute_has_next>, FROM ${businessClass.businessTableName}"; /** * Generates a new primary key * @param plugin The Plugin * @return The new primary key */ public int newPrimaryKey( Plugin plugin) { DAOUtil daoUtil = new DAOUtil( SQL_QUERY_NEW_PK , plugin ); daoUtil.executeQuery(); int nKey; if( !daoUtil.next() ) { // if the table is empty nKey = 1; } nKey = daoUtil.getInt( 1 ) + 1; daoUtil.free(); return nKey; } /** * Insert a new record in the table. * @param ${businessClass.instanceName} instance of the ${businessClass.businessClass} object to insert * @param plugin The plugin */ public void insert( ${businessClass.businessClass} ${businessClass.instanceName}, Plugin plugin ) { DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT , plugin ); ${businessClass.instanceName}.set${businessClass.primaryKeyName?cap_first}( newPrimaryKey( plugin ) ); <#list businessClass.attributes as attribute> daoUtil.set${attribute.type?cap_first} ( ${attribute_index + 1}, ${businessClass.instanceName}.get${attribute.name} ( ) ); daoUtil.executeUpdate(); daoUtil.free(); } /** * Load the data of the ${businessClass.instanceName} from the table * @param nId The identifier of the ${businessClass.instanceName} * @param plugin The plugin * @return the instance of the ${businessClass.businessClass} */ public ${businessClass.businessClass} load( int nId, Plugin plugin ) { DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT , plugin ); daoUtil.setInt( 1 , nId ); daoUtil.executeQuery(); ${businessClass.businessClass} ${businessClass.instanceName} = null; if ( daoUtil.next() ) { ${businessClass.instanceName} = new ${businessClass.businessClass}(); <#list businessClass.attributes as attribute> ${businessClass.instanceName}.set${attribute.name}( daoUtil.get${attribute.type?cap_first}( ${attribute_index + 1} ) ); } daoUtil.free(); return ${businessClass.instanceName}; } /** * Delete a record from the table * @param n${businessClass.businessClass}Id The identifier of the ${businessClass.instanceName} * @param plugin The plugin */ public void delete( int n${businessClass.businessClass}Id, Plugin plugin ) { DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE , plugin ); daoUtil.setInt( 1 , n${businessClass.businessClass}Id ); daoUtil.executeUpdate(); daoUtil.free(); } /** * Update the record in the table * @param ${businessClass.instanceName} The reference of the ${businessClass.instanceName} * @param plugin The plugin */ public void store( ${businessClass.businessClass} ${businessClass.instanceName}, Plugin plugin ) { DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE , plugin ); <#list businessClass.attributes as attribute> <#assign nIndex=attribute_index+1 > daoUtil.set${attribute.type?cap_first}( ${nIndex}, ${businessClass.instanceName}.get${attribute.name}( ) ); daoUtil.setInt( ${nIndex+1}, ${businessClass.instanceName}.get${businessClass.primaryKeyName?cap_first}( ) ); daoUtil.executeUpdate( ); daoUtil.free( ); } /** * Load the data of all the ${businessClass.instanceName}s and returns them as a collection * @param plugin The plugin * @return The Collection which contains the data of all the ${businessClass.instanceName}s */ public Collection<${businessClass.businessClass}> select${businessClass.businessClass}sList( Plugin plugin ) { Collection<${businessClass.businessClass}> ${businessClass.instanceName}List = new ArrayList<${businessClass.businessClass}>( ); DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL , plugin ); daoUtil.executeQuery( ); while ( daoUtil.next( ) ) { ${businessClass.businessClass} ${businessClass.instanceName} = new ${businessClass.businessClass}( ); <#list businessClass.attributes as attribute> ${businessClass.instanceName}.set${attribute.name}( daoUtil.get${attribute.type?cap_first}( ${attribute_index+1} ) ); ${businessClass.instanceName}List.add( ${businessClass.instanceName} ); } daoUtil.free(); return ${businessClass.instanceName}List; } }