]> git.mxchange.org Git - jfinancials-war.git/blobdiff - src/java/org/mxchange/jfinancials/beans/business/department/list/FinancialsDepartmentListWebViewBean.java
Updated copyright year
[jfinancials-war.git] / src / java / org / mxchange / jfinancials / beans / business / department / list / FinancialsDepartmentListWebViewBean.java
index 30815f8631bb149978f4bff8d255cde475848935..377530dd72bb0fac2fc24f56549203cca948c071 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 - 2020 Free Software Foundation
+ * Copyright (C) 2017 - 2022 Free Software Foundation
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as
@@ -19,8 +19,10 @@ package org.mxchange.jfinancials.beans.business.department.list;
 import fish.payara.cdi.jsr107.impl.NamedCache;
 import java.text.MessageFormat;
 import java.util.Comparator;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
 import javax.annotation.PostConstruct;
 import javax.cache.Cache;
 import javax.ejb.EJB;
@@ -28,7 +30,8 @@ import javax.enterprise.event.Observes;
 import javax.faces.view.ViewScoped;
 import javax.inject.Inject;
 import javax.inject.Named;
-import org.mxchange.jcontactsbusiness.events.department.added.ObservableDepartmentAddedEvent;
+import org.mxchange.jcontactsbusiness.events.department.added.ObservableAdminDepartmentAddedEvent;
+import org.mxchange.jcontactsbusiness.events.department.updated.ObservableAdminDepartmentUpdatedEvent;
 import org.mxchange.jcontactsbusiness.exceptions.department.DepartmentNotFoundException;
 import org.mxchange.jcontactsbusiness.model.department.Department;
 import org.mxchange.jcontactsbusiness.model.department.DepartmentSessionBeanRemote;
@@ -47,7 +50,7 @@ public class FinancialsDepartmentListWebViewBean extends BaseFinancialsBean impl
        /**
         * Serial number
         */
-       private static final long serialVersionUID = 5_028_697_360_462L;
+       private static final long serialVersionUID = 5_028_697_360_469L;
 
        /**
         * A list of all departments
@@ -89,33 +92,55 @@ public class FinancialsDepartmentListWebViewBean extends BaseFinancialsBean impl
        }
 
        /**
-        * Observes events being fired when a department has been added.
+        * Observes events being fired when a department has been added by an
+        * administrator.
         * <p>
         * @param event Event being fired
+        */
+       public void afterAdminDepartmentAddedEvent (@Observes final ObservableAdminDepartmentAddedEvent event) {
+               // Validate parameter
+               if (null == event) {
+                       // Throw NPE
+                       throw new NullPointerException("event is null"); //NOI18N
+               } else if (event.getAddedDepartment() == null) {
+                       // Throw NPE again
+                       throw new NullPointerException("event.addedDepartment is null"); //NOI18N
+               } else if (event.getAddedDepartment().getDepartmentId() == null) {
+                       // Throw it again
+                       throw new NullPointerException("event.addedDepartment.branchId is null"); //NOI18N
+               } else if (event.getAddedDepartment().getDepartmentId() < 1) {
+                       // Throw IAE
+                       throw new IllegalArgumentException(MessageFormat.format("event.addedDepartment.branchId={0} is not valid", event.getAddedDepartment().getDepartmentId())); //NOI18N
+               }
+
+               // Uniquely add department
+               this.uniqueAddDepartment(event.getAddedDepartment());
+       }
+
+       /**
+        * Observes events being fired when a department has been updated by an
+        * administrator.
         * <p>
-        * @throws NullPointerException If the parameter or it's carried instance is
-        * null
-        * @throws IllegalArgumentException If the branchId is zero or lower
+        * @param event Event being fired
         */
-       public void afterDepartmentAddedEvent (@Observes final ObservableDepartmentAddedEvent event) {
+       public void afterAdminDepartmentUpdatedEvent (@Observes final ObservableAdminDepartmentUpdatedEvent event) {
                // Validate parameter
                if (null == event) {
                        // Throw NPE
                        throw new NullPointerException("event is null"); //NOI18N
-               } else if (event.getDepartment() == null) {
+               } else if (event.getUpdatedDepartment() == null) {
                        // Throw NPE again
-                       throw new NullPointerException("event.department is null"); //NOI18N
-               } else if (event.getDepartment().getDepartmentId() == null) {
+                       throw new NullPointerException("event.updatedDepartment is null"); //NOI18N
+               } else if (event.getUpdatedDepartment().getDepartmentId() == null) {
                        // Throw it again
-                       throw new NullPointerException("event.department.branchId is null"); //NOI18N
-               } else if (event.getDepartment().getDepartmentId() < 1) {
+                       throw new NullPointerException("event.updatedDepartment.branchId is null"); //NOI18N
+               } else if (event.getUpdatedDepartment().getDepartmentId() < 1) {
                        // Throw IAE
-                       throw new IllegalArgumentException(MessageFormat.format("event.department.branchId={0} is not valid", event.getDepartment().getDepartmentId())); //NOI18N
+                       throw new IllegalArgumentException(MessageFormat.format("event.updatedDepartment.branchId={0} is not valid", event.getUpdatedDepartment().getDepartmentId())); //NOI18N
                }
 
-               // Add instance to cache
-               this.departmentCache.put(event.getDepartment().getDepartmentId(), event.getDepartment());
-               this.getAllDepartments().add(event.getDepartment());
+               // Uniquely add (update) instance
+               this.uniqueAddDepartment(event.getUpdatedDepartment());
        }
 
        @Override
@@ -195,7 +220,7 @@ public class FinancialsDepartmentListWebViewBean extends BaseFinancialsBean impl
                // Is cache there?
                if (!this.departmentCache.iterator().hasNext()) {
                        // Add all
-                       for (final Department department : this.departmentBean.allDepartments()) {
+                       for (final Department department : this.departmentBean.fetchAllDepartments()) {
                                // Add it to cache
                                this.departmentCache.put(department.getDepartmentId(), department);
                        }
@@ -238,4 +263,32 @@ public class FinancialsDepartmentListWebViewBean extends BaseFinancialsBean impl
                return isFound;
        }
 
+       /**
+        * Uniquely adds given department instance to full list and updates cache.
+        * <p>
+        * @param department Department being uniquely added
+        */
+       private void uniqueAddDepartment (final Department department) {
+               // Add instance to cache
+               this.departmentCache.put(department.getDepartmentId(), department);
+
+               // Get iterator
+               final Iterator<Department> iterator = this.getAllDepartments().iterator();
+
+               // Loop through all
+               while (iterator.hasNext()) {
+                       // Get current entry
+                       final Department currentDepartment = iterator.next();
+
+                       // Does the primary key match?
+                       if (Objects.equals(department.getDepartmentId(), currentDepartment.getDepartmentId())) {
+                               // Yes, remove it and abort iteration
+                               iterator.remove();
+                               break;
+                       }
+               }
+
+               // (Re-) Add department
+               this.getAllDepartments().add(department);
+       }
 }