package com.corej2eepatterns.dao;

// importy

public class ProjectDAO {
  final private String tableName = "PROJECT";

  // instrukcja SELECT uywa pl
  final private String fields = "project_id, name," +
      "project_manager_id, start_date, end_date, " + 
      " started, completed, accepted, acceptedDate," + 
      " customer_id, description, status";

  // oto metody zwizane z ValueListHandler
  // Szczegy w opisie wzorca Data Access Object.
  ...
  private List findProjects(ProjectTO projCriteria) 
  throws SQLException {

    Statement stmt= null;
    List list = null;
    Connection con = getConnection();
    StringBuffer selectStatement = new StringBuffer();
    selectStatement.append("SELECT " + fields + " FROM " +
      tableName + "where 1=1");

    // spenienie dodatkowych warunkw w zalenoci
    // od danych zawartych w projCriteria

    if (projCriteria.projectId != null) {
      selectStatement.append (" AND PROJECT_ID = '" + 
        projCriteria.projectId + "'");
    }
    // sprawdzenie i dodanie nowych pl do WHERE
    ...
    
    try {
      stmt = con.prepareStatement(selectStatement);
      stmt.setString(1, resourceID);
      ResultSet rs = stmt.executeQuery();
      list = createResultsList(rs);
      stmt.close();
    }
    finally {
      con.close();
    }
    return list;
  }

  private List createResultsList(ResultSet rs) 
  throws SQLException {
    ArrayList list = new ArrayList();
    while (rs.next()) {
      int i = 1;
      ProjectTO proj = new ProjectTO(rs.getString(i++));
      proj.projectName = rs.getString(i++);
      proj.managerId = rs.getString(i++);
      proj.startDate = rs.getDate(i++);
      proj.endDate = rs.getDate(i++);
      proj.started = rs.getBoolean(i++);
      proj.completed = rs.getBoolean(i++);
      proj.accepted = rs.getBoolean(i++);
      proj.acceptedDate = rs.getDate(i++);
      proj.customerId = rs.getString(i++);
      proj.projectDescription = rs.getString(i++);
      proj.projectStatus = rs.getString(i++);
      list.add(proj);
    }
    return list;
  }
  ...
}