/*
- * 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
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;
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;
/**
* 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
}
/**
- * 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
// 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);
}
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);
+ }
}