Package com.agiletec.plugins.jpsurvey.aps.system.services.collect

Source Code of com.agiletec.plugins.jpsurvey.aps.system.services.collect.VoterDAO

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpsurvey.aps.system.services.collect;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.agiletec.aps.system.common.FieldSearchFilter;
import com.agiletec.plugins.jpsurvey.aps.system.services.AbstractSurveyDAO;
import com.agiletec.plugins.jpsurvey.aps.system.services.collect.model.Voter;

public class VoterDAO extends AbstractSurveyDAO implements IVoterDAO {

  @Override
  public List<Integer> searchVotersId(FieldSearchFilter[] filters) {
    List recordsId = null;
    try {
      recordsId  = super.searchId(filters);
    } catch (Throwable t) {
      throw new RuntimeException("error in searchRecordsId", t);
    }
    return recordsId;
  }
 
  public Voter getVoter(String username, String ipAddress, int surveyId) {
    Voter voter = null;
    Connection conn = null;
    PreparedStatement stat=null;
    ResultSet res = null;
    try {
      conn = this.getConnection();
      stat = conn.prepareStatement(GET_VOTER_BY_SURVEY);
      stat.setString(1, username);
      stat.setString(2, ipAddress);
      stat.setInt(3, surveyId);
      res = stat.executeQuery();
      voter = this.buildVoterByResultSet(res);
    } catch (Throwable t) {
      processDaoException(t, "Error extracting the voting user by IP "+ ipAddress + " and idSurvey " + surveyId, "getVoter");
    } finally {
      closeDaoResources(res, stat, conn);
    }
    return voter;
  }
 
  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.aps.system.services.collect.IVoterDAO#getVoterbyId(int)
   */
  public Voter getVoterById(int id) {
    Voter voter = null;
    Connection conn = null;
    try {
      conn=this.getConnection();
      voter=this.getVoterById(conn, id);
    } catch (Throwable t) {
      processDaoException(t, "Error getting the user ID "+id, "getVoterbyId");
    } finally {
      closeConnection(conn);
    }
    return voter;
  }
 
  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.aps.system.services.collect.IVoterDAO#getVoterbyId(java.sql.Connection, int)
   */
  public Voter getVoterById(Connection conn, int id) {
    Voter voter = null;
    PreparedStatement stat = null;
    ResultSet res = null;
    try {
      stat = conn.prepareStatement(GET_VOTER_BY_ID);
      stat.setInt(1, id);
      res = stat.executeQuery();
      voter = this.buildVoterByResultSet(res);
    } catch (Throwable t) {
      processDaoException(t, "Error loading user voter from id " + id, "getVoterbyId");
    } finally {
      closeDaoResources(res, stat);
    }
    return voter;
  }
 
