From db2bbcf496d91d636c9185c136bfaa8e70e39d53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Mon, 8 Apr 2024 22:39:06 +0100 Subject: [PATCH 01/21] chore: Start setting to the application and tomcat --- .classpath | 37 +++++++++-- .gitignore | 1 + .project | 6 ++ .settings/org.eclipse.jdt.core.prefs | 1 + .settings/org.eclipse.jdt.ui.prefs | 2 + .settings/org.eclipse.m2e.core.prefs | 4 ++ .settings/org.eclipse.wst.common.component | 11 +++- ...prefs => org.eclipse.wst.validation.prefs} | 2 +- pom.xml | 66 +++++++++++++++++++ 9 files changed, 122 insertions(+), 8 deletions(-) create mode 100644 .settings/org.eclipse.jdt.ui.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs rename .settings/{org.eclipse.core.resources.prefs => org.eclipse.wst.validation.prefs} (54%) create mode 100644 pom.xml diff --git a/.classpath b/.classpath index ddeaa5b..d1f331c 100644 --- a/.classpath +++ b/.classpath @@ -1,13 +1,40 @@ - - + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index 26aeb57..6d8ea42 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ hs_err_pid* replay_pid* /build/ +/target/ diff --git a/.project b/.project index f106b83..3e1c267 100644 --- a/.project +++ b/.project @@ -20,8 +20,14 @@ + + org.eclipse.m2e.core.maven2Builder + + + + org.eclipse.m2e.core.maven2Nature org.eclipse.jem.workbench.JavaEMFNature org.eclipse.wst.common.modulecore.ModuleCoreNature org.eclipse.wst.common.project.facet.core.nature diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 2c6240c..a6fee6f 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -10,6 +10,7 @@ org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000..7103be7 --- /dev/null +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.ui.text.custom_code_templates= diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index f14ca0e..7e12d97 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,8 +1,15 @@ - + + + + + + - + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.wst.validation.prefs similarity index 54% rename from .settings/org.eclipse.core.resources.prefs rename to .settings/org.eclipse.wst.validation.prefs index 99f26c0..04cad8c 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.wst.validation.prefs @@ -1,2 +1,2 @@ +disabled=06target eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d0426e9 --- /dev/null +++ b/pom.xml @@ -0,0 +1,66 @@ + + 4.0.0 + java7-struts1-jquery-bootstrap3-web-project + java7-struts1-jquery-bootstrap3-web-project + 0.0.1-SNAPSHOT + war + + + org.apache.struts + struts-core + 1.3.8 + + + org.tinylog + tinylog-api + 2.6.2 + + + javax.servlet + javax.servlet-api + 3.1.0 + + + org.apache.commons + commons-lang3 + 3.12.0 + + + com.google.code.gson + gson + 2.10.1 + + + com.h2database + h2 + 2.2.224 + + + + + + src/main/java + + **/*.java + + + + + + maven-compiler-plugin + 3.1 + + 1.7 + 1.7 + + + + maven-war-plugin + 2.3 + + false + + + + + \ No newline at end of file From 4696addbbadec218a648438f26db226f372c893b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 11:03:31 +0100 Subject: [PATCH 02/21] feat: Created a new attribute for the User - email, add new attribute to the flow --- src/main/java/MessageResources.properties | 1 + src/main/java/com/my_app/App.java | 2 +- src/main/java/com/my_app/model/User.java | 15 ++++++++++++-- .../my_app/page/user/save/UserSaveForm.java | 9 +++++++++ .../save/mapper/UserSaveFormToUserMapper.java | 2 +- .../save/mapper/UserToUserSaveFormMapper.java | 1 + .../save/service/UserSaveServiceImpl.java | 8 ++++++++ .../my_app/repo/impl/UserRepositoryImpl.java | 20 ++++++++++--------- src/main/java/com/my_app/utils/UserUtils.java | 10 ++++++++++ src/main/webapp/user/list.jsp | 2 ++ src/main/webapp/user/save/form.jsp | 8 ++++++++ src/main/webapp/user/save/js/form.js | 1 + 12 files changed, 66 insertions(+), 13 deletions(-) diff --git a/src/main/java/MessageResources.properties b/src/main/java/MessageResources.properties index a1e7aa0..b891b83 100644 --- a/src/main/java/MessageResources.properties +++ b/src/main/java/MessageResources.properties @@ -8,6 +8,7 @@ error.password.wrong=Wrong password user.not-found.error=User not found user.username-taken.error=Username's already taken user.delete.at-least-one.error=Must keep at least one user +user.email.error=Email's not valid user.create.success=User "{0}" was created successfully user.update.success=User "{0}" was update successfully diff --git a/src/main/java/com/my_app/App.java b/src/main/java/com/my_app/App.java index 17e71c8..95e3ce8 100644 --- a/src/main/java/com/my_app/App.java +++ b/src/main/java/com/my_app/App.java @@ -115,7 +115,7 @@ private void initDbCountriesAndCities(Connection conn) throws SQLException { private void initDbUsers(Connection conn) throws SQLException { try (final Statement stmt = conn.createStatement()) { stmt.executeUpdate( - "CREATE TABLE \"USER\" (ID IDENTITY NOT NULL PRIMARY KEY, USERNAME VARCHAR(255) UNIQUE NOT NULL, PASSWORD VARCHAR(255) NOT NULL, CITY_ID BIGINT NOT NULL, FOREIGN KEY (CITY_ID) REFERENCES CITY(ID))"); + "CREATE TABLE \"USER\" (ID IDENTITY NOT NULL PRIMARY KEY, USERNAME VARCHAR(255) UNIQUE NOT NULL, PASSWORD VARCHAR(255) NOT NULL, CITY_ID BIGINT NOT NULL, EMAIL VARCHAR(255) NULL, FOREIGN KEY (CITY_ID) REFERENCES CITY(ID))"); } final CityRepository cityRepository = new CityRepositoryImpl(conn, new CountryRepositoryImpl(conn)); diff --git a/src/main/java/com/my_app/model/User.java b/src/main/java/com/my_app/model/User.java index 05b2167..f94e334 100644 --- a/src/main/java/com/my_app/model/User.java +++ b/src/main/java/com/my_app/model/User.java @@ -4,6 +4,7 @@ public class User { private Long id; private String username; private String password; + private String email; private City city; public User() { @@ -16,12 +17,13 @@ public User(String username, String password, City city) { this.city = city; } - public User(Long id, String username, String password, City city) { + public User(Long id, String username, String password, City city, String email) { super(); this.id = id; this.username = username; this.password = password; this.city = city; + this.email = email; } public Long getId() { @@ -59,10 +61,19 @@ public void setCity(City city) { public boolean isNew() { return this.id == null; } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } @Override public String toString() { - return String.format("User [id=%s, username=%s, password=%s, city=%s]", id, username, password, city); + return String.format("User [id=%s, username=%s, password=%s, city=%s, email=%s]", id, username, password, city, email); } + } diff --git a/src/main/java/com/my_app/page/user/save/UserSaveForm.java b/src/main/java/com/my_app/page/user/save/UserSaveForm.java index ebd2622..5b5f0b8 100644 --- a/src/main/java/com/my_app/page/user/save/UserSaveForm.java +++ b/src/main/java/com/my_app/page/user/save/UserSaveForm.java @@ -8,6 +8,7 @@ public class UserSaveForm extends BaseActionForm { private Long userId; private String username; private String password; + private String email; private Long countryId; private Long cityId; @@ -79,4 +80,12 @@ public static long getSerialversionuid() { return serialVersionUID; } + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + } diff --git a/src/main/java/com/my_app/page/user/save/mapper/UserSaveFormToUserMapper.java b/src/main/java/com/my_app/page/user/save/mapper/UserSaveFormToUserMapper.java index 762d42f..f175078 100644 --- a/src/main/java/com/my_app/page/user/save/mapper/UserSaveFormToUserMapper.java +++ b/src/main/java/com/my_app/page/user/save/mapper/UserSaveFormToUserMapper.java @@ -11,6 +11,6 @@ public User toUser(UserSaveForm form) { final City city = new City(form.getCityId()); return new User(Long.valueOf(0).equals(form.getUserId()) ? null : form.getUserId(), form.getUsername(), - form.getPassword(), city); + form.getPassword(), city, form.getEmail()); } } diff --git a/src/main/java/com/my_app/page/user/save/mapper/UserToUserSaveFormMapper.java b/src/main/java/com/my_app/page/user/save/mapper/UserToUserSaveFormMapper.java index 008c0be..a3e2c53 100644 --- a/src/main/java/com/my_app/page/user/save/mapper/UserToUserSaveFormMapper.java +++ b/src/main/java/com/my_app/page/user/save/mapper/UserToUserSaveFormMapper.java @@ -13,6 +13,7 @@ public UserSaveForm mapTo(User user, UserSaveForm form) { form.setUserId(user.getId()); form.setUsername(user.getUsername()); + form.setEmail(user.getEmail()); form.setCountryId(user.getCity().getCountry().getId()); form.setCityId(user.getCity().getId()); diff --git a/src/main/java/com/my_app/page/user/save/service/UserSaveServiceImpl.java b/src/main/java/com/my_app/page/user/save/service/UserSaveServiceImpl.java index 3d41923..2cca683 100644 --- a/src/main/java/com/my_app/page/user/save/service/UserSaveServiceImpl.java +++ b/src/main/java/com/my_app/page/user/save/service/UserSaveServiceImpl.java @@ -70,6 +70,14 @@ public boolean validate(UserSaveForm form) { form.getActionErrors().add("city", new ActionMessage("error.common.required")); } } + + if(form.getEmail() == null) { + isValid = false; + form.getActionErrors().add("email", new ActionMessage("error.common.required")); + } else if(!UserUtils.validateEmail(form.getEmail())) { + isValid = false; + form.getActionErrors().add("email", new ActionMessage("user.email.error")); + } return isValid; } diff --git a/src/main/java/com/my_app/repo/impl/UserRepositoryImpl.java b/src/main/java/com/my_app/repo/impl/UserRepositoryImpl.java index 5a8d13d..117087c 100644 --- a/src/main/java/com/my_app/repo/impl/UserRepositoryImpl.java +++ b/src/main/java/com/my_app/repo/impl/UserRepositoryImpl.java @@ -35,11 +35,12 @@ public User save(User user) { private User create(User user) { try (final PreparedStatement stmt = this.conn - .prepareStatement("INSERT INTO \"USER\" (USERNAME, PASSWORD, CITY_ID) VALUES (?, ?, ?)")) { + .prepareStatement("INSERT INTO \"USER\" (USERNAME, PASSWORD, CITY_ID, EMAIL) VALUES (?, ?, ?, ?)")) { stmt.setString(1, UserUtils.normalizeUsername(user.getUsername())); stmt.setString(2, user.getPassword()); stmt.setLong(3, user.getCity().getId()); + stmt.setString(4, user.getEmail()); stmt.executeUpdate(); @@ -51,12 +52,13 @@ private User create(User user) { private User update(User user) { try (final PreparedStatement stmt = this.conn - .prepareStatement("UPDATE \"USER\" SET USERNAME = ?, PASSWORD = ?, CITY_ID = ? WHERE ID = ?")) { + .prepareStatement("UPDATE \"USER\" SET USERNAME = ?, PASSWORD = ?, CITY_ID = ?, EMAIL = ? WHERE ID = ?")) { stmt.setString(1, UserUtils.normalizeUsername(user.getUsername())); stmt.setString(2, user.getPassword()); stmt.setLong(3, user.getCity().getId()); - stmt.setLong(4, user.getId()); + stmt.setString(4, user.getEmail()); + stmt.setLong(5, user.getId()); stmt.executeUpdate(); @@ -69,14 +71,14 @@ private User update(User user) { @Override public User findById(Long id) { try (final PreparedStatement stmt = this.conn - .prepareStatement("SELECT ID, USERNAME, PASSWORD, CITY_ID FROM \"USER\" WHERE ID = ?")) { + .prepareStatement("SELECT ID, USERNAME, PASSWORD, CITY_ID, EMAIL FROM \"USER\" WHERE ID = ?")) { stmt.setLong(1, id); try (final ResultSet rs = stmt.executeQuery()) { if (rs.next()) { return new User(rs.getLong(1), rs.getString(2), rs.getString(3), - this.cityRepository.findById(rs.getLong(4))); + this.cityRepository.findById(rs.getLong(4)), rs.getString(5)); } } @@ -89,14 +91,14 @@ public User findById(Long id) { @Override public User findByUsername(String username) { try (final PreparedStatement stmt = this.conn - .prepareStatement("SELECT ID, USERNAME, PASSWORD, CITY_ID FROM \"USER\" WHERE USERNAME = ?")) { + .prepareStatement("SELECT ID, USERNAME, PASSWORD, CITY_ID, EMAIL FROM \"USER\" WHERE USERNAME = ?")) { stmt.setString(1, UserUtils.normalizeUsername(username)); try (final ResultSet rs = stmt.executeQuery()) { if (rs.next()) { return new User(rs.getLong(1), rs.getString(2), rs.getString(3), - this.cityRepository.findById(rs.getLong(4))); + this.cityRepository.findById(rs.getLong(4)), rs.getString(5)); } } @@ -109,14 +111,14 @@ public User findByUsername(String username) { @Override public List findAll() { try (final PreparedStatement stmt = this.conn - .prepareStatement("SELECT ID, USERNAME, PASSWORD, CITY_ID FROM \"USER\""); + .prepareStatement("SELECT ID, USERNAME, PASSWORD, CITY_ID, EMAIL FROM \"USER\""); final ResultSet rs = stmt.executeQuery()) { final List users = new LinkedList<>(); while (rs.next()) { users.add(new User(rs.getLong(1), rs.getString(2), rs.getString(3), - this.cityRepository.findById(rs.getLong(4)))); + this.cityRepository.findById(rs.getLong(4)), rs.getString(5))); } return users; diff --git a/src/main/java/com/my_app/utils/UserUtils.java b/src/main/java/com/my_app/utils/UserUtils.java index d163006..d688fc0 100644 --- a/src/main/java/com/my_app/utils/UserUtils.java +++ b/src/main/java/com/my_app/utils/UserUtils.java @@ -3,6 +3,9 @@ import static org.apache.commons.lang3.StringUtils.lowerCase; import static org.apache.commons.lang3.StringUtils.replace; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class UserUtils { private UserUtils() { @@ -11,5 +14,12 @@ private UserUtils() { public static String normalizeUsername(String username) { return replace(lowerCase(username), " ", "_"); } + + public static final Pattern VALID_EMAIL_REGEX = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", + Pattern.CASE_INSENSITIVE); + public static boolean validateEmail(String emailStr) { + Matcher matcher = VALID_EMAIL_REGEX.matcher(emailStr); + return matcher.matches(); + } } diff --git a/src/main/webapp/user/list.jsp b/src/main/webapp/user/list.jsp index 72bded5..0eb95b3 100644 --- a/src/main/webapp/user/list.jsp +++ b/src/main/webapp/user/list.jsp @@ -37,6 +37,7 @@ Id Username + Email Country City Actions @@ -54,6 +55,7 @@ ${user.id} ${user.username} + ${user.email} ${user.city.country.name} ${user.city.name} diff --git a/src/main/webapp/user/save/form.jsp b/src/main/webapp/user/save/form.jsp index 3a3f1b4..5a5175e 100644 --- a/src/main/webapp/user/save/form.jsp +++ b/src/main/webapp/user/save/form.jsp @@ -47,6 +47,14 @@ + +
+ + +
+ +
+
diff --git a/src/main/webapp/user/save/js/form.js b/src/main/webapp/user/save/js/form.js index 1585047..b955768 100644 --- a/src/main/webapp/user/save/js/form.js +++ b/src/main/webapp/user/save/js/form.js @@ -9,6 +9,7 @@ let form = { user: { $id: $('input#user-id'), $username: $('input#user-username'), + $email: $('input#user-email'), $password: $('input#user-password'), $country: $('select#user-country'), $city: $('select#user-city') From 30e3a46378887aac325eb96bc889bce7dd1bc9f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 20:08:02 +0100 Subject: [PATCH 03/21] chore: Created method to the table company --- src/main/java/com/my_app/App.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/my_app/App.java b/src/main/java/com/my_app/App.java index 95e3ce8..8edffb8 100644 --- a/src/main/java/com/my_app/App.java +++ b/src/main/java/com/my_app/App.java @@ -81,6 +81,7 @@ private void initDb() { try (final Connection conn = this.dataSource.getConnection()) { initDbCountriesAndCities(conn); initDbUsers(conn); + createDbCompanies(conn); } catch (SQLException e) { throw new AppGenericException("Error trying to insert initial db data", e); } @@ -130,5 +131,12 @@ private void initDbUsers(Connection conn) throws SQLException { Logger.debug("All users created: {}", userRepository.findAll()); } + + private void createDbCompanies(Connection conn) throws SQLException { + try (final Statement stmt = conn.createStatement()) { + stmt.executeUpdate( + "CREATE TABLE \"COMPANY\" (ID IDENTITY NOT NULL PRIMARY KEY, NAME VARCHAR(255) UNIQUE NOT NULL, ADDRESS VARCHAR(255) NOT NULL, CITY_ID BIGINT NOT NULL, VAT BIGINT NOT NULL, FOREIGN KEY (CITY_ID) REFERENCES CITY(ID))"); + } + } } From 09072ba26131a75b388bab7a5b43896de8129a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 20:09:23 +0100 Subject: [PATCH 04/21] chore: Add setting and route to the company page list --- src/main/webapp/WEB-INF/struts-config.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/webapp/WEB-INF/struts-config.xml b/src/main/webapp/WEB-INF/struts-config.xml index 12cd624..77bee36 100644 --- a/src/main/webapp/WEB-INF/struts-config.xml +++ b/src/main/webapp/WEB-INF/struts-config.xml @@ -30,6 +30,14 @@ + + + + + + + + From 60fc62ab635948b7246335118e4c39cf5e6b1d93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 20:11:42 +0100 Subject: [PATCH 05/21] feat: Add called to the page comapny --- src/main/webapp/home.jsp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/webapp/home.jsp b/src/main/webapp/home.jsp index 22922db..674c5ae 100644 --- a/src/main/webapp/home.jsp +++ b/src/main/webapp/home.jsp @@ -18,11 +18,16 @@

Welcome to MyApp

Choose an area

- From a90d5cff3da968366798a26d30818217f0f081db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 20:14:22 +0100 Subject: [PATCH 06/21] feat: Created class to the company list --- .../page/company/list/CompanyListAction.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/com/my_app/page/company/list/CompanyListAction.java diff --git a/src/main/java/com/my_app/page/company/list/CompanyListAction.java b/src/main/java/com/my_app/page/company/list/CompanyListAction.java new file mode 100644 index 0000000..f4ee6d0 --- /dev/null +++ b/src/main/java/com/my_app/page/company/list/CompanyListAction.java @@ -0,0 +1,28 @@ +package com.my_app.page.company.list; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts.action.Action; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; + +import com.my_app.utils.LoginUtils; + +public class CompanyListAction extends Action { + + @Override + public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, + HttpServletResponse response) throws Exception { + + if (LoginUtils.isUserNotLoggedIn(req.getSession())) { + return mapping.findForward("actionLoginRedir"); + } + + req.setAttribute("companies", "Page Companies"); + + return mapping.getInputForward(); + } + +} From 5acc39dfa881078c34e227beeb41d13571d3d00d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 20:14:58 +0100 Subject: [PATCH 07/21] feat: Created class of model company --- src/main/java/com/my_app/model/Company.java | 65 +++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/main/java/com/my_app/model/Company.java diff --git a/src/main/java/com/my_app/model/Company.java b/src/main/java/com/my_app/model/Company.java new file mode 100644 index 0000000..0e1214c --- /dev/null +++ b/src/main/java/com/my_app/model/Company.java @@ -0,0 +1,65 @@ +package com.my_app.model; + +public class Company { + + private Long id; + private String name; + private Long vat; + private City city; + + public Company() { + super(); + } + + public Company(String name, Long vat, City city) { + super(); + this.name = name; + this.vat = vat; + this.city = city; + } + public Company(Long id, String name, Long vat, City city) { + super(); + this.id = id; + this.name = name; + this.vat = vat; + this.city = city; + } + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getVat() { + return vat; + } + + public void setVat(Long vat) { + this.vat = vat; + } + + public City getCity() { + return city; + } + + public void setCity(City city) { + this.city = city; + } + + @Override + public String toString() { + return String.format("Company [id=%s, name=%s, vat=%s, city=%s ]", id, name, vat, city); + } +} From ba26fc9776f91c522b6467f76768d2eb8ddedee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 20:16:11 +0100 Subject: [PATCH 08/21] feat: Created class to the parse model and object form --- .../CompanySaveFormToCompanyMapper.java | 16 ++++++++++++++++ .../CompanyToCompanySaveFormMapper.java | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/main/java/com/my_app/page/company/save/mapper/CompanySaveFormToCompanyMapper.java create mode 100644 src/main/java/com/my_app/page/company/save/mapper/CompanyToCompanySaveFormMapper.java diff --git a/src/main/java/com/my_app/page/company/save/mapper/CompanySaveFormToCompanyMapper.java b/src/main/java/com/my_app/page/company/save/mapper/CompanySaveFormToCompanyMapper.java new file mode 100644 index 0000000..6b516e2 --- /dev/null +++ b/src/main/java/com/my_app/page/company/save/mapper/CompanySaveFormToCompanyMapper.java @@ -0,0 +1,16 @@ +package com.my_app.page.company.save.mapper; + +import com.my_app.model.City; +import com.my_app.model.Company; +import com.my_app.page.company.save.CompanySaveForm; + +public class CompanySaveFormToCompanyMapper { + + public Company toCompany(CompanySaveForm form) { + + final City city = new City(form.getCityId()); + + return new Company(Long.valueOf(0).equals(form.getComapnyId()) ? null : form.getComapnyId(), form.getName(), + form.getVat(), city); + } +} diff --git a/src/main/java/com/my_app/page/company/save/mapper/CompanyToCompanySaveFormMapper.java b/src/main/java/com/my_app/page/company/save/mapper/CompanyToCompanySaveFormMapper.java new file mode 100644 index 0000000..ec3ca9e --- /dev/null +++ b/src/main/java/com/my_app/page/company/save/mapper/CompanyToCompanySaveFormMapper.java @@ -0,0 +1,19 @@ +package com.my_app.page.company.save.mapper; + +import com.my_app.model.Company; +import com.my_app.page.company.save.CompanySaveForm; + +public class CompanyToCompanySaveFormMapper { + + public CompanySaveForm mapTo(Company company, CompanySaveForm form) { + + form.setCompanyId(company.getId()); + form.setName(company.getName()); + form.setCityId(company.getCity().getId()); + form.setVat(company.getVat()); + form.setCountryId(company.getCity().getCountry().getId()); + + return form; + } + +} From 617635b0bda56150c9342f69be83abfbae0c2132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 20:18:28 +0100 Subject: [PATCH 09/21] feat: Created file jsp and js to the flow of creation and list of company --- src/main/webapp/company/list.jsp | 55 +++++++++++++ src/main/webapp/company/save/form.jsp | 104 ++++++++++++++++++++++++ src/main/webapp/company/save/js/form.js | 0 3 files changed, 159 insertions(+) create mode 100644 src/main/webapp/company/list.jsp create mode 100644 src/main/webapp/company/save/form.jsp create mode 100644 src/main/webapp/company/save/js/form.js diff --git a/src/main/webapp/company/list.jsp b/src/main/webapp/company/list.jsp new file mode 100644 index 0000000..ce4b21b --- /dev/null +++ b/src/main/webapp/company/list.jsp @@ -0,0 +1,55 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%> +<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%> +<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic"%> + + + + + + +Users - MyApp + + + + +
+

Companies

+ + + + + + + + + + + + + + + + + + + + + + +
IdUsernameEmailCountryCityActions
${companies}
+ New +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/company/save/form.jsp b/src/main/webapp/company/save/form.jsp new file mode 100644 index 0000000..a328e5e --- /dev/null +++ b/src/main/webapp/company/save/form.jsp @@ -0,0 +1,104 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%> +<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%> +<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic"%> + + + + + + +Companies - MyApp + + + + +
+

${form.newCompany ? 'New' : 'Update'} Company ${form.newCompany ? '' : form.name}

+ + + + + + + + +
+
+
+ + + + +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ + Back + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/src/main/webapp/company/save/js/form.js b/src/main/webapp/company/save/js/form.js new file mode 100644 index 0000000..e69de29 From ada746d26a07f202d74143f763601e94ca110189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 20:56:24 +0100 Subject: [PATCH 10/21] feat: Created class to the flow where we use to creation, list, edit and delete company --- .../page/company/save/CompanySaveAction.java | 60 ++++++++++++++++ .../page/company/save/CompanySaveForm.java | 68 +++++++++++++++++++ .../save/service/CompanySaveService.java | 18 +++++ .../service/CompanySaveServiceFactory.java | 17 +++++ .../save/service/CompanySaveServiceImpl.java | 51 ++++++++++++++ .../com/my_app/repo/CompanyRepository.java | 7 ++ .../repo/impl/CompanyRepositoryImpl.java | 51 ++++++++++++++ .../com/my_app/service/CompanyService.java | 7 ++ .../factory/CompanyServiceFactory.java | 19 ++++++ .../service/impl/CompanyServiceImpl.java | 47 +++++++++++++ 10 files changed, 345 insertions(+) create mode 100644 src/main/java/com/my_app/page/company/save/CompanySaveAction.java create mode 100644 src/main/java/com/my_app/page/company/save/CompanySaveForm.java create mode 100644 src/main/java/com/my_app/page/company/save/service/CompanySaveService.java create mode 100644 src/main/java/com/my_app/page/company/save/service/CompanySaveServiceFactory.java create mode 100644 src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java create mode 100644 src/main/java/com/my_app/repo/CompanyRepository.java create mode 100644 src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java create mode 100644 src/main/java/com/my_app/service/CompanyService.java create mode 100644 src/main/java/com/my_app/service/factory/CompanyServiceFactory.java create mode 100644 src/main/java/com/my_app/service/impl/CompanyServiceImpl.java diff --git a/src/main/java/com/my_app/page/company/save/CompanySaveAction.java b/src/main/java/com/my_app/page/company/save/CompanySaveAction.java new file mode 100644 index 0000000..c9e6522 --- /dev/null +++ b/src/main/java/com/my_app/page/company/save/CompanySaveAction.java @@ -0,0 +1,60 @@ +package com.my_app.page.company.save; + +import java.sql.Connection; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts.action.Action; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; + +import com.my_app.page.company.save.service.CompanySaveService; +import com.my_app.page.company.save.service.CompanySaveServiceFactory; +import com.my_app.utils.LoginUtils; + +public class CompanySaveAction extends Action { + + @Override + public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest req, + HttpServletResponse res) throws Exception { + + final Connection conn = (Connection) req.getAttribute("conn"); + + final CompanySaveService companySaveService = new CompanySaveServiceFactory().create(conn); + + final CompanySaveForm form = (CompanySaveForm) actionForm; + + req.setAttribute("form", form); + + if (LoginUtils.isUserNotLoggedIn(req.getSession())) { + return mapping.findForward("loginRedir"); + } else if ("save".equals(form.getAction())) { + return executeSaveAction(mapping, form, req, res, companySaveService); + } else if ("validate".equals(form.getAction())) { + return executeValidateAction(mapping, form, req, res, companySaveService); + } else { + return this.executeFormAction(mapping, form, req, res, companySaveService); + } + } + + private ActionForward executeFormAction(ActionMapping mapping, CompanySaveForm form, HttpServletRequest req, + HttpServletResponse res, CompanySaveService companySaveService) { + // TODO Auto-generated method stub + return null; + } + + private ActionForward executeValidateAction(ActionMapping mapping, CompanySaveForm form, HttpServletRequest req, + HttpServletResponse res, CompanySaveService companySaveService) { + // TODO Auto-generated method stub + return null; + } + + private ActionForward executeSaveAction(ActionMapping mapping, CompanySaveForm form, HttpServletRequest req, + HttpServletResponse res, CompanySaveService companySaveService) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/main/java/com/my_app/page/company/save/CompanySaveForm.java b/src/main/java/com/my_app/page/company/save/CompanySaveForm.java new file mode 100644 index 0000000..7a6605b --- /dev/null +++ b/src/main/java/com/my_app/page/company/save/CompanySaveForm.java @@ -0,0 +1,68 @@ +package com.my_app.page.company.save; + +import com.my_app.model.BaseActionForm; + +public class CompanySaveForm extends BaseActionForm { + + private static final long serialVersionUID = 3269397173691017817L; + + private Long companyId; + private String name; + private Long vat; + private Long cityId; + private Long countryId; + + private transient boolean formInit = true; + + public Long getComapnyId() { + return companyId; + } + + public void setCompanyId(Long id) { + this.companyId = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getVat() { + return vat; + } + + public void setVat(Long vat) { + this.vat = vat; + } + + public Long getCityId() { + return cityId; + } + + public void setCityId(Long cityId) { + this.cityId = cityId; + } + + public Long getCountryId() { + return countryId; + } + + public void setCountryId(Long countryId) { + this.countryId = countryId; + } + + public boolean isFormInit() { + return formInit; + } + + public void setFormInit(boolean formInit) { + this.formInit = formInit; + } + + + + +} diff --git a/src/main/java/com/my_app/page/company/save/service/CompanySaveService.java b/src/main/java/com/my_app/page/company/save/service/CompanySaveService.java new file mode 100644 index 0000000..0d3bb2d --- /dev/null +++ b/src/main/java/com/my_app/page/company/save/service/CompanySaveService.java @@ -0,0 +1,18 @@ +package com.my_app.page.company.save.service; + +import javax.servlet.http.HttpServletRequest; + +import com.my_app.model.Company; +import com.my_app.page.company.save.CompanySaveForm; + +public interface CompanySaveService { + + public boolean validate(CompanySaveForm form); + + public Company saveCompany(CompanySaveForm form); + + public void formInit(CompanySaveForm form); + + public void setRequestAttrs(CompanySaveForm form, HttpServletRequest req); + +} diff --git a/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceFactory.java b/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceFactory.java new file mode 100644 index 0000000..a02cb87 --- /dev/null +++ b/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceFactory.java @@ -0,0 +1,17 @@ +package com.my_app.page.company.save.service; + +import java.sql.Connection; + +import com.my_app.service.factory.CityServiceFactory; +import com.my_app.service.factory.CompanyServiceFactory; +import com.my_app.service.factory.ConnectionBasedServiceFactory; +import com.my_app.service.factory.CountryServiceFactory; + +public class CompanySaveServiceFactory implements ConnectionBasedServiceFactory { + + @Override + public CompanySaveService create(Connection conn) { + return new CompanySaveServiceImpl(new CompanyServiceFactory().create(conn), + new CountryServiceFactory().create(conn), new CityServiceFactory().create(conn)); + } +} \ No newline at end of file diff --git a/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java b/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java new file mode 100644 index 0000000..11c23ca --- /dev/null +++ b/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java @@ -0,0 +1,51 @@ +package com.my_app.page.company.save.service; + +import javax.servlet.http.HttpServletRequest; + +import com.my_app.model.Company; +import com.my_app.page.company.save.CompanySaveForm; +import com.my_app.service.CityService; +import com.my_app.service.CountryService; +import com.my_app.service.CompanyService; + +public class CompanySaveServiceImpl implements CompanySaveService { + + + final CompanyService companyService; + final CountryService countryService; + final CityService cityService; + + public CompanySaveServiceImpl(CompanyService companyService, CountryService countryService, CityService cityService) { + super(); + this.companyService = companyService; + this.countryService = countryService; + this.cityService = cityService; + } + + @Override + public boolean validate(CompanySaveForm form) { + // TODO Auto-generated method stub + return false; + } + + @Override + public Company saveCompany(CompanySaveForm form) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void formInit(CompanySaveForm form) { + // TODO Auto-generated method stub + + } + + @Override + public void setRequestAttrs(CompanySaveForm form, HttpServletRequest req) { + // TODO Auto-generated method stub + + } + + + +} diff --git a/src/main/java/com/my_app/repo/CompanyRepository.java b/src/main/java/com/my_app/repo/CompanyRepository.java new file mode 100644 index 0000000..389c6f9 --- /dev/null +++ b/src/main/java/com/my_app/repo/CompanyRepository.java @@ -0,0 +1,7 @@ +package com.my_app.repo; + +import com.my_app.model.Company; + +public interface CompanyRepository extends Repository { + +} diff --git a/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java b/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java new file mode 100644 index 0000000..40c871a --- /dev/null +++ b/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java @@ -0,0 +1,51 @@ +package com.my_app.repo.impl; + +import java.sql.Connection; +import java.util.List; + +import com.my_app.model.Company; +import com.my_app.repo.CityRepository; +import com.my_app.repo.CompanyRepository; + +public class CompanyRepositoryImpl implements CompanyRepository { + + private final Connection conn; + private final CityRepository cityRepository; + + public CompanyRepositoryImpl(Connection conn, CityRepository cityRepository) { + super(); + this.conn = conn; + this.cityRepository = cityRepository; + } + + @Override + public Company save(Company o) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Company findById(Long id) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List findAll() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void deleteById(Long id) { + // TODO Auto-generated method stub + + } + + @Override + public void delete(Company o) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/com/my_app/service/CompanyService.java b/src/main/java/com/my_app/service/CompanyService.java new file mode 100644 index 0000000..51ba3af --- /dev/null +++ b/src/main/java/com/my_app/service/CompanyService.java @@ -0,0 +1,7 @@ +package com.my_app.service; + +import com.my_app.model.Company; + +public interface CompanyService extends BaseService { + +} diff --git a/src/main/java/com/my_app/service/factory/CompanyServiceFactory.java b/src/main/java/com/my_app/service/factory/CompanyServiceFactory.java new file mode 100644 index 0000000..9207dee --- /dev/null +++ b/src/main/java/com/my_app/service/factory/CompanyServiceFactory.java @@ -0,0 +1,19 @@ +package com.my_app.service.factory; + +import java.sql.Connection; + +import com.my_app.repo.impl.CityRepositoryImpl; +import com.my_app.repo.impl.CompanyRepositoryImpl; +import com.my_app.repo.impl.CountryRepositoryImpl; +import com.my_app.service.CompanyService; +import com.my_app.service.impl.CompanyServiceImpl; + +public class CompanyServiceFactory implements ConnectionBasedServiceFactory { + + @Override + public CompanyService create(Connection conn) { + return new CompanyServiceImpl( + new CompanyRepositoryImpl(conn, new CityRepositoryImpl(conn, new CountryRepositoryImpl(conn)))); + } + +} diff --git a/src/main/java/com/my_app/service/impl/CompanyServiceImpl.java b/src/main/java/com/my_app/service/impl/CompanyServiceImpl.java new file mode 100644 index 0000000..7e2a24d --- /dev/null +++ b/src/main/java/com/my_app/service/impl/CompanyServiceImpl.java @@ -0,0 +1,47 @@ +package com.my_app.service.impl; + +import java.util.List; + +import com.my_app.model.Company; +import com.my_app.repo.CompanyRepository; +import com.my_app.service.CompanyService; + +public class CompanyServiceImpl implements CompanyService { + + private final CompanyRepository companyRepository; + + public CompanyServiceImpl(CompanyRepository companyRepository) { + this.companyRepository = companyRepository; + } + + @Override + public Company save(Company o) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Company findById(Long id) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List findAll() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void deleteById(Long id) { + // TODO Auto-generated method stub + + } + + @Override + public void delete(Company o) { + // TODO Auto-generated method stub + + } + +} From 40bbaa4b3df37f48b76b5ecad9875248141bbddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 22:10:03 +0100 Subject: [PATCH 11/21] refactor: fix some things wrong and attributes to the company class --- src/main/java/com/my_app/model/Company.java | 18 +++++++++++++++--- .../page/company/save/CompanySaveAction.java | 8 ++++++-- .../page/company/save/CompanySaveForm.java | 13 +++++++++++-- .../mapper/CompanySaveFormToCompanyMapper.java | 2 +- src/main/webapp/WEB-INF/struts-config.xml | 1 + 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/my_app/model/Company.java b/src/main/java/com/my_app/model/Company.java index 0e1214c..035e7e9 100644 --- a/src/main/java/com/my_app/model/Company.java +++ b/src/main/java/com/my_app/model/Company.java @@ -4,6 +4,7 @@ public class Company { private Long id; private String name; + private String address; private Long vat; private City city; @@ -11,16 +12,18 @@ public Company() { super(); } - public Company(String name, Long vat, City city) { + public Company(String name, String address, Long vat, City city) { super(); this.name = name; this.vat = vat; this.city = city; + this.address = address; } - public Company(Long id, String name, Long vat, City city) { + public Company(Long id, String name, String address, Long vat, City city) { super(); this.id = id; this.name = name; + this.address = address; this.vat = vat; this.city = city; } @@ -58,8 +61,17 @@ public void setCity(City city) { this.city = city; } + public String getAddress() { + return address; + } + + public String setAddress(String address) { + return address; + } + @Override public String toString() { - return String.format("Company [id=%s, name=%s, vat=%s, city=%s ]", id, name, vat, city); + return String.format("Company [id=%s, name=%s,address=%s, vat=%s, city=%s ]", id, name, address, vat, city); } + } diff --git a/src/main/java/com/my_app/page/company/save/CompanySaveAction.java b/src/main/java/com/my_app/page/company/save/CompanySaveAction.java index c9e6522..ee56829 100644 --- a/src/main/java/com/my_app/page/company/save/CompanySaveAction.java +++ b/src/main/java/com/my_app/page/company/save/CompanySaveAction.java @@ -41,8 +41,12 @@ public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpS private ActionForward executeFormAction(ActionMapping mapping, CompanySaveForm form, HttpServletRequest req, HttpServletResponse res, CompanySaveService companySaveService) { - // TODO Auto-generated method stub - return null; + if (form.isFormInit()) { + companySaveService.formInit(form); + form.setFormInit(false); + } + companySaveService.setRequestAttrs(form, req); + return mapping.findForward("form"); } private ActionForward executeValidateAction(ActionMapping mapping, CompanySaveForm form, HttpServletRequest req, diff --git a/src/main/java/com/my_app/page/company/save/CompanySaveForm.java b/src/main/java/com/my_app/page/company/save/CompanySaveForm.java index 7a6605b..77cd351 100644 --- a/src/main/java/com/my_app/page/company/save/CompanySaveForm.java +++ b/src/main/java/com/my_app/page/company/save/CompanySaveForm.java @@ -8,13 +8,14 @@ public class CompanySaveForm extends BaseActionForm { private Long companyId; private String name; + private String address; private Long vat; private Long cityId; private Long countryId; private transient boolean formInit = true; - public Long getComapnyId() { + public Long getCompanyId() { return companyId; } @@ -62,7 +63,15 @@ public void setFormInit(boolean formInit) { this.formInit = formInit; } - + public boolean isNewCompany() { + return this.companyId == null || this.companyId == 0; + } + public String getAddress() { + return address; + } + public void setAddress(String address) { + this.address = address; + } } diff --git a/src/main/java/com/my_app/page/company/save/mapper/CompanySaveFormToCompanyMapper.java b/src/main/java/com/my_app/page/company/save/mapper/CompanySaveFormToCompanyMapper.java index 6b516e2..b4e4412 100644 --- a/src/main/java/com/my_app/page/company/save/mapper/CompanySaveFormToCompanyMapper.java +++ b/src/main/java/com/my_app/page/company/save/mapper/CompanySaveFormToCompanyMapper.java @@ -10,7 +10,7 @@ public Company toCompany(CompanySaveForm form) { final City city = new City(form.getCityId()); - return new Company(Long.valueOf(0).equals(form.getComapnyId()) ? null : form.getComapnyId(), form.getName(), + return new Company(Long.valueOf(0).equals(form.getCompanyId()) ? null : form.getCompanyId(), form.getName(), form.getAddress(), form.getVat(), city); } } diff --git a/src/main/webapp/WEB-INF/struts-config.xml b/src/main/webapp/WEB-INF/struts-config.xml index 77bee36..6c0c9dd 100644 --- a/src/main/webapp/WEB-INF/struts-config.xml +++ b/src/main/webapp/WEB-INF/struts-config.xml @@ -6,6 +6,7 @@ + From 2481800c12ec019850c7b80c1cb0f897ddf375b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 22:41:22 +0100 Subject: [PATCH 12/21] refactor: Bettered list of company --- .../page/company/list/CompanyListAction.java | 10 +++++- .../repo/impl/CompanyRepositoryImpl.java | 23 +++++++++++-- src/main/webapp/company/list.jsp | 33 +++++++++++++++---- 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/my_app/page/company/list/CompanyListAction.java b/src/main/java/com/my_app/page/company/list/CompanyListAction.java index f4ee6d0..fb0b299 100644 --- a/src/main/java/com/my_app/page/company/list/CompanyListAction.java +++ b/src/main/java/com/my_app/page/company/list/CompanyListAction.java @@ -1,5 +1,7 @@ package com.my_app.page.company.list; +import java.sql.Connection; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +10,10 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import com.my_app.service.CompanyService; +import com.my_app.service.UserService; +import com.my_app.service.factory.CompanyServiceFactory; +import com.my_app.service.factory.UserServiceFactory; import com.my_app.utils.LoginUtils; public class CompanyListAction extends Action { @@ -20,7 +26,9 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet return mapping.findForward("actionLoginRedir"); } - req.setAttribute("companies", "Page Companies"); + final CompanyService companyService = new CompanyServiceFactory().create((Connection) req.getAttribute("conn")); + + req.setAttribute("companies", companyService.findAll()); return mapping.getInputForward(); } diff --git a/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java b/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java index 40c871a..2df250a 100644 --- a/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java +++ b/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java @@ -1,9 +1,15 @@ package com.my_app.repo.impl; import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.LinkedList; import java.util.List; +import com.my_app.exception.AppGenericException; import com.my_app.model.Company; +import com.my_app.model.User; import com.my_app.repo.CityRepository; import com.my_app.repo.CompanyRepository; @@ -32,10 +38,21 @@ public Company findById(Long id) { @Override public List findAll() { - // TODO Auto-generated method stub - return null; + + try (final PreparedStatement stmt = this.conn.prepareStatement("SELECT ID, NAME, ADDRESS, CITY_ID, VAT FROM \"COMPANY\""); + final ResultSet rs = stmt.executeQuery()) { + final List companies = new LinkedList<>(); + + while (rs.next()) { + companies.add(new Company(rs.getLong(1), rs.getString(2), rs.getString(3), rs.getLong(4), this.cityRepository.findById(rs.getLong(5)))); + } + + return companies; + } catch (SQLException e) { + throw new AppGenericException("Error while querying for all companies", e); + } } - + @Override public void deleteById(Long id) { // TODO Auto-generated method stub diff --git a/src/main/webapp/company/list.jsp b/src/main/webapp/company/list.jsp index ce4b21b..ba34af1 100644 --- a/src/main/webapp/company/list.jsp +++ b/src/main/webapp/company/list.jsp @@ -35,19 +35,40 @@ - - - + + - - + + + + + + + + + + + + + + + + + + +
IdUsernameEmailNameAddress Country City Actions
${companies}
List of companies is empty!
${company.name}${company.address}${company.city.country.name}${company.city.name} + +
- New + New From 6cc57284616151fbfa3967b346ed7fadb03b3a5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 23:02:11 +0100 Subject: [PATCH 13/21] feat: Doing validate form --- .../page/company/save/CompanySaveAction.java | 21 +++++++++- .../save/service/CompanySaveServiceImpl.java | 40 +++++++++++++++++-- 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/my_app/page/company/save/CompanySaveAction.java b/src/main/java/com/my_app/page/company/save/CompanySaveAction.java index ee56829..2d92220 100644 --- a/src/main/java/com/my_app/page/company/save/CompanySaveAction.java +++ b/src/main/java/com/my_app/page/company/save/CompanySaveAction.java @@ -9,6 +9,7 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.apache.struts.action.ActionMessage; import com.my_app.page.company.save.service.CompanySaveService; import com.my_app.page.company.save.service.CompanySaveServiceFactory; @@ -51,8 +52,24 @@ private ActionForward executeFormAction(ActionMapping mapping, CompanySaveForm f private ActionForward executeValidateAction(ActionMapping mapping, CompanySaveForm form, HttpServletRequest req, HttpServletResponse res, CompanySaveService companySaveService) { - // TODO Auto-generated method stub - return null; + + if (companySaveService.validate(form)) { + form.getActionMessages().add("topMsgs", new ActionMessage("form.validation.success", form.getName())); + } else { + form.getActionErrors().add("topMsgs", new ActionMessage("form.validation.error")); + } + + if (!form.getActionMessages().isEmpty()) { + req.setAttribute("actionMessages", form.getActionMessages()); + this.saveMessages(req, form.getActionMessages()); + } else if (!form.getActionErrors().isEmpty()) { + req.setAttribute("actionErrors", form.getActionErrors()); + this.saveErrors(req, form.getActionErrors()); + } + + req.setAttribute("validated", true); + + return this.executeFormAction(mapping, form, req, res, companySaveService); } private ActionForward executeSaveAction(ActionMapping mapping, CompanySaveForm form, HttpServletRequest req, diff --git a/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java b/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java index 11c23ca..fd1fa80 100644 --- a/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java +++ b/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java @@ -2,11 +2,14 @@ import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang3.StringUtils; +import org.apache.struts.action.ActionMessage; + import com.my_app.model.Company; import com.my_app.page.company.save.CompanySaveForm; import com.my_app.service.CityService; -import com.my_app.service.CountryService; import com.my_app.service.CompanyService; +import com.my_app.service.CountryService; public class CompanySaveServiceImpl implements CompanySaveService { @@ -24,8 +27,39 @@ public CompanySaveServiceImpl(CompanyService companyService, CountryService coun @Override public boolean validate(CompanySaveForm form) { - // TODO Auto-generated method stub - return false; + boolean isValid = true; + + if (StringUtils.isBlank(form.getName())) { + isValid = false; + form.getActionErrors().add("name", new ActionMessage("error.common.required")); + } + + if (StringUtils.isBlank(form.getAddress())) { + isValid = false; + form.getActionErrors().add("address", new ActionMessage("error.common.required")); + } + + if (form.getVat() == null || form.getVat() == 0) { + isValid = false; + form.getActionErrors().add("vat", new ActionMessage("error.common.required")); + } + + if (form.getCountryId() == null || form.getCountryId() == 0) { + isValid = false; + form.getActionErrors().add("country", new ActionMessage("error.common.required")); + } + + if (form.getCityId() == null || form.getCityId() == 0) { + isValid = false; + + if (form.getCountryId() == null || form.getCountryId() == 0) { + form.getActionErrors().add("city", new ActionMessage("form.field.pre-choose", "Country")); + } else { + form.getActionErrors().add("city", new ActionMessage("error.common.required")); + } + } + + return isValid; } @Override From 863a0ecb21b8ca6a3306d1fe135a9f1f78b1b3bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Tue, 9 Apr 2024 23:14:50 +0100 Subject: [PATCH 14/21] feat: Add file js to the flow creation of company --- src/main/webapp/company/save/form.jsp | 6 +- src/main/webapp/company/save/js/form.js | 74 +++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/src/main/webapp/company/save/form.jsp b/src/main/webapp/company/save/form.jsp index a328e5e..d031ec9 100644 --- a/src/main/webapp/company/save/form.jsp +++ b/src/main/webapp/company/save/form.jsp @@ -34,7 +34,7 @@
-
+ @@ -64,7 +64,7 @@
- + diff --git a/src/main/webapp/company/save/js/form.js b/src/main/webapp/company/save/js/form.js index e69de29..1d528bb 100644 --- a/src/main/webapp/company/save/js/form.js +++ b/src/main/webapp/company/save/js/form.js @@ -0,0 +1,74 @@ +/** + * + */ + +let form = { + $form: $('form#company-save-fome'), + $action: $('input[name="action"]'), + + company: { + $id: $('input#company-id'), + $name: $('input#company-name'), + $address: $('input#company-address'), + $vat: $('input#company-vat'), + $country: $('select#company-country'), + $city: $('select#company-city') + }, + + btn: { + $validate: $('button.btn-validate'), + $save: $('button.btn-save') + }, + +} + + +let btnValidateClickHandler = (event) => { + event.preventDefault(); + console.debug('btn validate clicked'); + form.$action.val('validate'); + form.$form.submit(); +} + +let btnSaveClickHandler = (event) => { + event.preventDefault(); + console.debug('btn save clicked'); + form.$action.val('save'); + form.$form.submit(); +} + +let countryChangeHandler = () => { + let $country = form.company.$country; + let $city = form.company.$city; + + $city.prop('disabled', true).val('').empty().append($(``)); + + if ($country.val()) { + let countryId = Number($country.val()); + + cityService.findAllByCountryId(countryId).done((cities) => { + console.debug(cities); + + if (cities != null && cities.length > 0) { + $city.prop('disabled', false); + cities.forEach((city) => { + $city.append($(``)); + }); + } + }) + } +} + +let main = () => { + + form.btn.$validate.on('click', btnValidateClickHandler); + form.btn.$save.on('click', btnSaveClickHandler); + + form.company.$country.on('change', countryChangeHandler) + + console.debug('comapny form.js initialized'); +} + +$(() => { + main(); +}) \ No newline at end of file From 84c1b5df051110b2b5d7588365b65aca2577f4b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Wed, 10 Apr 2024 00:57:37 +0100 Subject: [PATCH 15/21] feat: Created new company and list it --- src/main/java/MessageResources.properties | 10 +++ src/main/java/com/my_app/model/Company.java | 4 ++ .../page/company/save/CompanySaveAction.java | 38 ++++++++++- .../save/service/CompanySaveServiceImpl.java | 10 ++- .../com/my_app/repo/CompanyRepository.java | 2 + .../repo/impl/CompanyRepositoryImpl.java | 67 ++++++++++++++++--- .../service/impl/CompanyServiceImpl.java | 6 +- .../java/com/my_app/utils/CompanyUtils.java | 14 ++++ src/main/webapp/WEB-INF/struts-config.xml | 2 + src/main/webapp/company/save/form.jsp | 4 +- src/main/webapp/company/save/js/form.js | 1 + 11 files changed, 136 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/my_app/utils/CompanyUtils.java diff --git a/src/main/java/MessageResources.properties b/src/main/java/MessageResources.properties index b891b83..4780dea 100644 --- a/src/main/java/MessageResources.properties +++ b/src/main/java/MessageResources.properties @@ -13,3 +13,13 @@ user.email.error=Email's not valid user.create.success=User "{0}" was created successfully user.update.success=User "{0}" was update successfully user.delete.success=User "{0}" was deleted successfully + + +company.not-found.error=Company not found +company.name-taken.error=Name's already taken +company.delete.at-least-one.error=Must keep at least one company + + +company.create.success=Company "{0}" was created successfully +company.update.success=Company "{0}" was update successfully +company.delete.success=Company "{0}" was deleted successfully diff --git a/src/main/java/com/my_app/model/Company.java b/src/main/java/com/my_app/model/Company.java index 035e7e9..1eb7a43 100644 --- a/src/main/java/com/my_app/model/Company.java +++ b/src/main/java/com/my_app/model/Company.java @@ -69,6 +69,10 @@ public String setAddress(String address) { return address; } + public boolean isNew() { + return this.id == null; + } + @Override public String toString() { return String.format("Company [id=%s, name=%s,address=%s, vat=%s, city=%s ]", id, name, address, vat, city); diff --git a/src/main/java/com/my_app/page/company/save/CompanySaveAction.java b/src/main/java/com/my_app/page/company/save/CompanySaveAction.java index 2d92220..1b3789e 100644 --- a/src/main/java/com/my_app/page/company/save/CompanySaveAction.java +++ b/src/main/java/com/my_app/page/company/save/CompanySaveAction.java @@ -11,6 +11,8 @@ import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; +import com.my_app.model.Company; +import com.my_app.model.User; import com.my_app.page.company.save.service.CompanySaveService; import com.my_app.page.company.save.service.CompanySaveServiceFactory; import com.my_app.utils.LoginUtils; @@ -74,8 +76,40 @@ private ActionForward executeValidateAction(ActionMapping mapping, CompanySaveFo private ActionForward executeSaveAction(ActionMapping mapping, CompanySaveForm form, HttpServletRequest req, HttpServletResponse res, CompanySaveService companySaveService) { - // TODO Auto-generated method stub - return null; + + + + ActionForward actionForward; + + if (companySaveService.validate(form)) { + final Company company = companySaveService.saveCompany(form); + + if (form.isNewCompany()) { + form.getActionMessages().add("topMsgs", new ActionMessage("company.create.success", company.getName())); + } else { + form.getActionMessages().add("topMsgs", new ActionMessage("company.update.success", company.getName())); + } + + actionForward = mapping.findForward("actionCompanies"); + } else { + form.getActionErrors().add("topMsgs", new ActionMessage("form.validation.error")); + req.setAttribute("validated", true); + + actionForward = this.executeFormAction(mapping, form, req, res, companySaveService); + } + + if (!form.getActionMessages().isEmpty()) { + req.setAttribute("actionMessages", form.getActionMessages()); + this.saveMessages(req, form.getActionMessages()); + } else if (!form.getActionErrors().isEmpty()) { + req.setAttribute("actionErrors", form.getActionErrors()); + this.saveErrors(req, form.getActionErrors()); + } + + return actionForward; + + + } } diff --git a/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java b/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java index fd1fa80..36bfb10 100644 --- a/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java +++ b/src/main/java/com/my_app/page/company/save/service/CompanySaveServiceImpl.java @@ -7,6 +7,8 @@ import com.my_app.model.Company; import com.my_app.page.company.save.CompanySaveForm; +import com.my_app.page.company.save.mapper.CompanySaveFormToCompanyMapper; +import com.my_app.page.user.save.mapper.UserSaveFormToUserMapper; import com.my_app.service.CityService; import com.my_app.service.CompanyService; import com.my_app.service.CountryService; @@ -64,8 +66,7 @@ public boolean validate(CompanySaveForm form) { @Override public Company saveCompany(CompanySaveForm form) { - // TODO Auto-generated method stub - return null; + return this.companyService.save(new CompanySaveFormToCompanyMapper().toCompany(form)); } @Override @@ -76,7 +77,10 @@ public void formInit(CompanySaveForm form) { @Override public void setRequestAttrs(CompanySaveForm form, HttpServletRequest req) { - // TODO Auto-generated method stub + req.setAttribute("countries", this.countryService.findAll()); + if (form.getCountryId() != null && form.getCountryId() > 0) { + req.setAttribute("cities", this.cityService.findAllByCountryId(form.getCountryId())); + } } diff --git a/src/main/java/com/my_app/repo/CompanyRepository.java b/src/main/java/com/my_app/repo/CompanyRepository.java index 389c6f9..f9d73f6 100644 --- a/src/main/java/com/my_app/repo/CompanyRepository.java +++ b/src/main/java/com/my_app/repo/CompanyRepository.java @@ -3,5 +3,7 @@ import com.my_app.model.Company; public interface CompanyRepository extends Repository { + + Company findByName(String name); } diff --git a/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java b/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java index 2df250a..689bb89 100644 --- a/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java +++ b/src/main/java/com/my_app/repo/impl/CompanyRepositoryImpl.java @@ -9,9 +9,9 @@ import com.my_app.exception.AppGenericException; import com.my_app.model.Company; -import com.my_app.model.User; import com.my_app.repo.CityRepository; import com.my_app.repo.CompanyRepository; +import com.my_app.utils.CompanyUtils; public class CompanyRepositoryImpl implements CompanyRepository { @@ -26,8 +26,42 @@ public CompanyRepositoryImpl(Connection conn, CityRepository cityRepository) { @Override public Company save(Company o) { - // TODO Auto-generated method stub - return null; + if (o.isNew()) { + return this.create(o); + } else { + return this.update(o); + } + } + + private Company create(Company company) { + try (final PreparedStatement stmt = this.conn + .prepareStatement("INSERT INTO \"COMPANY\" (NAME, ADDRESS, CITY_ID, VAT) VALUES (?, ?, ?, ?)")) { + + stmt.setString(1, CompanyUtils.normalizeName(company.getName())); + stmt.setString(2, company.getAddress()); + stmt.setLong(3, company.getCity().getId()); + stmt.setLong(4, company.getVat()); + + stmt.executeUpdate(); + + return this.findByName(company.getName()); + } catch (SQLException e) { + throw new AppGenericException("Error while inserting Company", e); + } + } + + private Company update(Company company) { + try (final PreparedStatement stmt = this.conn.prepareStatement("UPDATE \"COMPANY\" SET NAME = ?, ADDRESS = ?, CITY_ID = ?, VAT = ? WHERE ID = ?")) { + stmt.setString(1, CompanyUtils.normalizeName(company.getName())); + stmt.setString(2, company.getAddress()); + stmt.setLong(3, company.getCity().getId()); + stmt.setLong(4, company.getVat()); + stmt.setLong(5, company.getId()); + stmt.executeUpdate(); + return this.findByName(company.getName()); + } catch (SQLException e) { + throw new AppGenericException("Error while updating Company", e); + } } @Override @@ -37,16 +71,13 @@ public Company findById(Long id) { } @Override - public List findAll() { - - try (final PreparedStatement stmt = this.conn.prepareStatement("SELECT ID, NAME, ADDRESS, CITY_ID, VAT FROM \"COMPANY\""); + public List findAll() { + try (final PreparedStatement stmt = this.conn.prepareStatement("SELECT ID, NAME, ADDRESS, VAT, CITY_ID FROM \"COMPANY\""); final ResultSet rs = stmt.executeQuery()) { - final List companies = new LinkedList<>(); - + final List companies = new LinkedList<>(); while (rs.next()) { companies.add(new Company(rs.getLong(1), rs.getString(2), rs.getString(3), rs.getLong(4), this.cityRepository.findById(rs.getLong(5)))); - } - + } return companies; } catch (SQLException e) { throw new AppGenericException("Error while querying for all companies", e); @@ -65,4 +96,18 @@ public void delete(Company o) { } -} + @Override + public Company findByName(String name) { + try (final PreparedStatement stmt = this.conn.prepareStatement("SELECT ID, NAME, ADDRESS, VAT, CITY_ID FROM \"COMPANY\" WHERE NAME = ?")) { + stmt.setString(1, CompanyUtils.normalizeName(name)); + try (final ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + return new Company(rs.getLong(1), rs.getString(2), rs.getString(3), rs.getLong(4),this.cityRepository.findById(rs.getLong(5))); + } + } + return null; + } catch (SQLException e) { + throw new AppGenericException("Error while querying by name for Company", e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/my_app/service/impl/CompanyServiceImpl.java b/src/main/java/com/my_app/service/impl/CompanyServiceImpl.java index 7e2a24d..9fd1925 100644 --- a/src/main/java/com/my_app/service/impl/CompanyServiceImpl.java +++ b/src/main/java/com/my_app/service/impl/CompanyServiceImpl.java @@ -16,8 +16,7 @@ public CompanyServiceImpl(CompanyRepository companyRepository) { @Override public Company save(Company o) { - // TODO Auto-generated method stub - return null; + return companyRepository.save(o); } @Override @@ -28,8 +27,7 @@ public Company findById(Long id) { @Override public List findAll() { - // TODO Auto-generated method stub - return null; + return companyRepository.findAll(); } @Override diff --git a/src/main/java/com/my_app/utils/CompanyUtils.java b/src/main/java/com/my_app/utils/CompanyUtils.java new file mode 100644 index 0000000..4f610e1 --- /dev/null +++ b/src/main/java/com/my_app/utils/CompanyUtils.java @@ -0,0 +1,14 @@ +package com.my_app.utils; + +import static org.apache.commons.lang3.StringUtils.lowerCase; +import static org.apache.commons.lang3.StringUtils.replace; + +public class CompanyUtils { + + private CompanyUtils() {} + + public static String normalizeName(String name) { + return replace(lowerCase(name), " ", "_"); + } + +} diff --git a/src/main/webapp/WEB-INF/struts-config.xml b/src/main/webapp/WEB-INF/struts-config.xml index 6c0c9dd..2349c0c 100644 --- a/src/main/webapp/WEB-INF/struts-config.xml +++ b/src/main/webapp/WEB-INF/struts-config.xml @@ -14,6 +14,8 @@ + + diff --git a/src/main/webapp/company/save/form.jsp b/src/main/webapp/company/save/form.jsp index d031ec9..26bbe9f 100644 --- a/src/main/webapp/company/save/form.jsp +++ b/src/main/webapp/company/save/form.jsp @@ -65,7 +65,7 @@
- @@ -78,7 +78,7 @@
- diff --git a/src/main/webapp/company/save/js/form.js b/src/main/webapp/company/save/js/form.js index 1d528bb..67f9367 100644 --- a/src/main/webapp/company/save/js/form.js +++ b/src/main/webapp/company/save/js/form.js @@ -60,6 +60,7 @@ let countryChangeHandler = () => { } let main = () => { + form.btn.$validate.on('click', btnValidateClickHandler); form.btn.$save.on('click', btnSaveClickHandler); From cfa9a5d2645316ec68b4c11f19f412c23bc8213d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Wed, 10 Apr 2024 08:30:14 +0100 Subject: [PATCH 16/21] feat: Create flow to the logout, add called to the companies in menu --- .../com/my_app/page/logout/LogoutAction.java | 27 +++++++++++++++++++ src/main/webapp/WEB-INF/struts-config.xml | 2 +- src/main/webapp/incl/header.jsp | 3 ++- 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/my_app/page/logout/LogoutAction.java diff --git a/src/main/java/com/my_app/page/logout/LogoutAction.java b/src/main/java/com/my_app/page/logout/LogoutAction.java new file mode 100644 index 0000000..7a71e65 --- /dev/null +++ b/src/main/java/com/my_app/page/logout/LogoutAction.java @@ -0,0 +1,27 @@ +package com.my_app.page.logout; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts.action.Action; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; + +import com.my_app.AppConstants; +import com.my_app.utils.LoginUtils; + +public class LogoutAction extends Action { + + @Override + public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest req, + HttpServletResponse res) throws Exception { + if (LoginUtils.isUserLoggedIn(req.getSession())) { + req.getSession().setAttribute(AppConstants.SESSION_ATTR_KEY_IS_LOGGED_IN, false); + req.getSession().invalidate(); + return mapping.findForward("actionLoginRedir"); + } else { + return mapping.findForward("homePage"); + } + } +} diff --git a/src/main/webapp/WEB-INF/struts-config.xml b/src/main/webapp/WEB-INF/struts-config.xml index 2349c0c..052049c 100644 --- a/src/main/webapp/WEB-INF/struts-config.xml +++ b/src/main/webapp/WEB-INF/struts-config.xml @@ -39,7 +39,7 @@ - + diff --git a/src/main/webapp/incl/header.jsp b/src/main/webapp/incl/header.jsp index 92be318..bbe4e4d 100644 --- a/src/main/webapp/incl/header.jsp +++ b/src/main/webapp/incl/header.jsp @@ -21,13 +21,14 @@
  • From 1f10d8e1589102c1d5392507dc47bfc0516f3a17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=A3o=20Neto?= Date: Wed, 10 Apr 2024 09:24:40 +0100 Subject: [PATCH 17/21] feat: Create a public and a private (must be logged in) static page displaying any information --- .../page/privatePage/PrivatePageAction.java | 26 ++++++++ .../page/publicPage/PublicPageAction.java | 19 ++++++ src/main/webapp/WEB-INF/struts-config.xml | 11 +++- src/main/webapp/incl/header.jsp | 3 + src/main/webapp/privatePage.jsp | 66 +++++++++++++++++++ src/main/webapp/publicPage.jsp | 38 +++++++++++ 6 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/my_app/page/privatePage/PrivatePageAction.java create mode 100644 src/main/java/com/my_app/page/publicPage/PublicPageAction.java create mode 100644 src/main/webapp/privatePage.jsp create mode 100644 src/main/webapp/publicPage.jsp diff --git a/src/main/java/com/my_app/page/privatePage/PrivatePageAction.java b/src/main/java/com/my_app/page/privatePage/PrivatePageAction.java new file mode 100644 index 0000000..08dff4a --- /dev/null +++ b/src/main/java/com/my_app/page/privatePage/PrivatePageAction.java @@ -0,0 +1,26 @@ +package com.my_app.page.privatePage; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts.action.Action; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; + +import com.my_app.utils.LoginUtils; + +public class PrivatePageAction extends Action { + + @Override + public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, + HttpServletResponse response) throws Exception { + + if (LoginUtils.isUserLoggedIn(req.getSession())) { + return mapping.findForward("privatePage"); + } else { + return mapping.findForward("actionLoginRedir"); + } + } + +} diff --git a/src/main/java/com/my_app/page/publicPage/PublicPageAction.java b/src/main/java/com/my_app/page/publicPage/PublicPageAction.java new file mode 100644 index 0000000..b8ac88c --- /dev/null +++ b/src/main/java/com/my_app/page/publicPage/PublicPageAction.java @@ -0,0 +1,19 @@ +package com.my_app.page.publicPage; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts.action.Action; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; + +public class PublicPageAction extends Action { + + @Override + public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest req, + HttpServletResponse res) throws Exception { + return mapping.findForward("publicPage"); + } + +} diff --git a/src/main/webapp/WEB-INF/struts-config.xml b/src/main/webapp/WEB-INF/struts-config.xml index 052049c..753be5e 100644 --- a/src/main/webapp/WEB-INF/struts-config.xml +++ b/src/main/webapp/WEB-INF/struts-config.xml @@ -13,8 +13,7 @@ - - + @@ -22,6 +21,14 @@ + + + + + + + + diff --git a/src/main/webapp/incl/header.jsp b/src/main/webapp/incl/header.jsp index bbe4e4d..ee0f2f2 100644 --- a/src/main/webapp/incl/header.jsp +++ b/src/main/webapp/incl/header.jsp @@ -16,6 +16,9 @@
  • Default
  • With sidebar
  • Full-width fluid
  • + +
  • Public Page
  • +
  • Private Page