]> git.mxchange.org Git - pizzaservice-war.git/blobdiff - src/java/org/mxchange/pizzaapplication/beans/mobileprovider/PizzaMobileProviderWebRequestBean.java
Please cherry-pick:
[pizzaservice-war.git] / src / java / org / mxchange / pizzaapplication / beans / mobileprovider / PizzaMobileProviderWebRequestBean.java
index 609ac53fac85741e1c4291e00fc16e7ae76b9c35..1929e20fb662fb669cfac439c3e9a3ed5451eb93 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 Roland Häder
+ * Copyright (C) 2016, 2017 Roland Häder
  *
  * 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.pizzaapplication.beans.mobileprovider;
 
+import fish.payara.cdi.jsr107.impl.NamedCache;
 import java.text.MessageFormat;
-import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import javax.annotation.PostConstruct;
-import javax.enterprise.context.SessionScoped;
+import javax.cache.Cache;
+import javax.ejb.EJB;
+import javax.enterprise.context.RequestScoped;
 import javax.enterprise.event.Observes;
-import javax.faces.view.facelets.FaceletException;
+import javax.inject.Inject;
 import javax.inject.Named;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import org.mxchange.jphone.events.AdminAddedMobileProviderEvent;
-import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
-import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote;
+import org.mxchange.jphone.events.mobileprovider.added.AdminAddedMobileProviderEvent;
+import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
+import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote;
 import org.mxchange.pizzaapplication.beans.BasePizzaController;
 
 /**
@@ -38,7 +39,7 @@ import org.mxchange.pizzaapplication.beans.BasePizzaController;
  * @author Roland Häder<roland@mxchange.org>
  */
 @Named ("mobileProviderController")
-@SessionScoped
+@RequestScoped
 public class PizzaMobileProviderWebRequestBean extends BasePizzaController implements PizzaMobileProviderWebRequestController {
 
        /**
@@ -47,42 +48,41 @@ public class PizzaMobileProviderWebRequestBean extends BasePizzaController imple
        private static final long serialVersionUID = 15_869_423_671_950_276L;
 
        /**
-        * "Cached" list of mobile providers
+        * Remote EJB for mobile providers (regular)
         */
-       private List<MobileProvider> mobileProviders;
+       @EJB (lookup = "java:global/jfinancials-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote")
+       private MobileProviderSingletonBeanRemote mobileProviderBean;
 
        /**
-        * Remote EJB for mobile providers (regular)
+        * "Cached" list of mobile providers
         */
-       private MobileProviderSingletonBeanRemote mobileRemoteBean;
+       @Inject
+       @NamedCache (cacheName = "mobileProviderCache")
+       private Cache<Long, MobileProvider> mobileProviderCache;
 
        /**
         * Default constructor
         */
        public PizzaMobileProviderWebRequestBean () {
-               // Try it
-               try {
-                       // Get initial context
-                       Context context = new InitialContext();
-
-                       // Try to lookup the beans
-                       this.mobileRemoteBean = (MobileProviderSingletonBeanRemote) context.lookup("java:global/pizzaservice-ejb/mobileprovider!org.mxchange.jphone.phonenumbers.mobileprovider.MobileProviderSingletonBeanRemote"); //NOI18N
-               } catch (final NamingException e) {
-                       // Throw it again
-                       throw new FaceletException(e);
-               }
+               // Call super constructor
+               super();
        }
 
-       @Override
-       public void afterAdminAddedMobileProvider (@Observes final AdminAddedMobileProviderEvent event) {
+       /**
+        * 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) {
+               } else if (event.getAddedMobileProvider() == null) {
                        // Throw again ...
                        throw new NullPointerException("event.addedMobileProvider is null"); //NOI18N
-               } else if (event.getAddedMobileProvider().getProviderId()== null) {
+               } else if (event.getAddedMobileProvider().getProviderId() == null) {
                        // And again ...
                        throw new NullPointerException("event.addedMobileProvider.providerId is null"); //NOI18N
                } else if (event.getAddedMobileProvider().getProviderId() < 1) {
@@ -91,26 +91,50 @@ public class PizzaMobileProviderWebRequestBean extends BasePizzaController imple
                }
 
                // Add it to the list
-               this.mobileProviders.add(event.getAddedMobileProvider());
+               this.mobileProviderCache.put(event.getAddedMobileProvider().getProviderId(), event.getAddedMobileProvider());
        }
 
        @Override
-       public List<MobileProvider> allMobileProvider () {
-               return Collections.unmodifiableList(this.mobileProviders);
-       }
+       @SuppressWarnings ("ReturnOfCollectionOrArrayField")
+       public List<MobileProvider> allMobileProviders () {
+               // Init list
+               List<MobileProvider> list = new LinkedList<>();
 
-       @Override
-       public boolean hasMobileProvider () {
-               return (!this.mobileProviders.isEmpty());
+               // Get iterator
+               Iterator<Cache.Entry<Long, MobileProvider>> iterator = this.mobileProviderCache.iterator();
+
+               // Loop over all
+               while (iterator.hasNext()) {
+                       // Get next entry
+                       final Cache.Entry<Long, MobileProvider> next = iterator.next();
+
+                       // Add value to list
+                       list.add(next.getValue());
+               }
+
+               // Return it
+               return list;
        }
 
        /**
-        * Initializer method
+        * Post-construction method
         */
        @PostConstruct
        public void init () {
-               // Init list of mobile providers
-               this.mobileProviders = this.mobileRemoteBean.allMobileProvider();
+               // Is cache there?
+               if (!this.mobileProviderCache.iterator().hasNext()) {
+                       // Get whole list
+                       List<MobileProvider> list = this.mobileProviderBean.allMobileProviders();
+
+                       // Add all
+                       for (final Iterator<MobileProvider> iterator = list.iterator(); iterator.hasNext();) {
+                               // Get next element
+                               final MobileProvider next = iterator.next();
+
+                               // Add it to cache
+                               this.mobileProviderCache.put(next.getProviderId(), next);
+                       }
+               }
        }
 
 }