فهرست منبع

7th labs: Object-Relational Mapping

m_sudra 3 سال پیش
والد
کامیت
16ed485bf1
18فایلهای تغییر یافته به همراه400 افزوده شده و 5 حذف شده
  1. 35 0
      wpfat_exercises/src/main/java/pl/sudra/configuration/SpringConfiguration.java
  2. 17 1
      wpfat_exercises/src/main/java/pl/sudra/controller/AppUserController.java
  3. 1 1
      wpfat_exercises/src/main/java/pl/sudra/controller/AppUserRoleController.java
  4. 70 0
      wpfat_exercises/src/main/java/pl/sudra/domain/Address.java
  5. 22 0
      wpfat_exercises/src/main/java/pl/sudra/domain/AppUser.java
  6. 39 0
      wpfat_exercises/src/main/java/pl/sudra/domain/Pesel.java
  7. 12 0
      wpfat_exercises/src/main/java/pl/sudra/repository/AddressRepository.java
  8. 15 0
      wpfat_exercises/src/main/java/pl/sudra/service/AddressService.java
  9. 46 0
      wpfat_exercises/src/main/java/pl/sudra/service/AddressServiceImpl.java
  10. 2 0
      wpfat_exercises/src/main/java/pl/sudra/service/AppUserRoleService.java
  11. 2 2
      wpfat_exercises/src/main/java/pl/sudra/service/AppUserServiceImpl.java
  12. 21 0
      wpfat_exercises/src/main/java/pl/sudra/utils/AddressConverter.java
  13. 30 0
      wpfat_exercises/src/main/java/pl/sudra/utils/AppUserRoleConverter.java
  14. 34 0
      wpfat_exercises/src/main/java/pl/sudra/utils/AppUserRoleListConverter.java
  15. 21 0
      wpfat_exercises/src/main/webapp/appUser.jsp
  16. 12 1
      wpfat_exercises/src/main/webapp/resources/i18n/messages_de.properties
  17. 11 0
      wpfat_exercises/src/main/webapp/resources/i18n/messages_en.properties
  18. 10 0
      wpfat_exercises/src/main/webapp/resources/i18n/messages_pl.properties

+ 35 - 0
wpfat_exercises/src/main/java/pl/sudra/configuration/SpringConfiguration.java

@@ -1,10 +1,12 @@
 package pl.sudra.configuration;
 
+import jakarta.annotation.Resource;
 import org.springframework.context.MessageSource;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.support.ReloadableResourceBundleMessageSource;
+import org.springframework.format.FormatterRegistry;
 import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
 import org.springframework.web.servlet.LocaleResolver;
 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@@ -14,6 +16,11 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import org.springframework.web.servlet.i18n.CookieLocaleResolver;
 import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
 import org.springframework.web.servlet.view.InternalResourceViewResolver;
+import pl.sudra.service.AddressService;
+import pl.sudra.service.AppUserRoleService;
+import pl.sudra.utils.AddressConverter;
+import pl.sudra.utils.AppUserRoleConverter;
+import pl.sudra.utils.AppUserRoleListConverter;
 
 import java.time.Duration;
 import java.util.Locale;
@@ -67,4 +74,32 @@ public class SpringConfiguration implements WebMvcConfigurer {
         bean.setValidationMessageSource(messageSource());
         return bean;
     }
+
+    @Resource(name = "addressService")
+    private AddressService addressService;
+
+    @Resource(name = "appUserRoleService")
+    private AppUserRoleService appUserRoleService;
+
+    @Override
+    public void addFormatters(FormatterRegistry formatterRegistry) {
+        formatterRegistry.addConverter(getMyAddressConverter());
+        formatterRegistry.addConverter(getMyUserRoleConverter());
+        formatterRegistry.addConverter(getMyUserRoleListConverter());
+    }
+
+    @Bean
+    public AddressConverter getMyAddressConverter() {
+        return new AddressConverter(addressService);
+    }
+
+    @Bean
+    public AppUserRoleConverter getMyUserRoleConverter() {
+        return new AppUserRoleConverter(appUserRoleService);
+    }
+
+    @Bean
+    public AppUserRoleListConverter getMyUserRoleListConverter() {
+        return new AppUserRoleListConverter(appUserRoleService);
+    }
 }

+ 17 - 1
wpfat_exercises/src/main/java/pl/sudra/controller/AppUserController.java

@@ -12,14 +12,21 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import pl.sudra.domain.AppUser;
+import pl.sudra.service.AppUserRoleService;
 import pl.sudra.service.AppUserService;
