SubjectRightsView.java

  1. package com.privacydashboard.application.views.rights;

  2. //import com.privacydashboard.application.data.RightType;
  3. import com.privacydashboard.application.data.GlobalVariables.RightType;
  4. import com.privacydashboard.application.data.entity.RightRequest;
  5. import com.privacydashboard.application.data.service.CommunicationService;
  6. import com.privacydashboard.application.data.service.DataBaseService;
  7. import com.privacydashboard.application.security.AuthenticatedUser;
  8. import com.privacydashboard.application.views.MainLayout;
  9. import com.privacydashboard.application.views.apps.AppsView;
  10. import com.privacydashboard.application.views.contacts.ContactsView;
  11. import com.privacydashboard.application.views.usefulComponents.MyDialog;
  12. import com.vaadin.flow.component.UI;
  13. import com.vaadin.flow.component.button.Button;
  14. import com.vaadin.flow.component.dependency.NpmPackage;
  15. import com.vaadin.flow.component.grid.Grid;
  16. import com.vaadin.flow.component.grid.GridVariant;
  17. import com.vaadin.flow.component.html.Span;
  18. import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
  19. import com.vaadin.flow.component.orderedlayout.VerticalLayout;
  20. import com.vaadin.flow.router.*;

  21. import javax.annotation.security.RolesAllowed;
  22. import java.util.Collections;
  23. import java.util.List;

  24. @PageTitle("Rights")
  25. @Route(value="rights", layout = MainLayout.class)
  26. @RolesAllowed("SUBJECT")
  27. @NpmPackage(value = "line-awesome", version = "1.3.0")
  28. public class SubjectRightsView extends VerticalLayout implements BeforeEnterObserver{
  29.     private final DataBaseService dataBaseService;
  30.     private final AuthenticatedUser authenticatedUser;
  31.     private final CommunicationService communicationService;
  32.     private final Grid<RightRequest> grid= new Grid<>();
  33.     private MyDialog rightList;
  34.     private MyDialog requestDialog;
  35.     private RightRequest priorityRight=null;
  36.     private final GridComponentRightsView gridComponentRightsView;

  37.     // Uso ComponentUtil per passare le informazioni invece dei parametri dell'url. Dopo bisogna resettarlo
  38.     @Override
  39.     public void beforeEnter(BeforeEnterEvent event){
  40.         // apply right
  41.         RightRequest request= communicationService.getRightRequest();
  42.         if(request!=null){
  43.             DialogRight dialogRight=new DialogRight(dataBaseService, authenticatedUser);
  44.             dialogRight.showDialogConfirm(request);
  45.             return;
  46.         }
  47.         // show notification
  48.         request= communicationService.getRightFromNotification();
  49.         if(request!= null){
  50.             priorityRight=request;
  51.             showRequestList(priorityRight.getHandled());
  52.             return;
  53.         }
  54.         // show Pending Requests (action available from Home)
  55.         Boolean open= communicationService.getOpenPendingRequests();
  56.         if(open!=null && open){
  57.             showRequestList(false);
  58.         }
  59.     }

  60.     public SubjectRightsView(DataBaseService dataBaseService, AuthenticatedUser authenticatedUser, CommunicationService communicationService) {
  61.         this.dataBaseService = dataBaseService;
  62.         this.authenticatedUser = authenticatedUser;
  63.         this.communicationService=communicationService;

  64.         addClassName("rights-view");

  65.         gridComponentRightsView= new GridComponentRightsView(authenticatedUser.getUser().getRole());
  66.         initializeGridComponentRightsView();
  67.         initializeGrid();
  68.         createButtons();
  69.         generateAllRightsDetails();
  70.     }

  71.     private void initializeGridComponentRightsView(){
  72.         gridComponentRightsView.addListener(GridComponentRightsView.ContactEvent.class, this::goToUser);
  73.         gridComponentRightsView.addListener(GridComponentRightsView.AppEvent.class, this::goToApp);
  74.     }

  75.     private void initializeGrid(){
  76.         HorizontalLayout headerGrid=gridComponentRightsView.getHeaderLayout();
  77.         grid.addThemeVariants(GridVariant.LUMO_NO_BORDER, GridVariant.LUMO_NO_ROW_BORDERS);
  78.         grid.addComponentColumn(this::showRequestCard);
  79.         grid.getColumns().get(0).setHeader(headerGrid);
  80.     }

  81.     private void createButtons(){
  82.         Button pendingRequests=new Button("Pending requests", event -> showRequestList(false));
  83.         Button handledRequests=new Button("Handled requests", event -> showRequestList(true));
  84.         pendingRequests.addClassName("buuutton");
  85.         handledRequests.addClassName("buuutton");
  86.         add(new HorizontalLayout(pendingRequests, handledRequests));
  87.     }

  88.     private void showRequestList(Boolean handled){
  89.         rightList=new MyDialog();
  90.         List<RightRequest> rightRequests;
  91.         if(handled) {
  92.             rightRequests = dataBaseService.getHandledRequestsFromSender(authenticatedUser.getUser());
  93.             rightList.setTitle("Handled requests");
  94.         }
  95.         else{
  96.             rightRequests = dataBaseService.getPendingRequestsFromSender(authenticatedUser.getUser());
  97.             rightList.setTitle("Pending requests");
  98.         }
  99.         if(priorityRight!=null && rightRequests.contains(priorityRight)){
  100.             Collections.swap(rightRequests, 0 , rightRequests.indexOf(priorityRight));
  101.             showRequestCard(priorityRight);
  102.         }
  103.         grid.setItems(rightRequests);
  104.         HorizontalLayout contentLayout= new HorizontalLayout(grid);
  105.         contentLayout.addClassName("rights-view");
  106.         rightList.setContent(contentLayout);
  107.         rightList.setWidthFull();
  108.         rightList.setHeight("70%");
  109.         rightList.open();
  110.         priorityRight=null;
  111.     }

  112.     private HorizontalLayout showRequestCard(RightRequest request){
  113.         HorizontalLayout card=gridComponentRightsView.getCard(request);
  114.         card.addClickListener(e -> showRequest(request));
  115.         return card;
  116.     }

  117.     private void showRequest(RightRequest request){
  118.         requestDialog=new MyDialog();
  119.         if(request==null){
  120.             return;
  121.         }
  122.         VerticalLayout contentLayout=gridComponentRightsView.getContent(request);
  123.         requestDialog.setTitle("Right request");
  124.         requestDialog.setContent(contentLayout);
  125.         requestDialog.open();
  126.     }

  127.     private void generateAllRightsDetails(){
  128.         add(generateRightCard("Access data", RightType.PORTABILITY));
  129.         add(generateRightCard("Withdraw a consent", RightType.WITHDRAWCONSENT));
  130.         add(generateRightCard("Ask information", RightType.INFO));
  131.         add(generateRightCard("Compile a complain", RightType.COMPLAIN));
  132.         add(generateRightCard("Erase data", RightType.ERASURE));
  133.         add(generateRightCard("Remove everything", RightType.DELTEEVERYTHING));
  134.     }

  135.     private void startRequest(RightType rightType){
  136.         DialogRight dialogRight=new DialogRight(dataBaseService, authenticatedUser);
  137.         dialogRight.showDialogRequest(rightType);
  138.     }

  139.     private HorizontalLayout generateRightCard(String title, RightType rightType){
  140.         Span name= new Span(title);
  141.         name.addClassName("name");
  142.         HorizontalLayout card = new HorizontalLayout(name);
  143.         card.addClassNames("card canOpen");
  144.         card.addClickListener(e-> startRequest(rightType));
  145.         return card;
  146.     }

  147.     private void goToUser(GridComponentRightsView.ContactEvent event){
  148.         rightList.close();
  149.         requestDialog.close();
  150.         communicationService.setContact(event.getContact());
  151.         UI.getCurrent().navigate(ContactsView.class);
  152.     }

  153.     private void goToApp(GridComponentRightsView.AppEvent event){
  154.         rightList.close();
  155.         requestDialog.close();
  156.         communicationService.setApp(event.getApp());
  157.         UI.getCurrent().navigate(AppsView.class);
  158.     }
  159. }