diff --git a/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java b/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java index c54b39c..74cec6d 100644 --- a/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java +++ b/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java @@ -109,7 +109,7 @@ public class RedmineClient { return tickets; } - //Aqui se parsean todos los tickets que existen y se les da un formato con los campos a mostrarse + // Aquí se parsean todos los tickets que existen y se les da un formato con los campos a mostrarse private List parseTickets(String json) { List tickets = new ArrayList<>(); try { @@ -118,12 +118,27 @@ public class RedmineClient { if (issues != null) { for (JsonElement issueElement : issues) { JsonObject issue = issueElement.getAsJsonObject(); - int id = issue.has("id") ? issue.get("id").getAsInt() : 0; - String subject = issue.has("subject") ? issue.get("subject").getAsString() : ""; - String description = issue.has("description") ? issue.get("description").getAsString() : ""; - String status = issue.has("status") ? issue.getAsJsonObject("status").get("name").getAsString() : "Unknown"; - String dateString = issue.has("created_on") ? issue.get("created_on").getAsString() : ""; + // Verifica y obtiene el ID + int id = issue.has("id") && !issue.get("id").isJsonNull() ? issue.get("id").getAsInt() : 0; + + // Verifica y obtiene el subject + String subject = issue.has("subject") && !issue.get("subject").isJsonNull() ? issue.get("subject").getAsString() : ""; + + // Verifica y obtiene la descripción + String description = issue.has("description") && !issue.get("description").isJsonNull() ? issue.get("description").getAsString() : ""; + + // Verifica y obtiene el status + String status = "Unknown"; + if (issue.has("status") && !issue.get("status").isJsonNull()) { + JsonObject statusObject = issue.getAsJsonObject("status"); + if (statusObject.has("name") && !statusObject.get("name").isJsonNull()) { + status = statusObject.get("name").getAsString(); + } + } + + // Verifica y obtiene la fecha de creación + String dateString = issue.has("created_on") && !issue.get("created_on").isJsonNull() ? issue.get("created_on").getAsString() : ""; LocalDate date = null; if (!dateString.isEmpty()) { try { @@ -135,13 +150,17 @@ public class RedmineClient { } } - JsonObject authorJson = issue.has("author") ? issue.getAsJsonObject("author") : null; + // Verifica y obtiene el autor Ticket.User author = null; - if (authorJson != null) { - String username = authorJson.has("name") ? authorJson.get("name").getAsString() : "Unknown"; - author = new Ticket.User(username); + if (issue.has("author") && !issue.get("author").isJsonNull()) { + JsonObject authorJson = issue.getAsJsonObject("author"); + if (authorJson.has("name") && !authorJson.get("name").isJsonNull()) { + String username = authorJson.get("name").getAsString(); + author = new Ticket.User(username); + } } + // Agrega el ticket a la lista tickets.add(new Ticket(id, subject, description, status, date != null ? date.toString() : "", author)); } } else { @@ -156,6 +175,7 @@ public class RedmineClient { + private static class TicketResponse { private List issues; diff --git a/src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java b/src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java index 0132001..69d9872 100644 --- a/src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java +++ b/src/main/java/mx/gob/jumapacelaya/views/tickets/MisTicketsView.java @@ -32,7 +32,6 @@ public class MisTicketsView extends VerticalLayout { public MisTicketsView(ServerPrpperties prpperties, RedmineClient redmineClient, UserService userService) { this.userService = userService; this.redmineClient = redmineClient; - //this.redmineClient = new RedmineClient(prpperties.REDMINE_URL, prpperties.API_KEY); this.grid = new Grid<>(Ticket.class, false); // Configuración de columnas del grid @@ -44,21 +43,12 @@ public class MisTicketsView extends VerticalLayout { grid.addColumn(createStatusRender()).setHeader("Estado"); - grid.addColumn(ticket -> { - Date date = ticket.getDateCreate(); - if (date != null) { - SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); - return formatter.format(date); - } else { - return ""; - } - }).setHeader("Fecha creacion"); + grid.addColumn(ticket -> formatDate(ticket.getDateCreate())).setHeader("Fecha creación"); - grid.addColumn(Ticket::getDescription).setHeader("Descripcion").setWidth("25em"); + grid.addColumn(Ticket::getDescription).setHeader("Descripción").setWidth("25em"); grid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT); - // Ajustar tamaño del Grid y Layout grid.setSizeFull(); setSizeFull(); @@ -73,8 +63,21 @@ public class MisTicketsView extends VerticalLayout { } private void loadTickets() { - List tickets = redmineClient.getTicketsAuthor(userService.getRedmineUser()); - grid.setItems(tickets); + try { + List tickets = redmineClient.getTicketsAuthor(userService.getRedmineUser()); + grid.setItems(tickets); + } catch (Exception e) { + e.printStackTrace(); + // Manejo de error al cargar los tickets + } + } + + private String formatDate(Date date) { + if (date != null) { + SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); + return formatter.format(date); + } + return ""; } private ComponentRenderer createStatusRender() {