+import pl.sudra.service.AddressService;
 import pl.sudra.validator.AppUserValidator;
 
 @Controller
 public class AppUserController {
     private AppUserValidator appUserValidator = new AppUserValidator();
 
+    @Autowired
     private AppUserService appUserService;
+    @Autowired
+    private AppUserRoleService appUserRoleService;
+    @Autowired
+    private AddressService addressService;
 
     @Autowired
     public AppUserController(AppUserService appUserService) {
@@ -29,11 +36,20 @@ public class AppUserController {
     @RequestMapping(value = "/appUsers")
     public String showAppUsers(Model model, HttpServletRequest request) {
         int appUserId = ServletRequestUtils.getIntParameter(request, "appUserId", -1);
+
         if (appUserId > 0) {
-            model.addAttribute("appUser", appUserService.getAppUser(appUserId));
+            AppUser appUser = appUserService.getAppUser(appUserId);
+            appUser.setPassword("");
+            appUser.setAddress(addressService.getAddress(appUserService.getAppUser(appUserId).getAddress().getId()));
+            model.addAttribute("selectedAddress", appUserService.getAppUser(appUserId).getAddress().getId());
+            model.addAttribute("appUser", appUser);
         } else
             model.addAttribute("appUser", new AppUser());
+
         model.addAttribute("appUserList", appUserService.listAppUser());
+        model.addAttribute("appUserRoleList", appUserRoleService.listAppUserRole());
+        model.addAttribute("addressesList", addressService.listAddress());
+
         return "appUser";
     }
 

+ 1 - 1
wpfat_exercises/src/main/java/pl/sudra/controller/AppUserRoleController.java

@@ -28,6 +28,6 @@ public class AppUserRoleController {
     @RequestMapping(value = "/addAppUserRole", method = RequestMethod.POST)
     public String addUserRole(@ModelAttribute("appUserRole") AppUserRole appUserRole, BindingResult result) {
         appUserRoleService.addAppUserRole(appUserRole);
-        return "redirect:appUsers.html";
+        return "redirect:appUsers";
     }
 }

+ 70 - 0
wpfat_exercises/src/main/java/pl/sudra/domain/Address.java

@@ -0,0 +1,70 @@
+package pl.sudra.domain;
+
+import jakarta.persistence.*;
+
+import java.util.List;
+
+@Entity
+public class Address {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    long id;
+
+    private String city;
+    private String street;
+    private String number;
+    private String postalCode;
+
+    @OneToMany(mappedBy = "address")
+//    @JoinTable(name = "appuser_address", joinColumns = @JoinColumn(name = "appuser_id"), inverseJoinColumns = @JoinColumn(name = "address_id"))
+    private List<AppUser> appUserList;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getStreet() {
+        return street;
+    }
+
+    public void setStreet(String street) {
+        this.street = street;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+
+    public String getPostalCode() {
+        return postalCode;
+    }
+
+    public void setPostalCode(String postalCode) {
+        this.postalCode = postalCode;
+    }
+
+    public List<AppUser> getAppUserList() {
+        return appUserList;
+    }
+
+    public void setAppUserList(List<AppUser> appUserList) {
+        this.appUserList = appUserList;
+    }
+}

+ 22 - 0
wpfat_exercises/src/main/java/pl/sudra/domain/AppUser.java

@@ -42,6 +42,20 @@ public class AppUser {
     @ManyToMany(fetch = FetchType.EAGER)
     private Set<AppUserRole> appUserRole = new HashSet<AppUserRole>(0);
 
+    @OneToOne(cascade = CascadeType.ALL)
+    private Pesel pesel;
+
+    @ManyToOne
+    private Address address;
+
+    public Address getAddress() {
+        return address;
+    }
+
+    public void setAddress(Address address) {
+        this.address = address;
+    }
+
     public long getId() {
         return id;
     }
@@ -113,4 +127,12 @@ public class AppUser {
     public void setAppUserRole(Set<AppUserRole> appUserRole) {
         this.appUserRole = appUserRole;
     }
+
+    public Pesel getPesel() {
+        return pesel;
+    }
+
+    public void setPesel(Pesel pesel) {
+        this.pesel = pesel;
+    }
 }

+ 39 - 0
wpfat_exercises/src/main/java/pl/sudra/domain/Pesel.java

@@ -0,0 +1,39 @@
+package pl.sudra.domain;
+
+import jakarta.persistence.*;
+
+@Entity
+public class Pesel {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    long id;
+
+    String PESEL;
+
+    @OneToOne(mappedBy="pesel")
+    private AppUser appUser;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getPESEL() {
+        return PESEL;
+    }
+
+    public void setPESEL(String PESEL) {
+        this.PESEL = PESEL;
+    }
+
+    public AppUser getAppUser() {
+        return appUser;
+    }
+
+    public void setAppUser(AppUser appUser) {
+        this.appUser = appUser;
+    }
+}

+ 12 - 0
wpfat_exercises/src/main/java/pl/sudra/repository/AddressRepository.java

@@ -0,0 +1,12 @@
+package pl.sudra.repository;
+
+import jakarta.transaction.Transactional;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import pl.sudra.domain.Address;
+
+@Transactional
+@Repository
+public interface AddressRepository extends JpaRepository<Address, Long> {
+    Address findById(long id);
+}

+ 15 - 0
wpfat_exercises/src/main/java/pl/sudra/service/AddressService.java

@@ -0,0 +1,15 @@
+package pl.sudra.service;
+
+import pl.sudra.domain.Address;
+
+import java.util.List;
+
+public interface AddressService {
+
+	public void addAddress(Address address);
+	public void editAddress(Address address);
+	public List<Address> listAddress();
+	public void removeAddress(long id);
+	public Address getAddress(long id);
+	
+}

+ 46 - 0
wpfat_exercises/src/main/java/pl/sudra/service/AddressServiceImpl.java

@@ -0,0 +1,46 @@
+package pl.sudra.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import pl.sudra.repository.AddressRepository;
+import pl.sudra.domain.Address;
+import java.util.List;
+
+@Service("addressService")
+@Transactional
+public class AddressServiceImpl implements AddressService{
+
+	private AddressRepository addressRepository;
+
+	@Autowired
+	public AddressServiceImpl(AddressRepository addressRepository) {
+		this.addressRepository = addressRepository;
+	}
+	
+	@Transactional
+	public void addAddress(Address address) {
+		addressRepository.save(address);
+	}
+	
+	@Transactional
+	public void editAddress(Address address) {
+		addressRepository.save(address);
+	}
+
+	@Transactional
+	public List<Address> listAddress() {
+		return addressRepository.findAll();
+	}
+
+	@Transactional
+	public void removeAddress(long id) {
+		addressRepository.deleteById(id);
+	}
+	
+	@Transactional
+	public Address getAddress(long id) {
+		return addressRepository.findById(id);
+	}
+}
+

+ 2 - 0
wpfat_exercises/src/main/java/pl/sudra/service/AppUserRoleService.java

@@ -6,6 +6,8 @@ import java.util.List;
 
 public interface AppUserRoleService {
     void addAppUserRole(AppUserRole appUserRole);
+
     List<AppUserRole> listAppUserRole();
+
     AppUserRole getAppUserRole(long id);
 }

+ 2 - 2
wpfat_exercises/src/main/java/pl/sudra/service/AppUserServiceImpl.java

@@ -28,14 +28,14 @@ public class AppUserServiceImpl implements AppUserService {
 
     @Transactional
     public void addAppUser(AppUser appUser) {
-        appUser.getAppUserRole().add(appUserRoleRepository.findByRole("ROLE_USER"));
+//        appUser.getAppUserRole().add(appUserRoleRepository.findByRole("ROLE_USER"));
         appUser.setPassword(passwordEncoder.encode(appUser.getPassword()));
         appUserRepository.save(appUser);
     }
 
     @Transactional
     public void editAppUser(AppUser appUser) {
-        appUser.getAppUserRole().add(appUserRoleRepository.findByRole("ROLE_USER"));
+//        appUser.getAppUserRole().add(appUserRoleRepository.findByRole("ROLE_USER"));
         appUser.setPassword(passwordEncoder.encode(appUser.getPassword()));
         appUserRepository.save(appUser);
     }

+ 21 - 0
wpfat_exercises/src/main/java/pl/sudra/utils/AddressConverter.java

@@ -0,0 +1,21 @@
+package pl.sudra.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.convert.converter.Converter;
+import pl.sudra.domain.Address;
+import pl.sudra.service.AddressService;
+
+public class AddressConverter implements Converter<String, Address> {
+
+    private AddressService addressService;
+
+//    @Autowired
+    public AddressConverter(AddressService addressService) {
+        this.addressService = addressService;
+    }
+
+    @Override
+    public Address convert(String source) {
+        return addressService.getAddress(Integer.parseInt(source));
+    }
+}

+ 30 - 0
wpfat_exercises/src/main/java/pl/sudra/utils/AppUserRoleConverter.java

@@ -0,0 +1,30 @@
+package pl.sudra.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.convert.converter.Converter;
+import pl.sudra.domain.AppUserRole;
+import pl.sudra.service.AppUserRoleService;
+import pl.sudra.service.AppUserService;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class AppUserRoleConverter implements Converter<String, Set<AppUserRole>> {
+
+    private AppUserRoleService appUserRoleService;
+
+//    @Autowired
+    public AppUserRoleConverter(AppUserRoleService appUserRoleService) {
+        this.appUserRoleService = appUserRoleService;
+    }
+
+    @Override
+    public Set<AppUserRole> convert(String source) {
+
+        Set<AppUserRole> userRoleList = new HashSet<AppUserRole>(0);
+
+        userRoleList.add(appUserRoleService.getAppUserRole(Integer.parseInt(source)));
+
+        return userRoleList;
+    }
+}

+ 34 - 0
wpfat_exercises/src/main/java/pl/sudra/utils/AppUserRoleListConverter.java

@@ -0,0 +1,34 @@
+package pl.sudra.utils;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.convert.converter.Converter;
+import pl.sudra.domain.AppUserRole;
+import pl.sudra.service.AppUserRoleService;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class AppUserRoleListConverter implements Converter<String[], Set<AppUserRole>> {
+
+    private AppUserRoleService appUserRoleService;
+
+//    @Autowired
+    public AppUserRoleListConverter(AppUserRoleService appUserRoleService) {
+        this.appUserRoleService = appUserRoleService;
+    }
+
+    @Override
+    public Set<AppUserRole> convert(String[] source) {
+
+        Set<AppUserRole> userRoleList = new HashSet<AppUserRole>(0);
+
+        for (int i=0; i < source.length; i++)
+        {
+            //System.out.println("role id: " + source[i]);
+            userRoleList.add(appUserRoleService.getAppUserRole(Integer.parseInt(source[i])));
+        }
+
+        return userRoleList;
+    }
+}

+ 21 - 0
wpfat_exercises/src/main/webapp/appUser.jsp

@@ -46,11 +46,32 @@
             <td><form:input path="lastName"/></td>
             <td><form:errors path="lastName"/></td>
         </tr>
+        <tr>
+            <td><form:label path="pesel.PESEL"><spring:message code="label.pesel"/></form:label></td>
+            <td><form:input path="pesel.PESEL"/></td>
+            <td><form:errors path="pesel"/></td>
+        </tr>
+        <tr>
+            <td><form:label path="address"><spring:message code="label.address"/></form:label></td>
+            <td><form:select path="address">
+                <c:forEach items="${addressesList}" var="address">
+                    <option value="${address.id}" ${address.id == selectedAddress ? 'selected="selected"' : ''}>${address.street}</option>
+                </c:forEach>
+            </form:select></td>
+            <td><form:errors path="address"/></td>
+        </tr>
         <tr>
             <td><form:label path="email"><spring:message code="label.email"/></form:label></td>
             <td><form:input path="email"/></td>
             <td><form:errors path="email"/></td>
         </tr>
+        <tr>
+            <td><form:label path="appUserRole"><spring:message code="label.role"/></form:label></td>
+            <td><form:select path="appUserRole" multiple="true">
+                <form:options items="${appUserRoleList}" itemValue="id" itemLabel="role"/>
+            </form:select></td>
+            <td><form:errors path="appUserRole"/></td>
+        </tr>
         <tr>
             <td><form:label path="telephone"><spring:message code="label.telephone"/></form:label></td>
             <td><form:input path="telephone"/></td>

+ 12 - 1
wpfat_exercises/src/main/webapp/resources/i18n/messages_de.properties

@@ -18,4 +18,15 @@ label.login         =   Login
 label.password      =   Passwort
 label.enabled       =   Aktiv
 label.role          =   Benutzerrolle
-label.addAppUserRole=   Benutzerrolle hinzuf&#252;gen
+label.addAppUserRole=   Benutzerrolle hinzuf&#252;gen
+label.pesel         =   PESEL
+
+label.titleAddress  =   Addressen
+label.addressList   =   Adressliste
+label.address       =   Adresse
+label.street        =   Strasse
+label.number        =   Nummer
+label.city          =   Stadt
+label.postalCode    =   Postleitzahl
+label.addAddress    =   Addresse hinzuf#252;gen
+label.editAddress   =   Addresse bearbeiten

+ 11 - 0
wpfat_exercises/src/main/webapp/resources/i18n/messages_en.properties

@@ -19,3 +19,14 @@ label.password      =   Password
 label.enabled       =   Active
 label.role          =   Role
 label.addAppUserRole=   Add user role
+label.pesel         =   PESEL
+
+label.titleAddress  =   Addresses
+label.addressList   =   List of addresses
+label.address       =   Address
+label.street        =   Street
+label.number        =   Number
+label.city          =   City
+label.postalCode    =   Postal code
+label.addAddress    =   Add address
+label.editAddress   =   Edit address

+ 10 - 0
wpfat_exercises/src/main/webapp/resources/i18n/messages_pl.properties

@@ -19,4 +19,14 @@ label.password      =   Hasło
 label.enabled       =   Aktywny
 label.role          =   Rola
 label.addAppUserRole=   Dodaj rolę użytkownika
+label.pesel         =   PESEL
 
+label.titleAddress  =   Adresy
+label.addressList   =   Lista adresów
+label.address       =   Adres
+label.street        =   Ulica
+label.number        =   Numer
+label.city          =   Miejscowość
+label.postalCode    =   Kod pocztowy
+label.addAddress    =   Dodaj adres
+label.editAddress   =   Edytuj adres