SiteDAO.java

/*
 * Copyright (c) 2002-2021, 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.releaser.business;

import fr.paris.lutece.portal.service.plugin.Plugin;
import fr.paris.lutece.util.ReferenceList;
import fr.paris.lutece.util.sql.DAOUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * This class provides Data Access methods for Site objects
 */
public final class SiteDAO implements ISiteDAO
{
    // Constants
    private static final String SQL_QUERY_NEW_PK = "SELECT max( id_site ) FROM releaser_site";
    private static final String SQL_QUERY_SELECT = "SELECT a.id_site, a.name, a.description, a.artifact_id, a.id_cluster, b.name, a.scm_url, a.jira_key,a.is_theme "
            + " FROM releaser_site a , releaser_cluster b  WHERE a.id_site = ? AND a.id_cluster = b.id_cluster";
    private static final String SQL_QUERY_INSERT = "INSERT INTO releaser_site ( id_site, artifact_id, id_cluster, scm_url, name, description, jira_key,is_theme ) VALUES ( ?, ?, ?, ?, ?, ?, ? , ?) ";
    private static final String SQL_QUERY_DELETE = "DELETE FROM releaser_site WHERE id_site = ? ";
    private static final String SQL_QUERY_UPDATE = "UPDATE releaser_site SET id_site = ?, artifact_id = ?, id_cluster = ?, scm_url = ?, name = ?, description = ?, jira_key = ?,is_theme= ?  WHERE id_site = ?";
    private static final String SQL_QUERY_SELECTALL = "SELECT a.id_site, a.name, a.description, a.artifact_id, a.id_cluster, b.name, a.scm_url, a.jira_key,a.is_theme "
            + " FROM releaser_site a , releaser_cluster b  WHERE a.id_cluster = b.id_cluster";
    private static final String SQL_QUERY_SELECT_BY_CLUSTER = "SELECT a.id_site, a.name, a.description, a.artifact_id, a.id_cluster, b.name, a.scm_url, a.jira_key,a.is_theme "
            + " FROM releaser_site a , releaser_cluster b  WHERE a.id_cluster = b.id_cluster AND a.id_cluster = ?";
    private static final String SQL_QUERY_SELECTALL_ID = "SELECT id_site FROM releaser_site";
    private static final String SQL_QUERY_SELECT_SEARCH_DUPLICATE_SITE = "SELECT b.name, a.id_site FROM releaser_site a LEFT OUTER JOIN releaser_cluster b"
            + " ON a.id_cluster = b.id_cluster WHERE a.artifact_id = ? OR a.name = ? OR a.scm_url = ?";

    /**
     * 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 = 1;

        if ( daoUtil.next( ) )
        {
            nKey = daoUtil.getInt( 1 ) + 1;
        }

        daoUtil.free( );
        return nKey;
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public void insert( Site site, Plugin plugin )
    {
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT, plugin );
        site.setId( newPrimaryKey( plugin ) );
        int nIndex = 1;

        daoUtil.setInt( nIndex++, site.getId( ) );
        daoUtil.setString( nIndex++, site.getArtifactId( ) );
        daoUtil.setInt( nIndex++, site.getIdCluster( ) );
        daoUtil.setString( nIndex++, site.getScmUrl( ) );
        daoUtil.setString( nIndex++, site.getName( ) );
        daoUtil.setString( nIndex++, site.getDescription( ) );
        daoUtil.setString( nIndex++, site.getJiraKey( ) );
        daoUtil.setBoolean( nIndex++, site.isTheme( ) );

        daoUtil.executeUpdate( );
        daoUtil.free( );
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public Site load( int nKey, Plugin plugin )
    {
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT, plugin );
        daoUtil.setInt( 1, nKey );
        daoUtil.executeQuery( );
        Site site = null;

        if ( daoUtil.next( ) )
        {
            site = new Site( );
            int nIndex = 1;

            site.setId( daoUtil.getInt( nIndex++ ) );
            site.setName( daoUtil.getString( nIndex++ ) );
            site.setDescription( daoUtil.getString( nIndex++ ) );
            site.setArtifactId( daoUtil.getString( nIndex++ ) );
            site.setIdCluster( daoUtil.getInt( nIndex++ ) );
            site.setCluster( daoUtil.getString( nIndex++ ) );
            site.setScmUrl( daoUtil.getString( nIndex++ ) );
            site.setJiraKey( daoUtil.getString( nIndex++ ) );
            site.setTheme( daoUtil.getBoolean( nIndex++ ) );
        }

        daoUtil.free( );
        return site;

    }

    /**
     * {@inheritDoc }
     */
    @Override
    public void delete( int nKey, Plugin plugin )
    {
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE, plugin );
        daoUtil.setInt( 1, nKey );
        daoUtil.executeUpdate( );
        daoUtil.free( );
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public void store( Site site, Plugin plugin )
    {
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE, plugin );
        int nIndex = 1;

