├── .gitignore ├── city-register ├── pom.xml └── src │ ├── main │ ├── java │ │ └── edu │ │ │ └── javacourse │ │ │ └── city │ │ │ ├── dao │ │ │ ├── ConnectionBuilder.java │ │ │ ├── PersonCheckDao.java │ │ │ └── PoolConnectionBuilder.java │ │ │ ├── domain │ │ │ ├── LocalDateAdapter.java │ │ │ ├── PersonRequest.java │ │ │ └── PersonResponse.java │ │ │ ├── exception │ │ │ └── PersonCheckException.java │ │ │ └── web │ │ │ ├── CheckPersonService.java │ │ │ └── CheckPersonServlet.java │ ├── resources │ │ └── register.sql │ └── webapp │ │ ├── META-INF │ │ └── context.xml │ │ ├── WEB-INF │ │ └── web.xml │ │ └── index.html │ └── test │ └── java │ └── edu │ └── javacourse │ ├── city │ └── dao │ │ ├── DirectConnectionBuilder.java │ │ └── PersonCheckDaoTest.java │ └── net │ └── SimpleSocket.java ├── network-tcp ├── api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── javacourse │ │ └── net │ │ └── Greetable.java ├── client │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── javacourse │ │ └── net │ │ └── Client.java ├── handlers │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── javacourse │ │ └── greet │ │ ├── DayGreet.java │ │ ├── EveningGreet.java │ │ └── MorningGreet.java ├── pom.xml └── server │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── javacourse │ │ └── net │ │ └── Server.java │ └── resources │ └── server.properties ├── network ├── pom.xml └── src │ └── main │ ├── java │ └── edu │ │ └── javacourse │ │ ├── greet │ │ ├── DayGreet.java │ │ ├── EveningGreet.java │ │ └── MorningGreet.java │ │ └── net │ │ ├── Client.java │ │ ├── Greetable.java │ │ └── Server.java │ └── resources │ └── server.properties ├── register-office ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── edu │ │ │ │ └── javacourse │ │ │ │ └── register │ │ │ │ ├── Starter.java │ │ │ │ ├── business │ │ │ │ └── MarriageManager.java │ │ │ │ ├── config │ │ │ │ └── MarriageConfig.java │ │ │ │ ├── dao │ │ │ │ ├── MarriageDao.java │ │ │ │ └── PersonDao.java │ │ │ │ ├── domain │ │ │ │ ├── BirthCertificate.java │ │ │ │ ├── MarriageCertificate.java │ │ │ │ ├── Passport.java │ │ │ │ ├── Person.java │ │ │ │ ├── PersonFemale.java │ │ │ │ └── PersonMale.java │ │ │ │ ├── rest │ │ │ │ └── MarriageController.java │ │ │ │ └── view │ │ │ │ ├── MarriageRequest.java │ │ │ │ └── MarriageResponse.java │ │ ├── resources │ │ │ ├── register.properties │ │ │ ├── register_office.sql │ │ │ └── springContext.xml │ │ └── webapp │ │ │ └── WEB-INF │ │ │ └── web.xml │ └── test │ │ └── java │ │ └── edu │ │ └── javacourse │ │ └── register │ │ └── dao │ │ └── PersonDaoTest.java └── use-cases.txt └── student ├── pom.xml └── src ├── main ├── java │ └── edu │ │ └── javacourse │ │ └── student │ │ ├── controller │ │ └── UniversityListController.java │ │ ├── dao │ │ ├── FacultyRepository.java │ │ ├── StudentRepository.java │ │ └── UniversityRepository.java │ │ ├── domain │ │ ├── Faculty.java │ │ ├── Student.java │ │ ├── StudentDocument.java │ │ ├── StudentForm.java │ │ └── University.java │ │ ├── rest │ │ └── StudentController.java │ │ ├── service │ │ ├── StudentService.java │ │ └── UniversityService.java │ │ ├── servlet │ │ └── UniversityListServlet.java │ │ └── view │ │ ├── LocalDateStringConverter.java │ │ ├── StringLocalDateConverter.java │ │ ├── StudentRequest.java │ │ └── StudentResponse.java ├── resources │ ├── data.sql │ └── springContext.xml └── webapp │ ├── WEB-INF │ └── web.xml │ ├── universityList.jsp │ └── universityList_jstl.jsp └── test └── java └── edu └── javacourse └── student └── service ├── StudentServiceTest.java └── UniversityServiceTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | out 3 | .idea/ 4 | .DS_Store 5 | *.iml 6 | -------------------------------------------------------------------------------- /city-register/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | edu.javacourse.ext 8 | city-register 9 | 1.0 10 | war 11 | 12 | 13 | 2.28 14 | 2.3.1 15 | 16 | 17 | 18 | 19 | 20 | 21 | org.postgresql 22 | postgresql 23 | 42.2.5 24 | 25 | 26 | 27 | org.slf4j 28 | slf4j-api 29 | 1.7.26 30 | 31 | 32 | 33 | org.slf4j 34 | slf4j-jdk14 35 | 1.7.26 36 | 37 | 38 | 39 | org.glassfish.jersey.containers 40 | jersey-container-servlet 41 | ${jersey.version} 42 | 43 | 44 | org.glassfish.jersey.inject 45 | jersey-hk2 46 | ${jersey.version} 47 | 48 | 49 | 50 | org.glassfish.jersey.media 51 | jersey-media-moxy 52 | ${jersey.version} 53 | 54 | 55 | javax.xml.bind 56 | jaxb-api 57 | ${jaxb.version} 58 | 59 | 60 | 61 | 62 | javax 63 | javaee-api 64 | 7.0 65 | provided 66 | 67 | 68 | 69 | junit 70 | junit 71 | 4.12 72 | test 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | org.apache.maven.plugins 82 | maven-compiler-plugin 83 | 84 | 8 85 | 8 86 | 87 | 88 | 89 | 90 | org.apache.maven.plugins 91 | maven-war-plugin 92 | 93 | false 94 | /Users/antonsaburov/java/apache-tomcat-9.0.16/webapps 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/dao/ConnectionBuilder.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.dao; 2 | 3 | import java.sql.Connection; 4 | import java.sql.SQLException; 5 | 6 | public interface ConnectionBuilder 7 | { 8 | Connection getConnection() throws SQLException; 9 | } 10 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/dao/PersonCheckDao.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.dao; 2 | 3 | import edu.javacourse.city.domain.PersonRequest; 4 | import edu.javacourse.city.domain.PersonResponse; 5 | import edu.javacourse.city.exception.PersonCheckException; 6 | 7 | import java.sql.Connection; 8 | import java.sql.DriverManager; 9 | import java.sql.PreparedStatement; 10 | import java.sql.ResultSet; 11 | import java.sql.SQLException; 12 | 13 | public class PersonCheckDao 14 | { 15 | private static final String SQL_REQUEST = 16 | "select temporal from cr_address_person ap " + 17 | "inner join cr_person p on p.person_id = ap.person_id " + 18 | "inner join cr_address a on a.address_id = ap.address_id " + 19 | "where " + 20 | "CURRENT_DATE >= ap.start_date and (CURRENT_DATE <= ap.end_date or ap.end_date is null)" + 21 | "and upper(p.sur_name COLLATE \"en_US.UTF-8\") = upper(? COLLATE \"en_US.UTF-8\") " + 22 | "and upper(p.given_name COLLATE \"en_US.UTF-8\") = upper(? COLLATE \"en_US.UTF-8\") " + 23 | "and upper(patronymic COLLATE \"en_US.UTF-8\") = upper(? COLLATE \"en_US.UTF-8\") " + 24 | "and p.date_of_birth = ? " + 25 | "and a.street_code = ? " + 26 | "and upper(a.building COLLATE \"en_US.UTF-8\") = upper(? COLLATE \"en_US.UTF-8\") "; 27 | 28 | private ConnectionBuilder connectionBuilder; 29 | 30 | public void setConnectionBuilder(ConnectionBuilder connectionBuilder) { 31 | this.connectionBuilder = connectionBuilder; 32 | } 33 | 34 | private Connection getConnection() throws SQLException { 35 | return connectionBuilder.getConnection(); 36 | } 37 | 38 | public PersonResponse checkPerson(PersonRequest request) throws PersonCheckException { 39 | PersonResponse response = new PersonResponse(); 40 | 41 | String sql = SQL_REQUEST; 42 | if (request.getExtension() != null) { 43 | sql += "and upper(a.extension COLLATE \"en_US.UTF-8\") = upper(? COLLATE \"en_US.UTF-8\") "; 44 | } else { 45 | sql += "and extension is null "; 46 | } 47 | if (request.getApartment() != null) { 48 | sql += "and upper(a.apartment COLLATE \"en_US.UTF-8\") = upper(? COLLATE \"en_US.UTF-8\") "; 49 | } else { 50 | sql += "and a.apartment is null "; 51 | } 52 | 53 | try (Connection con = getConnection(); 54 | PreparedStatement stmt = con.prepareStatement(sql)) { 55 | 56 | int count = 1; 57 | stmt.setString(count++, request.getSurName()); 58 | stmt.setString(count++, request.getGivenName()); 59 | stmt.setString(count++, request.getPatronymic()); 60 | stmt.setDate(count++, java.sql.Date.valueOf(request.getDateOfBirth())); 61 | stmt.setInt(count++, request.getStreetCode()); 62 | stmt.setString(count++, request.getBuilding()); 63 | if (request.getExtension() != null) { 64 | stmt.setString(count++, request.getExtension()); 65 | } 66 | if (request.getApartment() != null) { 67 | stmt.setString(count++, request.getApartment()); 68 | } 69 | 70 | ResultSet rs = stmt.executeQuery(); 71 | if (rs.next()) { 72 | response.setRegistered(true); 73 | response.setTemporal(rs.getBoolean("temporal")); 74 | } 75 | } catch(SQLException ex) { 76 | throw new PersonCheckException(ex); 77 | } 78 | 79 | return response; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/dao/PoolConnectionBuilder.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.dao; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import javax.naming.Context; 7 | import javax.naming.InitialContext; 8 | import javax.naming.NamingException; 9 | import javax.sql.DataSource; 10 | import java.sql.Connection; 11 | import java.sql.SQLException; 12 | 13 | public class PoolConnectionBuilder implements ConnectionBuilder 14 | { 15 | private static final Logger logger = LoggerFactory.getLogger(PoolConnectionBuilder.class); 16 | 17 | private DataSource dataSource; 18 | 19 | public PoolConnectionBuilder() { 20 | try { 21 | Context ctx = new InitialContext(); 22 | dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/cityRegister"); 23 | } catch (NamingException e) { 24 | logger.error("", e); 25 | } 26 | } 27 | 28 | @Override 29 | public Connection getConnection() throws SQLException { 30 | return dataSource.getConnection(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/domain/LocalDateAdapter.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.domain; 2 | 3 | import javax.xml.bind.annotation.adapters.XmlAdapter; 4 | import java.time.LocalDate; 5 | import java.time.format.DateTimeFormatter; 6 | 7 | public class LocalDateAdapter extends XmlAdapter 8 | { 9 | 10 | public static final String PATTERN = "dd.MM.yyyy"; 11 | 12 | @Override 13 | public LocalDate unmarshal(String v) throws Exception { 14 | return LocalDate.parse(v, DateTimeFormatter.ofPattern(PATTERN)); 15 | } 16 | 17 | @Override 18 | public String marshal(LocalDate v) throws Exception { 19 | return v.format(DateTimeFormatter.ofPattern(PATTERN)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/domain/PersonRequest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.domain; 2 | 3 | import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 4 | import java.time.LocalDate; 5 | 6 | public class PersonRequest 7 | { 8 | private String surName; 9 | private String givenName; 10 | private String patronymic; 11 | @XmlJavaTypeAdapter(value = LocalDateAdapter.class) 12 | private LocalDate dateOfBirth; 13 | private Integer streetCode; 14 | private String building; 15 | private String extension; 16 | private String apartment; 17 | 18 | public String getSurName() { 19 | return surName; 20 | } 21 | 22 | public void setSurName(String surName) { 23 | this.surName = surName; 24 | } 25 | 26 | public String getGivenName() { 27 | return givenName; 28 | } 29 | 30 | public void setGivenName(String givenName) { 31 | this.givenName = givenName; 32 | } 33 | 34 | public String getPatronymic() { 35 | return patronymic; 36 | } 37 | 38 | public void setPatronymic(String patronymic) { 39 | this.patronymic = patronymic; 40 | } 41 | 42 | public LocalDate getDateOfBirth() { 43 | return dateOfBirth; 44 | } 45 | 46 | public void setDateOfBirth(LocalDate dateOfBirth) { 47 | this.dateOfBirth = dateOfBirth; 48 | } 49 | 50 | public Integer getStreetCode() { 51 | return streetCode; 52 | } 53 | 54 | public void setStreetCode(Integer streetCode) { 55 | this.streetCode = streetCode; 56 | } 57 | 58 | public String getBuilding() { 59 | return building; 60 | } 61 | 62 | public void setBuilding(String building) { 63 | this.building = building; 64 | } 65 | 66 | public String getExtension() { 67 | return extension; 68 | } 69 | 70 | public void setExtension(String extension) { 71 | this.extension = extension; 72 | } 73 | 74 | public String getApartment() { 75 | return apartment; 76 | } 77 | 78 | public void setApartment(String apartment) { 79 | this.apartment = apartment; 80 | } 81 | 82 | @Override 83 | public String toString() { 84 | return "PersonRequest{" + 85 | "surName='" + surName + '\'' + 86 | ", givenName='" + givenName + '\'' + 87 | ", patronymic='" + patronymic + '\'' + 88 | ", dateOfBirth=" + dateOfBirth + 89 | ", streetCode=" + streetCode + 90 | ", building='" + building + '\'' + 91 | ", extension='" + extension + '\'' + 92 | ", apartment='" + apartment + '\'' + 93 | '}'; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/domain/PersonResponse.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.domain; 2 | 3 | public class PersonResponse 4 | { 5 | private boolean registered; 6 | private boolean temporal; 7 | 8 | public boolean isRegistered() { 9 | return registered; 10 | } 11 | 12 | public void setRegistered(boolean registered) { 13 | this.registered = registered; 14 | } 15 | 16 | public boolean isTemporal() { 17 | return temporal; 18 | } 19 | 20 | public void setTemporal(boolean temporal) { 21 | this.temporal = temporal; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "PersonResponse{" + 27 | "registered=" + registered + 28 | ", temporal=" + temporal + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/exception/PersonCheckException.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.exception; 2 | 3 | public class PersonCheckException extends Exception 4 | { 5 | public PersonCheckException() { 6 | } 7 | 8 | public PersonCheckException(String message) { 9 | super(message); 10 | } 11 | 12 | public PersonCheckException(String message, Throwable cause) { 13 | super(message, cause); 14 | } 15 | 16 | public PersonCheckException(Throwable cause) { 17 | super(cause); 18 | } 19 | 20 | public PersonCheckException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 21 | super(message, cause, enableSuppression, writableStackTrace); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/web/CheckPersonService.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.web; 2 | 3 | import edu.javacourse.city.dao.PersonCheckDao; 4 | import edu.javacourse.city.dao.PoolConnectionBuilder; 5 | import edu.javacourse.city.domain.PersonRequest; 6 | import edu.javacourse.city.domain.PersonResponse; 7 | import edu.javacourse.city.exception.PersonCheckException; 8 | import org.slf4j.Logger; 9 | import org.slf4j.LoggerFactory; 10 | 11 | import javax.annotation.PostConstruct; 12 | import javax.annotation.PreDestroy; 13 | import javax.inject.Singleton; 14 | import javax.ws.rs.Consumes; 15 | import javax.ws.rs.POST; 16 | import javax.ws.rs.Path; 17 | import javax.ws.rs.Produces; 18 | import javax.ws.rs.core.MediaType; 19 | 20 | @Path("/check") 21 | @Singleton 22 | public class CheckPersonService 23 | { 24 | private static final Logger logger = LoggerFactory.getLogger(CheckPersonService.class); 25 | 26 | private PersonCheckDao dao; 27 | 28 | @PostConstruct 29 | public void init() { 30 | logger.info("SERVICE is created"); 31 | dao = new PersonCheckDao(); 32 | dao.setConnectionBuilder(new PoolConnectionBuilder()); 33 | } 34 | 35 | @POST 36 | @Consumes(MediaType.APPLICATION_JSON) 37 | @Produces(MediaType.APPLICATION_JSON) 38 | public PersonResponse checkPerson(PersonRequest request) throws PersonCheckException { 39 | logger.info(request.toString()); 40 | return dao.checkPerson(request); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /city-register/src/main/java/edu/javacourse/city/web/CheckPersonServlet.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.web; 2 | 3 | import edu.javacourse.city.dao.PersonCheckDao; 4 | import edu.javacourse.city.dao.PoolConnectionBuilder; 5 | import edu.javacourse.city.domain.PersonRequest; 6 | import edu.javacourse.city.domain.PersonResponse; 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | 10 | import javax.servlet.ServletException; 11 | import javax.servlet.annotation.WebServlet; 12 | import javax.servlet.http.HttpServlet; 13 | import javax.servlet.http.HttpServletRequest; 14 | import javax.servlet.http.HttpServletResponse; 15 | import java.io.IOException; 16 | import java.time.LocalDate; 17 | import java.time.format.DateTimeFormatter; 18 | 19 | @WebServlet(name = "CheckPersonServlet", urlPatterns = {"/checkPerson"}) 20 | public class CheckPersonServlet extends HttpServlet 21 | { 22 | private static final Logger logger = LoggerFactory.getLogger(CheckPersonServlet.class); 23 | 24 | private PersonCheckDao dao; 25 | 26 | 27 | @Override 28 | public void init() throws ServletException { 29 | logger.info("SERVLET is created"); 30 | dao = new PersonCheckDao(); 31 | dao.setConnectionBuilder(new PoolConnectionBuilder()); 32 | } 33 | 34 | @Override 35 | protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 36 | req.setCharacterEncoding("UTF-8"); 37 | 38 | PersonRequest pr = new PersonRequest(); 39 | pr.setSurName(req.getParameter("surname")); 40 | pr.setGivenName(req.getParameter("givenname")); 41 | pr.setPatronymic(req.getParameter("partonymic")); 42 | LocalDate dateOfBirth = LocalDate.parse(req.getParameter("dateOfBirth"), DateTimeFormatter.ofPattern("dd.MM.yyyy")); 43 | pr.setDateOfBirth(dateOfBirth); 44 | pr.setStreetCode(Integer.parseInt(req.getParameter("streetCode"))); 45 | pr.setBuilding(req.getParameter("building")); 46 | pr.setExtension(req.getParameter("extension")); 47 | pr.setApartment(req.getParameter("apartment")); 48 | 49 | try { 50 | PersonResponse ps = dao.checkPerson(pr); 51 | if (ps.isRegistered()) { 52 | resp.getWriter().write("Registered"); 53 | } else { 54 | resp.getWriter().write("Not registered"); 55 | } 56 | } catch (Exception ex) { 57 | ex.printStackTrace(); 58 | } 59 | } 60 | } 61 | 62 | -------------------------------------------------------------------------------- /city-register/src/main/resources/register.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS cr_address_person; 2 | DROP TABLE IF EXISTS cr_person; 3 | DROP TABLE IF EXISTS cr_address; 4 | DROP TABLE IF EXISTS cr_street; 5 | DROP TABLE IF EXISTS cr_district; 6 | 7 | 8 | CREATE TABLE cr_district ( 9 | district_code integer not null, 10 | district_name varchar(300), 11 | PRIMARY KEY (district_code) 12 | ); 13 | 14 | INSERT INTO cr_district (district_code, district_name) 15 | VALUES (1, 'Выборгский'); 16 | 17 | 18 | CREATE TABLE cr_street 19 | ( 20 | street_code integer not null, 21 | street_name varchar(300), 22 | PRIMARY KEY (street_code) 23 | ); 24 | 25 | INSERT INTO cr_street (street_code, street_name) 26 | VALUES (1, 'Сампсоньевский проспект'); 27 | 28 | 29 | CREATE TABLE cr_address ( 30 | address_id SERIAL, 31 | district_code integer not null, 32 | street_code integer not null, 33 | building varchar(10) not null, 34 | extension varchar(10), 35 | apartment varchar(10), 36 | PRIMARY KEY (address_id), 37 | FOREIGN KEY (district_code) REFERENCES cr_district(district_code) ON DELETE RESTRICT, 38 | FOREIGN KEY (street_code) REFERENCES cr_street(street_code) ON DELETE RESTRICT 39 | ); 40 | 41 | INSERT INTO cr_address (district_code, street_code, building, extension, apartment) 42 | VALUES (1, 1, '10', '2', '121'); 43 | INSERT INTO cr_address (district_code, street_code, building, extension, apartment) 44 | VALUES (1, 1, '271', null, '4'); 45 | 46 | 47 | CREATE TABLE cr_person ( 48 | person_id SERIAL, 49 | sur_name varchar(100) not null, 50 | given_name varchar(100) not null, 51 | patronymic varchar(100) not null, 52 | date_of_birth date not null, 53 | passport_seria varchar(10), 54 | passport_number varchar(10), 55 | passport_date date, 56 | certificate_number varchar(10) null, 57 | certificate_date date null, 58 | PRIMARY KEY (person_id) 59 | ); 60 | 61 | INSERT INTO cr_person (sur_name, given_name, patronymic, date_of_birth, 62 | passport_seria, passport_number, passport_date, certificate_number, certificate_date) 63 | VALUES ('Васильев', 'Павел', 'Николаевич', '1995-03-18', '1234', '123456', '2015-04-11', 64 | null, null); 65 | 66 | INSERT INTO cr_person (sur_name, given_name, patronymic, date_of_birth, 67 | passport_seria, passport_number, passport_date, certificate_number, certificate_date) 68 | VALUES ('Васильева', 'Ирина', 'Петровна', '1997-08-21', '4321', '654321', '2017-09-19', 69 | null, null); 70 | 71 | INSERT INTO cr_person (sur_name, given_name, patronymic, date_of_birth, 72 | passport_seria, passport_number, passport_date, certificate_number, certificate_date) 73 | VALUES ('Васильева', 'Евгения', 'Павловна', '2016-01-11', null, null, null, '456123', '2016-01-21'); 74 | 75 | INSERT INTO cr_person (sur_name, given_name, patronymic, date_of_birth, 76 | passport_seria, passport_number, passport_date, certificate_number, certificate_date) 77 | VALUES ('Васильев', 'Александр', 'Павлович', '2018-10-24', null, null, null, '321654', '2018-11-09'); 78 | 79 | 80 | CREATE TABLE cr_address_person ( 81 | person_address_id SERIAL, 82 | address_id integer not null, 83 | person_id integer not null, 84 | start_date date not null, 85 | end_date date, 86 | temporal boolean DEFAULT false, 87 | PRIMARY KEY (person_address_id), 88 | FOREIGN KEY (address_id) REFERENCES cr_address(address_id) ON DELETE RESTRICT, 89 | FOREIGN KEY (person_id) REFERENCES cr_person(person_id) ON DELETE RESTRICT 90 | ); 91 | 92 | INSERT INTO cr_address_person (address_id, person_id, start_date, end_date, temporal) 93 | VALUES (1, 1, '2014-10-12', null, false); 94 | 95 | INSERT INTO cr_address_person (address_id, person_id, start_date, end_date) 96 | VALUES (1, 2, '2014-10-12', null); 97 | 98 | INSERT INTO cr_address_person (address_id, person_id, start_date, end_date) 99 | VALUES (1, 3, '2016-02-05', null); 100 | 101 | INSERT INTO cr_address_person (address_id, person_id, start_date, end_date) 102 | VALUES (1, 4, '2018-12-11', null); 103 | -------------------------------------------------------------------------------- /city-register/src/main/webapp/META-INF/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /city-register/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | City Register 9 | 10 | 11 | JerseyServlet 12 | org.glassfish.jersey.servlet.ServletContainer 13 | 14 | jersey.config.server.provider.packages 15 | edu.javacourse.city.web 16 | 17 | 18 | jersey.config.server.provider.scanning.recursive 19 | false 20 | 21 | 22 | 23 | JerseyServlet 24 | /rest/* 25 | 26 | 27 | 28 | DB Connection 29 | jdbc/cityRegister 30 | javax.sql.DataSource 31 | Container 32 | 33 | 34 | -------------------------------------------------------------------------------- /city-register/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | Surname:
10 | Givenname:
11 | Patronymic:
12 | Date of birth:
13 | Street Code:
14 | Building:
15 | Extension:
16 | Apartment:
17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /city-register/src/test/java/edu/javacourse/city/dao/DirectConnectionBuilder.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.dao; 2 | 3 | import java.sql.Connection; 4 | import java.sql.DriverManager; 5 | import java.sql.SQLException; 6 | 7 | public class DirectConnectionBuilder implements ConnectionBuilder 8 | { 9 | @Override 10 | public Connection getConnection() throws SQLException { 11 | return DriverManager.getConnection("jdbc:postgresql://localhost/city_register", 12 | "postgres", "postgres"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /city-register/src/test/java/edu/javacourse/city/dao/PersonCheckDaoTest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.city.dao; 2 | 3 | import edu.javacourse.city.domain.PersonRequest; 4 | import edu.javacourse.city.domain.PersonResponse; 5 | import edu.javacourse.city.exception.PersonCheckException; 6 | import org.junit.Assert; 7 | import org.junit.Test; 8 | 9 | import java.time.LocalDate; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | public class PersonCheckDaoTest 14 | { 15 | 16 | @Test 17 | public void checkPerson() throws PersonCheckException { 18 | PersonRequest pr = new PersonRequest(); 19 | pr.setSurName("Васильев"); 20 | pr.setGivenName("Павел"); 21 | pr.setPatronymic("Николаевич"); 22 | pr.setDateOfBirth(LocalDate.of(1995, 3, 18)); 23 | pr.setStreetCode(1); 24 | pr.setBuilding("10"); 25 | pr.setExtension("2"); 26 | pr.setApartment("121"); 27 | 28 | PersonCheckDao dao = new PersonCheckDao(); 29 | dao.setConnectionBuilder(new DirectConnectionBuilder()); 30 | PersonResponse ps = dao.checkPerson(pr); 31 | Assert.assertTrue(ps.isRegistered()); 32 | Assert.assertFalse(ps.isTemporal()); 33 | } 34 | @Test 35 | public void checkPerson2() throws PersonCheckException { 36 | PersonRequest pr = new PersonRequest(); 37 | pr.setSurName("Васильева"); 38 | pr.setGivenName("Ирина"); 39 | pr.setPatronymic("Петровна"); 40 | pr.setDateOfBirth(LocalDate.of(1997, 8, 21)); 41 | pr.setStreetCode(1); 42 | pr.setBuilding("10"); 43 | pr.setExtension("2"); 44 | pr.setApartment("121"); 45 | 46 | PersonCheckDao dao = new PersonCheckDao(); 47 | dao.setConnectionBuilder(new DirectConnectionBuilder()); 48 | PersonResponse ps = dao.checkPerson(pr); 49 | Assert.assertTrue(ps.isRegistered()); 50 | Assert.assertFalse(ps.isTemporal()); 51 | } 52 | } -------------------------------------------------------------------------------- /city-register/src/test/java/edu/javacourse/net/SimpleSocket.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.net; 2 | 3 | import org.junit.Test; 4 | 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.io.OutputStream; 8 | import java.net.Socket; 9 | 10 | public class SimpleSocket 11 | { 12 | @Test 13 | public void simpleSocket() throws IOException { 14 | Socket socket = new Socket("localhost", 8080); 15 | 16 | InputStream is = socket.getInputStream(); 17 | OutputStream os = socket.getOutputStream(); 18 | 19 | String command = "GET / HTTP/1.1\r\nHost:java-course.ru\r\n\r\n"; 20 | os.write(command.getBytes()); 21 | os.flush(); 22 | 23 | int c = 0; 24 | while ( (c = is.read()) != -1) { 25 | System.out.print((char)c); 26 | } 27 | 28 | socket.close(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /network-tcp/api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | network-tcp 8 | edu.javacourse.net 9 | 1.0 10 | 11 | 12 | 4.0.0 13 | 14 | api 15 | 16 | 17 | -------------------------------------------------------------------------------- /network-tcp/api/src/main/java/javacourse/net/Greetable.java: -------------------------------------------------------------------------------- 1 | package javacourse.net; 2 | 3 | public abstract class Greetable 4 | { 5 | public abstract String buildResponse(String userName); 6 | } 7 | -------------------------------------------------------------------------------- /network-tcp/client/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | network-tcp 7 | edu.javacourse.net 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | client 13 | 14 | 15 | -------------------------------------------------------------------------------- /network-tcp/client/src/main/java/javacourse/net/Client.java: -------------------------------------------------------------------------------- 1 | package javacourse.net; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.BufferedWriter; 5 | import java.io.IOException; 6 | import java.io.InputStreamReader; 7 | import java.io.OutputStreamWriter; 8 | import java.net.Socket; 9 | 10 | public class Client 11 | { 12 | public static void main(String[] args) throws IOException { 13 | for(int i=0; i<8; i++) { 14 | SimpleClient sc = new SimpleClient(i); 15 | sc.start(); 16 | } 17 | } 18 | 19 | } 20 | 21 | class SimpleClient extends Thread { 22 | 23 | private final static String[] COMMAND = { 24 | "HELLO", "MORNING", "DAY", "EVENING" 25 | }; 26 | 27 | private int cmdNumber; 28 | 29 | public SimpleClient(int cmdNumber) { 30 | this.cmdNumber = cmdNumber; 31 | } 32 | 33 | @Override 34 | public void run() { 35 | try { 36 | // System.out.println("Started:" + LocalDateTime.now()); 37 | Socket socket = new Socket("127.0.0.1", 25225); 38 | 39 | BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 40 | BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 41 | 42 | String command = COMMAND[cmdNumber % COMMAND.length]; 43 | String sb = command + " " + "Anton"; 44 | bw.write(sb); 45 | bw.newLine(); 46 | bw.flush(); 47 | 48 | String answer = br.readLine(); 49 | System.out.println("Client got string:" + answer); 50 | 51 | br.close(); 52 | bw.close(); 53 | // System.out.println("Finished:" + LocalDateTime.now()); 54 | } catch(IOException ex) { 55 | ex.printStackTrace(System.out); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /network-tcp/handlers/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | network-tcp 7 | edu.javacourse.net 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | handlers 13 | 14 | 15 | 16 | edu.javacourse.net 17 | api 18 | 1.0 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /network-tcp/handlers/src/main/java/javacourse/greet/DayGreet.java: -------------------------------------------------------------------------------- 1 | package javacourse.greet; 2 | 3 | import javacourse.net.Greetable; 4 | 5 | public class DayGreet extends Greetable 6 | { 7 | @Override 8 | public String buildResponse(String userName) { 9 | return "Good day, " + userName; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /network-tcp/handlers/src/main/java/javacourse/greet/EveningGreet.java: -------------------------------------------------------------------------------- 1 | package javacourse.greet; 2 | 3 | import javacourse.net.Greetable; 4 | 5 | public class EveningGreet extends Greetable 6 | { 7 | @Override 8 | public String buildResponse(String userName) { 9 | return "Good evening, " + userName; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /network-tcp/handlers/src/main/java/javacourse/greet/MorningGreet.java: -------------------------------------------------------------------------------- 1 | package javacourse.greet; 2 | 3 | import javacourse.net.Greetable; 4 | 5 | public class MorningGreet extends Greetable 6 | { 7 | @Override 8 | public String buildResponse(String userName) { 9 | return "Good morning, " + userName; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /network-tcp/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | edu.javacourse.net 8 | network-tcp 9 | 1.0 10 | 11 | api 12 | handlers 13 | server 14 | client 15 | 16 | 17 | pom 18 | 19 | 20 | 21 | 22 | org.apache.maven.plugins 23 | maven-compiler-plugin 24 | 25 | 8 26 | 8 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /network-tcp/server/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | network-tcp 7 | edu.javacourse.net 8 | 1.0 9 | 10 | 4.0.0 11 | 12 | server 13 | 14 | 15 | 16 | edu.javacourse.net 17 | api 18 | 1.0 19 | 20 | 21 | 22 | edu.javacourse.net 23 | handlers 24 | 1.0 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /network-tcp/server/src/main/java/javacourse/net/Server.java: -------------------------------------------------------------------------------- 1 | package javacourse.net; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.BufferedWriter; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.io.InputStreamReader; 8 | import java.io.OutputStreamWriter; 9 | import java.net.ServerSocket; 10 | import java.net.Socket; 11 | import java.util.HashMap; 12 | import java.util.Map; 13 | import java.util.Properties; 14 | 15 | public class Server 16 | { 17 | public static void main(String[] args) throws IOException, InterruptedException { 18 | ServerSocket socket = new ServerSocket(25225, 200); 19 | 20 | Map handlers = loadHandlers(); 21 | 22 | System.out.println("Server is started"); 23 | while(true) { 24 | Socket client = socket.accept(); 25 | new SimpleServer(client, handlers).start(); 26 | } 27 | } 28 | 29 | private static Map loadHandlers() { 30 | Map result = new HashMap<>(); 31 | 32 | try (InputStream is = Server.class.getClassLoader().getResourceAsStream("server.properties")) { 33 | 34 | Properties properties = new Properties(); 35 | properties.load(is); 36 | 37 | for(Object command : properties.keySet()) { 38 | String className = properties.getProperty(command.toString()); 39 | Class cl = (Class) Class.forName(className); 40 | Greetable handler = cl.getConstructor().newInstance(); 41 | result.put(command.toString(), handler); 42 | } 43 | 44 | } catch (Exception ex) { 45 | ex.printStackTrace(); 46 | throw new RuntimeException(ex); 47 | } 48 | 49 | 50 | return result; 51 | } 52 | } 53 | 54 | class SimpleServer extends Thread { 55 | 56 | private Socket client; 57 | private Map handlers; 58 | 59 | public SimpleServer(Socket client, Map handlers) { 60 | this.client = client; 61 | this.handlers = handlers; 62 | } 63 | 64 | public void run() { 65 | handleRequest(); 66 | } 67 | 68 | private void handleRequest() { 69 | try { 70 | BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream())); 71 | BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); 72 | 73 | String request = br.readLine(); 74 | String[] lines = request.split("\\s+"); 75 | String command = lines[0]; 76 | String userName = lines[1]; 77 | System.out.println("Server got string 1:" + command); 78 | System.out.println("Server got string 2:" + userName); 79 | // Thread.sleep(2000); 80 | 81 | String response = buildResponse(command, userName); 82 | bw.write(response); 83 | bw.newLine(); 84 | bw.flush(); 85 | 86 | br.close(); 87 | bw.close(); 88 | 89 | client.close(); 90 | } catch (Exception ex) { 91 | ex.printStackTrace(System.out); 92 | } 93 | } 94 | 95 | private String buildResponse(String command, String userName) { 96 | Greetable handler = handlers.get(command); 97 | if (handler != null) { 98 | return handler.buildResponse(userName); 99 | } 100 | return "Hello, " + userName; 101 | } 102 | } -------------------------------------------------------------------------------- /network-tcp/server/src/main/resources/server.properties: -------------------------------------------------------------------------------- 1 | MORNING=javacourse.greet.MorningGreet 2 | EVENING=javacourse.greet.EveningGreet 3 | DAY=javacourse.greet.DayGreet -------------------------------------------------------------------------------- /network/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | edu.javacourse 8 | network 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /network/src/main/java/edu/javacourse/greet/DayGreet.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.greet; 2 | 3 | import edu.javacourse.net.Greetable; 4 | 5 | public class DayGreet extends Greetable 6 | { 7 | @Override 8 | public String buildResponse(String userName) { 9 | return "Good day, " + userName; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /network/src/main/java/edu/javacourse/greet/EveningGreet.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.greet; 2 | 3 | import edu.javacourse.net.Greetable; 4 | 5 | public class EveningGreet extends Greetable 6 | { 7 | @Override 8 | public String buildResponse(String userName) { 9 | return "Good evening, " + userName; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /network/src/main/java/edu/javacourse/greet/MorningGreet.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.greet; 2 | 3 | import edu.javacourse.net.Greetable; 4 | 5 | public class MorningGreet extends Greetable 6 | { 7 | @Override 8 | public String buildResponse(String userName) { 9 | return "Good morning, " + userName; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /network/src/main/java/edu/javacourse/net/Client.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.net; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.BufferedWriter; 5 | import java.io.IOException; 6 | import java.io.InputStreamReader; 7 | import java.io.OutputStreamWriter; 8 | import java.net.Socket; 9 | import java.time.LocalDateTime; 10 | 11 | public class Client 12 | { 13 | public static void main(String[] args) throws IOException { 14 | for(int i=0; i<8; i++) { 15 | SimpleClient sc = new SimpleClient(i); 16 | sc.start(); 17 | } 18 | } 19 | 20 | } 21 | 22 | class SimpleClient extends Thread { 23 | 24 | private final static String[] COMMAND = { 25 | "HELLO", "MORNING", "DAY", "EVENING" 26 | }; 27 | 28 | private int cmdNumber; 29 | 30 | public SimpleClient(int cmdNumber) { 31 | this.cmdNumber = cmdNumber; 32 | } 33 | 34 | @Override 35 | public void run() { 36 | try { 37 | // System.out.println("Started:" + LocalDateTime.now()); 38 | Socket socket = new Socket("127.0.0.1", 25225); 39 | 40 | BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 41 | BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 42 | 43 | String command = COMMAND[cmdNumber % COMMAND.length]; 44 | String sb = command + " " + "Anton"; 45 | bw.write(sb); 46 | bw.newLine(); 47 | bw.flush(); 48 | 49 | String answer = br.readLine(); 50 | System.out.println("Client got string:" + answer); 51 | 52 | br.close(); 53 | bw.close(); 54 | // System.out.println("Finished:" + LocalDateTime.now()); 55 | } catch(IOException ex) { 56 | ex.printStackTrace(System.out); 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /network/src/main/java/edu/javacourse/net/Greetable.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.net; 2 | 3 | public abstract class Greetable 4 | { 5 | public abstract String buildResponse(String userName); 6 | } 7 | -------------------------------------------------------------------------------- /network/src/main/java/edu/javacourse/net/Server.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.net; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.BufferedWriter; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.io.InputStreamReader; 8 | import java.io.OutputStreamWriter; 9 | import java.net.ServerSocket; 10 | import java.net.Socket; 11 | import java.util.HashMap; 12 | import java.util.Map; 13 | import java.util.Properties; 14 | 15 | public class Server 16 | { 17 | public static void main(String[] args) throws IOException, InterruptedException { 18 | ServerSocket socket = new ServerSocket(25225, 200); 19 | 20 | Map handlers = loadHandlers(); 21 | 22 | System.out.println("Server is started"); 23 | while(true) { 24 | Socket client = socket.accept(); 25 | new SimpleServer(client, handlers).start(); 26 | } 27 | } 28 | 29 | private static Map loadHandlers() { 30 | Map result = new HashMap<>(); 31 | 32 | try (InputStream is = Server.class.getClassLoader().getResourceAsStream("server.properties")) { 33 | 34 | Properties properties = new Properties(); 35 | properties.load(is); 36 | 37 | for(Object command : properties.keySet()) { 38 | String className = properties.getProperty(command.toString()); 39 | Class cl = (Class) Class.forName(className); 40 | Greetable handler = cl.getConstructor().newInstance(); 41 | result.put(command.toString(), handler); 42 | } 43 | 44 | } catch (Exception ex) { 45 | ex.printStackTrace(); 46 | throw new RuntimeException(ex); 47 | } 48 | 49 | 50 | return result; 51 | } 52 | } 53 | 54 | class SimpleServer extends Thread { 55 | 56 | private Socket client; 57 | private Map handlers; 58 | 59 | public SimpleServer(Socket client, Map handlers) { 60 | this.client = client; 61 | this.handlers = handlers; 62 | } 63 | 64 | public void run() { 65 | handleRequest(); 66 | } 67 | 68 | private void handleRequest() { 69 | try { 70 | BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream())); 71 | BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); 72 | 73 | String request = br.readLine(); 74 | String[] lines = request.split("\\s+"); 75 | String command = lines[0]; 76 | String userName = lines[1]; 77 | System.out.println("Server got string 1:" + command); 78 | System.out.println("Server got string 2:" + userName); 79 | // Thread.sleep(2000); 80 | 81 | String response = buildResponse(command, userName); 82 | bw.write(response); 83 | bw.newLine(); 84 | bw.flush(); 85 | 86 | br.close(); 87 | bw.close(); 88 | 89 | client.close(); 90 | } catch (Exception ex) { 91 | ex.printStackTrace(System.out); 92 | } 93 | } 94 | 95 | private String buildResponse(String command, String userName) { 96 | Greetable handler = handlers.get(command); 97 | if (handler != null) { 98 | return handler.buildResponse(userName); 99 | } 100 | return "Hello, " + userName; 101 | } 102 | } -------------------------------------------------------------------------------- /network/src/main/resources/server.properties: -------------------------------------------------------------------------------- 1 | MORNING=edu.javacourse.greet.MorningGreet 2 | EVENING=edu.javacourse.greet.EveningGreet 3 | DAY=edu.javacourse.greet.DayGreet -------------------------------------------------------------------------------- /register-office/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | edu.javacourse.ext 8 | register-office 9 | 1.0 10 | war 11 | 12 | 13 | 5.1.9.RELEASE 14 | 2.2.1.RELEASE 15 | 16 | 2.29.1 17 | 2.3.1 18 | 19 | 1.7.28 20 | 21 | 22 | 23 | 24 | 25 | org.apache.maven.plugins 26 | maven-compiler-plugin 27 | 28 | 8 29 | 8 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | org.hibernate 39 | hibernate-core 40 | 5.4.3.Final 41 | 42 | 43 | 44 | org.postgresql 45 | postgresql 46 | 42.2.5 47 | 48 | 49 | 50 | org.springframework 51 | spring-context 52 | ${spring.version} 53 | 54 | 55 | org.springframework 56 | spring-beans 57 | ${spring.version} 58 | 59 | 60 | org.springframework 61 | spring-orm 62 | ${spring.version} 63 | 64 | 65 | org.springframework 66 | spring-web 67 | ${spring.version} 68 | 69 | 70 | org.springframework.data 71 | spring-data-jpa 72 | ${spring-data.version} 73 | 74 | 75 | 76 | org.glassfish.jersey.containers 77 | jersey-container-servlet 78 | ${jersey.version} 79 | 80 | 81 | org.glassfish.jersey.inject 82 | jersey-hk2 83 | ${jersey.version} 84 | 85 | 86 | org.glassfish.jersey.media 87 | jersey-media-json-jackson 88 | ${jersey.version} 89 | 90 | 91 | org.glassfish.jersey.ext 92 | jersey-spring5 93 | ${jersey.version} 94 | 95 | 96 | javax.xml.bind 97 | jaxb-api 98 | ${jaxb.version} 99 | 100 | 101 | 102 | org.slf4j 103 | slf4j-api 104 | ${slf4j.version} 105 | 106 | 107 | org.slf4j 108 | slf4j-simple 109 | ${slf4j.version} 110 | 111 | 112 | 113 | junit 114 | junit 115 | 4.12 116 | test 117 | 118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/Starter.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register; 2 | 3 | import edu.javacourse.register.rest.MarriageController; 4 | import edu.javacourse.register.view.MarriageRequest; 5 | import org.springframework.context.ApplicationContext; 6 | import org.springframework.context.support.ClassPathXmlApplicationContext; 7 | 8 | public class Starter 9 | { 10 | public static void main(String[] args) { 11 | ApplicationContext context = new ClassPathXmlApplicationContext( 12 | new String[]{"springContext.xml"} 13 | ); 14 | 15 | // MarriageController controller = context.getBean(MarriageController.class); 16 | // MarriageController controller = context.getBean("controller", MarriageController.class); 17 | // controller.findMarriageCertificate(new MarriageRequest()); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/business/MarriageManager.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.business; 2 | 3 | import edu.javacourse.register.dao.MarriageDao; 4 | import edu.javacourse.register.dao.PersonDao; 5 | import edu.javacourse.register.domain.MarriageCertificate; 6 | import edu.javacourse.register.domain.Person; 7 | import edu.javacourse.register.domain.PersonFemale; 8 | import edu.javacourse.register.domain.PersonMale; 9 | import edu.javacourse.register.view.MarriageRequest; 10 | import edu.javacourse.register.view.MarriageResponse; 11 | import org.slf4j.Logger; 12 | import org.slf4j.LoggerFactory; 13 | import org.springframework.beans.factory.annotation.Autowired; 14 | import org.springframework.beans.factory.config.ConfigurableBeanFactory; 15 | import org.springframework.context.annotation.Scope; 16 | import org.springframework.stereotype.Service; 17 | import org.springframework.transaction.annotation.Transactional; 18 | 19 | import java.time.LocalDate; 20 | import java.util.List; 21 | 22 | @Service("marriageService") 23 | @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) 24 | public class MarriageManager 25 | { 26 | private static final Logger LOGGER = LoggerFactory.getLogger(MarriageManager.class); 27 | 28 | @Autowired 29 | private MarriageDao marriageDao; 30 | @Autowired 31 | private PersonDao personDao; 32 | 33 | @Transactional 34 | public MarriageResponse findMarriageCertificate(MarriageRequest request) { 35 | LOGGER.info("findMarriageCertificate called"); 36 | 37 | personDao.addPerson(getPerson(1)); 38 | personDao.addPerson(getPerson(2)); 39 | 40 | MarriageCertificate mc = getMarriageCertificate(); 41 | marriageDao.saveAndFlush(mc); 42 | 43 | // marriageDao.findAll(); 44 | // marriageDao.findById(1L); 45 | List list = marriageDao.findByNumber("12345"); 46 | list.forEach(m -> LOGGER.info("MC:{}", m.getMarriageCertificateId())); 47 | LOGGER.info("----- >>>>>"); 48 | List list2 = marriageDao.findByNum("98765"); 49 | list2.forEach(m -> LOGGER.info("MC:{}", m.getMarriageCertificateId())); 50 | LOGGER.info("----- >>>>>"); 51 | List list3 = marriageDao.findSomething("01928"); 52 | list3.forEach(m -> LOGGER.info("MC:{}", m.getMarriageCertificateId())); 53 | 54 | return new MarriageResponse(); 55 | } 56 | 57 | private MarriageCertificate getMarriageCertificate() { 58 | MarriageCertificate mc = new MarriageCertificate(); 59 | mc.setIssueDate(LocalDate.now()); 60 | mc.setNumber("01928"); 61 | mc.setActive(true); 62 | 63 | List persons = personDao.findPersons(); 64 | for(Person person : persons) { 65 | if (person instanceof PersonMale) { 66 | mc.setHusband((PersonMale)person); 67 | } else { 68 | mc.setWife((PersonFemale)person); 69 | } 70 | } 71 | 72 | return mc; 73 | } 74 | 75 | private Person getPerson(int sex) { 76 | Person m = sex == 1 ? new PersonMale() : new PersonFemale(); 77 | m.setFirstName("1_" + sex); 78 | m.setLastName("2_" + sex); 79 | m.setPatronymic("3_" + sex); 80 | m.setDateOfBirth(LocalDate.of(1991, 3, 12)); 81 | return m; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/config/MarriageConfig.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.config; 2 | 3 | import edu.javacourse.register.dao.PersonDao; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.context.annotation.PropertySource; 7 | 8 | @Configuration 9 | @PropertySource(value = {"classpath:/register.properties"}) 10 | public class MarriageConfig 11 | { 12 | @Bean 13 | public PersonDao buildPersonDao() { 14 | System.out.println("PersonDao is created"); 15 | return new PersonDao(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/dao/MarriageDao.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.dao; 2 | 3 | import edu.javacourse.register.domain.MarriageCertificate; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.Query; 6 | import org.springframework.data.repository.query.Param; 7 | import org.springframework.stereotype.Repository; 8 | 9 | import java.util.List; 10 | 11 | @Repository 12 | public interface MarriageDao extends JpaRepository 13 | { 14 | List findByNumber(String number); 15 | 16 | List findByNum(@Param("number") String number); 17 | 18 | @Query("SELECT mc FROM MarriageCertificate mc WHERE mc.number = :number") 19 | List findSomething(@Param("number") String number); 20 | } 21 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/dao/PersonDao.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.dao; 2 | 3 | import edu.javacourse.register.domain.Person; 4 | 5 | import javax.persistence.EntityManager; 6 | import javax.persistence.EntityManagerFactory; 7 | import javax.persistence.EntityTransaction; 8 | import javax.persistence.Persistence; 9 | import javax.persistence.PersistenceContext; 10 | import javax.persistence.Query; 11 | import java.util.List; 12 | 13 | public class PersonDao 14 | { 15 | @PersistenceContext 16 | private EntityManager entityManager; 17 | 18 | public List findPersons() { 19 | Query query = entityManager.createNamedQuery("Person.findPersons"); 20 | return query.getResultList(); 21 | } 22 | 23 | public Long addPerson(Person person) { 24 | entityManager.persist(person); 25 | entityManager.flush(); 26 | return person.getPersonId(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/domain/BirthCertificate.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.Entity; 6 | import javax.persistence.FetchType; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | import javax.persistence.JoinColumn; 11 | import javax.persistence.ManyToOne; 12 | import javax.persistence.OneToOne; 13 | import javax.persistence.Table; 14 | import java.time.LocalDate; 15 | 16 | @Table(name = "ro_birth_certificate") 17 | @Entity 18 | public class BirthCertificate 19 | { 20 | @Id 21 | @GeneratedValue(strategy = GenerationType.IDENTITY) 22 | @Column(name = "birth_certificate_id") 23 | private Long birthCertificateId; 24 | @Column(name = "number_certificate") 25 | private String number; 26 | @Column(name = "date_issue") 27 | private LocalDate issueDate; 28 | @OneToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 29 | @JoinColumn(name = "person_id") 30 | private Person person; 31 | @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 32 | @JoinColumn(name = "father_id") 33 | private PersonMale father; 34 | @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 35 | @JoinColumn(name = "mother_id") 36 | private PersonFemale mother; 37 | 38 | public Long getBirthCertificateId() { 39 | return birthCertificateId; 40 | } 41 | 42 | public void setBirthCertificateId(Long birthCertificateId) { 43 | this.birthCertificateId = birthCertificateId; 44 | } 45 | 46 | public String getNumber() { 47 | return number; 48 | } 49 | 50 | public void setNumber(String number) { 51 | this.number = number; 52 | } 53 | 54 | public LocalDate getIssueDate() { 55 | return issueDate; 56 | } 57 | 58 | public void setIssueDate(LocalDate issueDate) { 59 | this.issueDate = issueDate; 60 | } 61 | 62 | public Person getPerson() { 63 | return person; 64 | } 65 | 66 | public void setPerson(Person person) { 67 | this.person = person; 68 | } 69 | 70 | public PersonMale getFather() { 71 | return father; 72 | } 73 | 74 | public void setFather(PersonMale father) { 75 | this.father = father; 76 | } 77 | 78 | public PersonFemale getMother() { 79 | return mother; 80 | } 81 | 82 | public void setMother(PersonFemale mother) { 83 | this.mother = mother; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/domain/MarriageCertificate.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.Entity; 6 | import javax.persistence.FetchType; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | import javax.persistence.JoinColumn; 11 | import javax.persistence.ManyToOne; 12 | import javax.persistence.NamedQuery; 13 | import javax.persistence.Table; 14 | import java.time.LocalDate; 15 | 16 | @Table(name = "ro_marriage_certificate") 17 | @Entity 18 | @NamedQuery(name = "MarriageCertificate.findByNum", 19 | query = "SELECT mc FROM MarriageCertificate mc WHERE mc.number = :number") 20 | public class MarriageCertificate 21 | { 22 | @Id 23 | @GeneratedValue(strategy = GenerationType.IDENTITY) 24 | @Column(name = "marriage_certificate_id") 25 | private Long marriageCertificateId; 26 | @Column(name = "number_certificate") 27 | private String number; 28 | @Column(name = "date_issue") 29 | private LocalDate issueDate; 30 | @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 31 | @JoinColumn(name = "husband_id") 32 | private PersonMale husband; 33 | @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 34 | @JoinColumn(name = "wife_id") 35 | private PersonFemale wife; 36 | @Column(name = "active") 37 | private boolean active; 38 | @Column(name = "end_date") 39 | private LocalDate endDate; 40 | 41 | public Long getMarriageCertificateId() { 42 | return marriageCertificateId; 43 | } 44 | 45 | public void setMarriageCertificateId(Long marriageCertificateId) { 46 | this.marriageCertificateId = marriageCertificateId; 47 | } 48 | 49 | public String getNumber() { 50 | return number; 51 | } 52 | 53 | public void setNumber(String number) { 54 | this.number = number; 55 | } 56 | 57 | public LocalDate getIssueDate() { 58 | return issueDate; 59 | } 60 | 61 | public void setIssueDate(LocalDate issueDate) { 62 | this.issueDate = issueDate; 63 | } 64 | 65 | public PersonMale getHusband() { 66 | return husband; 67 | } 68 | 69 | public void setHusband(PersonMale husband) { 70 | this.husband = husband; 71 | } 72 | 73 | public PersonFemale getWife() { 74 | return wife; 75 | } 76 | 77 | public void setWife(PersonFemale wife) { 78 | this.wife = wife; 79 | } 80 | 81 | public boolean isActive() { 82 | return active; 83 | } 84 | 85 | public void setActive(boolean active) { 86 | this.active = active; 87 | } 88 | 89 | public LocalDate getEndDate() { 90 | return endDate; 91 | } 92 | 93 | public void setEndDate(LocalDate endDate) { 94 | this.endDate = endDate; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/domain/Passport.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.Entity; 6 | import javax.persistence.FetchType; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | import javax.persistence.JoinColumn; 11 | import javax.persistence.ManyToOne; 12 | import javax.persistence.Table; 13 | import java.time.LocalDate; 14 | 15 | @Table(name = "ro_passport") 16 | @Entity 17 | public class Passport 18 | { 19 | @Id 20 | @GeneratedValue(strategy = GenerationType.IDENTITY) 21 | @Column(name = "passport_id") 22 | private Long passportId; 23 | @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 24 | @JoinColumn(name = "person_id") 25 | private Person person; 26 | @Column(name = "seria") 27 | private String seria; 28 | @Column(name = "number") 29 | private String number; 30 | @Column(name = "date_issue") 31 | private LocalDate issueDate; 32 | @Column(name = "issue_department") 33 | private String issueDepartment; 34 | 35 | public Long getPassportId() { 36 | return passportId; 37 | } 38 | 39 | public void setPassportId(Long passportId) { 40 | this.passportId = passportId; 41 | } 42 | 43 | public Person getPerson() { 44 | return person; 45 | } 46 | 47 | public void setPerson(Person person) { 48 | this.person = person; 49 | } 50 | 51 | public String getSeria() { 52 | return seria; 53 | } 54 | 55 | public void setSeria(String seria) { 56 | this.seria = seria; 57 | } 58 | 59 | public String getNumber() { 60 | return number; 61 | } 62 | 63 | public void setNumber(String number) { 64 | this.number = number; 65 | } 66 | 67 | public LocalDate getIssueDate() { 68 | return issueDate; 69 | } 70 | 71 | public void setIssueDate(LocalDate issueDate) { 72 | this.issueDate = issueDate; 73 | } 74 | 75 | public String getIssueDepartment() { 76 | return issueDepartment; 77 | } 78 | 79 | public void setIssueDepartment(String issueDepartment) { 80 | this.issueDepartment = issueDepartment; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/domain/Person.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.DiscriminatorColumn; 6 | import javax.persistence.DiscriminatorType; 7 | import javax.persistence.Entity; 8 | import javax.persistence.FetchType; 9 | import javax.persistence.GeneratedValue; 10 | import javax.persistence.GenerationType; 11 | import javax.persistence.Id; 12 | import javax.persistence.Inheritance; 13 | import javax.persistence.InheritanceType; 14 | import javax.persistence.NamedQueries; 15 | import javax.persistence.NamedQuery; 16 | import javax.persistence.OneToMany; 17 | import javax.persistence.OneToOne; 18 | import javax.persistence.Table; 19 | import java.time.LocalDate; 20 | import java.util.List; 21 | 22 | @Table(name = "ro_person") 23 | @Entity 24 | @Inheritance(strategy = InheritanceType.SINGLE_TABLE) 25 | @DiscriminatorColumn(name = "sex", discriminatorType = DiscriminatorType.INTEGER) 26 | 27 | @NamedQueries({ 28 | @NamedQuery(name = "Person.findPersons", 29 | query = "SELECT p FROM Person p " + 30 | "LEFT JOIN FETCH p.passports ps " + 31 | "LEFT JOIN FETCH p.birthCertificate bs") 32 | }) 33 | public abstract class Person 34 | { 35 | @Id 36 | @GeneratedValue(strategy = GenerationType.IDENTITY) 37 | @Column(name = "person_id") 38 | private Long personId; 39 | @Column(name = "first_name") 40 | private String firstName; 41 | @Column(name = "last_name") 42 | private String lastName; 43 | @Column(name = "patronymic") 44 | private String patronymic; 45 | @Column(name = "date_birth") 46 | private LocalDate dateOfBirth; 47 | @OneToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, 48 | mappedBy = "person") 49 | private BirthCertificate birthCertificate; 50 | @OneToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, 51 | mappedBy = "person") 52 | private List passports; 53 | 54 | public Long getPersonId() { 55 | return personId; 56 | } 57 | 58 | public void setPersonId(Long personId) { 59 | this.personId = personId; 60 | } 61 | 62 | public String getFirstName() { 63 | return firstName; 64 | } 65 | 66 | public void setFirstName(String firstName) { 67 | this.firstName = firstName; 68 | } 69 | 70 | public String getLastName() { 71 | return lastName; 72 | } 73 | 74 | public void setLastName(String lastName) { 75 | this.lastName = lastName; 76 | } 77 | 78 | public String getPatronymic() { 79 | return patronymic; 80 | } 81 | 82 | public void setPatronymic(String patronymic) { 83 | this.patronymic = patronymic; 84 | } 85 | 86 | public LocalDate getDateOfBirth() { 87 | return dateOfBirth; 88 | } 89 | 90 | public void setDateOfBirth(LocalDate dateOfBirth) { 91 | this.dateOfBirth = dateOfBirth; 92 | } 93 | 94 | public BirthCertificate getBirthCertificate() { 95 | return birthCertificate; 96 | } 97 | 98 | public void setBirthCertificate(BirthCertificate birthCertificate) { 99 | this.birthCertificate = birthCertificate; 100 | } 101 | 102 | public List getPassports() { 103 | return passports; 104 | } 105 | 106 | public void setPassports(List passports) { 107 | this.passports = passports; 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/domain/PersonFemale.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.DiscriminatorValue; 5 | import javax.persistence.Entity; 6 | import javax.persistence.FetchType; 7 | import javax.persistence.OneToMany; 8 | import java.util.List; 9 | 10 | @Entity 11 | @DiscriminatorValue("1") 12 | public class PersonFemale extends Person 13 | { 14 | @OneToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, 15 | mappedBy = "wife") 16 | private List marriageCertificates; 17 | @OneToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, 18 | mappedBy = "mother") 19 | private List birthCertificates; 20 | 21 | public List getMarriageCertificates() { 22 | return marriageCertificates; 23 | } 24 | 25 | public void setMarriageCertificates(List marriageCertificates) { 26 | this.marriageCertificates = marriageCertificates; 27 | } 28 | 29 | public List getBirthCertificates() { 30 | return birthCertificates; 31 | } 32 | 33 | public void setBirthCertificates(List birthCertificates) { 34 | this.birthCertificates = birthCertificates; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/domain/PersonMale.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.DiscriminatorValue; 5 | import javax.persistence.Entity; 6 | import javax.persistence.FetchType; 7 | import javax.persistence.OneToMany; 8 | import java.util.List; 9 | 10 | @Entity 11 | @DiscriminatorValue("2") 12 | public class PersonMale extends Person 13 | { 14 | @OneToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, 15 | mappedBy = "husband") 16 | private List marriageCertificates; 17 | @OneToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, 18 | mappedBy = "father") 19 | private List birthCertificates; 20 | 21 | public List getMarriageCertificates() { 22 | return marriageCertificates; 23 | } 24 | 25 | public void setMarriageCertificates(List marriageCertificates) { 26 | this.marriageCertificates = marriageCertificates; 27 | } 28 | 29 | public List getBirthCertificates() { 30 | return birthCertificates; 31 | } 32 | 33 | public void setBirthCertificates(List birthCertificates) { 34 | this.birthCertificates = birthCertificates; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/rest/MarriageController.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.rest; 2 | 3 | import edu.javacourse.register.business.MarriageManager; 4 | import edu.javacourse.register.view.MarriageRequest; 5 | import edu.javacourse.register.view.MarriageResponse; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.beans.factory.annotation.Qualifier; 10 | import org.springframework.stereotype.Service; 11 | 12 | import javax.ws.rs.GET; 13 | import javax.ws.rs.Path; 14 | import javax.ws.rs.Produces; 15 | import javax.ws.rs.core.MediaType; 16 | 17 | @Service("controller") 18 | @Path("/mc") 19 | public class MarriageController 20 | { 21 | private static final Logger LOGGER = LoggerFactory.getLogger(MarriageController.class); 22 | 23 | @Autowired 24 | @Qualifier("marriageService") 25 | private MarriageManager marriageManager; 26 | 27 | @GET 28 | @Produces(MediaType.APPLICATION_JSON) 29 | public MarriageResponse findMarriageCertificate() { 30 | LOGGER.info("findMarriageCertificate called"); 31 | return marriageManager.findMarriageCertificate(null); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/view/MarriageRequest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.view; 2 | 3 | import java.io.Serializable; 4 | import java.time.LocalDate; 5 | 6 | public class MarriageRequest implements Serializable 7 | { 8 | private String husbandSurename; 9 | private String husbandGivenname; 10 | private String husbandPatronymic; 11 | private LocalDate husbandDateBirth; 12 | private String husbandPassportSeria; 13 | private String husbandPassportNumber; 14 | private LocalDate husbandPassportIssueDate; 15 | private String wifeSurename; 16 | private String wifeGivenname; 17 | private String wifePatronymic; 18 | private LocalDate wifeDateBirth; 19 | private String wifePassportSeria; 20 | private String wifePassportNumber; 21 | private LocalDate wifePassportIssueDate; 22 | 23 | private String marriageCertificateNumber; 24 | private LocalDate marriageCertificateDate; 25 | 26 | public String getHusbandSurename() { 27 | return husbandSurename; 28 | } 29 | 30 | public void setHusbandSurename(String husbandSurename) { 31 | this.husbandSurename = husbandSurename; 32 | } 33 | 34 | public String getHusbandGivenname() { 35 | return husbandGivenname; 36 | } 37 | 38 | public void setHusbandGivenname(String husbandGivenname) { 39 | this.husbandGivenname = husbandGivenname; 40 | } 41 | 42 | public String getHusbandPatronymic() { 43 | return husbandPatronymic; 44 | } 45 | 46 | public void setHusbandPatronymic(String husbandPatronymic) { 47 | this.husbandPatronymic = husbandPatronymic; 48 | } 49 | 50 | public LocalDate getHusbandDateBirth() { 51 | return husbandDateBirth; 52 | } 53 | 54 | public void setHusbandDateBirth(LocalDate husbandDateBirth) { 55 | this.husbandDateBirth = husbandDateBirth; 56 | } 57 | 58 | public String getHusbandPassportSeria() { 59 | return husbandPassportSeria; 60 | } 61 | 62 | public void setHusbandPassportSeria(String husbandPassportSeria) { 63 | this.husbandPassportSeria = husbandPassportSeria; 64 | } 65 | 66 | public String getHusbandPassportNumber() { 67 | return husbandPassportNumber; 68 | } 69 | 70 | public void setHusbandPassportNumber(String husbandPassportNumber) { 71 | this.husbandPassportNumber = husbandPassportNumber; 72 | } 73 | 74 | public LocalDate getHusbandPassportIssueDate() { 75 | return husbandPassportIssueDate; 76 | } 77 | 78 | public void setHusbandPassportIssueDate(LocalDate husbandPassportIssueDate) { 79 | this.husbandPassportIssueDate = husbandPassportIssueDate; 80 | } 81 | 82 | public String getWifeSurename() { 83 | return wifeSurename; 84 | } 85 | 86 | public void setWifeSurename(String wifeSurename) { 87 | this.wifeSurename = wifeSurename; 88 | } 89 | 90 | public String getWifeGivenname() { 91 | return wifeGivenname; 92 | } 93 | 94 | public void setWifeGivenname(String wifeGivenname) { 95 | this.wifeGivenname = wifeGivenname; 96 | } 97 | 98 | public String getWifePatronymic() { 99 | return wifePatronymic; 100 | } 101 | 102 | public void setWifePatronymic(String wifePatronymic) { 103 | this.wifePatronymic = wifePatronymic; 104 | } 105 | 106 | public LocalDate getWifeDateBirth() { 107 | return wifeDateBirth; 108 | } 109 | 110 | public void setWifeDateBirth(LocalDate wifeDateBirth) { 111 | this.wifeDateBirth = wifeDateBirth; 112 | } 113 | 114 | public String getWifePassportSeria() { 115 | return wifePassportSeria; 116 | } 117 | 118 | public void setWifePassportSeria(String wifePassportSeria) { 119 | this.wifePassportSeria = wifePassportSeria; 120 | } 121 | 122 | public String getWifePassportNumber() { 123 | return wifePassportNumber; 124 | } 125 | 126 | public void setWifePassportNumber(String wifePassportNumber) { 127 | this.wifePassportNumber = wifePassportNumber; 128 | } 129 | 130 | public LocalDate getWifePassportIssueDate() { 131 | return wifePassportIssueDate; 132 | } 133 | 134 | public void setWifePassportIssueDate(LocalDate wifePassportIssueDate) { 135 | this.wifePassportIssueDate = wifePassportIssueDate; 136 | } 137 | 138 | public String getMarriageCertificateNumber() { 139 | return marriageCertificateNumber; 140 | } 141 | 142 | public void setMarriageCertificateNumber(String marriageCertificateNumber) { 143 | this.marriageCertificateNumber = marriageCertificateNumber; 144 | } 145 | 146 | public LocalDate getMarriageCertificateDate() { 147 | return marriageCertificateDate; 148 | } 149 | 150 | public void setMarriageCertificateDate(LocalDate marriageCertificateDate) { 151 | this.marriageCertificateDate = marriageCertificateDate; 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /register-office/src/main/java/edu/javacourse/register/view/MarriageResponse.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.view; 2 | 3 | import java.io.Serializable; 4 | 5 | public class MarriageResponse implements Serializable 6 | { 7 | private boolean existing; 8 | 9 | public boolean isExisting() { 10 | return existing; 11 | } 12 | 13 | public void setExisting(boolean existing) { 14 | this.existing = existing; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /register-office/src/main/resources/register.properties: -------------------------------------------------------------------------------- 1 | test.value=SIMPLE_VALUE -------------------------------------------------------------------------------- /register-office/src/main/resources/register_office.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS ro_birth_certificate; 2 | DROP TABLE IF EXISTS ro_marriage_certificate; 3 | DROP TABLE IF EXISTS ro_passport; 4 | DROP TABLE IF EXISTS ro_person; 5 | 6 | CREATE TABLE ro_person ( 7 | person_id SERIAL, 8 | sex smallint not null, 9 | first_name varchar(100) not null, 10 | last_name varchar(100) not null, 11 | patronymic varchar(100), 12 | date_birth date not null, 13 | PRIMARY KEY (person_id) 14 | ); 15 | 16 | CREATE TABLE ro_passport ( 17 | passport_id SERIAL, 18 | person_id integer not null, 19 | seria varchar(10) not null, 20 | number varchar(10) not null, 21 | date_issue date not null, 22 | issue_department varchar(200), 23 | PRIMARY KEY (passport_id), 24 | FOREIGN KEY (person_id) REFERENCES ro_person(person_id) ON DELETE RESTRICT 25 | ); 26 | 27 | CREATE TABLE ro_birth_certificate ( 28 | birth_certificate_id SERIAL, 29 | number_certificate varchar(20) not null, 30 | date_issue date not null, 31 | person_id integer not null, 32 | father_id integer, 33 | mother_id integer, 34 | PRIMARY KEY (birth_certificate_id), 35 | FOREIGN KEY (person_id) REFERENCES ro_person(person_id) ON DELETE RESTRICT, 36 | FOREIGN KEY (father_id) REFERENCES ro_person(person_id) ON DELETE RESTRICT, 37 | FOREIGN KEY (mother_id) REFERENCES ro_person(person_id) ON DELETE RESTRICT 38 | ); 39 | 40 | 41 | CREATE TABLE ro_marriage_certificate ( 42 | marriage_certificate_id SERIAL, 43 | number_certificate varchar(20) not null, 44 | date_issue date not null, 45 | husband_id integer not null, 46 | wife_id integer not null, 47 | active boolean DEFAULT false, 48 | end_date date, 49 | PRIMARY KEY (marriage_certificate_id), 50 | FOREIGN KEY (husband_id) REFERENCES ro_person(person_id) ON DELETE RESTRICT, 51 | FOREIGN KEY (wife_id) REFERENCES ro_person(person_id) ON DELETE RESTRICT 52 | ); 53 | 54 | 55 | INSERT INTO ro_person (sex, first_name, last_name, patronymic, date_birth) 56 | VALUES (1, 'Елена', 'Васильева', 'Сергеевна', '1998-03-24'), 57 | (2, 'Олег', 'Васильев', 'Петрович', '1997-10-16'), 58 | (2, 'Николай', 'Васильев', 'Олегович', '2018-10-21'); 59 | 60 | INSERT INTO ro_passport (person_id, seria, number, date_issue, issue_department) 61 | VALUES (1, '40000', '123456', '2018-04-10', 'Department Passport'); 62 | 63 | INSERT INTO ro_birth_certificate (number_certificate, date_issue, person_id, 64 | mother_id, father_id) VALUES ('123 Birth', '2018-1-01', 3, 1, 2); -------------------------------------------------------------------------------- /register-office/src/main/resources/springContext.xml: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | edu.javacourse.register.domain 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | org.hibernate.dialect.PostgreSQL10Dialect 44 | true 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /register-office/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | org.springframework.web.context.ContextLoaderListener 10 | 11 | 12 | 13 | contextConfigLocation 14 | /WEB-INF/classes/springContext.xml 15 | 16 | 17 | 18 | JerseyServlet 19 | org.glassfish.jersey.servlet.ServletContainer 20 | 21 | jersey.config.server.provider.packages 22 | edu.javacourse.register 23 | 24 | 25 | jersey.config.server.provider.scanning.recursive 26 | true 27 | 28 | 29 | jersey.config.server.provider.classnames 30 | org.glassfish.jersey.jackson.JacksonFeature 31 | 32 | 33 | 34 | JerseyServlet 35 | /rest/* 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /register-office/src/test/java/edu/javacourse/register/dao/PersonDaoTest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.register.dao; 2 | 3 | import edu.javacourse.register.domain.Person; 4 | import edu.javacourse.register.domain.PersonFemale; 5 | import edu.javacourse.register.domain.PersonMale; 6 | import org.junit.Test; 7 | 8 | import java.util.List; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | public class PersonDaoTest 13 | { 14 | 15 | @Test 16 | public void findPersons() { 17 | // PersonDao dao = new PersonDao(); 18 | // List persons = dao.findPersons(); 19 | // 20 | // persons.forEach(p -> { 21 | // System.out.println("Name:" + p.getFirstName()); 22 | // System.out.println("Class foe sex:" + p.getClass().getName()); 23 | // System.out.println("Passports:" + p.getPassports().size()); 24 | // System.out.println("Birth:" + p.getBirthCertificate()); 25 | // if (p instanceof PersonMale) { 26 | // System.out.println("Birth Cert:" + ((PersonMale)p).getBirthCertificates().size() ); 27 | // System.out.println("Marriage Cert:" + ((PersonMale)p).getMarriageCertificates().size() ); 28 | // } else { 29 | // System.out.println("Birth Cert:" + ((PersonFemale)p).getBirthCertificates().size() ); 30 | // System.out.println("Marriage Cert:" + ((PersonFemale)p).getMarriageCertificates().size() ); 31 | // } 32 | // }); 33 | } 34 | } -------------------------------------------------------------------------------- /register-office/use-cases.txt: -------------------------------------------------------------------------------- 1 | 1. Пользователь - подать заявление на регистрацию брака 2 | 2. Сотрудник - заполнить заявление на регистрацию брака 3 | 3. Сотрудник - завизировать заявление 4 | 4. Сотрудник - создать запись о регистрации брака 5 | 5. Сотрудник - список заявлений на регистрацию брака 6 | 6. Сотрудник - список свидетельств о регистрации брака 7 | 8 | 7. Пользователь - заявление на свидетельство о рождении 9 | 8. Сотрудник - завизировать заявление 10 | 9. Сотрудник - создать запись о свидетельстве о рождении 11 | 10. Сотрудник - список заявлений на выдачу свидетельства о рождении 12 | 11. Сотрудник - список свидетельств о рождении 13 | 14 | 15 | 12. Внешняя система - проверка регистрации брака 16 | 13. Внешняя система - проверка свидетельства о рождении 17 | -------------------------------------------------------------------------------- /student/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | edu.javacourse.ext 8 | student 9 | 1.0 10 | war 11 | 12 | 13 | 5.1.9.RELEASE 14 | 2.2.1.RELEASE 15 | 16 | 2.11.0 17 | 18 | 1.7.28 19 | 20 | 21 | 22 | 23 | 24 | org.apache.maven.plugins 25 | maven-compiler-plugin 26 | 27 | 8 28 | 8 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | javax 38 | javaee-api 39 | 7.0 40 | provided 41 | 42 | 43 | 44 | jstl 45 | jstl 46 | 1.2 47 | 48 | 49 | 50 | org.hibernate 51 | hibernate-core 52 | 5.4.3.Final 53 | 54 | 55 | 56 | org.postgresql 57 | postgresql 58 | 42.2.5 59 | 60 | 61 | 62 | org.springframework 63 | spring-context 64 | ${spring.version} 65 | 66 | 67 | org.springframework 68 | spring-beans 69 | ${spring.version} 70 | 71 | 72 | org.springframework 73 | spring-orm 74 | ${spring.version} 75 | 76 | 77 | org.springframework 78 | spring-web 79 | ${spring.version} 80 | 81 | 82 | org.springframework 83 | spring-webmvc 84 | ${spring.version} 85 | 86 | 87 | org.springframework 88 | spring-test 89 | ${spring.version} 90 | test 91 | 92 | 93 | org.springframework.data 94 | spring-data-jpa 95 | ${spring-data.version} 96 | 97 | 98 | 99 | com.fasterxml.jackson.core 100 | jackson-databind 101 | ${jackson.version} 102 | 103 | 104 | 105 | commons-fileupload 106 | commons-fileupload 107 | 1.4 108 | 109 | 110 | 111 | org.slf4j 112 | slf4j-api 113 | ${slf4j.version} 114 | 115 | 116 | org.slf4j 117 | slf4j-simple 118 | ${slf4j.version} 119 | 120 | 121 | 122 | junit 123 | junit 124 | 4.12 125 | test 126 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/controller/UniversityListController.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.controller; 2 | 3 | import edu.javacourse.student.domain.University; 4 | import edu.javacourse.student.service.UniversityService; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.ui.Model; 8 | import org.springframework.web.bind.annotation.GetMapping; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.RequestMethod; 11 | 12 | import java.time.LocalDate; 13 | import java.time.format.DateTimeFormatter; 14 | import java.util.List; 15 | 16 | @Controller 17 | @RequestMapping(path = "/universityList") 18 | public class UniversityListController 19 | { 20 | @Autowired 21 | private UniversityService service; 22 | 23 | // @RequestMapping(method = RequestMethod.GET) 24 | @GetMapping 25 | public String findUniversities(Model model) { 26 | List list = service.findUniversities(); 27 | model.addAttribute("today", LocalDate.now().format(DateTimeFormatter.ISO_DATE)); 28 | model.addAttribute("universities", list); 29 | 30 | return "universityList"; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/dao/FacultyRepository.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.dao; 2 | 3 | import edu.javacourse.student.domain.Faculty; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | 6 | public interface FacultyRepository extends JpaRepository 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/dao/StudentRepository.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.dao; 2 | 3 | import edu.javacourse.student.domain.Student; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.Query; 6 | import org.springframework.data.repository.query.Param; 7 | import org.springframework.stereotype.Repository; 8 | 9 | import java.time.LocalDate; 10 | import java.util.List; 11 | 12 | @Repository 13 | public interface StudentRepository extends JpaRepository 14 | { 15 | @Query("SELECT st FROM Student st WHERE st.lastName = :lastName AND " + 16 | "st.firstName = :firstName AND st.middleName = :middleName AND " + 17 | "st.dateOfBirth = :dateOfBirth AND st.passportSeria = :passportSeria AND " + 18 | "st.passportNumber = :passportNumber AND st.passportDate = :passportDate") 19 | List findStudent(@Param("lastName")String lastName, 20 | @Param("firstName")String firstName, 21 | @Param("middleName")String middleName, 22 | @Param("dateOfBirth") LocalDate dateOfBirth, 23 | @Param("passportSeria")String passportSeria, 24 | @Param("passportNumber")String passportNumber, 25 | @Param("passportDate") LocalDate passportDate 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/dao/UniversityRepository.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.dao; 2 | 3 | import edu.javacourse.student.domain.University; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.Query; 6 | import org.springframework.stereotype.Repository; 7 | 8 | import java.util.List; 9 | 10 | @Repository 11 | public interface UniversityRepository extends JpaRepository 12 | { 13 | @Query(name = "Universuty.findAllWithFaculties", 14 | value = "SELECT u FROM University u LEFT JOIN FETCH u.faculties") 15 | List findFullList(); 16 | } 17 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/domain/Faculty.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.Entity; 6 | import javax.persistence.FetchType; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | import javax.persistence.JoinColumn; 11 | import javax.persistence.ManyToOne; 12 | import javax.persistence.Table; 13 | 14 | @Table(name = "sr_faculty") 15 | @Entity 16 | public class Faculty 17 | { 18 | @Id 19 | @GeneratedValue(strategy = GenerationType.IDENTITY) 20 | @Column(name = "faculty_id") 21 | private Long facultyId; 22 | @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 23 | @JoinColumn(name = "university_id") 24 | private University university; 25 | @Column(name = "faculty_name") 26 | private String facultyName; 27 | 28 | public Long getFacultyId() { 29 | return facultyId; 30 | } 31 | 32 | public void setFacultyId(Long facultyId) { 33 | this.facultyId = facultyId; 34 | } 35 | 36 | public University getUniversity() { 37 | return university; 38 | } 39 | 40 | public void setUniversity(University university) { 41 | this.university = university; 42 | } 43 | 44 | public String getFacultyName() { 45 | return facultyName; 46 | } 47 | 48 | public void setFacultyName(String facultyName) { 49 | this.facultyName = facultyName; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/domain/Student.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.Entity; 6 | import javax.persistence.FetchType; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | import javax.persistence.OneToMany; 11 | import javax.persistence.Table; 12 | import java.time.LocalDate; 13 | import java.util.List; 14 | 15 | @Table(name = "sr_student") 16 | @Entity 17 | public class Student 18 | { 19 | @Id 20 | @GeneratedValue(strategy = GenerationType.IDENTITY) 21 | @Column(name = "student_id") 22 | private Long studentId; 23 | @Column(name = "last_name") 24 | private String lastName; 25 | @Column(name = "first_name") 26 | private String firstName; 27 | @Column(name = "middle_name") 28 | private String middleName; 29 | @Column(name = "date_of_birth") 30 | private LocalDate dateOfBirth; 31 | @Column(name = "passport_seria") 32 | private String passportSeria; 33 | @Column(name = "passport_number") 34 | private String passportNumber; 35 | @Column(name = "passport_date") 36 | private LocalDate passportDate; 37 | @OneToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, mappedBy = "student") 38 | private List documents; 39 | 40 | public Long getStudentId() { 41 | return studentId; 42 | } 43 | 44 | public void setStudentId(Long studentId) { 45 | this.studentId = studentId; 46 | } 47 | 48 | public String getLastName() { 49 | return lastName; 50 | } 51 | 52 | public void setLastName(String lastName) { 53 | this.lastName = lastName; 54 | } 55 | 56 | public String getFirstName() { 57 | return firstName; 58 | } 59 | 60 | public void setFirstName(String firstName) { 61 | this.firstName = firstName; 62 | } 63 | 64 | public String getMiddleName() { 65 | return middleName; 66 | } 67 | 68 | public void setMiddleName(String middleName) { 69 | this.middleName = middleName; 70 | } 71 | 72 | public LocalDate getDateOfBirth() { 73 | return dateOfBirth; 74 | } 75 | 76 | public void setDateOfBirth(LocalDate dateOfBirth) { 77 | this.dateOfBirth = dateOfBirth; 78 | } 79 | 80 | public String getPassportSeria() { 81 | return passportSeria; 82 | } 83 | 84 | public void setPassportSeria(String passportSeria) { 85 | this.passportSeria = passportSeria; 86 | } 87 | 88 | public String getPassportNumber() { 89 | return passportNumber; 90 | } 91 | 92 | public void setPassportNumber(String passportNumber) { 93 | this.passportNumber = passportNumber; 94 | } 95 | 96 | public LocalDate getPassportDate() { 97 | return passportDate; 98 | } 99 | 100 | public void setPassportDate(LocalDate passportDate) { 101 | this.passportDate = passportDate; 102 | } 103 | 104 | public List getDocuments() { 105 | return documents; 106 | } 107 | 108 | public void setDocuments(List documents) { 109 | this.documents = documents; 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/domain/StudentDocument.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.Entity; 6 | import javax.persistence.Enumerated; 7 | import javax.persistence.FetchType; 8 | import javax.persistence.GeneratedValue; 9 | import javax.persistence.GenerationType; 10 | import javax.persistence.Id; 11 | import javax.persistence.JoinColumn; 12 | import javax.persistence.ManyToOne; 13 | import javax.persistence.Table; 14 | import java.time.LocalDate; 15 | 16 | @Table(name = "sr_student_document") 17 | @Entity 18 | public class StudentDocument 19 | { 20 | @Id 21 | @GeneratedValue(strategy = GenerationType.IDENTITY) 22 | @Column(name = "document_id") 23 | private Long documentId; 24 | @Column(name = "document_number") 25 | private String documentNumber; 26 | @Column(name = "document_date") 27 | private LocalDate documentDate; 28 | @Column(name = "expired_date") 29 | private LocalDate expiredDate; 30 | @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 31 | @JoinColumn(name = "student_id") 32 | private Student student; 33 | @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY) 34 | @JoinColumn(name = "faculty_id") 35 | private Faculty faculty; 36 | @Column(name = "student_form") 37 | @Enumerated 38 | private StudentForm studentForm; 39 | 40 | public Long getDocumentId() { 41 | return documentId; 42 | } 43 | 44 | public void setDocumentId(Long documentId) { 45 | this.documentId = documentId; 46 | } 47 | 48 | public String getDocumentNumber() { 49 | return documentNumber; 50 | } 51 | 52 | public void setDocumentNumber(String documentNumber) { 53 | this.documentNumber = documentNumber; 54 | } 55 | 56 | public LocalDate getDocumentDate() { 57 | return documentDate; 58 | } 59 | 60 | public void setDocumentDate(LocalDate documentDate) { 61 | this.documentDate = documentDate; 62 | } 63 | 64 | public LocalDate getExpiredDate() { 65 | return expiredDate; 66 | } 67 | 68 | public void setExpiredDate(LocalDate expiredDate) { 69 | this.expiredDate = expiredDate; 70 | } 71 | 72 | public Student getStudent() { 73 | return student; 74 | } 75 | 76 | public void setStudent(Student student) { 77 | this.student = student; 78 | } 79 | 80 | public Faculty getFaculty() { 81 | return faculty; 82 | } 83 | 84 | public void setFaculty(Faculty faculty) { 85 | this.faculty = faculty; 86 | } 87 | 88 | public StudentForm getStudentForm() { 89 | return studentForm; 90 | } 91 | 92 | public void setStudentForm(StudentForm studentForm) { 93 | this.studentForm = studentForm; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/domain/StudentForm.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.domain; 2 | 3 | public enum StudentForm 4 | { 5 | DAY, EVENING, REMOTE 6 | } 7 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/domain/University.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.domain; 2 | 3 | import javax.persistence.CascadeType; 4 | import javax.persistence.Column; 5 | import javax.persistence.Entity; 6 | import javax.persistence.FetchType; 7 | import javax.persistence.GeneratedValue; 8 | import javax.persistence.GenerationType; 9 | import javax.persistence.Id; 10 | import javax.persistence.OneToMany; 11 | import javax.persistence.Table; 12 | import java.util.List; 13 | 14 | @Table(name = "sr_university") 15 | @Entity 16 | public class University 17 | { 18 | @Id 19 | @GeneratedValue(strategy = GenerationType.IDENTITY) 20 | @Column(name = "university_id") 21 | private Long universityId; 22 | @Column(name = "university_name") 23 | private String universityName; 24 | @OneToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, mappedBy = "university") 25 | private List faculties; 26 | 27 | public Long getUniversityId() { 28 | return universityId; 29 | } 30 | 31 | public void setUniversityId(Long universityId) { 32 | this.universityId = universityId; 33 | } 34 | 35 | public String getUniversityName() { 36 | return universityName; 37 | } 38 | 39 | public void setUniversityName(String universityName) { 40 | this.universityName = universityName; 41 | } 42 | 43 | public List getFaculties() { 44 | return faculties; 45 | } 46 | 47 | public void setFaculties(List faculties) { 48 | this.faculties = faculties; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/rest/StudentController.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.rest; 2 | 3 | import edu.javacourse.student.service.StudentService; 4 | import edu.javacourse.student.view.StudentRequest; 5 | import edu.javacourse.student.view.StudentResponse; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.http.MediaType; 8 | import org.springframework.web.bind.annotation.GetMapping; 9 | import org.springframework.web.bind.annotation.PathVariable; 10 | import org.springframework.web.bind.annotation.PostMapping; 11 | import org.springframework.web.bind.annotation.RequestBody; 12 | import org.springframework.web.bind.annotation.RequestMapping; 13 | import org.springframework.web.bind.annotation.RequestParam; 14 | import org.springframework.web.bind.annotation.ResponseBody; 15 | import org.springframework.web.bind.annotation.RestController; 16 | import org.springframework.web.multipart.MultipartFile; 17 | 18 | import java.io.IOException; 19 | import java.io.InputStream; 20 | import java.util.List; 21 | 22 | @RestController 23 | @RequestMapping(path = "/student") 24 | public class StudentController 25 | { 26 | @Autowired 27 | private StudentService studentService; 28 | 29 | @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) 30 | @ResponseBody 31 | public List getStudentInfo(@RequestBody StudentRequest request) { 32 | return studentService.getStudentInfo(request); 33 | } 34 | 35 | @GetMapping(path = "/check") 36 | public String checkAdmin() { 37 | return "Rest Service is working"; 38 | } 39 | 40 | @GetMapping(path = "/params/{checkId}") 41 | public String checkParams(@PathVariable("checkId") Long checkId, 42 | @RequestParam("comment") String comment) { 43 | return checkId + ":" + comment; 44 | } 45 | 46 | @PostMapping(path = "/photo", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 47 | public String uploadPhoto(@RequestParam("comment") String comment, 48 | @RequestParam("photoFile")MultipartFile photoFile) { 49 | try (InputStream is = photoFile.getInputStream()) { 50 | return "Comment:" + comment + ", Name:" + photoFile.getName() 51 | + " File Name:" + photoFile.getOriginalFilename() + ", Size:" + is.available(); 52 | } catch(IOException ex) { 53 | throw new RuntimeException(ex); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/service/StudentService.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.service; 2 | 3 | import edu.javacourse.student.dao.StudentRepository; 4 | import edu.javacourse.student.domain.Student; 5 | import edu.javacourse.student.domain.StudentDocument; 6 | import edu.javacourse.student.view.StudentRequest; 7 | import edu.javacourse.student.view.StudentResponse; 8 | import org.slf4j.Logger; 9 | import org.slf4j.LoggerFactory; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.stereotype.Service; 12 | import org.springframework.transaction.annotation.Transactional; 13 | 14 | import java.util.Collections; 15 | import java.util.List; 16 | import java.util.stream.Collectors; 17 | 18 | @Service 19 | public class StudentService 20 | { 21 | private static final Logger LOGGER = LoggerFactory.getLogger(StudentService.class); 22 | 23 | @Autowired 24 | private StudentRepository studentRepository; 25 | 26 | @Transactional 27 | public List getStudentInfo(StudentRequest request) { 28 | List student = studentRepository.findStudent(request.getLastName(), 29 | request.getFirstName(), 30 | request.getMiddleName(), 31 | request.getDateOfBirth(), 32 | request.getPassportSeria(), 33 | request.getPassportNumber(), 34 | request.getPassportDate()); 35 | if (student.isEmpty()) { 36 | return Collections.EMPTY_LIST; 37 | } 38 | List docs = student.get(0).getDocuments(); 39 | List result = docs.stream().map(d -> getResponse(d)).collect(Collectors.toList()); 40 | return result; 41 | } 42 | 43 | private StudentResponse getResponse(StudentDocument doc) { 44 | StudentResponse sr = new StudentResponse(); 45 | sr.setDocumentNumber(doc.getDocumentNumber()); 46 | sr.setDocumentDate(doc.getDocumentDate()); 47 | sr.setExpiredDate(doc.getExpiredDate()); 48 | sr.setFacultyName(doc.getFaculty().getFacultyName()); 49 | sr.setUniversityName(doc.getFaculty().getUniversity().getUniversityName()); 50 | sr.setStudentForm(doc.getStudentForm().toString()); 51 | 52 | return sr; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/service/UniversityService.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.service; 2 | 3 | import edu.javacourse.student.dao.FacultyRepository; 4 | import edu.javacourse.student.dao.UniversityRepository; 5 | import edu.javacourse.student.domain.Faculty; 6 | import edu.javacourse.student.domain.University; 7 | import org.hibernate.Hibernate; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | import org.springframework.transaction.annotation.Transactional; 11 | 12 | import java.util.List; 13 | import java.util.Optional; 14 | 15 | @Service 16 | public class UniversityService 17 | { 18 | @Autowired 19 | private UniversityRepository universityRepository; 20 | @Autowired 21 | private FacultyRepository facultyRepository; 22 | 23 | @Transactional(readOnly = true) 24 | public List findUniversities() { 25 | return universityRepository.findAll(); 26 | } 27 | 28 | @Transactional(readOnly = true) 29 | public List findFullUniversities() { 30 | return universityRepository.findFullList(); 31 | } 32 | 33 | @Transactional(readOnly = true) 34 | public List findFaculties() { 35 | return facultyRepository.findAll(); 36 | } 37 | 38 | @Transactional 39 | public University getUniversity(Long universityId) { 40 | University u = universityRepository.findById(universityId).get(); 41 | Hibernate.initialize(u.getFaculties()); 42 | return u; 43 | } 44 | 45 | @Transactional(readOnly = true) 46 | public Faculty getFaculty(Long facultyId) { 47 | Optional fop = facultyRepository.findById(facultyId); 48 | Faculty fc = fop.get(); 49 | Hibernate.initialize(fc.getUniversity()); 50 | return fc; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/servlet/UniversityListServlet.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.servlet; 2 | 3 | import edu.javacourse.student.domain.University; 4 | import edu.javacourse.student.service.UniversityService; 5 | import org.springframework.web.context.WebApplicationContext; 6 | import org.springframework.web.context.support.WebApplicationContextUtils; 7 | 8 | import javax.servlet.ServletContext; 9 | import javax.servlet.ServletException; 10 | import javax.servlet.annotation.WebServlet; 11 | import javax.servlet.http.HttpServlet; 12 | import javax.servlet.http.HttpServletRequest; 13 | import javax.servlet.http.HttpServletResponse; 14 | import java.io.IOException; 15 | import java.time.LocalDate; 16 | import java.time.format.DateTimeFormatter; 17 | import java.util.List; 18 | 19 | @WebServlet(name = "UniversityListServlet", urlPatterns = {"/universityList"}) 20 | public class UniversityListServlet extends HttpServlet 21 | { 22 | @Override 23 | protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 24 | ServletContext ctx = getServletContext(); 25 | WebApplicationContext webCtx = WebApplicationContextUtils.getWebApplicationContext(ctx); 26 | 27 | UniversityService service = webCtx.getBean(UniversityService.class); 28 | List list = service.findUniversities(); 29 | 30 | req.setAttribute("today", LocalDate.now().format(DateTimeFormatter.ISO_DATE)); 31 | req.setAttribute("universities", list); 32 | 33 | // getServletContext().getRequestDispatcher("/universityList_.jsp").forward(req, resp); 34 | getServletContext().getRequestDispatcher("/universityList_jstl.jsp").forward(req, resp); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/view/LocalDateStringConverter.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.view; 2 | 3 | import com.fasterxml.jackson.databind.util.StdConverter; 4 | 5 | import java.time.LocalDate; 6 | import java.time.format.DateTimeFormatter; 7 | 8 | public class LocalDateStringConverter extends StdConverter 9 | { 10 | static final String DATE_FORMAT = "dd.MM.yyyy"; 11 | 12 | @Override 13 | public String convert(LocalDate localDate) { 14 | return localDate == null ? "" : localDate.format(DateTimeFormatter.ofPattern(DATE_FORMAT)); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/view/StringLocalDateConverter.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.view; 2 | 3 | import com.fasterxml.jackson.databind.util.StdConverter; 4 | 5 | import java.time.LocalDate; 6 | import java.time.format.DateTimeFormatter; 7 | 8 | public class StringLocalDateConverter extends StdConverter 9 | { 10 | @Override 11 | public LocalDate convert(String s) { 12 | if (s == null || s.trim().isEmpty()) { 13 | return null; 14 | } 15 | return LocalDate.parse(s, DateTimeFormatter.ofPattern(LocalDateStringConverter.DATE_FORMAT)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/view/StudentRequest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.view; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 4 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 5 | 6 | import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 7 | import java.time.LocalDate; 8 | 9 | public class StudentRequest 10 | { 11 | private String lastName; 12 | private String firstName; 13 | private String middleName; 14 | @JsonSerialize(converter = LocalDateStringConverter.class) 15 | @JsonDeserialize(converter = StringLocalDateConverter.class) 16 | private LocalDate dateOfBirth; 17 | private String passportSeria; 18 | private String passportNumber; 19 | @JsonSerialize(converter = LocalDateStringConverter.class) 20 | @JsonDeserialize(converter = StringLocalDateConverter.class) 21 | private LocalDate passportDate; 22 | 23 | public String getLastName() { 24 | return lastName; 25 | } 26 | 27 | public void setLastName(String lastName) { 28 | this.lastName = lastName; 29 | } 30 | 31 | public String getFirstName() { 32 | return firstName; 33 | } 34 | 35 | public void setFirstName(String firstName) { 36 | this.firstName = firstName; 37 | } 38 | 39 | public String getMiddleName() { 40 | return middleName; 41 | } 42 | 43 | public void setMiddleName(String middleName) { 44 | this.middleName = middleName; 45 | } 46 | 47 | public LocalDate getDateOfBirth() { 48 | return dateOfBirth; 49 | } 50 | 51 | public void setDateOfBirth(LocalDate dateOfBirth) { 52 | this.dateOfBirth = dateOfBirth; 53 | } 54 | 55 | public String getPassportSeria() { 56 | return passportSeria; 57 | } 58 | 59 | public void setPassportSeria(String passportSeria) { 60 | this.passportSeria = passportSeria; 61 | } 62 | 63 | public String getPassportNumber() { 64 | return passportNumber; 65 | } 66 | 67 | public void setPassportNumber(String passportNumber) { 68 | this.passportNumber = passportNumber; 69 | } 70 | 71 | public LocalDate getPassportDate() { 72 | return passportDate; 73 | } 74 | 75 | public void setPassportDate(LocalDate passportDate) { 76 | this.passportDate = passportDate; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /student/src/main/java/edu/javacourse/student/view/StudentResponse.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.view; 2 | 3 | import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 4 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 5 | 6 | import java.time.LocalDate; 7 | 8 | public class StudentResponse 9 | { 10 | private String documentNumber; 11 | @JsonSerialize(converter = LocalDateStringConverter.class) 12 | @JsonDeserialize(converter = StringLocalDateConverter.class) 13 | private LocalDate documentDate; 14 | @JsonSerialize(converter = LocalDateStringConverter.class) 15 | @JsonDeserialize(converter = StringLocalDateConverter.class) 16 | private LocalDate expiredDate; 17 | private String universityName; 18 | private String facultyName; 19 | private String studentForm; 20 | 21 | public String getDocumentNumber() { 22 | return documentNumber; 23 | } 24 | 25 | public void setDocumentNumber(String documentNumber) { 26 | this.documentNumber = documentNumber; 27 | } 28 | 29 | public LocalDate getDocumentDate() { 30 | return documentDate; 31 | } 32 | 33 | public void setDocumentDate(LocalDate documentDate) { 34 | this.documentDate = documentDate; 35 | } 36 | 37 | public LocalDate getExpiredDate() { 38 | return expiredDate; 39 | } 40 | 41 | public void setExpiredDate(LocalDate expiredDate) { 42 | this.expiredDate = expiredDate; 43 | } 44 | 45 | public String getUniversityName() { 46 | return universityName; 47 | } 48 | 49 | public void setUniversityName(String universityName) { 50 | this.universityName = universityName; 51 | } 52 | 53 | public String getFacultyName() { 54 | return facultyName; 55 | } 56 | 57 | public void setFacultyName(String facultyName) { 58 | this.facultyName = facultyName; 59 | } 60 | 61 | public String getStudentForm() { 62 | return studentForm; 63 | } 64 | 65 | public void setStudentForm(String studentForm) { 66 | this.studentForm = studentForm; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /student/src/main/resources/data.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO sr_university (university_name) VALUES ('University One'); 2 | INSERT INTO sr_university (university_name) VALUES ('University Two'); 3 | 4 | INSERT INTO sr_faculty (university_id, faculty_name) VALUES (1, 'Faculty One'); 5 | INSERT INTO sr_faculty (university_id, faculty_name) VALUES (1, 'Faculty Two'); 6 | INSERT INTO sr_faculty (university_id, faculty_name) VALUES (2, 'Faculty Other One'); 7 | INSERT INTO sr_faculty (university_id, faculty_name) VALUES (2, 'Faculty Other Two'); 8 | 9 | INSERT INTO sr_student (last_name, first_name, middle_name, date_of_birth, 10 | passport_seria, passport_number, passport_date) 11 | VALUES ('Last', 'First', 'Middle', '2000-04-12', '1111', '222222', '2016-04-30'); 12 | 13 | INSERT INTO sr_student_document (document_number, document_date, expired_date, 14 | student_id, faculty_id, student_form) 15 | VALUES ('123456', '2017-09-01', '2021-05-31', 1, 1, 0); -------------------------------------------------------------------------------- /student/src/main/resources/springContext.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | edu.javacourse.student.domain 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | org.hibernate.dialect.PostgreSQL10Dialect 47 | true 48 | none 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /student/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | org.springframework.web.context.ContextLoaderListener 10 | 11 | 12 | 13 | contextConfigLocation 14 | 15 | /WEB-INF/classes/springContext.xml 16 | 17 | 18 | 19 | 20 | dispatcher 21 | org.springframework.web.servlet.DispatcherServlet 22 | 23 | contextConfigLocation 24 | 25 | 26 | 1 27 | 28 | 29 | dispatcher 30 | /mvc/* 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /student/src/main/webapp/universityList.jsp: -------------------------------------------------------------------------------- 1 | <%@page contentType="text/html" pageEncoding="UTF-8"%> 2 | <%@page import="edu.javacourse.student.domain.University, java.util.List"%> 3 | 4 | 6 | 7 | 8 | 9 | 10 | Test Page 11 | 12 | 13 |

List of Universities ${today}

14 | 15 | <% 16 | List list = (List)request.getAttribute("universities"); 17 | for(University u : list) { 18 | out.println(u.getUniversityName()); 19 | out.println("
"); 20 | } 21 | %> 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /student/src/main/webapp/universityList_jstl.jsp: -------------------------------------------------------------------------------- 1 | <%@page contentType="text/html" pageEncoding="UTF-8"%> 2 | <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 | 4 | 6 | 7 | 8 | 9 | 10 | JSP Page 11 | 12 | 13 | 14 |

List of Universities ${today}

15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
${status.count}${university.universityId}${university.universityName}
35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /student/src/test/java/edu/javacourse/student/service/StudentServiceTest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.service; 2 | 3 | import edu.javacourse.student.rest.StudentController; 4 | import edu.javacourse.student.view.StudentRequest; 5 | import edu.javacourse.student.view.StudentResponse; 6 | import org.junit.Assert; 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.test.context.ContextConfiguration; 13 | import org.springframework.test.context.junit4.SpringRunner; 14 | 15 | import java.time.LocalDate; 16 | import java.util.List; 17 | 18 | @RunWith(SpringRunner.class) 19 | @ContextConfiguration(locations = {"classpath:springContext.xml"}) 20 | public class StudentServiceTest 21 | { 22 | private static final Logger LOGGER = LoggerFactory.getLogger(StudentServiceTest.class); 23 | 24 | @Autowired 25 | private StudentController studentController; 26 | 27 | @Test 28 | public void studentInfo() { 29 | StudentRequest req = new StudentRequest(); 30 | req.setLastName("Last"); 31 | req.setFirstName("First"); 32 | req.setMiddleName("Middle"); 33 | req.setDateOfBirth(LocalDate.of(2000, 4, 12)); 34 | req.setPassportSeria("1111"); 35 | req.setPassportNumber("222222"); 36 | req.setPassportDate(LocalDate.of(2016, 4, 30)); 37 | 38 | List info = studentController.getStudentInfo(req); 39 | Assert.assertTrue(info.size() > 0); 40 | } 41 | } -------------------------------------------------------------------------------- /student/src/test/java/edu/javacourse/student/service/UniversityServiceTest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.student.service; 2 | 3 | import edu.javacourse.student.domain.Faculty; 4 | import edu.javacourse.student.domain.University; 5 | import org.junit.Test; 6 | import org.junit.runner.RunWith; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.test.context.ContextConfiguration; 9 | import org.springframework.test.context.junit4.SpringRunner; 10 | 11 | import java.util.List; 12 | 13 | import static org.junit.Assert.*; 14 | 15 | @RunWith(SpringRunner.class) 16 | @ContextConfiguration(locations = {"classpath:springContext.xml"}) 17 | public class UniversityServiceTest 18 | { 19 | @Autowired 20 | private UniversityService service; 21 | 22 | @Test 23 | public void findUniversities() { 24 | List list = service.findUniversities(); 25 | System.out.println("OK"); 26 | list.forEach(u -> System.out.println( 27 | u.getUniversityId() + ":" + u.getUniversityName() + ":" + u.getFaculties().size())); 28 | } 29 | 30 | @Test 31 | public void findFullUniversities() { 32 | List list = service.findFullUniversities(); 33 | System.out.println("OK"); 34 | list.forEach(u -> System.out.println( 35 | u.getUniversityId() + ":" + u.getUniversityName() + ":" + u.getFaculties().size())); 36 | } 37 | 38 | @Test 39 | public void getUniversity() { 40 | University u = service.getUniversity(1L); 41 | System.out.println(u.getUniversityName() + ":" + u.getFaculties().size()); 42 | } 43 | 44 | @Test 45 | public void findFaculties() { 46 | List list = service.findFaculties(); 47 | System.out.println("OK"); 48 | list.forEach(f -> System.out.println(f.getUniversity().getUniversityName())); 49 | } 50 | 51 | @Test 52 | public void getFaculty() { 53 | Faculty faculty = service.getFaculty(1L); 54 | System.out.println(faculty.getUniversity().getUniversityName()); 55 | } 56 | } --------------------------------------------------------------------------------