Source Code For Phase End Project Vaccination Center - Compressed
Source Code For Phase End Project Vaccination Center - Compressed
ServletInitializer.java (src/main/java/com.example.vaccinationcenter) :
package com.example.vaccinationcenter;
import org.springframework.boot.builder.SpringApplicationBuilder;
import
org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder
application) {
return application.sources(VaccinationCenterApplication.class);
}
VaccinationCenterApplication.java (src/main/java/com.example.vaccinationcenter) :
package com.example.vaccinationcenter;
import com.example.vaccinationcenter.entities.Citizen;
import com.example.vaccinationcenter.entities.VaccinationCenter;
import com.example.vaccinationcenter.repository.CitizenRepository;
import com.example.vaccinationcenter.repository.VaccinationCenterRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class VaccinationCenterApplication implements CommandLineRunner {
@Autowired
private CitizenRepository citizenRepository;
@Autowired
private VaccinationCenterRepository vaccinationCenterRepository;
@Override
public void run(String... args) throws Exception {
Citizen citizen = new Citizen();
citizen.setCity("CITY_1");
citizen.setName("NAME_1");
citizenRepository.save(citizen);
vaccinationCenterRepository.save(vc);
citizen.setCenter(vc);
citizenRepository.save(citizen);
}
}
CustomExceptionHandler.java (src/main/java/com.example.vaccinationcenter.advice) :
package com.example.vaccinationcenter.advice;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.Collections;
import java.util.Comparator;
@RestControllerAdvice
public class CustomExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ValidationErrorResponse>
handleValidationException(MethodArgumentNotValidException ex) {
ValidationErrorResponse validationErrorResponse = new
ValidationErrorResponse();
ex.getBindingResult().getFieldErrors().forEach(error -> {
validationErrorResponse.addError(error.getField(),
error.getDefaultMessage());
});
Collections.sort(validationErrorResponse.getErrors(),
Comparator.comparing(ValidationErrorResponse.ErrorDetail::getField));
return
ResponseEntity.status(HttpStatus.BAD_REQUEST).body(validationErrorResponse);
}
// Other exception handlers can be added here
ValidationErrorResponse.java (src/main/java/com.example.vaccinationcenter.advice) :
package com.example.vaccinationcenter.advice;
import java.util.ArrayList;
import java.util.List;
FilterConfig.java (src/main/java/com.example.vaccinationcenter.config) :
package com.example.vaccinationcenter.config;
import com.example.vaccinationcenter.filter.UserAuthenticationFilter;
import com.example.vaccinationcenter.repository.UserRepository;
import jakarta.servlet.DispatcherType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<UserAuthenticationFilter>
registrationFilter(@Autowired UserRepository userRepository) {
FilterRegistrationBean<UserAuthenticationFilter> registrationBean =
new FilterRegistrationBean<>();
registrationBean.setFilter(new
UserAuthenticationFilter(userRepository));
registrationBean.addUrlPatterns("/citizens","/citizens/*","/vaccinatio
ncenter","/vaccinationcenter/*","/me");
registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
registrationBean.setDispatcherTypes(DispatcherType.REQUEST);
return registrationBean;
}
}
AuthenticateController.java (src/main/java/com.example.vaccinationcenter.controllers) :
package com.example.vaccinationcenter.controllers;
import com.example.vaccinationcenter.dtos.LoginRequestDto;
import com.example.vaccinationcenter.dtos.LoginResponse;
import com.example.vaccinationcenter.dtos.RegistrationRequestDto;
import com.example.vaccinationcenter.entities.User;
import com.example.vaccinationcenter.repository.UserRepository;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Objects;
@RestController
@RequestMapping
public class AuthenticateController {
@Autowired
private UserRepository userRepository;
byte emailBytes[] =
Base64.getDecoder().decode(authorizationHeader.getBytes(StandardCharsets.UTF_8
));
String email = new String(emailBytes);
User user = userRepository.findByEmail(email);
if (user == null) {
throw new RuntimeException("user not found with email: " + email);
}
}
}
CitizenController.java (src/main/java/com.example.vaccinationcenter.controllers) :
package com.example.vaccinationcenter.controllers;
import com.example.vaccinationcenter.dtos.CitizenDto;
import com.example.vaccinationcenter.entities.Citizen;
import com.example.vaccinationcenter.entities.VaccinationCenter;
import com.example.vaccinationcenter.repository.CitizenRepository;
import com.example.vaccinationcenter.services.VaccinationCenterService;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
@RestController
@RequestMapping(value = "citizens", produces = "application/json")
public class CitizenController {
@Autowired
private CitizenRepository citizenRepository;
@Autowired
private VaccinationCenterService vaccinationCenterService;
@GetMapping("/{id}")
public Citizen findCitizen(@PathVariable long id) {
return citizenRepository.findById(id).get();
}
@GetMapping()
public List<Citizen> findCitizens() {
List<Citizen> citizens =
StreamSupport.stream(citizenRepository.findAll().spliterator(), false)
.collect(Collectors.toList());
return citizens;
}
@PostMapping
public Citizen addCitizen(@Valid @RequestBody CitizenDto citizenDto) {
Citizen citizen = new Citizen();
VaccinationCenter vaccinationCenter =
vaccinationCenterService.getVaccinationCenter(citizenDto.getCenterId());
citizen.setName(citizenDto.getName());
citizen.setCity(citizenDto.getCity());
citizen.setCenter(vaccinationCenter);
return citizenRepository.save(citizen);
}
@PutMapping
public Citizen updateCitizen( @Valid @RequestBody CitizenDto citizenDto) {
long centerId = citizenDto.getCenterId();
VaccinationCenter vaccinationCenter =
vaccinationCenterService.getVaccinationCenter(centerId);
Citizen citizen = findCitizen(citizenDto.getId());
citizen.setCenter(vaccinationCenter);
citizen.setName(citizenDto.getName());
citizen.setCity(citizenDto.getCity());
citizen.setDoesCount(citizenDto.getDoesCount());
return citizenRepository.save(citizen);
}
@DeleteMapping("/{id}")
public Boolean deleteCitizen(@PathVariable long id) {
citizenRepository.deleteById(id);
return true;
}
@GetMapping("/center/{centerId}")
public List<Citizen> findByCenterId(@PathVariable long centerId) {
return citizenRepository.findAllByCenterId(centerId);
}
}
VaccinationCenterController.java
(src/main/java/com.example.vaccinationcenter.controllers) :
package com.example.vaccinationcenter.controllers;
import com.example.vaccinationcenter.dtos.VaccinationCenterDto;
import com.example.vaccinationcenter.entities.VaccinationCenter;
import com.example.vaccinationcenter.services.VaccinationCenterService;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping(value = "vaccinationcenter", produces = "application/json")
public class VaccinationCenterController {
@Autowired
private VaccinationCenterService vaccinationCenterService;
@GetMapping("/{id}")
public VaccinationCenter findVaccinationCenter(@PathVariable long id) {
return vaccinationCenterService.getVaccinationCenter(id);
}
@DeleteMapping("/{id}")
public boolean deleteVaccinationCenter(@PathVariable long id) {
return vaccinationCenterService.delete(id);
}
@GetMapping()
public List<VaccinationCenter> findVaccinationCenters() {
return vaccinationCenterService.getVaccinationCenters();
}
@PostMapping
public VaccinationCenter addNewVaccinationCenter(@Valid @RequestBody
VaccinationCenterDto vaccinationCenterDto) {
@PutMapping
public VaccinationCenter updateVaccinationCenter(@Valid @RequestBody
VaccinationCenterDto vaccinationCenterDto) {
VaccinationCenter vaccinationCenter = vaccinationCenterService.
getVaccinationCenter(vaccinationCenterDto.getId());
vaccinationCenter.setName(vaccinationCenterDto.getName());
vaccinationCenter.setAddress(vaccinationCenterDto.getCity());
return vaccinationCenterService.addOrUpdate(vaccinationCenter);
}
}
ViewController.java (src/main/java/com.example.vaccinationcenter.controllers) :
package com.example.vaccinationcenter.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@Controller
public class ViewController {
@GetMapping("citizens")
public String citizensPage() {
return "citizens";
}
@GetMapping("citizens/{id}")
public String citizensPage(@PathVariable int id, Model model) {
model.addAttribute("id", id);
return "view_citizen";
}
@GetMapping("citizens/center/{id}")
public String citizensPageByCenterId(@PathVariable int id, Model model) {
model.addAttribute("id", id);
return "citizen_center";
}
@GetMapping("vaccinationcenter/{id}")
public String vaccinationcenterByCenterId(@PathVariable int id, Model model)
{
model.addAttribute("id", id);
return "citizen_center";
}
@GetMapping("vaccinationcenter")
public String vaccinationCenterPage() {
return "vaccination_center";
}
@GetMapping(value = {"/","/login"})
public String loginPage() {
return "login";
}
@GetMapping("/register")
public String registrationPage() {
return "register";
}
}
CitizenDto.java (src/main/java/com.example.vaccinationcenter.dtos) :
package com.example.vaccinationcenter.dtos;
import com.example.vaccinationcenter.entities.Citizen;
import com.example.vaccinationcenter.validators.antn.CitizenValidator;
@CitizenValidator
public class CitizenDto {
LoginRequestDto.java (src/main/java/com.example.vaccinationcenter.dtos) :
package com.example.vaccinationcenter.dtos;
LoginResponse.java (src/main/java/com.example.vaccinationcenter.dtos) :
package com.example.vaccinationcenter.dtos;
RegistrationRequestDto.java (src/main/java/com.example.vaccinationcenter.dtos) :
package com.example.vaccinationcenter.dtos;
import
com.example.vaccinationcenter.validators.antn.RegistrationRequestValidator;
@RegistrationRequestValidator
public class RegistrationRequestDto extends LoginRequestDto {
private String name;
VaccinationCenterDto.java (src/main/java/com.example.vaccinationcenter.dtos) :
package com.example.vaccinationcenter.dtos;
import
com.example.vaccinationcenter.validators.antn.VaccinationCenterValidator;
@VaccinationCenterValidator
public class VaccinationCenterDto {
Citizen.java (src/main/java/com.example.vaccinationcenter.entities) :
package com.example.vaccinationcenter.entities;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Transient;
@Entity(name = "TBL_CITIZEN")
public class Citizen {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Transient
private String vaccinationStatus;
User.java (src/main/java/com.example.vaccinationcenter.entities) :
package com.example.vaccinationcenter.entities;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity(name = "TBL_USER")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
VaccinationCenter.java (src/main/java/com.example.vaccinationcenter.entities) :
package com.example.vaccinationcenter.entities;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import java.util.List;
@Entity(name = "TBL_VACCINATION_CENTER")
public class VaccinationCenter {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
UserAuthenticationFilter.java (src/main/java/com.example.vaccinationcenter.filter) :
package com.example.vaccinationcenter.filter;
import com.example.vaccinationcenter.entities.User;
import com.example.vaccinationcenter.repository.UserRepository;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashSet;
import java.util.Set;
public class UserAuthenticationFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain) throws IOException, ServletException
{
boolean flag = validateToken((HttpServletRequest) servletRequest,
(HttpServletResponse) servletResponse);
if(!flag){
return;
}
filterChain.doFilter(servletRequest,servletResponse);
}
if(!Boolean.valueOf(api))
{
return true;
}
@Override
public void destroy() {
Filter.super.destroy();
}
System.out.println(baseUrl);
return baseUrl;
}
}
CitizenRepository.java (src/main/java/com.example.vaccinationcenter.repository) :
package com.example.vaccinationcenter.repository;
import com.example.vaccinationcenter.entities.Citizen;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
UserRepository.java (src/main/java/com.example.vaccinationcenter.repository) :
package com.example.vaccinationcenter.repository;
import com.example.vaccinationcenter.entities.User;
import org.springframework.data.repository.CrudRepository;
VaccinationCenterRepository.java
(src/main/java/com.example.vaccinationcenter.repository) :
package com.example.vaccinationcenter.repository;
import com.example.vaccinationcenter.entities.Citizen;
import com.example.vaccinationcenter.entities.VaccinationCenter;
import org.springframework.data.repository.CrudRepository;
VaccinationCenterService.java (src/main/java/com.example.vaccinationcenter.services) :
package com.example.vaccinationcenter.services;
import com.example.vaccinationcenter.entities.Citizen;
import com.example.vaccinationcenter.entities.VaccinationCenter;
import com.example.vaccinationcenter.repository.CitizenRepository;
import com.example.vaccinationcenter.repository.VaccinationCenterRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
@Service
public class VaccinationCenterService {
@Autowired
private VaccinationCenterRepository vaccinationCenterRepository;
@Autowired
private CitizenRepository citizenRepository;
return vaccinationCenters;
vaccinationCenterRepository.delete(vaccinationCenter);
return true;
}
public VaccinationCenter getVaccinationCenter(long id) {
return vaccinationCenterRepository.findById(id).get();
}
}
CitizenValidator.java (src/main/java/com.example.vaccinationcenter.validators.antn) :
package com.example.vaccinationcenter.validators.antn;
import com.example.vaccinationcenter.validators.impl.CitizenDtoValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Constraint(validatedBy = {CitizenDtoValidator.class})
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CitizenValidator {
String message() default "Invalid Vaccination center data";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
LoginRequestValidator.java
(src/main/java/com.example.vaccinationcenter.validators.antn) :
package com.example.vaccinationcenter.validators.antn;
import com.example.vaccinationcenter.validators.impl.CitizenDtoValidator;
import com.example.vaccinationcenter.validators.impl.LoginRequestDtoValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Constraint(validatedBy = {LoginRequestDtoValidator.class})
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequestValidator {
String message() default "Invalid Login Request data";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
RegistrationRequestValidator.java
(src/main/java/com.example.vaccinationcenter.validators.antn) :
package com.example.vaccinationcenter.validators.antn;
import com.example.vaccinationcenter.validators.impl.LoginRequestDtoValidator;
import
com.example.vaccinationcenter.validators.impl.RegistrationRequestDtoValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Constraint(validatedBy = {RegistrationRequestDtoValidator.class})
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RegistrationRequestValidator {
String message() default "Invalid Registration quest data";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
VaccinationCenterValidator.java
(src/main/java/com.example.vaccinationcenter.validators.antn) :
package com.example.vaccinationcenter.validators.antn;
import
com.example.vaccinationcenter.validators.impl.VaccinationCenterDtoValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy = {VaccinationCenterDtoValidator.class})
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface VaccinationCenterValidator {
String message() default "Invalid Vaccination center data";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
CitizenDtoValidator.java (src/main/java/com.example.vaccinationcenter.validators.impl) :
package com.example.vaccinationcenter.validators.impl;
import com.example.vaccinationcenter.dtos.CitizenDto;
import com.example.vaccinationcenter.dtos.VaccinationCenterDto;
import com.example.vaccinationcenter.entities.Citizen;
import com.example.vaccinationcenter.entities.VaccinationCenter;
import com.example.vaccinationcenter.validators.antn.CitizenValidator;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import org.apache.commons.lang3.StringUtils;
@Override
public boolean isValid(CitizenDto dto, ConstraintValidatorContext context)
{
return getRequestDtoValidator(dto).validate(dto, context);
}
@Override
public void initialize(CitizenValidator constraintAnnotation) {
}
return null;
}
if (StringUtils.isBlank(citizen.getName())) {
flag = false;
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("Citizen name
required").addPropertyNode("name")
.addConstraintViolation();
}
if (StringUtils.isBlank(citizen.getCity())) {
flag = false;
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("Citizen city
required").addPropertyNode("city")
.addConstraintViolation();
}
return flag;
}
}
@Override
public boolean validate(CitizenDto citizen, ConstraintValidatorContext
context) {
boolean flag = super.validate(citizen, context);
if (citizen.getCenterId() < 1) {
flag = false;
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("vaccine centerId
should be greater than 0")
.addPropertyNode("centerId").addConstraintViolation();
if (citizen.getId() < 1) {
flag = false;
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("citizen Id
should be greater than 0")
.addPropertyNode("id").addConstraintViolation();
}
return flag;
}
}
}
LoginRequestDtoValidator.java
(src/main/java/com.example.vaccinationcenter.validators.impl) :
package com.example.vaccinationcenter.validators.impl;
import com.example.vaccinationcenter.dtos.CitizenDto;
import com.example.vaccinationcenter.dtos.LoginRequestDto;
import com.example.vaccinationcenter.validators.antn.CitizenValidator;
import com.example.vaccinationcenter.validators.antn.LoginRequestValidator;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import org.apache.commons.lang3.StringUtils;
@Override
public boolean isValid(LoginRequestDto value, ConstraintValidatorContext
context) {
boolean flag = true;
if(StringUtils.isBlank(value.getEmail()))
{
flag = false;
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("email required")
.addPropertyNode("email").addConstraintViolation();
}
if(StringUtils.isBlank(value.getPassword()))
{
flag = false;
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("password required")
.addPropertyNode("password").addConstraintViolation();
}
return flag;
}
@Override
public void initialize(LoginRequestValidator constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
}
}
RegistrationRequestDtoValidator.java
(src/main/java/com.example.vaccinationcenter.validators.impl) :
package com.example.vaccinationcenter.validators.impl;
import com.example.vaccinationcenter.dtos.LoginRequestDto;
import com.example.vaccinationcenter.dtos.RegistrationRequestDto;
import com.example.vaccinationcenter.validators.antn.LoginRequestValidator;
import
com.example.vaccinationcenter.validators.antn.RegistrationRequestValidator;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import org.apache.commons.lang3.StringUtils;
@Override
public boolean isValid(RegistrationRequestDto value,
ConstraintValidatorContext context) {
boolean flag = true;
if (StringUtils.isBlank(value.getName())) {
flag = false;
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("name required")
.addPropertyNode("name")
.addConstraintViolation();
return flag;
}
@Override
public void initialize(RegistrationRequestValidator constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
}
}
RequestDtoValidator.java (src/main/java/com.example.vaccinationcenter.validators.impl) :
package com.example.vaccinationcenter.validators.impl;
import jakarta.validation.ConstraintValidatorContext;
VaccinationCenterDtoValidator.java
(src/main/java/com.example.vaccinationcenter.validators.impl) :
package com.example.vaccinationcenter.validators.impl;
import com.example.vaccinationcenter.dtos.VaccinationCenterDto;
import
com.example.vaccinationcenter.validators.antn.VaccinationCenterValidator;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import org.springframework.util.StringUtils;
import java.util.function.Predicate;
@Override
public void initialize(VaccinationCenterValidator constraintAnnotation) {
// Initialization logic, if needed
}
@Override
public boolean isValid(VaccinationCenterDto dto, ConstraintValidatorContext
context) {
RequestDtoValidator<VaccinationCenterDto> validator =
getRequestDtoValidator(dto);
if (validator == null)
return true;
return null;
}
if (!StringUtils.hasText(center.getName())) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("Center Name
Required").addPropertyNode("name")
.addConstraintViolation();
flag = false;
}
Predicate<VaccinationCenterDto> validateNameLength =
(VaccinationCenterDto center1) -> {
return center1.getName().length() > 4 && center1.getName().length() <
60;
};
if (validateNameLength.negate().test(center)) {
context.disableDefaultConstraintViolation();
context.
buildConstraintViolationWithTemplate("Center Name Should be
between 4 and 60 characters").addPropertyNode("name")
.addConstraintViolation();
flag = false;
}
if (!StringUtils.hasText(center.getCity())) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("Center City
Required").addPropertyNode("city")
.addConstraintViolation();
flag = false;
}
Predicate<VaccinationCenterDto> validateAddressLength =
(VaccinationCenterDto center1) -> {
return center1.getCity().length() > 3 && center1.getCity().length() <
100;
};
if (validateAddressLength.negate().test(center)) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("Center City Should be
between 15 and 100 characters").addPropertyNode("city")
.addConstraintViolation();
flag = false;
}
return flag;
}
}
@Override
public boolean validate(VaccinationCenterDto dto,
ConstraintValidatorContext context) {
boolean flag = super.validate(dto, context);
if (dto.getId() < 1) {
flag = false;
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("center Id should be
greater than 0")
.addPropertyNode("id")
.addConstraintViolation();
}
return flag;
}
}
}
script.js (src/main/resources/static) :
console.log("Hello World");
let citizenApi = {
list: citizenList,
edit: bindCitizenWithCallback,
view: bindCitizenWithCallback,
delete: deleteCitizen,
};
function getBaseUrl() {
let baseUrl = document.getElementById("baseUrl");
return baseUrl.value;
}
function logout() {
localStorage.removeItem("token");
window.location.href = getBaseUrl() + "/login";
}
function redirectToLogin(response) {
if (response.status == 302) {
logout();
}
}
function getHeaders() {
console.log(localStorage.getItem("token"));
let headers = {
"Content-Type": "application/json",
Accept: "application/json",
"x-api": true,
};
let authToken = localStorage.getItem("token");
if (authToken) {
headers.authorization = authToken;
}
return headers;
}
function citizenList() {
if (document.title !== "Citizens") {
return;
}
display("citizenView", "none");
display("citizenDetails", "block");
display("citizenEdit", "none");
if (response.ok) {
return response.json();
} else {
throw new Error("Error retrieving citizen data.");
}
})
.then(function (citizens) {
// Populate the table with citizen data
let message = "";
if (citizens.length > 0) {
message = `<div class="alert alert-warning" role="alert">
Total ${citizens.length} citizens found.
</div>`;
let countRowElement = document.getElementById("countRow");
countRowElement.innerHTML = message;
}
var tableBody = document
.getElementById(listTableId)
.querySelector("tbody");
citizens.forEach(function (citizen) {
var row = document.createElement("tr");
row.innerHTML = tableRow[listTableId](citizen);
tableBody.appendChild(row);
});
})
.catch(function (error) {
console.error("Error:", error);
});
}
function bindCitizenWithCallback(id, callback) {
let baseUrl = document.getElementById("baseUrl");
console.log(baseUrl.value);
fetch(baseUrl.value + "/citizens/" + id, {
method: "GET",
headers: getHeaders(),
})
.then(function (response) {
redirectToLogin(response);
if (response.ok) {
return response.json();
} else {
throw new Error("Error deleting citizen data.");
}
})
.then(function (data) {
console.log(data);
callback(data);
})
.catch(function (error) {
console.error("Error:", error);
});
}
if (response.ok) {
return response.json();
} else {
throw new Error("Error deleting citizen data.");
}
})
.then(function (data) {
console.log(data);
callback();
})
.catch(function (error) {
console.error("Error:", error);
citizenApi.list();
});
}
function _layoutCitizenOnEdit(citizen) {
let baseUrl = document.getElementById("baseUrl");
console.log(baseUrl.value);
fetch(baseUrl.value + "/vaccinationcenter", {
method: "GET",
headers: getHeaders(),
})
.then(function (response) {
redirectToLogin(response);
if (response.ok) {
return response.json();
} else {
throw new Error("Error deleting citizen data.");
}
})
.then(function (centers) {
console.log(centers);
console.log(citizen);
console.log("design form");
_layoutEditForm(citizen, centers);
})
.catch(function (error) {
console.error("Error:", error);
});
}
function _layoutCitizenOnNew() {
let baseUrl = document.getElementById("baseUrl");
console.log(baseUrl.value);
fetch(baseUrl.value + "/vaccinationcenter", {
method: "GET",
headers: getHeaders(),
})
.then(function (response) {
redirectToLogin(response);
if (response.ok) {
return response.json();
} else {
throw new Error("Error deleting citizen data.");
}
})
.then(function (centers) {
console.log(centers);
console.log("design form");
_layoutAppendCenters(centers);
})
.catch(function (error) {
console.error("Error:", error);
});
}
function _layoutAppendCenters(centers, citizen) {
let center = document.getElementById("center");
function _layoutOneCitizenView(citizen) {
let citizenElement = document.getElementById("oneCitizen");
citizenElement.innerHTML = "";
let listItems = `
<ul id="oneCitizenView" class="list-group">
<li class="list-group-item">
<label htmlFor="id">ID: </label>
<span>${citizen.id}</span>
</li>
<li class="list-group-item">
<label htmlFor="name">Name: </label>
<span>${citizen.name}</span>
</li>
<li class="list-group-item">
<label htmlFor="city">City: </label>
<span>${citizen.city}</span>
</li>
<li class="list-group-item">
<label htmlFor="count">Vaccination Count: </label>
<span>${citizen.doesCount}</span>
</li>
<li class="list-group-item">
<label htmlFor="status">Status: </label>
<span>${citizen.vaccinationStatus}</span>
</li>
<li class="list-group-item">
<label htmlFor="centerName">Vaccination Center: </label>
<span>${citizen.center?.name}</span>
</li>
<li class="list-group-item">
<label htmlFor="centerAddress">Vaccination Center Address: </label>
<span>${citizen.center?.address}</span>
</li></ul>
`;
citizenElement.innerHTML = listItems;
}
function _citizenEdit(event) {
display("citizenView", "none");
display("citizenDetails", "none");
display("citizenEdit", "block");
display("citizenOnEdit", "block");
let id = event.target.id;
citizenApi.edit(id, _layoutCitizenOnEdit);
}
function _citizenView(event) {
console.log(event.target.id);
let id = event.target.id;
// citizenApi.view(id, _layoutOneCitizenView);
let url = getBaseUrl() + "/citizens/" + id;
window.location.href = url;
}
function _citizenDelete(event) {
event.preventDefault();
console.log(event.target.id);
let id = event.target.id;
citizenApi.delete(id, citizenApi.list);
}
function centerFormAdd(event) {
event.preventDefault(); // Prevent form submission
if (response.ok) {
// Successful response, handle it accordingly
return response.json();
} else if (response.status === 400) {
// Bad Request, handle errors
return response.json().then((data) => {
if (Array.isArray(data.errors)) {
// Display error messages as warnings
let errorLabels = "";
data.errors.forEach((error) => {
errorLabels += `<div class="alert alert-warning"
role="alert">${error.message}</div>`;
});
document.getElementById("centerForm").appendChild(errorListElement
);
} else {
console.warn("Warning: Bad Request");
}
throw new Error("Bad Request");
});
} else {
// Handle other response status codes
throw new Error(`Request failed with status ${response.status}`);
}
})
.then((data) => {
console.log("Response:", data);
// Handle the response as needed
window.location.href = getBaseUrl() + "/vaccinationcenter";
})
.catch((error) => {
console.error("Error:", error);
// Handle errors
});
}
function vaccinationCenters() {
var tableBody =
document.getElementById("centerTable").querySelector("tbody");
tableBody.innerHTML = "";
if (response.ok) {
return response.json();
} else {
throw new Error("Error retrieving citizen data.");
}
})
.then(function (centers) {
// Populate the table with citizen data
let message = "";
if (centers.length > 0) {
message = `<div class="alert alert-warning" role="alert">
Total ${centers.length} vaccination center found.
</div>`;
let countRowElement = document.getElementById("countRow");
countRowElement.innerHTML = message;
}
var tableBody = document
.getElementById("centerTable")
.querySelector("tbody");
centers.forEach(function (center) {
var row = document.createElement("tr");
row.innerHTML = `
<td>${center.id}</td>
<td>${center.name}</td>
<td>${center.address}</td>
<td>
<button id="${center.id}"
onclick="_centerView(event)">View</button>
<button id="${center.id}"
onclick="_centerEdit(event)">Edit</button>
<button id="${center.id}"
onclick="_centerDelete(event)">Delete</button>
</td>
`;
tableBody.appendChild(row);
});
})
.catch(function (error) {
console.error("Error:", error);
});
}
function _centerView(event) {
let id = event.target.id;
window.location.href = getBaseUrl() + "/vaccinationcenter/" + id;
}
function _centerEdit(event) {
display("centers", "none");
display("centerForm", "block");
let id = event.target.id;
fetch(getBaseUrl() + "/vaccinationcenter/" + id, {
headers: getHeaders(),
})
.then((response) => {
redirectToLogin(response);
if (response.ok) {
return response.json();
}
throw new Error("Error while getting center: " + id);
})
.then((data) => {
bindDataWithEditForm(data);
})
.catch((error) => {
console.log(error);
});
}
function bindDataWithEditForm(center) {
// Get the select element by its ID
var select = document.getElementById("centerCity");
let city = center.address;
let selectedCityValue;
// Loop through the options
for (var i = 0; i < select.options.length; i++) {
var option = select.options[i];
if (selectedCityValue) {
select.value = selectedCityValue;
}
document.getElementById("centerName").value = center.name;
document.getElementById("centerId").value = center.id;
}
function _centerDelete(event) {
let id = event.target.id;
if (response.ok) {
return response.json();
} else {
throw new Error("Error while deleting vaccinationcenter: " + id);
}
})
.then((data) => {
vaccinationCenters();
})
.catch((error) => {
console.log(error);
});
}
function saveCitizen(event) {
event.preventDefault(); // Prevent form submission
const payload = {
name: citizenName,
city: citizenCity,
doesCount: 0,
httpMethod: methodName,
centerId: centerId,
doesCount: vaccinationCountSelectValue,
};
if (citizenId) {
methodName = "PUT";
payload.httpMethod = "PUT";
payload.id = citizenId;
}
if (response.ok) {
// Successful response, handle it accordingly
return response.json();
} else if (response.status === 400) {
// Bad Request, handle errors
return response.json().then((data) => {
if (Array.isArray(data.errors)) {
// Display error messages as warnings
//
document.getElementById("centerForm").appendChild(errorListElement);
} else {
console.warn("Warning: Bad Request");
}
throw new Error("Bad Request");
});
} else {
// Handle other response status codes
throw new Error(`Request failed with status ${response.status}`);
}
})
.then((data) => {
console.log("Response:", data);
let messageElement = document.getElementById("errorList");
messageElement.innerHTML = `
<div class="alert alert-success" role="alert">
Citizen Saved
</div>
`;
setTimeout(() => {
let messageElement = document.getElementById("errorList");
messageElement.innerHTML = "";
}, 2000);
// Handle the response as needed
})
.catch((error) => {
console.error("Error:", error);
// Handle errors
});
}
function _newCenter(event) {
display("centers", "none");
display("centerForm", "block");
}
function _newCitizen(event) {
display("citizenDetails", "none");
display("citizenEdit", "block");
display("citizenOnEdit", "none");
_layoutCitizenOnNew();
}
// registration form
function submitForm() {
const form = document.getElementById("registrationForm");
const name = form.elements["name"].value;
const email = form.elements["email"].value;
const password = form.elements["password"].value;
function onActionMessage(content) {
let errorMessage = content;
let messageListElement = document.getElementById("messageList");
messageListElement.innerHTML = errorMessage;
setTimeout(() => {
messageListElement.innerHTML = "";
}, 2000);
}
application.properties (src/main/resources) :
spring.datasource.url=jdbc:mysql://localhost:3306/vaccination
spring.datasource.username=root
spring.datasource.password=soumyaranjan@261412
spring.jpa.hibernate.ddl-auto=update
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
VaccinationCenterApplicationTests.java (src/test/java/com.example.vaccinationcenter) :
package com.example.vaccinationcenter;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class VaccinationCenterApplicationTests {
@Test
void contextLoads() {
}
base.jsp (src/main/webapp/WEB-INF/views) :
<%
String baseUrl = request.getScheme() + "://" + request.getServerName() +
":" + request.getServerPort() + request.getContextPath();
%>
<br>
<script src="<%= baseUrl %>/script.js"></script>
<head>
<title>Citizens</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.
css">
</head>
<body>
<div class="container">
<form id="citizenEditForm">
<input type="hidden" id="citizenId">
<div class="form-group">
<label for="name">Name:</label>
<input type="text" class="form-control"
id="citizenName" required>
</div>
<div class="form-group">
<label for="city">City:</label>
<input type="text" class="form-control"
id="citizenCity" required>
</div>
<div class="form-group">
<label for="count">Vaccination Count:</label>
<select class="form-control" id="vaccinationCount"
required>
<option value="0">None</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
</div>
<div class="form-group">
<label for="status">Status:</label>
<label class="form-control" id="vaccinationStatus"
required>
</div>
<div class="form-group">
<label for="center">Vaccination Centers:</label>
<select class="form-control" id="center" required>
<option value="">Select Center</option>
</select>
</div>
<button type="submit" onclick="saveCitizen(event)"
class="btn btn-primary">Submit</button>
<br>
<span id="errorList"></span>
</form>
</div>
<div id="citizenView">
<h2> View Citizen</h2>
<div id="oneCitizen"></div>
</div>
<div id="citizenDetails">
<button type="button" onclick="_newCitizen(event)" class="btn
btn-primary">Add New Citizen</button>
<h1>Center Details</h1>
<div id="oneCenter">
</div>
<input type="hidden" id="centerId" value="${id}">
<h2>Citizen Details</h2>
<table id="centerCitizensTable" class="table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Action</th>
</tr>
</thead>
<tbody></tbody>
</table>
<div id="countRow"></div>
</div>
</div>
</body>
<script>
window.onload = function (event) {
display("citizenView", "none");
display("citizenDetails", "block");
display("citizenEdit", "none");
let id = document.getElementById("centerId").value;
console.log(id);
citizenListByUrl(getBaseUrl() + "/citizens/center/" + id,
deleteCallback,'centerCitizensTable');
}
function deleteCallback(event) {
citizenApi.delete(event.target.id, redirectCallback);
}
function redirectCallback() {
let id = document.getElementById("centerId").value;
window.location.href = getBaseUrl() + "/citizens/center/" + value
}
</script>
</html>
citizens.jsp (src/main/webapp/WEB-INF/views) :
<!DOCTYPE html>
<html>
<head>
<title>Citizens</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstra
p.min.css">
</head>
<body>
<div class="container">
<%@ include file="header.jsp"%>
<div id="citizenEdit">
<h2>Citizen From</h2>
<form id="citizenEditForm">
<input type="hidden" id="citizenId">
<div class="form-group">
<label for="name">Name:</label> <input
type="text"
class="form-control" id="citizenName"
required>
</div>
<div class="form-group">
<label for="citizenCity">Citizen
City:</label> <select
class="form-control" id="citizenCity"
required>
<option value="None">None</option>
<option value="Mumbai">Mumbai</option>
<option value="Jaipur">Jaipur</option>
<option
value="Bengaluru">Bengaluru</option>
<option
value="Chennai">Chennai</option>
<option
value="Kolkata">Kolkata</option>
<option
value="Visakhapatnam">Visakhapatnam</option>
<option value="Pune">Pune</option>
<option
value="Bhubaneswar">Bhubaneswar</option>
<option value="New Delhi">New
Delhi</option>
<option value="Noida">Noida</option>
<option
value="Gurugram">Gurugram</option>
<option
value="Chandigarh">Chandigarh</option>
<option
value="Srinagar">Srinagar</option>
<option
value="Hyderabad">Hyderabad</option>
<!-- Add more city options as needed --
>
</select>
</div>
<div class="form-group">
<label for="center">Vaccination
Centers:</label> <select
class="form-control" id="center"
required>
</select>
</div>
<div id="citizenOnEdit">
<div class="form-group">
<label for="count">Vaccination
Count:</label> <select
class="form-control"
id="vaccinationCount" required>
<option value="0">None</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
</div>
<div class="form-group">
<label for="status">Status:</label>
<label class="form-control"
id="vaccinationStatus" required>
</div>
</div>
<button type="submit" onclick="saveCitizen(event)"
class="btn btn-primary">Submit</button>
</form>
</div>
<div id="citizenView">
<h2>View Citizen</h2>
<div id="oneCitizen"></div>
</div>
<div id="citizenDetails">
<button type="button" onclick="_newCitizen(event)"
class="btn btn-primary">Add New Citizen</button>
<h2>Citizen Details</h2>
<table id="citizensTable" class="table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>City</th>
<th>Vaccination Count</th>
<th>Vaccination Status</th>
<th>Vaccination Center</th>
<th>Action</th>
</tr>
</thead>
<tbody></tbody>
</table>
<div id="countRow"></div>
</div>
</div>
</body>
</html>
header.jsp (src/main/webapp/WEB-INF/views) :
<%@ include file="base.jsp" %>
<style>
/* Custom styles for the dark navbar */
.navbar-dark {
background-color: #333; /* Customize the background color */
color: #fff; /* Customize the text color */
}
</style>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="<%= baseUrl %>/citizens">Citizens</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= baseUrl
%>/vaccinationcenter">Vaccination Centers</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#" onclick="logout()">Logout</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Welcome, <span
id="userName"></span></a>
</li>
</ul>
</div>
</div>
</nav>
<script>
function loadUserInfo()
{
fetch(getBaseUrl()+"/me",{
headers: getHeaders()
})
.then(response=>{
if(response.ok)
{
return response.json();
}
throw new Error('error while accessing user info');
})
.then(data=>{
document.getElementById('userName').innerText= data.name;
})
.catch(error=>{
console.log(error);
})
}
setTimeout(loadUserInfo, 1000);
</script>
login.jsp (src/main/webapp/WEB-INF/views) :
<!-- login.jsp -->
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
<!-- Include Bootstrap CSS -->
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.
css">
</head>
<body>
<div id="messageList"></div>
<p>Register yourself: <a
href="/register">Register</a></p>
</form>
</div>
</div>
</div>
const payload = {
email: document.getElementById("email").value,
password: document.getElementById("password").value,
}
// Fetch POST request to /authenticate
fetch("/authenticate", {
method: "POST",
body: JSON.stringify(payload),
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
})
.then(function (response) {
if (response.ok) {
// Redirect to a success page or perform
further actions
return response.json();
} else {
onLoginError();
}
})
.then(data=>{
localStorage.setItem("token",data.encodedToken);
window.location.href = getBaseUrl()+
"/vaccinationcenter";
})
.catch(function (error) {
// Handle network or server errors
onLoginError();
console.error("Error:", error);
});
});
function onLoginError()
{
let errorMessage = `<div class="alert alert-warning"
role="alert">Login Failed. Try again!!</div>`;
let messageListElement =
document.getElementById('messageList');
messageListElement.innerHTML = errorMessage;
setTimeout(()=>{
messageListElement.innerHTML ='';
}, 2000)
}
</script>
</body>
</html>
register.jsp (src/main/webapp/WEB-INF/views) :
<!DOCTYPE html>
<html>
<head>
<title>Registration Page</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css
">
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"><
/script>
</head>
<body>
<div id="messageList"></div>
<p>Already have an account? <a href="/">Login</a></p>
</form>
</div>
</body>
</html>
vaccination_center.jsp (src/main/webapp/WEB-INF/views) :
<!DOCTYPE html>
<html>
<head>
<title>Vaccination Center Form</title>
<!-- Add Bootstrap CSS -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.m
in.css">
</head>
<body>
<div class="container">
<%@ include file="header.jsp"%>
<div id="centers">
<button type="button" onclick="_newCenter(event)"
class="btn btn-primary">Add New Center</button>
<h2>Vaccination Centers</h2>
<table id="centerTable" class="table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>City</th>
<th>Action</th>
</tr>
</thead>
<tbody></tbody>
</table>
<div id="countRow"></div>
</div>
<div id="centerForm">
<h2 class="text-center">Vaccination Center Form</h2>
<form id="centerForm">
<input type="hidden" id="centerId">
<div class="form-group">
<label for="centerName">Center Name:</label>
<input type="text"
class="form-control" id="centerName"
required>
</div>
<div class="form-group">
<label for="centerCity">Center City:</label>
<select
class="form-control" id="centerCity"
required>
<option value="None">None</option>
<option value="Mumbai">Mumbai</option>
<option value="Jaipur">Jaipur</option>
<option
value="Bengaluru">Bengaluru</option>
<option
value="Chennai">Chennai</option>
<option
value="Kolkata">Kolkata</option>
<option
value="Visakhapatnam">Visakhapatnam</option>
<option value="Pune">Pune</option>
<option
value="Bhubaneswar">Bhubaneswar</option>
<option value="New Delhi">New
Delhi</option>
<option value="Noida">Noida</option>
<option
value="Gurugram">Gurugram</option>
<option
value="Chandigarh">Chandigarh</option>
<option
value="Srinagar">Srinagar</option>
<option
value="Hyderabad">Hyderabad</option>
<!-- Add more city options as needed --
>
</select>
</div>
<button type="button"
onclick="centerFormAdd(event)"
class="btn btn-primary">Submit</button>
<br> <span id="errorList"></span>
</form>
</div>
</div>
<script>
// Submit form using JavaScript fetch API
window.onload = function(event) {
display('centerForm', 'none');
vaccinationCenters();
}
</script>
</body>
</html>
view_citizen.jsp (src/main/webapp/WEB-INF/views) :
<!DOCTYPE html>
<html>
<head>
<title>Citizens</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.
css">
</head>
<body>
<div class="container">
<%@ include file="header.jsp" %>
<input type="hidden" id="citizenId" value="${id}">
<div id="citizenView">
<h2> View Citizen</h2>
<div id="oneCitizen"></div>
</div>
</div>
<script>
window.onload = function(event)
{
let id = document.getElementById("citizenId").value;
console.log(id);
citizenApi.edit(id, _layoutOneCitizenView)
}
</script>
</body>
</html>
pom.xml (vaccination-center) :
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
<build>
<finalName>ROOT</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>