|
|
@ -48,55 +48,43 @@ public class RedmineClient { |
|
|
|
// Si includeClose es true, incluira todos los tikets si no, incluira solo los que estan abiertos |
|
|
|
String statusFilter = includeClosed ? "&status_id=*" : "&status_id=open"; |
|
|
|
|
|
|
|
String includeJournals = "&include=journals"; // <-- Agregar los journals (comentarios/Notas) |
|
|
|
|
|
|
|
|
|
|
|
String responseBody = null; |
|
|
|
while (true) { |
|
|
|
HttpRequest request = HttpRequest.newBuilder() |
|
|
|
.uri(URI.create(REDMINE_URL + "/issues.json?key=" + user.getKey() + statusFilter + "&offset=" + offset)) |
|
|
|
.uri(URI.create(REDMINE_URL + "/issues.json?key=" + user.getKey() + statusFilter + includeJournals + "&offset=" + offset)) |
|
|
|
.header("Content-Type", "application/json") |
|
|
|
.build(); |
|
|
|
|
|
|
|
try { |
|
|
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); |
|
|
|
if (response.statusCode() == 200) { |
|
|
|
String responseBody = response.body(); |
|
|
|
responseBody = response.body(); |
|
|
|
List<Ticket> pageTickets = parseTickets(responseBody); |
|
|
|
tickets.addAll(pageTickets); |
|
|
|
if (pageTickets.size() < PAGE_SIZE) { |
|
|
|
break; |
|
|
|
} |
|
|
|
offset += PAGE_SIZE; |
|
|
|
} else { |
|
|
|
System.err.println("Error en la respuesta: " + response.statusCode()); |
|
|
|
break; |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
System.out.println("Total tickets obtenidos: " + tickets.size()); |
|
|
|
return tickets; |
|
|
|
} |
|
|
|
|
|
|
|
//AQUI OBTENGO LOS TICKETS DESDE REDMINE |
|
|
|
public List<Ticket> getTicketsAuthor(RedmineUser user) { |
|
|
|
List<Ticket> tickets = new ArrayList<>(); |
|
|
|
HttpClient client = HttpClient.newHttpClient(); |
|
|
|
int offset = 0; |
|
|
|
|
|
|
|
|
|
|
|
while (true) { |
|
|
|
HttpRequest request = HttpRequest.newBuilder() |
|
|
|
.uri(URI.create(REDMINE_URL + "/issues.json?key=" + user.getKey() + "&author_id=" + user.getId() + "&offset=" + offset)) |
|
|
|
.header("Content-Type", "application/json") |
|
|
|
.build(); |
|
|
|
// **Imprimir los tickets y sus comentarios** |
|
|
|
for (Ticket ticket : pageTickets) { |
|
|
|
System.out.println("-------------------------------------------------"); |
|
|
|
System.out.println("Ticket ID: " + ticket.getId()); |
|
|
|
System.out.println("Asunto: " + ticket.getSubject()); |
|
|
|
System.out.println("Descripción: " + ticket.getDescription()); |
|
|
|
System.out.println("Estado: " + ticket.getStatus()); |
|
|
|
System.out.println("Fecha de creación: " + ticket.getDateCreate()); |
|
|
|
|
|
|
|
// Imprimir comentarios si existen |
|
|
|
if (ticket.getComments() != null && !ticket.getComments().isEmpty()) { |
|
|
|
System.out.println("Comentarios:"); |
|
|
|
for (String comment : ticket.getComments()) { |
|
|
|
System.out.println(" - " + comment); |
|
|
|
} |
|
|
|
} else { |
|
|
|
System.out.println("No hay comentarios."); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); |
|
|
|
if (response.statusCode() == 200) { |
|
|
|
String responseBody = response.body(); |
|
|
|
List<Ticket> pageTickets = parseTickets(responseBody); |
|
|
|
tickets.addAll(pageTickets); |
|
|
|
if (pageTickets.size() < PAGE_SIZE) { |
|
|
|
break; |
|
|
|
} |
|
|
@ -164,9 +152,32 @@ public class RedmineClient { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
List<String> comments = new ArrayList<>(); |
|
|
|
if (issue.has("journals") && !issue.get("journals").isJsonNull()) { |
|
|
|
JsonArray journals = issue.getAsJsonArray("journals"); |
|
|
|
for (JsonElement journalElement : journals) { |
|
|
|
JsonObject journal = journalElement.getAsJsonObject(); |
|
|
|
if (journal.has("notes") && !journal.get("notes").isJsonNull()) { |
|
|
|
String note = journal.get("notes").getAsString(); |
|
|
|
if (!note.trim().isEmpty()) { |
|
|
|
comments.add(note); // Agregar solo comentarios no vacíos |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (comments.isEmpty()) { |
|
|
|
System.out.println("No hay comentarios para este ticket."); |
|
|
|
} else { |
|
|
|
System.out.println("Comentarios:"); |
|
|
|
for (String comment : comments) { |
|
|
|
System.out.println(" - " + comment); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Agrega el ticket a la lista |
|
|
|
tickets.add(new Ticket(id, subject, description, status, date != null ? date.toString() : "", trackerId)); |
|
|
|
tickets.add(new Ticket(id, subject, description, status, date != null ? date.toString() : "", trackerId, comments)); |
|
|
|
} |
|
|
|
} else { |
|
|
|
System.out.println("La respuesta JSON no contiene la clave 'issues'"); |
|
|
@ -178,6 +189,42 @@ public class RedmineClient { |
|
|
|
return tickets; |
|
|
|
} |
|
|
|
|
|
|
|
//AQUI OBTENGO LOS TICKETS DESDE REDMINE |
|
|
|
public List<Ticket> getTicketsAuthor(RedmineUser user) { |
|
|
|
List<Ticket> tickets = new ArrayList<>(); |
|
|
|
HttpClient client = HttpClient.newHttpClient(); |
|
|
|
int offset = 0; |
|
|
|
|
|
|
|
|
|
|
|
while (true) { |
|
|
|
HttpRequest request = HttpRequest.newBuilder() |
|
|
|
.uri(URI.create(REDMINE_URL + "/issues.json?key=" + user.getKey() + "&author_id=" + user.getId() + "&offset=" + offset)) |
|
|
|
.header("Content-Type", "application/json") |
|
|
|
.build(); |
|
|
|
|
|
|
|
try { |
|
|
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); |
|
|
|
if (response.statusCode() == 200) { |
|
|
|
String responseBody = response.body(); |
|
|
|
List<Ticket> pageTickets = parseTickets(responseBody); |
|
|
|
tickets.addAll(pageTickets); |
|
|
|
if (pageTickets.size() < PAGE_SIZE) { |
|
|
|
break; |
|
|
|
} |
|
|
|
offset += PAGE_SIZE; |
|
|
|
} else { |
|
|
|
System.err.println("Error en la respuesta: " + response.statusCode()); |
|
|
|
break; |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
System.out.println("Total tickets obtenidos: " + tickets.size()); |
|
|
|
return tickets; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|