@ -10,20 +10,19 @@ import java.net.URI;
import java.net.http.HttpClient ;
import java.net.http.HttpRequest ;
import java.net.http.HttpResponse ;
import java.time.LocalDate ;
import java.time.format.DateTimeFormatter ;
import java.time.format.DateTimeParseException ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.stream.Collectors ;
/ * Esta clase se encarga de obtener los tickets desde redmine
para poder mostrarlo en la vista de visualizacion de tickets * /
public class RedmineClient {
private static final int PAGE_SIZE = 25 ;
static String REDMINE_URL ;
static String API_KEY ;
public RedmineClient ( String redmineUrl , String apiKey ) {
REDMINE_URL = redmineUrl ;
API_KEY = apiKey ;
@ -65,63 +64,64 @@ public class RedmineClient {
private List < Ticket > parseTickets ( String json ) {
List < Ticket > tickets = new ArrayList < > ( ) ;
JsonObject jsonObject = JsonParser . parseString ( json ) . getAsJsonObject ( ) ;
JsonArray issues = jsonObject . getAsJsonArray ( "issues" ) ;
for ( JsonElement issueElement : issues ) {
JsonObject issue = issueElement . getAsJsonObject ( ) ;
System . out . println ( issue ) ;
int id = issue . get ( "id" ) . getAsInt ( ) ;
String subject = issue . get ( "subject" ) . getAsString ( ) ;
String description = issue . has ( "description" ) ? issue . get ( "description" ) . getAsString ( ) : "" ;
String status = issue . getAsJsonObject ( "status" ) . get ( "name" ) . getAsString ( ) ;
/ / Aqui se obtiene el nombre del autor quien crea el ticket
JsonObject authorJson = issue . getAsJsonObject ( "author" ) ;
Ticket . User author = null ;
if ( authorJson ! = null ) {
System . out . println ( "Author JSON: " + authorJson ) ;
JsonElement nameElement = authorJson . get ( "name" ) ;
if ( nameElement ! = null ) {
String username = nameElement . getAsString ( ) ;
System . out . println ( "Autor del ticket: " + username ) ;
author = new Ticket . User ( username ) ;
} else {
System . out . println ( "Campo name no encontrado en el autor: " + authorJson ) ;
try {
JsonObject jsonObject = JsonParser . parseString ( json ) . getAsJsonObject ( ) ;
JsonArray issues = jsonObject . getAsJsonArray ( "issues" ) ;
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 ( ) : "" ;
LocalDate date = null ;
if ( ! dateString . isEmpty ( ) ) {
try {
DateTimeFormatter formatter = DateTimeFormatter . ISO_DATE_TIME ;
date = LocalDate . parse ( dateString , formatter ) ;
} catch ( DateTimeParseException e ) {
System . err . println ( "Error al parsear la fecha: " + dateString ) ;
e . printStackTrace ( ) ;
}
}
JsonObject authorJson = issue . has ( "author" ) ? issue . getAsJsonObject ( "author" ) : null ;
Ticket . User author = null ;
if ( authorJson ! = null ) {
String username = authorJson . has ( "name" ) ? authorJson . get ( "name" ) . getAsString ( ) : "Unknown" ;
author = new Ticket . User ( username ) ;
}
tickets . add ( new Ticket ( id , subject , description , status , date ! = null ? date . toString ( ) : "" , author ) ) ;
}
} else {
System . out . println ( "Autor es NULL para el ticket id: " + id ) ;
} else {
System . out . println ( "La respuesta JSON no contiene la clave 'issues'" ) ;
}
tickets . add ( new Ticket ( id , subject , description , status , author ) ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
System . out . println ( "Ocurrió un error al parsear los tickets: " + e . getMessage ( ) ) ;
}
return tickets ;
}
public List < Ticket > getTicketsCreatedBy ( String username ) {
List < Ticket > allTickets = getTickets ( ) ;
List < Ticket > filteredTickets = allTickets . stream ( )
. filter ( ticket - > {
if ( ticket . getAuthor ( ) ! = null ) {
String ticketUsername = ticket . getAuthor ( ) . getUsername ( ) ;
System . out . println ( "Comparando: " + username + " con " + ticketUsername ) ;
return username . equals ( ticketUsername ) ;
}
return false ;
} )
. collect ( Collectors . toList ( ) ) ;
System . out . println ( "Total de tickets creados por " + username + ": " + filteredTickets . size ( ) ) ;
return filteredTickets ;
return allTickets . stream ( )
. filter ( ticket - > ticket . getAuthor ( ) ! = null & & username . equals ( ticket . getAuthor ( ) . getUsername ( ) ) )
. collect ( Collectors . toList ( ) ) ;
}
private static class TicketResponse {
private List < Ticket > isues ;
private List < Ticket > issues ;
public List < Ticket > getIssues ( ) {
return isues ;
return issues ;
}
public void setIssues ( List < Ticket > issues ) {
this . isues = issues ;
this . iss ues = issues ;
}
}
}