SubjectRightsView.java
package com.privacydashboard.application.views.rights;
//import com.privacydashboard.application.data.RightType;
import com.privacydashboard.application.data.GlobalVariables.RightType;
import com.privacydashboard.application.data.entity.RightRequest;
import com.privacydashboard.application.data.service.CommunicationService;
import com.privacydashboard.application.data.service.DataBaseService;
import com.privacydashboard.application.security.AuthenticatedUser;
import com.privacydashboard.application.views.MainLayout;
import com.privacydashboard.application.views.apps.AppsView;
import com.privacydashboard.application.views.contacts.ContactsView;
import com.privacydashboard.application.views.usefulComponents.MyDialog;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.NpmPackage;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.GridVariant;
import com.vaadin.flow.component.html.Span;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.*;
import javax.annotation.security.RolesAllowed;
import java.util.Collections;
import java.util.List;
@PageTitle("Rights")
@Route(value="rights", layout = MainLayout.class)
@RolesAllowed("SUBJECT")
@NpmPackage(value = "line-awesome", version = "1.3.0")
public class SubjectRightsView extends VerticalLayout implements BeforeEnterObserver{
private final DataBaseService dataBaseService;
private final AuthenticatedUser authenticatedUser;
private final CommunicationService communicationService;
private final Grid<RightRequest> grid= new Grid<>();
private MyDialog rightList;
private MyDialog requestDialog;
private RightRequest priorityRight=null;
private final GridComponentRightsView gridComponentRightsView;
// Uso ComponentUtil per passare le informazioni invece dei parametri dell'url. Dopo bisogna resettarlo
@Override
public void beforeEnter(BeforeEnterEvent event){
// apply right
RightRequest request= communicationService.getRightRequest();
if(request!=null){
DialogRight dialogRight=new DialogRight(dataBaseService, authenticatedUser);
dialogRight.showDialogConfirm(request);
return;
}
// show notification
request= communicationService.getRightFromNotification();
if(request!= null){
priorityRight=request;
showRequestList(priorityRight.getHandled());
return;
}
// show Pending Requests (action available from Home)
Boolean open= communicationService.getOpenPendingRequests();
if(open!=null && open){
showRequestList(false);
}
}
public SubjectRightsView(DataBaseService dataBaseService, AuthenticatedUser authenticatedUser, CommunicationService communicationService) {
this.dataBaseService = dataBaseService;
this.authenticatedUser = authenticatedUser;
this.communicationService=communicationService;
addClassName("rights-view");
gridComponentRightsView= new GridComponentRightsView(authenticatedUser.getUser().getRole());
initializeGridComponentRightsView();
initializeGrid();
createButtons();
generateAllRightsDetails();
}
private void initializeGridComponentRightsView(){
gridComponentRightsView.addListener(GridComponentRightsView.ContactEvent.class, this::goToUser);
gridComponentRightsView.addListener(GridComponentRightsView.AppEvent.class, this::goToApp);
}
private void initializeGrid(){
HorizontalLayout headerGrid=gridComponentRightsView.getHeaderLayout();
grid.addThemeVariants(GridVariant.LUMO_NO_BORDER, GridVariant.LUMO_NO_ROW_BORDERS);
grid.addComponentColumn(this::showRequestCard);
grid.getColumns().get(0).setHeader(headerGrid);
}
private void createButtons(){
Button pendingRequests=new Button("Pending requests", event -> showRequestList(false));
Button handledRequests=new Button("Handled requests", event -> showRequestList(true));
pendingRequests.addClassName("buuutton");
handledRequests.addClassName("buuutton");
add(new HorizontalLayout(pendingRequests, handledRequests));
}
private void showRequestList(Boolean handled){
rightList=new MyDialog();
List<RightRequest> rightRequests;
if(handled) {
rightRequests = dataBaseService.getHandledRequestsFromSender(authenticatedUser.getUser());
rightList.setTitle("Handled requests");
}
else{
rightRequests = dataBaseService.getPendingRequestsFromSender(authenticatedUser.getUser());
rightList.setTitle("Pending requests");
}
if(priorityRight!=null && rightRequests.contains(priorityRight)){
Collections.swap(rightRequests, 0 , rightRequests.indexOf(priorityRight));
showRequestCard(priorityRight);
}
grid.setItems(rightRequests);
HorizontalLayout contentLayout= new HorizontalLayout(grid);
contentLayout.addClassName("rights-view");
rightList.setContent(contentLayout);
rightList.setWidthFull();
rightList.setHeight("70%");
rightList.open();
priorityRight=null;
}
private HorizontalLayout showRequestCard(RightRequest request){
HorizontalLayout card=gridComponentRightsView.getCard(request);
card.addClickListener(e -> showRequest(request));
return card;
}
private void showRequest(RightRequest request){
requestDialog=new MyDialog();
if(request==null){
return;
}
VerticalLayout contentLayout=gridComponentRightsView.getContent(request);
requestDialog.setTitle("Right request");
requestDialog.setContent(contentLayout);
requestDialog.open();
}
private void generateAllRightsDetails(){
add(generateRightCard("Access data", RightType.PORTABILITY));
add(generateRightCard("Withdraw a consent", RightType.WITHDRAWCONSENT));
add(generateRightCard("Ask information", RightType.INFO));
add(generateRightCard("Compile a complain", RightType.COMPLAIN));
add(generateRightCard("Erase data", RightType.ERASURE));
add(generateRightCard("Remove everything", RightType.DELTEEVERYTHING));
}
private void startRequest(RightType rightType){
DialogRight dialogRight=new DialogRight(dataBaseService, authenticatedUser);
dialogRight.showDialogRequest(rightType);
}
private HorizontalLayout generateRightCard(String title, RightType rightType){
Span name= new Span(title);
name.addClassName("name");
HorizontalLayout card = new HorizontalLayout(name);
card.addClassNames("card canOpen");
card.addClickListener(e-> startRequest(rightType));
return card;
}
private void goToUser(GridComponentRightsView.ContactEvent event){
rightList.close();
requestDialog.close();
communicationService.setContact(event.getContact());
UI.getCurrent().navigate(ContactsView.class);
}
private void goToApp(GridComponentRightsView.AppEvent event){
rightList.close();
requestDialog.close();
communicationService.setApp(event.getApp());
UI.getCurrent().navigate(AppsView.class);
}
}