diff --git a/pom.xml b/pom.xml
index 748503b..a2166b5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,6 +25,12 @@
4.11
test
+
+ org.jetbrains
+ annotations-java5
+ RELEASE
+ compile
+
diff --git a/src/main/java/ru/lebedev/se/App.java b/src/main/java/ru/lebedev/se/App.java
deleted file mode 100644
index 3ffb09b..0000000
--- a/src/main/java/ru/lebedev/se/App.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package ru.lebedev.se;
-
-/**
- * @author Анатолий Лебедев
- * @version 1.0.0
- */
-
-public class App
-{
- public static void main(String[] args) {
- System.out.println("Привет, мир!");
- }
-
-}
diff --git a/src/main/java/ru/lebedev/se/Employee.java b/src/main/java/ru/lebedev/se/Employee.java
new file mode 100644
index 0000000..11432c5
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/Employee.java
@@ -0,0 +1,114 @@
+package ru.lebedev.se;
+
+
+public class Employee {
+ private String fio;
+ private String position;
+ private String email;
+ private String phoneNumber;
+ private int salary;
+ private int age;
+ private final static String EMAIL = "ouroffice@ourwork.com"; // Если нет своей электронной почты, ставим рабочую
+ private final static String PHONE = "+78122233322"; // Если нет телефона - ставим рабочий
+
+ //------------------------------------------------------------------------------------------------------------
+ // Формируем простые сеттеры и геттеры
+
+ public void setFio(String fio) {
+ this.fio = fio;
+ }
+
+ public String getFio() {
+ return fio.toUpperCase(); // Выводим в верхнем регистре
+ }
+
+ public void setPosition(String position) {
+ this.position = position;
+ }
+
+ public String getPosition() {
+ return toTitleCase(position); // Выводим строчными буквами с первой заглавной
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setPhoneNumber(String phoneNumber) {
+ this.phoneNumber = phoneNumber;
+ }
+
+ public String getPhoneNumber() {
+ return phoneNumber;
+ }
+
+ public void setSalary(int salary) {
+ this.salary = salary;
+ }
+
+ public int getSalary() {
+ return salary;
+ }
+
+ public void setAge(int age) {
+ if (age > 0)
+ this.age = age;
+ else
+ this.age = age * (-1); // Переводим отрицательный возраст в положительный, считаем опечаткой
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ //------------------------------------------------------------------------------------------------------------
+ // формируем конструкторы
+
+ public Employee(String fio, String position, String email, String phoneNumber, int salary, int age) {
+ setFio(fio);
+ setPosition(position);
+ setEmail(email);
+ setPhoneNumber(phoneNumber);
+ setSalary(salary);
+ setAge(age);
+ }
+
+ public Employee(String fio, String position, String phoneNumber, int salary, int age) {
+ this(fio, position, EMAIL, phoneNumber, salary, age);
+ }
+
+ public Employee(String fio, String position, int salary, int age) {
+ this(fio, position, EMAIL, PHONE, salary, age);
+ }
+
+ //------------------------------------------------------------------------------------------------------------
+ // Преобразуем первый символ строки в верхний регистр, остальные в нижний
+
+ public static String toTitleCase(String s) {
+ if (s.isEmpty()) {
+ return s;
+ }
+ return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
+ }
+
+ //------------------------------------------------------------------------------------------------------------
+ // Выводим данные работника с помощью геттеров для форматирования
+
+ public void printInfo() {
+ System.out.println("Ф.И.О.: " + getFio() + ", Должность: " + getPosition() + ", Электронная почта: "
+ + getEmail() + ", Телефон: " + getPhoneNumber() + ", Зарплата: " + getSalary()
+ + ", Возраст: " + getAge());
+ }
+
+ // Выводим данные работника как введено
+ public void printInfoOriginal() {
+ System.out.println("Ф.И.О.: " + fio + ", Должность: " + position + ", Электронная почта: "
+ + email + ", Телефон: " + phoneNumber + ", Зарплата: " + salary + ", Возраст: " + age);
+ }
+}
+
+
diff --git a/src/main/java/ru/lebedev/se/Employees.java b/src/main/java/ru/lebedev/se/Employees.java
new file mode 100644
index 0000000..05a522c
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/Employees.java
@@ -0,0 +1,28 @@
+package ru.lebedev.se;
+
+import java.util.Scanner;
+
+public class Employees {
+
+ public static void main(String[] args) {
+ int edgeOfAge;
+ Employee[] EmployeeArray = new Employee[5];
+ EmployeeArray[0] = new Employee("Иванов Иван", "Инженер", "ivanov@work.ru", "+78121111111", 30000, 45);
+ EmployeeArray[1] = new Employee("Петров Петр", "МеНеДжЕР", "+78122222222", 40000, 38);
+ EmployeeArray[2] = new Employee("Сидоров Сидор", "Бухгалтер", 45000, 42);
+ EmployeeArray[3] = new Employee("Неизвестный Эрнст", "ДиРЕктОр", "+74952222222", 100000, 60);
+ EmployeeArray[4] = new Employee("Львов Лев", "Программист", "lviv@work.ru", "+78125555555", 14000, 24);
+
+ // Запросим пользователя о возрасте сотрудников, старше которого выводить на экран
+ Scanner sc = new Scanner(System.in);
+ System.out.println("Введите возраст, сотрудников старше которого выводить на экран: ");
+ edgeOfAge = sc.nextInt();
+ System.out.println();
+ sc.close();
+
+ // Выводим сотрудников
+ for (Employee employee : EmployeeArray) {
+ if (employee.getAge() > edgeOfAge) employee.printInfo();
+ }
+ }
+}
diff --git a/src/main/java/ru/lebedev/se/chat/client/ChatClient.java b/src/main/java/ru/lebedev/se/chat/client/ChatClient.java
new file mode 100644
index 0000000..159737f
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/client/ChatClient.java
@@ -0,0 +1,9 @@
+package ru.lebedev.se.chat.client;
+
+public class ChatClient {
+
+ public static void main(String[] args) throws Exception{
+ final ClientService service = new ClientService();
+ service.run();
+ }
+}
diff --git a/src/main/java/ru/lebedev/se/chat/client/ClientService.java b/src/main/java/ru/lebedev/se/chat/client/ClientService.java
new file mode 100644
index 0000000..91f8d9b
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/client/ClientService.java
@@ -0,0 +1,128 @@
+package ru.lebedev.se.chat.client;
+
+import ru.lebedev.se.chat.server.api.ChatService;
+import ru.lebedev.se.chat.server.model.Message;
+import ru.lebedev.se.chat.server.model.Session;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import java.net.URL;
+import java.util.*;
+
+public class ClientService {
+
+ private static final String CMD_EXIT = "exit";
+
+ private static final String CMD_LOGIN = "login";
+
+ private static final String CMD_LOGOUT = "logout";
+
+ private static final String CMD_READ = "read";
+
+ private static final String CMD_SEND = "send";
+
+ private static final String CMD_USERS = "users";
+
+ private static final String CMD_BROADCAST = "broadcast";
+
+ private static final String LOCAL_PART = "ChatServiceBeanService";
+
+ private static final String LOCAL_NAMESPACE = "http://service.server.chat.se.lebedev.ru/";
+
+ private static final String WSDL = "http://localhost:8080/ChatService?wsdl";
+
+ private final URL url;
+
+ private final QName qname;
+
+ private final Service service;
+
+ private final ChatService chatService;
+
+ private final Scanner scanner;
+
+ private Session session = null;
+
+ public ClientService() throws Exception {
+ url = new URL(WSDL);
+ qname = new QName(LOCAL_NAMESPACE, LOCAL_PART);
+ service = Service.create(url, qname);
+ chatService = service.getPort(ChatService.class);
+ scanner = new Scanner(System.in);
+ }
+
+ public void run() {
+ String cmd = "";
+ while (!CMD_EXIT.equals(cmd)) {
+ System.out.println("ENTER CMD: ");
+ cmd = scanner.nextLine();
+ switch (cmd) {
+ case CMD_LOGIN:
+ login();
+ break;
+
+ case CMD_LOGOUT:
+ logout();
+ break;
+
+ case CMD_READ:
+ read();
+ break;
+
+ case CMD_SEND:
+ send();
+ break;
+
+ case CMD_USERS:
+ users();
+ break;
+
+ case CMD_BROADCAST:
+ broadcast();
+ break;
+ }
+ System.out.println();
+ }
+ }
+
+ private void login() {
+ System.out.println("ENTER LOGIN: ");
+ final String login = scanner.nextLine();
+ System.out.println("ENTER PASSWORD: ");
+ final String password = scanner.nextLine();
+ session = chatService.signIn(login, password);
+ final String msg = session != null ? "OK" : "ERROR";
+ System.out.println("AUTH: " + msg);
+ }
+
+ private void logout() {
+ chatService.signOut(session);
+ }
+
+ private void send() {
+ System.out.println("ENTER LOGIN: ");
+ final String login = scanner.nextLine();
+ System.out.println("ENTER MESSAGE: ");
+ final String message = scanner.nextLine();
+ chatService.sendMessage(session, login, message);
+ }
+
+ private void read() {
+ final List messages = chatService.getMessages(session);
+ for (final Message message : messages) {
+ System.out.println("** INCOME MESSAGE **");
+ System.out.println("FROM: " + message.source);
+ System.out.println("TEXT: " + message.text);
+ }
+ }
+
+ private void users() {
+ System.out.println(chatService.getListLogin());
+ }
+
+ private void broadcast() {
+ System.out.println("ENTER MESSAGE: ");
+ final String message = scanner.nextLine();
+ chatService.sendBroadcast(session, message);
+ }
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/ChatServer.java b/src/main/java/ru/lebedev/se/chat/server/ChatServer.java
new file mode 100644
index 0000000..7ef0a8a
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/ChatServer.java
@@ -0,0 +1,16 @@
+package ru.lebedev.se.chat.server;
+
+import ru.lebedev.se.chat.server.api.ChatService;
+import ru.lebedev.se.chat.server.service.ChatServiceBean;
+
+import javax.xml.ws.Endpoint;
+
+public class ChatServer {
+
+ public static void main(String[] args) {
+ final ChatService service = new ChatServiceBean();
+ service.register("admin", "admin");
+ service.register("test", "test");
+ Endpoint.publish("http://localhost:8080/ChatService?wsdl",service);
+ }
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/api/ChatService.java b/src/main/java/ru/lebedev/se/chat/server/api/ChatService.java
new file mode 100644
index 0000000..b31d765
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/api/ChatService.java
@@ -0,0 +1,44 @@
+package ru.lebedev.se.chat.server.api;
+
+import ru.lebedev.se.chat.server.model.Message;
+import ru.lebedev.se.chat.server.model.Session;
+import ru.lebedev.se.chat.server.model.User;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import java.util.List;
+
+@WebService
+public interface ChatService {
+
+ @WebMethod
+ boolean register(@WebParam String login, @WebParam String password);
+
+ @WebMethod
+ List getListLogin();
+
+ @WebMethod
+ boolean isLoginExists(@WebParam String login);
+
+ @WebMethod
+ Session signIn(@WebParam String login, @WebParam String password);
+
+ @WebMethod
+ User getUser(@WebParam Session session);
+
+ @WebMethod
+ void signOut(@WebParam Session session);
+
+ @WebMethod
+ List getMessages(@WebParam Session session);
+
+ @WebMethod
+ void sendBroadcast(@WebParam Session session, @WebParam String message);
+
+ @WebMethod
+ void sendMessage(@WebParam Session session, @WebParam String login, @WebParam String message);
+
+ @WebMethod
+ void clearMessages(@WebParam Session session);
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/api/MessageService.java b/src/main/java/ru/lebedev/se/chat/server/api/MessageService.java
new file mode 100644
index 0000000..b6d1617
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/api/MessageService.java
@@ -0,0 +1,16 @@
+package ru.lebedev.se.chat.server.api;
+
+import ru.lebedev.se.chat.server.model.Message;
+
+import java.util.List;
+
+public interface MessageService {
+
+ List getMessage(String login);
+
+ void sendBroadCast(String source, String text);
+
+ void sendMessage(String source, String target, String text);
+
+ void cleanMessage(String login);
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/api/SessionService.java b/src/main/java/ru/lebedev/se/chat/server/api/SessionService.java
new file mode 100644
index 0000000..272bf36
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/api/SessionService.java
@@ -0,0 +1,14 @@
+package ru.lebedev.se.chat.server.api;
+
+import ru.lebedev.se.chat.server.model.Session;
+import ru.lebedev.se.chat.server.model.User;
+
+public interface SessionService {
+
+ Session signIn(String login, String password);
+
+ User getUser(Session session);
+
+ void signOut(Session session);
+
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/api/UserService.java b/src/main/java/ru/lebedev/se/chat/server/api/UserService.java
new file mode 100644
index 0000000..3d07b1c
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/api/UserService.java
@@ -0,0 +1,24 @@
+package ru.lebedev.se.chat.server.api;
+
+import ru.lebedev.se.chat.server.model.User;
+
+import java.util.List;
+
+public interface UserService {
+
+ boolean register(String login, String password);
+
+ List getListLogin();
+
+ User getUser(String login);
+
+ void createUser(String login, String password);
+
+ int getCountUser();
+
+ void removeAll();
+
+ boolean isLoginExists(String login);
+
+ void removeUser(String login);
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/model/Message.java b/src/main/java/ru/lebedev/se/chat/server/model/Message.java
new file mode 100644
index 0000000..9733513
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/model/Message.java
@@ -0,0 +1,11 @@
+package ru.lebedev.se.chat.server.model;
+
+import java.util.UUID;
+
+public final class Message {
+ public String id = UUID.randomUUID().toString();
+ public long timestamp = System.currentTimeMillis();
+ public String source;
+ public String target;
+ public String text;
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/model/MessageBox.java b/src/main/java/ru/lebedev/se/chat/server/model/MessageBox.java
new file mode 100644
index 0000000..3b90605
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/model/MessageBox.java
@@ -0,0 +1,6 @@
+package ru.lebedev.se.chat.server.model;
+
+import java.util.ArrayList;
+
+public final class MessageBox extends ArrayList {
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/model/Session.java b/src/main/java/ru/lebedev/se/chat/server/model/Session.java
new file mode 100644
index 0000000..c6322fd
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/model/Session.java
@@ -0,0 +1,23 @@
+package ru.lebedev.se.chat.server.model;
+
+import java.util.*;
+
+public final class Session {
+ public long timestamp = System.currentTimeMillis();
+ public String id = UUID.randomUUID().toString();
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Session session = (Session) o;
+ final boolean checkTimeStamp = Objects.equals(timestamp, session.timestamp);
+ final boolean checkSessionId = Objects.equals(id, session.id);
+ return checkTimeStamp && checkSessionId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(timestamp, id);
+ }
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/model/User.java b/src/main/java/ru/lebedev/se/chat/server/model/User.java
new file mode 100644
index 0000000..4d0b07b
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/model/User.java
@@ -0,0 +1,6 @@
+package ru.lebedev.se.chat.server.model;
+
+public final class User {
+ public String login;
+ public String password;
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/service/ChatServiceBean.java b/src/main/java/ru/lebedev/se/chat/server/service/ChatServiceBean.java
new file mode 100644
index 0000000..307eb02
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/service/ChatServiceBean.java
@@ -0,0 +1,88 @@
+package ru.lebedev.se.chat.server.service;
+
+import ru.lebedev.se.chat.server.api.ChatService;
+import ru.lebedev.se.chat.server.api.MessageService;
+import ru.lebedev.se.chat.server.api.SessionService;
+import ru.lebedev.se.chat.server.api.UserService;
+import ru.lebedev.se.chat.server.model.Message;
+import ru.lebedev.se.chat.server.model.Session;
+import ru.lebedev.se.chat.server.model.User;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.util.*;
+
+@WebService(endpointInterface = "ru.lebedev.se.chat.server.api.ChatService")
+public final class ChatServiceBean implements ChatService {
+
+ private final UserService userService = new UserServiceBean();
+
+ private final MessageService messageService = new MessageServiceBean(userService);
+
+ private final SessionService sessionService = new SessionServiceBean(userService);
+
+ @Override
+ @WebMethod
+ public boolean register(final String login, final String password) {
+ return userService.register(login, password);
+ }
+
+ @Override
+ @WebMethod
+ public List getListLogin() {
+ return userService.getListLogin();
+ }
+
+ @Override
+ @WebMethod
+ public boolean isLoginExists(final String login) {
+ return userService.isLoginExists(login);
+ }
+
+ @Override
+ @WebMethod
+ public Session signIn(String login, String password) {
+ return sessionService.signIn(login, password);
+ }
+
+ @Override
+ @WebMethod
+ public User getUser(final Session session) {
+ return sessionService.getUser(session);
+ }
+
+ @Override
+ @WebMethod
+ public void signOut(final Session session) {
+ sessionService.signOut(session);
+ }
+
+ @Override
+ @WebMethod
+ public List getMessages(final Session session) {
+ final User user = sessionService.getUser(session);
+ return messageService.getMessage(user.login);
+ }
+
+ @Override
+ @WebMethod
+ public void sendBroadcast(final Session session, final String message) {
+ final User user = sessionService.getUser(session);
+ messageService.sendBroadCast(user.login, message);
+ }
+
+ @Override
+ @WebMethod
+ public void sendMessage(final Session session, final String login, final String message) {
+ final User source = sessionService.getUser(session);
+ final User target = userService.getUser(login);
+ messageService.sendMessage(source.login, target.login, message);
+ }
+
+ @Override
+ @WebMethod
+ public void clearMessages(Session session) {
+ final User user = sessionService.getUser(session);
+ messageService.cleanMessage(user.login);
+ }
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/service/MessageServiceBean.java b/src/main/java/ru/lebedev/se/chat/server/service/MessageServiceBean.java
new file mode 100644
index 0000000..fd148ba
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/service/MessageServiceBean.java
@@ -0,0 +1,56 @@
+package ru.lebedev.se.chat.server.service;
+
+import ru.lebedev.se.chat.server.api.MessageService;
+import ru.lebedev.se.chat.server.api.UserService;
+import ru.lebedev.se.chat.server.model.Message;
+import ru.lebedev.se.chat.server.model.MessageBox;
+
+import java.util.*;
+
+public final class MessageServiceBean implements MessageService {
+
+ private final Map boxes = new HashMap<>();
+
+ private final UserService userService;
+
+ public MessageServiceBean(final UserService userService) {
+ this.userService = userService;
+ }
+
+ private MessageBox getMessageBox(final String login) {
+ if (login == null || login.isEmpty()) return null;
+ if (!boxes.containsKey(login)) boxes.put(login, new MessageBox());
+ return boxes.get(login);
+ }
+
+ @Override
+ public List getMessage(final String login) {
+ final MessageBox messageBox = getMessageBox(login);
+ cleanMessage(login);
+ return messageBox;
+ }
+
+ @Override
+ public void sendBroadCast(final String source, final String text) {
+ final Collection logins = userService.getListLogin();
+ for (final String target : logins) {
+ if (source.equals(target)) continue;
+ sendMessage(source, target, text);
+ }
+ }
+
+ @Override
+ public void sendMessage(final String source, final String target, final String text) {
+ final Message message = new Message();
+ message.source = source;
+ message.target = target;
+ message.text = text;
+ final MessageBox messageBox = getMessageBox(target);
+ messageBox.add(message);
+ }
+
+ @Override
+ public void cleanMessage(final String login) {
+ boxes.put(login, new MessageBox());
+ }
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/service/SessionServiceBean.java b/src/main/java/ru/lebedev/se/chat/server/service/SessionServiceBean.java
new file mode 100644
index 0000000..68ad03d
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/service/SessionServiceBean.java
@@ -0,0 +1,42 @@
+package ru.lebedev.se.chat.server.service;
+
+import ru.lebedev.se.chat.server.api.SessionService;
+import ru.lebedev.se.chat.server.api.UserService;
+import ru.lebedev.se.chat.server.model.Session;
+import ru.lebedev.se.chat.server.model.User;
+
+import java.util.*;
+
+public final class SessionServiceBean implements SessionService {
+
+ private final UserService userService;
+
+ private final Map sessions = new HashMap<>();
+
+ public SessionServiceBean (final UserService userService){
+ this.userService = userService;
+ }
+ @Override
+ public Session signIn(final String login, final String password) {
+ if (login == null || login.isEmpty()) return null;
+ if (password == null || password.isEmpty()) return null;
+ final User user = userService.getUser(login);
+ if (user == null) return null;
+ if (!password.equals(user.password)) return null;
+ final Session session = new Session();
+ sessions.put(session, user);
+ return session;
+ }
+
+ @Override
+ public User getUser(final Session session) {
+ if (session == null) return null;
+ return sessions.get(session);
+ }
+
+ @Override
+ public void signOut(Session session) {
+ if (session == null) return;
+ sessions.remove(session);
+ }
+}
diff --git a/src/main/java/ru/lebedev/se/chat/server/service/UserServiceBean.java b/src/main/java/ru/lebedev/se/chat/server/service/UserServiceBean.java
new file mode 100644
index 0000000..04bb781
--- /dev/null
+++ b/src/main/java/ru/lebedev/se/chat/server/service/UserServiceBean.java
@@ -0,0 +1,64 @@
+package ru.lebedev.se.chat.server.service;
+
+import ru.lebedev.se.chat.server.api.UserService;
+import ru.lebedev.se.chat.server.model.User;
+
+import java.util.*;
+
+public final class UserServiceBean implements UserService {
+
+ private final Map users = new HashMap<>();
+
+
+ @Override
+ public boolean register(String login, String password) {
+ if (login == null || login.isEmpty()) return false;
+ if (password == null || password.isEmpty()) return false;
+ if (users.containsKey(login)) return false;
+ createUser(login, password);
+ return true;
+ }
+
+ @Override
+ public List getListLogin() {
+ return new ArrayList<>(users.keySet());
+ }
+
+ @Override
+ public User getUser(String login) {
+ if (login == null || login.isEmpty()) return null;
+ return users.get(login);
+ }
+
+ @Override
+ public void createUser(final String login, final String password) {
+ if (login == null || login.isEmpty()) return;
+ if (password == null || password.isEmpty()) return;
+ if (users.containsKey(login)) return;
+ final User user = new User();
+ user.login = login;
+ user.password = password;
+ users.put(login, user);
+ }
+
+ @Override
+ public int getCountUser() {
+ return users.size();
+ }
+
+ @Override
+ public void removeAll() {
+ users.clear();
+ }
+
+ @Override
+ public boolean isLoginExists(String login) {
+ return users.containsKey(login);
+ }
+
+ @Override
+ public void removeUser(String login) {
+ users.remove(login);
+
+ }
+}
diff --git a/src/test/java/ru/lebedev/se/ChatServerTest.java b/src/test/java/ru/lebedev/se/ChatServerTest.java
new file mode 100644
index 0000000..e304b36
--- /dev/null
+++ b/src/test/java/ru/lebedev/se/ChatServerTest.java
@@ -0,0 +1,73 @@
+package ru.lebedev.se;
+
+import org.junit.Assert;
+import org.junit.Test;
+import ru.lebedev.se.chat.server.api.ChatService;
+import ru.lebedev.se.chat.server.model.Session;
+import ru.lebedev.se.chat.server.service.ChatServiceBean;
+
+public class ChatServerTest {
+
+ @Test
+ public void testRegister() {
+ final ChatService service = new ChatServiceBean();
+ Assert.assertTrue(service.register("admin", "admin"));
+ Assert.assertFalse(service.register("admin", "admin"));
+ }
+
+ @Test
+ public void testSignIn() {
+ final ChatService service = new ChatServiceBean();
+ Assert.assertNull(service.signIn("admin", "admin"));
+ service.register("admin", "admin");
+ Assert.assertNotNull(service.signIn("admin", "admin"));
+ }
+
+ @Test
+ public void testSignOut() {
+ final ChatService service = new ChatServiceBean();
+ service.register("admin", "admin");
+
+ final Session sessionAdmin = service.signIn("admin", "admin");
+ Assert.assertNotNull(sessionAdmin);
+ Assert.assertNotNull(service.getUser(sessionAdmin));
+ service.signOut(sessionAdmin);
+ Assert.assertNull(service.getUser(sessionAdmin));
+ }
+
+ @Test
+ public void testSendBroadcast() {
+ final ChatService service = new ChatServiceBean();
+ service.register("admin", "admin");
+ service.register("test", "test");
+ service.register("noname", "nopass");
+
+ final Session sessionAdmin = service.signIn("admin", "admin");
+ service.sendBroadcast(sessionAdmin, "Hello world!");
+ Assert.assertTrue(service.getMessages(sessionAdmin).isEmpty());
+
+ final Session sessionTest = service.signIn("test", "test");
+ Assert.assertFalse(service.getMessages(sessionTest).isEmpty());
+ Assert.assertTrue(service.getMessages(sessionTest).isEmpty());
+
+ final Session sessionNoname = service.signIn("noname", "nopass");
+ Assert.assertFalse(service.getMessages(sessionNoname).isEmpty());
+ Assert.assertTrue(service.getMessages(sessionNoname).isEmpty());
+ }
+
+ @Test
+ public void testSendMessage() {
+ final ChatService service = new ChatServiceBean();
+ service.register("admin", "admin");
+ service.register("test", "test");
+
+ final Session sessionAdmin = service.signIn("admin", "admin");
+ service.sendMessage(sessionAdmin, "test", "Hello world!");
+ Assert.assertTrue(service.getMessages(sessionAdmin).isEmpty());
+
+ final Session sessionTest = service.signIn("test", "test");
+ Assert.assertFalse(service.getMessages(sessionTest).isEmpty());
+ Assert.assertTrue(service.getMessages(sessionTest).isEmpty());
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/ru/lebedev/se/TestMap.java b/src/test/java/ru/lebedev/se/TestMap.java
new file mode 100644
index 0000000..1c2ffb3
--- /dev/null
+++ b/src/test/java/ru/lebedev/se/TestMap.java
@@ -0,0 +1,19 @@
+package ru.lebedev.se;
+
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TestMap {
+
+ @Test
+ public void test() {
+ final Map map = new HashMap<>();
+ map.put("100", "Ivanoff");
+ map.put("101", "Petroff");
+ map.put("102", "Sidoroff");
+
+ System.out.println(map.get("102"));
+ }
+}
diff --git a/src/test/java/ru/lebedev/se/TestUUID.java b/src/test/java/ru/lebedev/se/TestUUID.java
new file mode 100644
index 0000000..cd4f84d
--- /dev/null
+++ b/src/test/java/ru/lebedev/se/TestUUID.java
@@ -0,0 +1,13 @@
+package ru.lebedev.se;
+
+import org.junit.Test;
+
+import java.util.UUID;
+
+public class TestUUID {
+ @Test
+ public void test(){
+ System.out.println(UUID.randomUUID().toString());
+ System.out.println(System.currentTimeMillis());
+ }
+}