private void addWorkers() {
   ResourceType type;
   ArrayList<Resource> users = null;
   ArrayList<Project> projects = null;
   Random random = new Random(1l);
   try {
     type = resourceTypeDAO.getResourceTypeByResourceTypeName("human");
     users = resourceDAO.getResourcesByResourceType(type);
     projects = projectDAO.getAllProjects();
   } catch (Exception e) {
     e.printStackTrace();
   }
   for (Project project : projects) {
     int workers = random.nextInt(11) + 5;
     Resource user = users.get(random.nextInt(users.size()));
     try {
       resourceDAO.insertUserTask(user.getResourceID(), project.getProjectID(), true);
     } catch (UserWorkOnThisProjectException e) {
       e.printStackTrace();
     }
     for (int i = 0; i < workers; ++i) {
       user = users.get(random.nextInt(users.size()));
       try {
         resourceDAO.insertUserTask(
             user.getResourceID(), project.getProjectID(), (random.nextInt(5) == 0));
       } catch (UserWorkOnThisProjectException e) {
         System.out.println(
             "User already assigned, but don't worry, there are plenty to choose from");
       }
     }
   }
 }
  // ---------------------------------------------------------------//
  public void projectModifier(
      String Mode, Project project, HashMap<String, ArrayList<Task>> taskManager)
      throws SQLException {

    int proid = -7777;
    Connection conn = null;
    PreparedStatement prepStmt = null;
    try {
      conn = select();
      if (Mode.equals("New Project")) proid = insertProject(project, conn);
      else proid = editProject(project, conn);
      project.setProjectID(proid);
      for (Task ts : taskManager.get("toInsert")) {
        addTasktoProject(project.getProjectID(), ts, conn);
      }
      for (Task ts : taskManager.get("toDelete")) {
        deleteTask(ts, conn);
      }
      for (Task ts : taskManager.get("toEdit")) {
        updateTasktoProject(ts, conn);
      }
    } finally {
      if (prepStmt != null) conn.close();
      if (conn != null) conn.close();
    }
  }
  // ---------------------------------------------------------------//
  public int editProject(Project project, Connection conn) throws SQLException {
    PreparedStatement prepStmt = null;
    int rtrn = -1;
    java.util.Date date = new java.util.Date();
    Timestamp currentdate = new Timestamp(date.getTime());
    conn = select();
    String sql =
        "UPDATE PROJECTS SET PROJ_NAME=?,MODIFIED_AT=?,MODIFIED_BY=?,PROJ_ACTIVE=?,PROJ_BUDGET=?,PROJ_DEADLINE=?,PROJ_DESCRIPTION=?,PROJ_FROM=?,PROJ_TYPE=?,PROJ_TO=?,CUST_ID=?,ROWVERSION=ROWVERSION+1"
            + "WHERE PROJ_ID=?";

    prepStmt = conn.prepareStatement(sql);
    prepStmt.setString(1, project.getName());

    prepStmt.setTimestamp(2, currentdate);

    prepStmt.setString(3, project.getModified_by());

    if (project.isActive()) prepStmt.setString(4, "Y");
    else prepStmt.setString(4, "N");

    if (project.getBudget() != -1) prepStmt.setFloat(5, project.getBudget());
    else prepStmt.setInt(5, 0);

    if (project.getNextDeadline() == null) prepStmt.setDate(6, null);
    else prepStmt.setDate(6, new java.sql.Date(project.getNextDeadline().getTime()));

    prepStmt.setString(7, project.getDescription());

    prepStmt.setDate(8, new java.sql.Date(project.getStartDate().getTime()));

    prepStmt.setString(9, project.getProjectType());

    if (project.getEndDate() == null) prepStmt.setDate(10, null);
    else prepStmt.setDate(10, new java.sql.Date(project.getEndDate().getTime()));

    prepStmt.setInt(11, project.getCustomerID());
    prepStmt.setInt(12, project.getProjectID());
    prepStmt.executeUpdate();
    rtrn = project.getProjectID();
    return rtrn;
  }
 // ---------------------------------------------------------------//
 public void deleteProject(Project project) throws SQLException {
   Connection conn = null;
   PreparedStatement prepStmt = null;
   try {
     conn = select();
     String sql = "DELETE FROM PROJECTS WHERE PROJ_ID = " + String.valueOf(project.getProjectID());
     prepStmt = conn.prepareStatement(sql);
     prepStmt.executeQuery();
   } finally {
     if (prepStmt != null) conn.close();
     if (conn != null) conn.close();
   }
   return;
 }
  private void addNonHumanBookings() {
    ArrayList<Resource> resources = null;
    Random random = new Random(1l);
    try {
      resources =
          resourceDAO.getResourcesByResourceType(
              resourceTypeDAO.getResourceTypeByResourceTypeName("machine"));
      resources.addAll(
          resourceDAO.getResourcesByResourceType(
              resourceTypeDAO.getResourceTypeByResourceTypeName("room")));
    } catch (Exception e) {
      e.printStackTrace();
    }
    ArrayList<Project> allProjects = null;
    try {
      allProjects = projectDAO.getAllProjects();
    } catch (Exception e) {
      e.printStackTrace();
    }
    for (Resource resource : resources) {
      HashSet<Project> projects = new HashSet<Project>();
      for (int i = 0; i < 3; ++i) {
        projects.add(allProjects.get(random.nextInt(allProjects.size())));
      }

      int max = (projects.size() > 0) ? (50 / projects.size()) : 0;
      for (Project project : projects) {
        for (int i = project.getStartWeek(); i <= project.getDeadLine(); ++i) {
          if (random.nextInt(2) == 0) {
            Booking booking = new Booking();
            booking.setProjectID(project.getProjectID());
            booking.setResourceID(resource.getResourceID());
            booking.setWeek(i);
            booking.setRatio(((float) (random.nextInt(max + 1) + max)) / 100);
            try {
              bookingDAO.insertBooking(booking);
            } catch (DAOException e) {
              e.printStackTrace();
            }
            System.out.println(booking);
          }
        }
      }
    }
  }
 private void addHumanBookings() {
   ArrayList<Resource> workers = null;
   Random random = new Random(1l);
   try {
     workers =
         resourceDAO.getResourcesByResourceType(
             resourceTypeDAO.getResourceTypeByResourceTypeName("human"));
   } catch (Exception e) {
     e.printStackTrace();
   }
   for (Resource worker : workers) {
     ArrayList<Project> projects = null;
     try {
       projects = projectDAO.getProjectsByWorker(worker);
     } catch (Exception e) {
       e.printStackTrace();
     }
     int max = (projects.size() > 0) ? (50 / projects.size()) : 0;
     for (Project project : projects) {
       for (int i = project.getStartWeek(); i <= project.getDeadLine(); ++i) {
         if (random.nextInt(2) == 0) {
           Booking booking = new Booking();
           booking.setProjectID(project.getProjectID());
           booking.setResourceID(worker.getResourceID());
           booking.setWeek(i);
           booking.setRatio(((float) (random.nextInt(max + 1) + max)) / 100);
           try {
             bookingDAO.insertBooking(booking);
           } catch (DAOException e) {
             e.printStackTrace();
           }
           System.out.println(booking);
         }
       }
     }
   }
 }
  private void saveActionPerformed(
      java.awt.event.ActionEvent evt) { // GEN-FIRST:event_saveActionPerformed
    // TODO add your handling code here:
    currentProject.setProjectName(projectname.getText());
    currentProject.setProjectDescription(projectdescription.getText());
    try {

      File file = new File("projects.txt");

      // if file doesnt exists, then create it
      if (!file.exists()) {
        file.createNewFile();
      }

      // true = append file
      FileWriter fileWritter = new FileWriter(file.getName(), true);
      BufferedWriter bufferWritter = new BufferedWriter(fileWritter);

      bufferWritter.write(
          currentProject.getProjectID()
              + " "
              + currentProject.getProjectName()
              + " "
              + currentProject.getProjectDescription());

      for (int i = 0; i < currentProject.getRequirements().size(); i++) {
        bufferWritter.write(
            currentProject.getRequirements().get(i).getRequirementID()
                + " "
                + currentProject.getRequirements().get(i).getRequirementDescription());
        if (currentProject.getRequirements().get(i).getIsFunctionalRequirement() == false) {
          bufferWritter.write(" non-functional");
        } else bufferWritter.write(" functional");
      }

      for (int i = 0; i < currentProject.getTeamMembers().size(); i++) {
        bufferWritter.write(
            currentProject.getTeamMembers().get(i).getPersonID()
                + " "
                + currentProject.getTeamMembers().get(i).getFirstName()
                + " "
                + currentProject.getTeamMembers().get(i).getLastName()
                + "  "
                + currentProject.getTeamMembers().get(i).getPosition());
      }

      for (int i = 0; i < currentProject.getEfforts().size(); i++) {
        bufferWritter.write(
            currentProject.getEfforts().get(i).getEffortID()
                + " "
                + currentProject.getEfforts().get(i).getRequirementID()
                + " "
                + currentProject.getEfforts().get(i).getEffortDevPhase()
                + " "
                + currentProject.getEfforts().get(i).getEffortDate()
                + " "
                + currentProject.getEfforts().get(i).getEffortHours());
      }

      for (int i = 0; i < currentProject.getGoals().size(); i++) {
        bufferWritter.write(
            currentProject.getGoals().get(i).getGoalID()
                + " "
                + currentProject.getGoals().get(i).getGoalType()
                + " "
                + currentProject.getGoals().get(i).getGoalDesc());
      }

      for (int i = 0; i < currentProject.getRisks().size(); i++) {
        bufferWritter.write(
            currentProject.getRisks().get(i).getRiskID()
                + " "
                + currentProject.getRisks().get(i).getRiskName()
                + " "
                + currentProject.getRisks().get(i).getRiskStatus());
      }
      bufferWritter.close();

    } catch (IOException e) {
      JOptionPane.showMessageDialog(this, "Couldn't save", "Didn't work", INFORMATION_MESSAGE);
    }
    JOptionPane.showMessageDialog(
        this, "Project Successfully saved", "Success", INFORMATION_MESSAGE);

    try {
      Class.forName("com.mysql.jdbc.Driver");
      Connection con =
          DriverManager.getConnection(
              "jdbc:mysql://127.0.0.1:3306/projectmanagementsystem?zeroDateTimeBehavior=convertToNull",
              "root",
              "password");

      String query = "insert into project(projectname, projectdesc) values (?, ?)";
      PreparedStatement pst = con.prepareStatement(query);
      pst.setString(1, currentProject.getProjectName());
      pst.setString(2, currentProject.getProjectDescription());
      pst.executeUpdate();

      String query2 = "select idproject from project where projectdesc = ?";
      PreparedStatement pst2 = con.prepareStatement(query2);
      String desc = currentProject.getProjectDescription();
      pst2.setString(1, desc);
      ResultSet rs = pst2.executeQuery();
      int id = 0;
      if (rs.next()) {
        id = rs.getInt("idproject");
      }
      System.out.println(id);

      for (int i = 0; i < currentProject.getTeamMembers().size(); i++) {
        String query3 =
            "insert into teammember(firstname,lastname,position,teammember_FK) values (?,?,?,?)";
        PreparedStatement pst3 = con.prepareStatement(query3);
        pst3.setString(1, currentProject.getTeamMembers().get(i).getFirstName());
        pst3.setString(2, currentProject.getTeamMembers().get(i).getLastName());
        pst3.setString(3, currentProject.getTeamMembers().get(i).getPosition());
        pst3.setInt(4, id);
        pst3.executeUpdate();
      }

      for (int i = 0; i < currentProject.getGoals().size(); i++) {
        String query3 = "insert into goal(goaldesc,goaltype,goal_FK) values (?,?,?)";
        PreparedStatement pst3 = con.prepareStatement(query3);
        pst3.setString(1, currentProject.getGoals().get(i).getGoalDesc());
        pst3.setString(2, currentProject.getGoals().get(i).getGoalType());
        pst3.setInt(3, id);
        pst3.executeUpdate();
      }

      for (int i = 0; i < currentProject.getRequirements().size(); i++) {
        int functional = 0;
        if (currentProject.getRequirements().get(i).getIsFunctionalRequirement() == true) {
          functional = 1;
        }

        String query3 =
            "insert into requirement(isFunctionalRequirement,requirementdesc,requirement_FK) values (?,?,?)";
        PreparedStatement pst3 = con.prepareStatement(query3);
        pst3.setInt(1, functional);
        pst3.setString(2, currentProject.getRequirements().get(i).getRequirementDescription());
        pst3.setInt(3, id);
        pst3.executeUpdate();
      }

      for (int i = 0; i < currentProject.getRisks().size(); i++) {
        String query3 = "insert into risk(riskname,riskstatus,risk_FK) values (?,?,?)";
        PreparedStatement pst3 = con.prepareStatement(query3);
        pst3.setString(1, currentProject.getRisks().get(i).getRiskName());
        pst3.setString(2, currentProject.getRisks().get(i).getRiskStatus());
        pst3.setInt(3, id);
        pst3.executeUpdate();
      }

      for (int i = 0; i < currentProject.getEfforts().size(); i++) {
        String query4 = "select idrequirement from requirement where requirementdesc = ?";
        PreparedStatement pst4 = con.prepareStatement(query4);
        String desc2 = currentProject.getEfforts().get(i).getRequirementDesc();
        pst4.setString(1, desc2);
        ResultSet rs2 = pst4.executeQuery();
        int reqid = 0;
        if (rs.next()) {
          reqid = rs2.getInt("idrequirement");
        }
        System.out.println(reqid);

        String query3 =
            "insert into effort(effortdate,efforthours,effortdevphase,effort_FK) values (?,?,?,?)";
        PreparedStatement pst3 = con.prepareStatement(query3);
        pst3.setString(1, currentProject.getEfforts().get(i).getEffortDate());
        pst3.setInt(2, currentProject.getEfforts().get(i).getEffortHours());
        pst3.setString(3, currentProject.getEfforts().get(i).getEffortDevPhase());
        pst3.setInt(4, reqid);
        pst3.executeUpdate();
      }
    } catch (Exception e) {
      System.out.println(e.toString());
    }
  } // GEN-LAST:event_saveActionPerformed