  private Voter buildVoterByResultSet(ResultSet res) {
    Voter voter = null;
    try {
      if (res.next()) {
        voter = new Voter();
        voter.setId(res.getInt(1)); // 1
        voter.setAge(res.getShort(2)); // 2
        voter.setCountry(res.getString(3)); // 3
        String sex = res.getString(4);
        if (null != sex && sex.length()>0) {
          voter.setSex(sex.charAt(0)); // 4
        }
        voter.setDate(res.getDate(5)); // 5
        voter.setSurveyid(res.getInt(6)); // 6
        voter.setUsername(res.getString(7)); // 7
        voter.setIpaddress(res.getString(8)); // 8 
      }
    } catch (Throwable t) {
      processDaoException(t, "Error loading voting user", "buildVoterByResultSet");
    }
    return voter;
  }


  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.aps.system.services.collect.IVoterDAO#saveVoter(com.agiletec.plugins.jpsurvey.aps.system.services.collect.Voter)
   */
  public void saveVoter(Voter voter) {
    Connection conn = null;
    try {
      conn = this.getConnection();
      conn.setAutoCommit(false);
      this.saveVoter(conn, voter);
      conn.commit();
    } catch (Throwable t) {
      this.processDaoException(t, "Errore saving voting user", "saveVoter");
    } finally {
      closeConnection(conn);
    }
  }
 
  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.aps.system.services.collect.IVoterDAO#saveVoter(java.sql.Connection, com.agiletec.plugins.jpsurvey.aps.system.services.collect.Voter)
   */
  public void saveVoter(Connection conn, Voter voter) {
    PreparedStatement stat= null;
    try {
      String NEXT_ID = "SELECT MAX(id) FROM jpsurvey_voters";
      int selfGeneratedId = this.getUniqueId(NEXT_ID, conn);//this._keyGeneratorManager.getUniqueKeyCurrentValue();
      stat = conn.prepareStatement(SAVE_VOTER);
      voter.setId(selfGeneratedId);
      stat.setInt(1, voter.getId()); // 1
      if (voter.getAge() > -1) {
        stat.setShort(2, voter.getAge()); // 2
      } else {
        stat.setNull(2, java.sql.Types.SMALLINT); // 2
      }
      if (null != voter.getCountry() && voter.getCountry().length() > 0) {
        stat.setString(3, voter.getCountry().substring(0,2)); // 3
      } else {
        stat.setNull(3, java.sql.Types.VARCHAR); // 3
      }
     
      if (null != voter.getSex()) {
        stat.setString(4, voter.getSex().toString()); // 4
      } else {
        stat.setNull(4, java.sql.Types.VARCHAR); // 4
      }
      stat.setDate(5, new java.sql.Date(voter.getDate().getTime())); // 5
      stat.setInt(6, voter.getSurveyid()); // 6
      stat.setString(7, voter.getUsername()); // 7
      stat.setString(8, voter.getIpaddress()); // 8
      stat.executeUpdate();
    } catch (Throwable t) {
      this.processDaoException(t, "Errore nel salvataggio dell'utente votante", "saveVoter");
    } finally  {
      closeDaoResources(null, stat);
    }
  }

  /* (non-Javadoc)
   * @see com.agiletec.plugins.jpsurvey.aps.system.services.collect.IVoterDAO#deleteVoterById(int)
   */
  public void deleteVoterById(int id) {
    Connection conn = null;
    PreparedStatement stat=null;
    try {
      conn=this.getConnection();
      stat=conn.prepareStatement(DELETE_VOTER_BY_ID);
      stat.setInt(1, id);
      stat.execute();
    } catch (Throwable t) {
      this.processDaoException(t, "Errore nella cancellazione dell'utente votante", "deleteVoterById");
    } finally {
      closeDaoResources(null, stat, conn);
    }
  }
 
  public void deleteVoterBySurveyId(int surveyId) {
    Connection conn = null;
    try {
      conn=this.getConnection();
      deleteVoterBySurveyId(conn, surveyId);
    } catch (Throwable t) {
      this.processDaoException(t, "Errore nella cancellazione degli utenti che hanno votato il survey dato ", "deleteVoterBySurveyId");
    } finally {
      closeConnection(conn);
    }
  }
 
  public void deleteVoterBySurveyId(Connection conn, int surveyId) {
    PreparedStatement stat=null;
    try {
      stat=conn.prepareStatement(DELETE_VOTER_BY_SURVEY);
      stat.setInt(1, surveyId);
      stat.execute();
    } catch (Throwable t) {
      this.processDaoException(t, "Error deleting users associated to the survey " + surveyId, "deleteVoterBySurveyId");
    } finally {
      closeDaoResources(null, stat);     
    }
  }
 
