/*
- * Copyright (C) 2017, 2018 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
*/
package org.mxchange.jfinancials.beans.business.department;
-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 javax.annotation.PostConstruct;
-import javax.cache.Cache;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
-import javax.enterprise.event.Observes;
-import javax.inject.Inject;
import javax.inject.Named;
-import org.mxchange.jcontactsbusiness.events.department.added.ObservableDepartmentAddedEvent;
-import org.mxchange.jcontactsbusiness.exceptions.department.DepartmentNotFoundException;
-import org.mxchange.jcontactsbusiness.model.department.Department;
import org.mxchange.jcontactsbusiness.model.department.DepartmentSessionBeanRemote;
import org.mxchange.jfinancials.beans.BaseFinancialsBean;
*/
private static final long serialVersionUID = 5_028_697_360_461L;
- /**
- * A list of all departments
- */
- private final List<Department> allDepartments;
-
/**
* EJB for administrative purposes
*/
@EJB (lookup = "java:global/jfinancials-ejb/department!org.mxchange.jcontactsbusiness.model.department.DepartmentSessionBeanRemote")
private DepartmentSessionBeanRemote departmentBean;
- /**
- * A list of all departments (globally)
- */
- @Inject
- @NamedCache (cacheName = "departmentCache")
- private Cache<Long, Department> departmentCache;
-
- /**
- * A list of filtered departments
- */
- private List<Department> filteredDepartments;
-
/**
* Default constructor
*/
public FinancialsDepartmentWebRequestBean () {
// Call super constructor
super();
-
- // Init list
- this.allDepartments = new LinkedList<>();
- }
-
- /**
- * Observes events being fired when a department has been added.
- * <p>
- * @param event Event being fired
- * <p>
- * @throws NullPointerException If the parameter or it's carried instance is
- * null
- * @throws IllegalArgumentException If the branchId is zero or lower
- */
- public void afterDepartmentAddedEvent (@Observes final ObservableDepartmentAddedEvent event) {
- // Validate parameter
- if (null == event) {
- // Throw NPE
- throw new NullPointerException("event is null"); //NOI18N
- } else if (event.getDepartment() == null) {
- // Throw NPE again
- throw new NullPointerException("event.department is null"); //NOI18N
- } else if (event.getDepartment().getDepartmentId() == null) {
- // Throw it again
- throw new NullPointerException("event.department.branchId is null"); //NOI18N
- } else if (event.getDepartment().getDepartmentId() < 1) {
- // Throw IAE
- throw new IllegalArgumentException(MessageFormat.format("event.department.branchId={0} is not valid", event.getDepartment().getDepartmentId())); //NOI18N
- }
-
- // Add instance to cache
- this.departmentCache.put(event.getDepartment().getDepartmentId(), event.getDepartment());
- this.allDepartments.add(event.getDepartment());
- }
-
- @Override
- @SuppressWarnings ("ReturnOfCollectionOrArrayField")
- public List<Department> allDepartments () {
- return this.allDepartments;
- }
-
- @Override
- public Department findDepartmentById (final Long departmentId) throws DepartmentNotFoundException {
- // Validate parameter
- if (null == departmentId) {
- // Throw NPE
- throw new NullPointerException("departmentId is null"); //NOI18N
- } else if (departmentId < 1) {
- // Throw IAE
- throw new IllegalArgumentException("departmentId=" + departmentId + " is invalid"); //NOI18N
- } else if (!this.departmentCache.containsKey(departmentId)) {
- // Not found
- throw new DepartmentNotFoundException(departmentId);
- }
-
- // Get it from cache
- final Department department = this.departmentCache.get(departmentId);
-
- // Return it
- return department;
- }
-
- /**
- * Getter for a list of filtered departments
- * <p>
- * @return Filtered departments
- */
- @SuppressWarnings ("ReturnOfCollectionOrArrayField")
- public List<Department> getFilteredDepartments () {
- return this.filteredDepartments;
- }
-
- /**
- * Setter for a list of filtered departments
- * <p>
- * @param filteredDepartments Filtered departments
- */
- @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
- public void setFilteredDepartments (final List<Department> filteredDepartments) {
- this.filteredDepartments = filteredDepartments;
- }
-
- /**
- * Initializer method
- */
- @PostConstruct
- public void initializeList () {
- // Is cache there?
- if (!this.departmentCache.iterator().hasNext()) {
- // Get whole list
- final List<Department> departments = this.departmentBean.allDepartments();
-
- // Add all
- for (final Department department : departments) {
- // Add it to cache
- this.departmentCache.put(department.getDepartmentId(), department);
- }
- }
-
- // Is the list empty, but filled cache?
- if (this.allDepartments.isEmpty() && this.departmentCache.iterator().hasNext()) {
- // Get iterator
- final Iterator<Cache.Entry<Long, Department>> iterator = this.departmentCache.iterator();
-
- // Build up list
- while (iterator.hasNext()) {
- // GEt next element
- final Cache.Entry<Long, Department> next = iterator.next();
-
- // Add to list
- this.allDepartments.add(next.getValue());
- }
-
- // Sort list
- this.allDepartments.sort(new Comparator<Department>() {
- @Override
- public int compare (final Department o1, final Department o2) {
- return o1.getDepartmentId() > o2.getDepartmentId() ? 1 : o1.getDepartmentId() < o2.getDepartmentId() ? -1 : 0;
- }
- });
- }
}
}