Skip to content

Weka #3

Merged
merged 3 commits into from
Apr 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions emmas/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
</dependencyManagement>

<dependencies>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
Expand All @@ -45,7 +44,6 @@
<artifactId>mysql-connector-j</artifactId>
<version>9.2.0</version>
</dependency>

<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
Expand All @@ -55,6 +53,11 @@
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.0.Final</version>
</dependency>
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
Expand Down
21 changes: 7 additions & 14 deletions emmas/src/main/java/dev/brianweloba/dao/EventDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,19 @@ public Event create(Event event) {
}

public int countAll(){
EntityManager manager = HibernateUtil.getEntityManager();
try{
return manager.createQuery("SELECT COUNT(e) FROM Event e",Long.class)
try (EntityManager manager = HibernateUtil.getEntityManager()) {
return manager.createQuery("SELECT COUNT(e) FROM Event e", Long.class)
.getSingleResult()
.intValue();
}finally {
manager.close();
}
}

public List<Event> findPaginated(int startIndex, int pageSize){
EntityManager manager = HibernateUtil.getEntityManager();
try{
return manager.createQuery("SELECT e FROM Event e ORDER BY e.eventDate",Event.class)
try (EntityManager manager = HibernateUtil.getEntityManager()) {
return manager.createQuery("SELECT e FROM Event e ORDER BY e.eventDate", Event.class)
.setFirstResult(startIndex)
.setMaxResults(pageSize)
.getResultList();
}finally {
manager.close();
}
}

Expand Down Expand Up @@ -82,7 +76,7 @@ public Event findByIdAndToken(Long id,String token){
query.setParameter("token", token);
System.out.println("Token: " + token);
System.out.println("Id: " + id);
System.out.println("Query: " + query.toString());
System.out.println("Query: " + query);
return query.getSingleResult();
}catch (Exception e) {
if (manager.getTransaction().isActive()) {
Expand All @@ -104,12 +98,12 @@ public List<Event> findAll() {
}
}

public boolean update(Event event,String token) {
public void update(Event event, String token) {
EntityManager manager = HibernateUtil.getEntityManager();
try {
Event eventToUpdate = findByIdAndToken(event.getId(),token);
if(eventToUpdate == null){
return false;
return;
}
manager.getTransaction().begin();

Expand All @@ -122,7 +116,6 @@ public boolean update(Event event,String token) {
manager.merge(eventToUpdate);

manager.getTransaction().commit();
return true;
} catch (Exception e) {
if (manager.getTransaction().isActive()) {
manager.getTransaction().rollback();
Expand Down
10 changes: 10 additions & 0 deletions emmas/src/main/java/dev/brianweloba/model/Event.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.brianweloba.model;

import jakarta.persistence.*;
import jakarta.validation.constraints.*;
import lombok.Data;

import java.util.Date;
Expand All @@ -15,21 +16,29 @@ public class Event {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotBlank(message = "Event title is required")
@Size(min = 3, max = 100, message = "Title must be between 3 and 100 characters")
@Column(nullable = false)
private String title;

@Column(name = "event_type")
private String eventType;

@NotBlank(message = "Host name is required")
@Column(name = "event_host")
private String eventHost;

@NotBlank(message = "Event location is required")
@Column(name = "event_location")
private String eventLocation;

@NotBlank(message = "Event description is required")
@Size(min = 10,max = 255, message = "Description be between 10 and 255 characters")
@Column(columnDefinition = "TEXT")
private String description;

@NotNull(message = "Event date is required")
@Future(message = "Event date must be in the future")
@Column(name = "event_date")
private Date eventDate;

Expand All @@ -39,6 +48,7 @@ public class Event {
@Column(name = "updated_at", insertable = false, updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
private Date updatedAt;

@Min(value = 1, message = "Event capacity must be at least 1")
@Column(name = "event_capacity")
private int eventCapacity;

Expand Down
34 changes: 34 additions & 0 deletions emmas/src/main/java/dev/brianweloba/services/EventService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package dev.brianweloba.services;

import dev.brianweloba.model.Event;
import jakarta.servlet.http.HttpServletRequest;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class EventService {
public void buildEventFromRequest(HttpServletRequest request, Event event) {
event.setTitle(request.getParameter("title"));
event.setDescription(request.getParameter("description"));
event.setEventHost(request.getParameter("eventHost"));
event.setEventLocation(request.getParameter("eventLocation"));

String capacityStr = request.getParameter("eventCapacity");
try {
int capacity = Integer.parseInt(capacityStr);
event.setEventCapacity(capacity);
} catch (NumberFormatException e) {
request.setAttribute("capacityError", "Invalid capacity value");
}

String dateStr = request.getParameter("eventDate");
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date eventDate = sdf.parse(dateStr);
event.setEventDate(eventDate);
} catch (ParseException e) {
request.setAttribute("dateError", "Invalid date format");
}
}
}
44 changes: 19 additions & 25 deletions emmas/src/main/java/dev/brianweloba/servlet/CreateEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,9 @@
import dev.brianweloba.model.Event;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.*;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/events/create")
public class CreateEvent extends HttpServlet {
Expand All @@ -26,27 +20,27 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
Event event = new Event();

event.setTitle(request.getParameter("title"));
event.setEventHost(request.getParameter("eventHost"));
event.setDescription(request.getParameter("description"));
event.setEventType(request.getParameter("eventType"));
event.setEventLocation(request.getParameter("location"));
event.setEventCapacity(Integer.parseInt(request.getParameter("eventCapacity")));

String dateString = request.getParameter("eventDate");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date eventDate = dateFormat.parse(dateString);
event.setEventDate(eventDate);
} catch (ParseException e) {
throw new RuntimeException(e);
throws IOException, ServletException {
HttpSession session = request.getSession();
Event event = (Event) session.getAttribute("event");

if (event == null) {
response.sendRedirect(request.getContextPath() + "/events/create");
return;
}

event.setEventType(request.getParameter("eventType").toUpperCase());

if(event.getEventType().isEmpty()){
request.setAttribute("eventTypeError", "Event Type is empty");
request.getRequestDispatcher("/WEB-INF/views/prediction.jsp").forward(request, response);
return;
}

event = eventDAO.create(event);
session.removeAttribute("event");

Cookie tokenCookie = new Cookie("event_"+event.getId()+"_token", event.getEditToken());
Cookie tokenCookie = new Cookie("event_" + event.getId() + "_token", event.getEditToken());
tokenCookie.setMaxAge(60 * 60 * 24 * 365);
tokenCookie.setPath("/");
response.addCookie(tokenCookie);
Expand Down
75 changes: 14 additions & 61 deletions emmas/src/main/java/dev/brianweloba/servlet/EventServlet.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
package dev.brianweloba.servlet;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import dev.brianweloba.dao.EventDAO;
import dev.brianweloba.model.Event;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.List;

@WebServlet("/events")
public class EventServlet extends HttpServlet {
private final EventDAO eventDAO = new EventDAO();
Expand All @@ -24,27 +20,23 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

int pageSize = 10;
int currentPage =1;

try{
String pageSizeParam = request.getParameter("size");
if(pageSizeParam != null){
pageSize = Integer.parseInt(pageSizeParam);
}
int currentPage = 1;

String pageParam = request.getParameter("page");
if(pageParam!=null){
currentPage = Integer.parseInt(pageParam);
}
}catch (NumberFormatException e){
String pageSizeParam = request.getParameter("size");
if (pageSizeParam != null) {
pageSize = Integer.parseInt(pageSizeParam);
}

String pageParam = request.getParameter("page");
if (pageParam != null) {
currentPage = Integer.parseInt(pageParam);
}

int startIndex = (currentPage-1)*pageSize;
int startIndex = (currentPage - 1) * pageSize;
int totalEvents = eventDAO.countAll();
int totalPages = (int) Math.ceil((double) totalEvents/pageSize);
int totalPages = (int) Math.ceil((double) totalEvents / pageSize);

List<Event> events = eventDAO.findPaginated(startIndex,pageSize);
List<Event> events = eventDAO.findPaginated(startIndex, pageSize);

request.setAttribute("events", events);
request.setAttribute("currentPage", currentPage);
Expand All @@ -57,43 +49,4 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
request.setAttribute("events", events);
request.getRequestDispatcher("/WEB-INF/views/events.jsp").forward(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
Long id = Long.parseLong(request.getParameter("id"));
// String token = request.getParameter("token");
String token = getEditTokenFromCookies(request, id);
Event event = eventDAO.findByIdAndToken(id, token);

event.setTitle(request.getParameter("title"));
event.setEventHost(request.getParameter("eventHost"));
event.setDescription(request.getParameter("description"));
event.setEventType(request.getParameter("eventType"));
event.setEventLocation(request.getParameter("location"));
event.setEventCapacity(Integer.parseInt(request.getParameter("eventCapacity")));

String dateString = request.getParameter("eventDate");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date eventDate = dateFormat.parse(dateString);
event.setEventDate(eventDate);
} catch (ParseException e) {
throw new RuntimeException(e);
}
eventDAO.update(event, token);
response.sendRedirect(request.getContextPath() + "/events");
}

private String getEditTokenFromCookies(HttpServletRequest request, Long eventId) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("event_" + eventId + "_token")) {
return cookie.getValue();
}
}
}
return null;
}
}
Loading