  public List<Integer> searchVotersByIds(Integer id, Integer age, String country, Character sex, Date date, Integer surveyId, String ipAddress) {
    List<Integer> list = new ArrayList<Integer>();
    Connection conn = null;
    PreparedStatement stat = null;
    ResultSet res = null;
    int idx = 1;
    try {
      conn = this.getConnection();
      stat = conn.prepareStatement(this.createStatement(id, age, country, sex, date, surveyId, ipAddress));
      if (null != id) {
        stat.setInt(idx++, id); // 1
      }
      if (null != age) {
        stat.setShort(idx++, Integer.valueOf(age).shortValue()); // 2       
      }
      if (null != country && country.length()>0) {
        stat.setString(idx++, country);
      }
      if (null != sex) {
        stat.setString(idx++, String.valueOf(sex)); // 4
      }
      if (null != date) {
        stat.setDate(idx++, new java.sql.Date(date.getTime())); // 5
      }
      if (null != surveyId) {
        stat.setInt(idx++, surveyId); // 6
      }
      if (null != ipAddress && ipAddress.length()<16 && ipAddress.length()>6) {
        stat.setString(idx++, ipAddress); // 7
      }
      res = stat.executeQuery();
      while (res.next()) {
        list.add(res.getInt(1));
      }
    } catch (Throwable t) {
      this.processDaoException(t, "Error building the list of voter users", "getVotersByIds");
    } finally {
      closeDaoResources(res, stat, conn);
    }
    if (list.isEmpty()) return null;
    return list;
  }
 
  private String createStatement(Integer id, Integer age, String country, Character sex, Date date,
      Integer surveyId, String ipAddress) {
    StringBuffer query= new StringBuffer(SEARCH_VOTERS_IDS);
    boolean whereInserted = false;
    if (null != id) {
      if (!whereInserted) {
        query.append(" WHERE ");
        whereInserted = true;
      }
      query.append(" id = ? ");
    }
    if (null != age) {
      if (!whereInserted) {
        query.append(" WHERE ");
        whereInserted=true;
      } else {
        query.append(" AND ");
      }
      query.append("age = ?");
    }
    if (null != country) {
      if (!whereInserted) {
        query.append(" WHERE ");
        whereInserted = true;
      } else {
        query.append(" AND ");
      }
      query.append("LOWER(country) = LOWER(?) ");
    }
    if (null != sex) {
      if (!whereInserted) {
        query.append(" WHERE ");
        whereInserted = true;
      } else {
        query.append(" AND ");
      }
      query.append(" LOWER(sex) = LOWER(?) ");
    }
    if (null != date) {
      if (!whereInserted) {
        query.append(" WHERE ");
        whereInserted = true;
      } else {
        query.append(" AND ");
      }
      query.append(" votedate = ? ");
    }
    if (null != surveyId) {
      if (!whereInserted) {
        query.append(" WHERE ");
        whereInserted = true;
      } else {
        query.append(" AND ");
      }
      query.append(" surveyid = ? ");
    }
    if (null != ipAddress && ipAddress.length() < 16 && ipAddress.length() > 6) {
      if (!whereInserted) {
        query.append(" WHERE ");
        whereInserted = true;
      } else {
        query.append(" AND ");
      }
      query.append(" ipaddress = ? ");
    }
    query.append(" ORDER BY ID ");
    return query.toString();
  }
 
  private final String GET_VOTER_BASE_QUERY_BLOCK =
    "SELECT id, age, country, sex, votedate, surveyid, username, ipaddress FROM jpsurvey_voters ";
 
  private final String GET_VOTER_BY_SURVEY =
    GET_VOTER_BASE_QUERY_BLOCK + " WHERE username = ? AND ipaddress = ? AND surveyid = ? ";
 
  private final String GET_VOTER_BY_ID =
    GET_VOTER_BASE_QUERY_BLOCK + " WHERE id = ? ";
 
  private final String SAVE_VOTER =
    "INSERT INTO jpsurvey_voters (id, age, country, sex, votedate, surveyid, username, ipaddress) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? ) ";
 
  private final String DELETE_VOTER_BY_ID   =
    "DELETE FROM jpsurvey_voters WHERE id = ? ";
 
  private final String DELETE_VOTER_BY_SURVEY   =
    "DELETE FROM jpsurvey_voters WHERE surveyid = ? ";
 
  private final String SEARCH_VOTERS_IDS = "SELECT id FROM jpsurvey_voters ";
 
}
TOP

Related Classes of com.agiletec.plugins.jpsurvey.aps.system.services.collect.VoterDAO

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.