        daoUtil.setInt( nIndex++, site.getId( ) );
        daoUtil.setString( nIndex++, site.getArtifactId( ) );
        daoUtil.setInt( nIndex++, site.getIdCluster( ) );
        daoUtil.setString( nIndex++, site.getScmUrl( ) );
        daoUtil.setString( nIndex++, site.getName( ) );
        daoUtil.setString( nIndex++, site.getDescription( ) );
        daoUtil.setString( nIndex++, site.getJiraKey( ) );
        daoUtil.setBoolean( nIndex++, site.isTheme( ) );

        daoUtil.setInt( nIndex, site.getId( ) );

        daoUtil.executeUpdate( );
        daoUtil.free( );
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public List<Site> selectSitesList( Plugin plugin )
    {
        List<Site> siteList = new ArrayList<Site>( );
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL, plugin );
        daoUtil.executeQuery( );

        while ( daoUtil.next( ) )
        {
            Site site = new Site( );
            int nIndex = 1;

            site.setId( daoUtil.getInt( nIndex++ ) );
            site.setName( daoUtil.getString( nIndex++ ) );
            site.setDescription( daoUtil.getString( nIndex++ ) );
            site.setArtifactId( daoUtil.getString( nIndex++ ) );
            site.setIdCluster( daoUtil.getInt( nIndex++ ) );
            site.setCluster( daoUtil.getString( nIndex++ ) );
            site.setScmUrl( daoUtil.getString( nIndex++ ) );
            site.setJiraKey( daoUtil.getString( nIndex++ ) );
            site.setTheme( daoUtil.getBoolean( nIndex++ ) );

            siteList.add( site );
        }

        daoUtil.free( );
        return siteList;
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public List<Integer> selectIdSitesList( Plugin plugin )
    {
        List<Integer> siteList = new ArrayList<Integer>( );
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL_ID, plugin );
        daoUtil.executeQuery( );

        while ( daoUtil.next( ) )
        {
            siteList.add( daoUtil.getInt( 1 ) );
        }

        daoUtil.free( );
        return siteList;
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public ReferenceList selectSitesReferenceList( Plugin plugin )
    {
        ReferenceList siteList = new ReferenceList( );
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECTALL, plugin );
        daoUtil.executeQuery( );

        while ( daoUtil.next( ) )
        {
            siteList.addItem( daoUtil.getInt( 1 ), daoUtil.getString( 5 ) );
        }

        daoUtil.free( );
        return siteList;
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public List<Site> selectByCluster( int nClusterId, Plugin plugin )
    {
        List<Site> siteList = new ArrayList<Site>( );
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_BY_CLUSTER, plugin );
        daoUtil.setInt( 1, nClusterId );
        daoUtil.executeQuery( );

        while ( daoUtil.next( ) )
        {
            Site site = new Site( );
            int nIndex = 1;

            site.setId( daoUtil.getInt( nIndex++ ) );
            site.setName( daoUtil.getString( nIndex++ ) );
            site.setDescription( daoUtil.getString( nIndex++ ) );
            site.setArtifactId( daoUtil.getString( nIndex++ ) );
            site.setIdCluster( daoUtil.getInt( nIndex++ ) );
            site.setCluster( daoUtil.getString( nIndex++ ) );
            site.setScmUrl( daoUtil.getString( nIndex++ ) );
            site.setJiraKey( daoUtil.getString( nIndex++ ) );
            site.setTheme( daoUtil.getBoolean( nIndex++ ) );

            siteList.add( site );
        }

        daoUtil.free( );
        return siteList;
    }

    /**
     * {@inheritDoc }
     */
    @Override
    public String searchDuplicateSite( String siteName, String artifactId, String scmUrl, Plugin plugin )
    {
        String clusterName = null;
        DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_SEARCH_DUPLICATE_SITE, plugin );
        daoUtil.setNString( 1, artifactId );
        daoUtil.setNString( 2, siteName );
        daoUtil.setNString( 3, scmUrl );
        daoUtil.executeQuery( );

        while ( daoUtil.next( ) )
        {
            int nIndex = 1;
            if ( daoUtil != null && daoUtil.getString( 1 ) != null )
                clusterName = daoUtil.getString( 1 );
        }

        daoUtil.free( );
        return clusterName;
    }
}