Проблема с итерацией листа в разных классах на Java
Всем привет!
Подскажите, пожалуйста, в чем может быть проблема?
Есть класс UserService
и в нём есть метод getAllUsers
, который проводит итерацию по листу:
public class UserServiceImpl implements UserService{
private final LinkedList<User> users;
private final List<Training> trainings;
//private AdminConsoleOut adminConsoleOut = new AdminConsoleOut();
public UserServiceImpl() {
this.users = new LinkedList<>();
this.trainings = new ArrayList<>();
}
public void registerAdmin(String login, String password, String name, int age) {
long id = 1;
User adminUser = new User(id, login, password, UserRole.ADMIN, name, age);
users.add(adminUser);
}
@Override
public void registerUser(String login, String password, String name, int age) {
long id;
if(!users.isEmpty())
id = users.getLast().getId() + 1;
else id = 1;
User newUser = new User(id, login, password, UserRole.USER, name, age);
users.add(newUser);
}
@Override
public User login(String login, String password) {
ConsoleOut consoleOut = new ConsoleOut();
for (User user : users) {
if (user.getLogin().equals(login) && user.getPassword().equals(password)) {
System.out.println("Login Success");
if (user.getRole().toString().equals("ADMIN")) {
consoleOut.adminMenu();
} else if(user.getRole().toString().equals("USER")) {
consoleOut.userMenu();
} else {
return user;
}
} // login failed
} // end for
return null;
}
public void getAllUsers() {
System.out.println("Метод работает");
for (User user : users) {
if (user.getRole().toString().equals("ADMIN")) {
this.users.forEach(System.out::println);
} else {
System.out.println("У вас недостаточно прав.");
}
}
}
}
Далее есть класс в другом пакете:
public class ConsoleUI {
private static final Scanner input = new Scanner(System.in);
private AdminServiceImpl adminService = new AdminServiceImpl();
private UserServiceImpl userService = new UserServiceImpl();
//private TrainingServiceImpl trainingService;
public int getIntInput() {
while (true) {
String number = input.nextLine();
try {
int choice = Integer.parseInt(number);
return choice;
} catch (Exception e) {
System.out.println("ERROR, please try again. ");
}
}
}
public void getAllUsers() {
userService.getAllUsers();
}
}
и класс, выводящий всё это в консоль:
public class ConsoleOut {
private ConsoleUI consoleUI = new ConsoleUI();
UserServiceImpl userService = new UserServiceImpl();
public int startPage(){
int choice;
System.out.println(
"WELCOME TO TRAINING DIARY\n" +
"================================\n" +
"1) Registration\n" +
"2) Login\n"
);
System.out.print("Please select an option (or Enter -1 to quit): ");
return choice = consoleUI.getIntInput();
}
public void startProgram() {
int choice = startPage();
consoleUI.registrationAdmin();
while (choice != -1) {
switch (choice) {
case 1:
consoleUI.registrationUser();
break;
case 2:
consoleUI.login();
break;
case 3:
consoleUI.getAllUsers();
break;
default:
System.out.println("ERROR, please try again.");
}
choice = startPage();
}
System.out.println("Have a nice day!");
}
public void userMenu() {
System.out.println("Hi, I`m user");
}
public int adminPage(){
int choice;
System.out.println(
"ADMIN MENU\n" +
"================================\n" +
"1) Show all users\n" +
"2) Show log`s\n" +
"3) Show all training type\n" +
"4) Add training type\n" +
"5) Edit training type\n" +
"6) Delete training type\n" +
"7) Delete USER(be carefull!!!!)\n"+
"8) Main menu\n"
);
System.out.print("Please select an option (or Enter -1 to quit): ");
return choice = consoleUI.getIntInput();
}
public void adminMenu() {
int choice = adminPage();
while (choice != -1) {
switch (choice) {
case 1:
consoleUI.getAllUsers();
break;
case 2:
//adminService.showLogs();
break;
case 3:
// adminService.showAllTrainingType();
break;
case 4:
consoleUI.addNewTrainingType();
break;
case 5:
//adminService.editTrainingType(null);
break;
case 6:
//adminService.deleteTrainingType(null);
break;
case 7:
System.out.println("Метод в разработке");
break;
case 8:
startProgram();
break;
default:
System.out.println("ERROR, please try again.");
}
choice = adminPage();
}
}
}
При попытке запустить итерацию из главного меню получается на выходе следующее:
WELCOME TO TRAINING DIARY
================================
1) Registration
2) Login
Please select an option (or Enter -1 to quit): 3
Метод работает
{ id='1', login='admin', password='admin', role='ADMIN', name='Alex', age='38'}
WELCOME TO TRAINING DIARY
================================
1) Registration
2) Login
Please select an option (or Enter -1 to quit):
А если запускать этот метод из меню админа получается следующее:
WELCOME TO TRAINING DIARY
================================
1) Registration
2) Login
Please select an option (or Enter -1 to quit): 2
Please enter your login: admin
Please enter your password: admin
Login Success
ADMIN MENU
================================
1) Show all users
2) Show log`s
3) Show all training type
4) Add training type
5) Edit training type
6) Delete training type
7) Delete USER(be carefull!!!!)
8) Main menu
Please select an option (or Enter -1 to quit): 1
**Метод работает**
ADMIN MENU
================================
1) Show all users
2) Show log`s
3) Show all training type
4) Add training type
5) Edit training type
6) Delete training type
7) Delete USER(be carefull!!!!)
8) Main menu
Please select an option (or Enter -1 to quit):
Изначальная логика: логимся в систему под админом и смотрим всех пользователей.
Главная проблема в следующем:
Если (для проверки) в главном меню вводим "3" - итерация происходит успешно, список пользователей выводится в консоль.
Далее заходим админом и запускается метод adminMenu и при вводе "1" (Show all users), вызывается метод consoleUI.getAllUsers();
- тот же, что и в первом случае, при этот метод выполняется, но результата ноль!
Т.е. список пользователей не выводится.
Если запускать метод напрямую userService.getAllUser()
, то такая же беда, причем даже в первом случае...
Пытался передать список напрямую в этот класс и тут его проитерировать, но ничего...