Skip to content

Commit 20feb98

Browse files
committed
Task3608
1 parent f9be477 commit 20feb98

16 files changed

Lines changed: 780 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.javarush.task.task36.task3608;
2+
3+
import com.javarush.task.task36.task3608.controller.Controller;
4+
import com.javarush.task.task36.task3608.model.MainModel;
5+
import com.javarush.task.task36.task3608.model.Model;
6+
import com.javarush.task.task36.task3608.view.EditUserView;
7+
import com.javarush.task.task36.task3608.view.UsersView;
8+
9+
public class Solution {
10+
public static void main(String[] args) {
11+
Model model = new MainModel();
12+
UsersView usersView = new UsersView();
13+
EditUserView editUserView = new EditUserView();
14+
Controller controller = new Controller();
15+
16+
usersView.setController(controller);
17+
editUserView.setController(controller);
18+
controller.setModel(model);
19+
controller.setUsersView(usersView);
20+
controller.setEditUserView(editUserView);
21+
22+
usersView.fireEventShowAllUsers();
23+
usersView.fireEventOpenUserEditForm(126L);
24+
editUserView.fireEventUserChanged("Jackson", 126L, 3);
25+
editUserView.fireEventUserDeleted(124L);
26+
usersView.fireEventShowDeletedUsers();
27+
}
28+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.javarush.task.task36.task3608;
2+
3+
import com.javarush.task.task36.task3608.bean.User;
4+
5+
public final class Util {
6+
public static final String DELETED_MARKER = " (deleted)";
7+
8+
public static boolean isUserDeleted(User user) {
9+
return user.getName().endsWith(DELETED_MARKER);
10+
}
11+
12+
public static void markDeleted(User user) {
13+
if (User.NULL_USER != user && !Util.isUserDeleted(user)) {
14+
user.setName(user.getName() + DELETED_MARKER);
15+
}
16+
}
17+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.javarush.task.task36.task3608.bean;
2+
3+
public class User implements Cloneable {
4+
private String name;
5+
private final long id;
6+
private int level;
7+
8+
public static final User NULL_USER = new User();
9+
10+
public User(String name, long id, int level) {
11+
this.name = name;
12+
this.id = id;
13+
this.level = level;
14+
}
15+
16+
public User() {
17+
this("", 0, 0);
18+
}
19+
20+
21+
//methods with logic
22+
public boolean isNew() {
23+
return id == 0;
24+
}
25+
26+
public User clone() {
27+
try {
28+
return (User) super.clone();
29+
} catch (CloneNotSupportedException ignored) {
30+
return NULL_USER;
31+
}
32+
}
33+
34+
public User clone(long newId) {
35+
if (this == NULL_USER) return NULL_USER;
36+
37+
return new User(name, newId, level);
38+
}
39+
40+
///// getters and setters
41+
public String getName() {
42+
return name;
43+
}
44+
45+
public void setName(String name) {
46+
this.name = name;
47+
}
48+
49+
public long getId() {
50+
return id;
51+
}
52+
53+
public int getLevel() {
54+
return level;
55+
}
56+
57+
public void setLevel(int level) {
58+
this.level = level;
59+
}
60+
61+
@Override
62+
public String toString() {
63+
return "User{" +
64+
"name='" + name + '\'' +
65+
", id=" + id +
66+
", level=" + level +
67+
'}';
68+
}
69+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.javarush.task.task36.task3608.controller;
2+
3+
import com.javarush.task.task36.task3608.model.Model;
4+
import com.javarush.task.task36.task3608.view.EditUserView;
5+
import com.javarush.task.task36.task3608.view.UsersView;
6+
7+
public class Controller {
8+
private Model model;
9+
private UsersView usersView;
10+
11+
private EditUserView editUserView;
12+
13+
public void setModel(Model model) {
14+
this.model = model;
15+
}
16+
17+
public void setUsersView(UsersView usersView) {
18+
this.usersView = usersView;
19+
}
20+
21+
public void setEditUserView(EditUserView editUserView) {
22+
this.editUserView = editUserView;
23+
}
24+
25+
public void onShowAllUsers() {
26+
model.loadUsers();
27+
usersView.refresh(model.getModelData());
28+
}
29+
30+
public void onShowAllDeletedUsers() {
31+
model.loadDeletedUsers();
32+
usersView.refresh(model.getModelData());
33+
}
34+
35+
public void onOpenUserEditForm(long id) {
36+
model.loadUserById(id);
37+
editUserView.refresh(model.getModelData());
38+
}
39+
40+
public void onUserDelete(long id) {
41+
model.deleteUserById(id);
42+
usersView.refresh(model.getModelData());
43+
}
44+
45+
public void onUserChange(String name, long id, int level) {
46+
model.changeUserData(name, id, level);
47+
usersView.refresh(model.getModelData());
48+
}
49+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.javarush.task.task36.task3608.dao;
2+
3+
import com.javarush.task.task36.task3608.bean.User;
4+
import com.javarush.task.task36.task3608.dao.mock.DataSource;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class UserDao {
10+
private DataSource dataSource = DataSource.getInstance();
11+
12+
public User getUserById(long id) {
13+
List<User> users = dataSource.getUsers();
14+
for (User user : users) {
15+
if (user.getId() == id) {
16+
return user.clone();
17+
}
18+
}
19+
return User.NULL_USER;
20+
}
21+
22+
public List<User> getUsersByName(String name) {
23+
if (name == null || name.trim().isEmpty()) throw new IllegalArgumentException();
24+
25+
List<User> users = dataSource.getUsers();
26+
List<User> result = new ArrayList<>();
27+
for (User user : users) {
28+
if (name.equals(user.getName())) {
29+
addUserToResult(result, user);
30+
}
31+
}
32+
return result;
33+
}
34+
35+
public List<User> getAllUsers() {
36+
List<User> users = dataSource.getUsers();
37+
List<User> result = new ArrayList<>();
38+
for (User user : users) {
39+
addUserToResult(result, user);
40+
}
41+
return result;
42+
}
43+
44+
public List<User> getUsersByLevel(int level) {
45+
if (level < 1) throw new IllegalArgumentException();
46+
47+
List<User> users = dataSource.getUsers();
48+
List<User> result = new ArrayList<>();
49+
50+
for (User user : users) {
51+
if (level == user.getLevel()) {
52+
addUserToResult(result, user);
53+
}
54+
}
55+
return result;
56+
}
57+
58+
public void addUserToResult(List<User> result, User user) {
59+
User clone = user.clone();
60+
61+
//skip bad users
62+
if (clone != User.NULL_USER) {
63+
result.add(clone);
64+
}
65+
}
66+
67+
public User createOrUpdate(User user) {
68+
return dataSource.createOrUpdate(user);
69+
}
70+
71+
public User getUsersById(long userId) {
72+
if (userId < 1) throw new IllegalArgumentException();
73+
74+
List<User> users = dataSource.getUsers();
75+
for (User user : users) {
76+
if (userId == user.getId()) {
77+
return user;
78+
}
79+
}
80+
return User.NULL_USER;
81+
}
82+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.javarush.task.task36.task3608.dao.mock;
2+
3+
import com.javarush.task.task36.task3608.bean.User;
4+
5+
import java.util.LinkedList;
6+
import java.util.List;
7+
8+
public class DataSource {
9+
private static DataSource ourInstance = new DataSource();
10+
11+
public static DataSource getInstance() {
12+
return ourInstance;
13+
}
14+
15+
private DataSource() {
16+
}
17+
18+
private List<User> users = new LinkedList<User>() {{
19+
add(new User("Ivanov", 123l, 1));
20+
add(new User("Petrov", 124l, 2));
21+
add(new User("Petrov", 125l, 1));
22+
add(new User("Sidorov", 126l, 2));
23+
}};
24+
25+
private long maxUserId = 126l;
26+
27+
public List<User> getUsers() {
28+
return users;
29+
}
30+
31+
public User createOrUpdate(User newUser) {
32+
if (newUser == User.NULL_USER)
33+
return User.NULL_USER;
34+
35+
//new User
36+
if (newUser.getId() == 0)
37+
return createNewUser(newUser);
38+
else
39+
return updateUser(newUser);
40+
}
41+
42+
private User createNewUser(User newUser) {
43+
User clone = newUser.clone(++maxUserId);
44+
users.add(clone);
45+
return clone;
46+
}
47+
48+
private User updateUser(User newUser) {
49+
for (User user : users) {
50+
if (user.getId() == newUser.getId()) {
51+
user.setName(newUser.getName());
52+
user.setLevel(newUser.getLevel());
53+
return user;
54+
}
55+
}
56+
//if we didn't find such a user
57+
return User.NULL_USER;
58+
}
59+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.javarush.task.task36.task3608.model;
2+
3+
import com.javarush.task.task36.task3608.bean.User;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class FakeModel implements Model {
9+
10+
private final ModelData modelData = new ModelData();
11+
@Override
12+
public ModelData getModelData() {
13+
return modelData;
14+
}
15+
16+
@Override
17+
public void loadUsers() {
18+
List<User> users = new ArrayList<>();
19+
users.add(new User("A", 1, 1));
20+
users.add(new User("B", 2, 1));
21+
modelData.setUsers(users);
22+
}
23+
24+
@Override
25+
public void loadDeletedUsers() {
26+
throw new UnsupportedOperationException();
27+
}
28+
29+
@Override
30+
public void loadUserById(long id) {
31+
throw new UnsupportedOperationException();
32+
}
33+
34+
@Override
35+
public void deleteUserById(long id) {
36+
throw new UnsupportedOperationException();
37+
}
38+
39+
@Override
40+
public void changeUserData(String name, long id, int level) {
41+
throw new UnsupportedOperationException();
42+
}
43+
}

0 commit comments

Comments
 (0)