Browse Source

Se configuro la pantalla para mostrar los tickets, ahora ya se muestran los tickets existentes con sus campos de ID, Asunto y Descripcion

pull/1/head
parent
commit
12df85fb00
6 changed files with 121 additions and 15 deletions
  1. +1
    -0
      src/main/java/com/example/application/api/ApiRedmine.java
  2. +60
    -0
      src/main/java/com/example/application/api/RedmineClient.java
  3. +28
    -0
      src/main/java/com/example/application/models/Ticket.java
  4. +0
    -2
      src/main/java/com/example/application/views/login/CustomLoginView.java
  5. +0
    -2
      src/main/java/com/example/application/views/login/LoginFailAuth.java
  6. +32
    -11
      src/main/java/com/example/application/views/tickets/MisTicketsView.java

+ 1
- 0
src/main/java/com/example/application/api/ApiRedmine.java View File

@ -118,4 +118,5 @@ public class ApiRedmine {
public static String createIssueWithAttachment(Map<String, String> issueDetails, String fileUploadToken) {
return createIssue(issueDetails, fileUploadToken);
}
}

+ 60
- 0
src/main/java/com/example/application/api/RedmineClient.java View File

@ -0,0 +1,60 @@
package com.example.application.api;
import com.example.application.models.Ticket;
import com.nimbusds.jose.shaded.gson.JsonArray;
import com.nimbusds.jose.shaded.gson.JsonElement;
import com.nimbusds.jose.shaded.gson.JsonObject;
import com.nimbusds.jose.shaded.gson.JsonParser;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.List;
/*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 String REDMINE_URL = "http://localhost:3000";
private static final String API_KEY = "cf3be6168e66c99892c6212ea0bc64e8ab1c6848";
public List<Ticket> getTickets() {
List<Ticket> tickets = new ArrayList<>();
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(REDMINE_URL + "/issues.json"))
.header("Content-Type", "application/json")
.header("X-Redmine-API-Key", API_KEY)
.build();
try {
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String responseBody = response.body();
tickets = parseTickets(responseBody);
} else {
System.err.println("Error en la respuesta: " + response.statusCode());
}
} catch (Exception e) {
e.printStackTrace();
}
return tickets;
}
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();
int id = issue.get("id").getAsInt();
String subject = issue.get("subject").getAsString();
String description = issue.has("description") ? issue.get("description").getAsString() : "";
tickets.add(new Ticket(id, subject, description));
}
return tickets;
}
}

+ 28
- 0
src/main/java/com/example/application/models/Ticket.java View File

@ -0,0 +1,28 @@
package com.example.application.models;
/*Esta clase obtiene los detalles de los tickets*/
public class Ticket {
private int id;
private String subject;
private String description;
public Ticket(int id, String subject, String description) {
this.id = id;
this.subject = subject;
this.description = description;
}
public int getId() {
return id;
}
public String getSubject() {
return subject;
}
public String getDescription() {
return description;
}
}

+ 0
- 2
src/main/java/com/example/application/views/login/CustomLoginView.java View File

@ -1,2 +0,0 @@
package com.example.application.views.login;public class CustomLoginView {
}

+ 0
- 2
src/main/java/com/example/application/views/login/LoginFailAuth.java View File

@ -1,2 +0,0 @@
package com.example.application.views.login;public class LoginFailAuth {
}

+ 32
- 11
src/main/java/com/example/application/views/tickets/MisTicketsView.java View File

@ -1,26 +1,47 @@
package com.example.application.views.tickets;
import com.example.application.api.RedmineClient;
import com.example.application.models.Ticket;
import com.example.application.views.MainLayout;
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.grid.ColumnTextAlign;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.auth.AnonymousAllowed;
import java.util.List;
@Route(value="mytickets", layout = MainLayout.class)
@AnonymousAllowed
public class MisTicketsView extends VerticalLayout {
private final RedmineClient redmineClient;
private final Grid<Ticket> grid;
public MisTicketsView() {
this.redmineClient = new RedmineClient();
this.grid = new Grid<>(Ticket.class, false);
grid.addColumn(Ticket::getId).setHeader("No.")
.setWidth("4em").setFlexGrow(0).setTextAlign(ColumnTextAlign.CENTER);
grid.addColumn(Ticket::getSubject).setHeader("Asunto")
.setAutoWidth(true).setFlexGrow(0);
grid.addColumn(Ticket::getDescription).setHeader("Description")
.setFlexGrow(1);
grid.setSizeFull();
setSizeFull();
Div banner = new Div();
banner.setText("Aqui es donde el usuario vera sus tickets creados");
banner.getStyle()
.set("display", "flex")
.set("justify-content", "center")
.set("align-items", "center")
.set("height", "100%");
add(new H2("Mis tickets"), banner);
setPadding(false);
add(grid);
loadTickets();
}
private void loadTickets() {
List<Ticket> tickets = redmineClient.getTickets();
grid.setItems(tickets);
}
}

Loading…
Cancel
Save