/*
- * Copyright (C) 2016, 2017 Roland Häder
+ * Copyright (C) 2016 - 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.mobileprovider;
-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.jfinancials.beans.BaseFinancialsBean;
-import org.mxchange.jphone.events.mobileprovider.added.AdminAddedMobileProviderEvent;
-import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote;
/**
*/
private static final long serialVersionUID = 15_869_423_671_950_276L;
- /**
- * A list of all mobile providers
- */
- private final List<MobileProvider> allMobileProviders;
-
- /**
- * A list of filtered mobile providers
- */
- private List<MobileProvider> filteredMobileProviders;
-
/**
* Remote EJB for mobile providers (regular)
*/
@EJB (lookup = "java:global/jfinancials-ejb/mobileProvider!org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote")
private MobileProviderSingletonBeanRemote mobileProviderBean;
- /**
- * "Cached" list of mobile providers
- */
- @Inject
- @NamedCache (cacheName = "mobileProviderCache")
- private Cache<Long, MobileProvider> mobileProviderCache;
-
/**
* Default constructor
*/
public FinancialsMobileProviderWebRequestBean () {
// Call super constructor
super();
-
- // Init list
- this.allMobileProviders = new LinkedList<>();
- }
-
- /**
- * Observes events being fired after the administrator has added a new
- * mobile provider
- * <p>
- * @param event Event being fired
- */
- public void afterAdminAddedMobileProviderEvent (@Observes final AdminAddedMobileProviderEvent event) {
- // Is all valid?
- if (null == event) {
- // Throw NPE
- throw new NullPointerException("event is null"); //NOI18N
- } else if (event.getAddedMobileProvider() == null) {
- // Throw again ...
- throw new NullPointerException("event.addedMobileProvider is null"); //NOI18N
- } else if (event.getAddedMobileProvider().getProviderId() == null) {
- // And again ...
- throw new NullPointerException("event.addedMobileProvider.providerId is null"); //NOI18N
- } else if (event.getAddedMobileProvider().getProviderId() < 1) {
- // Id is invalid
- throw new IllegalArgumentException(MessageFormat.format("event.addedMobileProvider.providerId={0} is not valid.", event.getAddedMobileProvider().getProviderId())); //NOI18N
- }
-
- // Add it to the list
- this.mobileProviderCache.put(event.getAddedMobileProvider().getProviderId(), event.getAddedMobileProvider());
- this.allMobileProviders.add(event.getAddedMobileProvider());
- }
-
- @Override
- @SuppressWarnings ("ReturnOfCollectionOrArrayField")
- public List<MobileProvider> allMobileProviders () {
- // Return it
- return this.allMobileProviders;
- }
-
- /**
- * Getter for filtered mobile provider list
- * <p>
- * @return Filtered mobile providers
- */
- @SuppressWarnings ("ReturnOfCollectionOrArrayField")
- public List<MobileProvider> getFilteredMobileProviders () {
- return this.filteredMobileProviders;
- }
-
- /**
- * Getter for filtered mobile provider list
- * <p>
- * @param filteredMobileProviders Filtered mobile providers
- */
- @SuppressWarnings ("AssignmentToCollectionOrArrayFieldFromParameter")
- public void setFilteredMobileProviders (final List<MobileProvider> filteredMobileProviders) {
- this.filteredMobileProviders = filteredMobileProviders;
- }
-
- /**
- * Post-construction method
- */
- @PostConstruct
- public void initCache () {
- // Is cache there?
- if (!this.mobileProviderCache.iterator().hasNext()) {
- // Get whole list
- final List<MobileProvider> mobileProviders = this.mobileProviderBean.allMobileProviders();
-
- // Add all
- for (final MobileProvider mobileProvider : mobileProviders) {
- // Add it to cache
- this.mobileProviderCache.put(mobileProvider.getProviderId(), mobileProvider);
- }
- }
-
- // Is the list empty, but filled cache?
- if (this.allMobileProviders.isEmpty() && this.mobileProviderCache.iterator().hasNext()) {
- // Get iterator
- final Iterator<Cache.Entry<Long, MobileProvider>> iterator = this.mobileProviderCache.iterator();
-
- // Build up list
- while (iterator.hasNext()) {
- // GEt next element
- final Cache.Entry<Long, MobileProvider> next = iterator.next();
-
- // Add to list
- this.allMobileProviders.add(next.getValue());
- }
-
- // Sort list
- this.allMobileProviders.sort(new Comparator<MobileProvider>() {
- @Override
- public int compare (final MobileProvider o1, final MobileProvider o2) {
- return o1.getProviderId() > o2.getProviderId() ? 1 : o1.getProviderId() < o2.getProviderId() ? -1 : 0;
- }
- });
- }
}
}