001package edu.pdx.cs.joy.jdbc; 002 003import java.io.File; 004import java.sql.Connection; 005import java.sql.SQLException; 006import java.util.List; 007 008/** 009 * A command-line program that demonstrates CRUD operations on Department objects 010 * using the DepartmentDAO class with an H2 database. 011 */ 012public class ManageDepartments { 013 014 /** 015 * Main method that performs CRUD operations on departments in an H2 database file. 016 * 017 * @param args command line arguments where args[0] is the path to the database file 018 * and args[1] is the command (create, retrieve, update, delete, or list) 019 * @throws SQLException if a database error occurs 020 */ 021 public static void main(String[] args) throws SQLException { 022 if (args.length < 2) { 023 printUsage(); 024 return; 025 } 026 027 String dbFilePath = args[0]; 028 String command = args[1].toLowerCase(); 029 030 File dbFile = new File(dbFilePath); 031 032 try (Connection connection = H2DatabaseHelper.createFileBasedConnection(dbFile)) { 033 // Create the departments table if it doesn't exist 034 DepartmentDAOImpl.createTable(connection); 035 036 // Create a new DepartmentDAO 037 DepartmentDAO departmentDAO = new DepartmentDAOImpl(connection); 038 039 switch (command) { 040 case "create": 041 handleCreate(args, departmentDAO); 042 break; 043 case "retrieve": 044 handleRetrieve(args, departmentDAO); 045 break; 046 case "update": 047 handleUpdate(args, departmentDAO); 048 break; 049 case "delete": 050 handleDelete(args, departmentDAO); 051 break; 052 case "list": 053 handleList(departmentDAO); 054 break; 055 default: 056 System.err.println("Unknown command: " + command); 057 printUsage(); 058 } 059 } 060 } 061 062 private static void printUsage() { 063 System.err.println("Usage: java ManageDepartments <database-file-path> <command> [args...]"); 064 System.err.println(); 065 System.err.println("Commands:"); 066 System.err.println(" create <name> - Create a new department with the given name"); 067 System.err.println(" retrieve <id> - Retrieve a department by ID"); 068 System.err.println(" update <id> <name> - Update the name of a department"); 069 System.err.println(" delete <id> - Delete a department by ID"); 070 System.err.println(" list - List all departments"); 071 } 072 073 private static void handleCreate(String[] args, DepartmentDAO departmentDAO) throws SQLException { 074 if (args.length < 3) { 075 System.err.println("Missing department name for create command"); 076 System.err.println("Usage: java ManageDepartments <database-file-path> create <name>"); 077 return; 078 } 079 080 String departmentName = args[2]; 081 Department department = new Department(departmentName); 082 departmentDAO.save(department); 083 084 System.out.println("Successfully created department:"); 085 System.out.println(department); 086 System.out.println("Auto-generated ID: " + department.getId()); 087 } 088 089 private static void handleRetrieve(String[] args, DepartmentDAO departmentDAO) throws SQLException { 090 if (args.length < 3) { 091 System.err.println("Missing department ID for retrieve command"); 092 System.err.println("Usage: java ManageDepartments <database-file-path> retrieve <id>"); 093 return; 094 } 095 096 int id = Integer.parseInt(args[2]); 097 Department department = departmentDAO.findById(id); 098 099 if (department == null) { 100 System.out.println("No department found with ID: " + id); 101 } else { 102 System.out.println("Found department:"); 103 System.out.println(department); 104 } 105 } 106 107 private static void handleUpdate(String[] args, DepartmentDAO departmentDAO) throws SQLException { 108 if (args.length < 4) { 109 System.err.println("Missing arguments for update command"); 110 System.err.println("Usage: java ManageDepartments <database-file-path> update <id> <name>"); 111 return; 112 } 113 114 int id = Integer.parseInt(args[2]); 115 String newName = args[3]; 116 117 Department department = departmentDAO.findById(id); 118 if (department == null) { 119 System.out.println("No department found with ID: " + id); 120 return; 121 } 122 123 department.setName(newName); 124 departmentDAO.update(department); 125 126 System.out.println("Successfully updated department:"); 127 System.out.println(department); 128 } 129 130 private static void handleDelete(String[] args, DepartmentDAO departmentDAO) throws SQLException { 131 if (args.length < 3) { 132 System.err.println("Missing department ID for delete command"); 133 System.err.println("Usage: java ManageDepartments <database-file-path> delete <id>"); 134 return; 135 } 136 137 int id = Integer.parseInt(args[2]); 138 Department department = departmentDAO.findById(id); 139 140 if (department == null) { 141 System.out.println("No department found with ID: " + id); 142 return; 143 } 144 145 departmentDAO.delete(id); 146 System.out.println("Successfully deleted department:"); 147 System.out.println(department); 148 } 149 150 private static void handleList(DepartmentDAO departmentDAO) throws SQLException { 151 List<Department> allDepartments = departmentDAO.findAll(); 152 System.out.println("Found " + allDepartments.size() + " department(s)"); 153 for (Department dept : allDepartments) { 154 System.out.println(" " + dept); 155 } 156 } 157}