Coverage Summary for Class: SessionClientController (org.kitodo.production.controller)

Class Class, % Method, % Line, %
SessionClientController 0% (0/1) 0% (0/13) 0% (0/28)


 /*
  * (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
  *
  * This file is part of the Kitodo project.
  *
  * It is licensed under GNU General Public License version 3 or later.
  *
  * For the full copyright and license information, please read the
  * GPL3-License.txt file that was distributed with this source code.
  */
 
 package org.kitodo.production.controller;
 
 import java.util.List;
 import java.util.Objects;
 
 import javax.enterprise.context.RequestScoped;
 import javax.inject.Named;
 
 import org.kitodo.data.database.beans.Client;
 import org.kitodo.data.database.beans.Project;
 import org.kitodo.data.database.beans.User;
 import org.kitodo.production.services.ServiceManager;
 import org.primefaces.PrimeFaces;
 
 /**
  * Controller for getting and setting the client of users current session.
  */
 @Named("SessionClientController")
 @RequestScoped
 public class SessionClientController {
 
     private Client selectedClient;
 
     /**
      * Gets the name of the current session client. In case that no session client
      * has been set, an empty string is returned and a dialog to select a client is
      * shown.
      *
      * @return The current session clients name or empty string case that no session
      *         client has been set.
      */
     public String getCurrentSessionClientName() {
         if (Objects.nonNull(getCurrentSessionClient())) {
             return getCurrentSessionClient().getName();
         } else {
             if (userHasOnlyOneClient()) {
                 Client client = getFirstClientOfCurrentUser();
                 setSessionClient(client);
                 return client.getName();
             }
             return null;
         }
     }
 
     private Client getFirstClientOfCurrentUser() {
         return getAvailableClientsOfCurrentUser().get(0);
     }
 
     private boolean userHasOnlyOneClient() {
         return getAvailableClientsOfCurrentUser().size() == 1;
     }
 
     /**
      * The conditions when user need to select a session client is configured in
      * this method. Change is not happening if user has only one client
      * assigned.
      *
      * @return True if the session client select dialog should by displayed to the
      *         current user
      */
     public boolean shouldUserChangeSessionClient() {
         return !userHasOnlyOneClient();
     }
 
     /**
      * Display client selection dialog if user is logged in and has multiple clients.
      */
     public void showClientSelectDialog() {
         if (Objects.isNull(getCurrentSessionClient()) && !userHasOnlyOneClient()) {
             PrimeFaces.current().executeScript("PF('selectClientDialog').show();");
         } else if (userHasOnlyOneClient()) {
             setSessionClient(getFirstClientOfCurrentUser());
         }
     }
 
     /**
      * Get current session client.
      *
      * @return current session client
      */
     public Client getCurrentSessionClient() {
         return ServiceManager.getUserService().getSessionClientOfAuthenticatedUser();
     }
 
     /**
      * Sets the current selected client as session client.
      */
     public void setSelectedClientAsSessionClient() {
         setSessionClient(selectedClient);
     }
 
     /**
      * Checks if clients are available for current user.
      *
      * @return true if if clients are available for current user.
      */
     public boolean areClientsAvailableForUser() {
         return !getAvailableClientsOfCurrentUser().isEmpty();
     }
 
     /**
      * Gets selectedClient.
      *
      * @return The selectedClient.
      */
     public Client getSelectedClient() {
         return selectedClient;
     }
 
     /**
      * Sets selectedClient.
      *
      * @param selectedClient
      *            The selectedClient.
      */
     public void setSelectedClient(Client selectedClient) {
         this.selectedClient = selectedClient;
     }
 
     /**
      * Sets the given client object as new session client.
      *
      * @param sessionClient
      *            The client object that is to be the new session client.
      */
     public void setSessionClient(Client sessionClient) {
         ServiceManager.getUserService().getAuthenticatedUser().setSessionClient(sessionClient);
     }
 
     /**
      * Gets all clients to which the user directly assigned and also those from user
      * assigned projects.
      *
      * @return The list of clients.
      */
     public List<Client> getAvailableClientsOfCurrentUser()  {
         User currentUser = ServiceManager.getUserService().getCurrentUser();
         List<Client> clients = currentUser.getClients();
         for (Project project : currentUser.getProjects()) {
             if (!clients.contains(project.getClient())) {
                 clients.add(project.getClient());
             }
         }
         return clients;
     }
 }