From 7acbc3efa81f7ebc503fe0b7d82888d4c4ee1fd6 Mon Sep 17 00:00:00 2001
From: Roland Haeder <roland@mxchange.org>
Date: Wed, 13 Apr 2016 20:49:33 +0200
Subject: [PATCH] Continued a bit: - added administrative EJB for mobile
 providers with first business method addMobileProvider() implemented (should
 work) - The word "bean" may confuse here as these are all EJBs - updated
 jar(s)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 lib/juser-core.jar                            | Bin 40612 -> 40648 bytes
 .../data/JobsCountrySingletonBean.java        |   2 +-
 .../JobsMobileProviderSingletonBean.java      |   2 +-
 ...PizzaAdminMobileProviderSingletonBean.java |  91 ++++++++++++++++++
 .../model/login/JobsUserLoginSessionBean.java |   6 +-
 .../JobsUserRegistrationSessionBean.java      |   2 +-
 .../model/user/JobsUserSessionBean.java       |   4 +-
 7 files changed, 99 insertions(+), 8 deletions(-)
 create mode 100644 src/java/org/mxchange/jphone/phonenumbers/mobileprovider/PizzaAdminMobileProviderSingletonBean.java

diff --git a/lib/juser-core.jar b/lib/juser-core.jar
index 96bfe0721f41190085145aee77d4a15b1ea9f133..5d787e51c0cd470c74c4d07163a37464dcb86a0d 100644
GIT binary patch
delta 1606
zcmZ9M`%e^C6vw|av+OLxEa2)2@=)5wvR$mSfC2)o0i-;Zms;prKo&*hAum~U7h6F5
z#Wq^-@{olEu~w>0TH`j0hS=608k_X_OOvKGsXw*$AF#EL*mLiYH0f?KpYOTnoO{nb
zvwN=Gk-xYjTWcy5lLlCT%G>8AtPaIR$XQg12|sQT_}jt3Ql$*R1}R@~PAU|9Ams`s
z$uA2w$t8lTii3SC+lBsB&RO$0*mtfCtVz*?-KkWr#TE$urIZVnnu<9?@0cD+Lio*{
zW+5KxrN&BTbc!NY>elTw#0MK1441aCUKXyy@%1JlK1s?k#N(6<Lu}vLZe#@<9~z=!
z+dV_rUl=lCSk~{N{Ls1bJXP%TW$kB4LY(iu9ATvjOVzKH#(UAgJytMKJlt%7M}veG
z4To?z647W?am0c)6-PC+qeFukEh;)SM4^lOkE!UkphrV5`ZV<8I9CJw;pH)dJmv&f
zeJW0J`YiBs4q0%D^9}xZQ$rkvEmn;1%ux$Y(_SpfyDOm=Ov6t2G)!WOS2e9-Mne{S
zp@ZI1>G@5r4$q(`z01?xmcDPGzrDMy(A(a1xV1k|f_2}3=TK**r+2@nrHd}o8M-wX
zDMz_6t0JId4)g4*lRf63js+~TC%z<dUDA<{0tsnsG?>Ot_$rc@bd+LV#bq7u;);&<
za8<`L-q&#r*V)g$ln5Pe9AKOMacr00DY;pzzg((fH~b$-%dB~*oV8TOv+sw_M3@|9
z&(*O@nw_~%)rW4MT9V_U>281t3CKncH9nUt88NJHI5jdIDtSPMEDdK5uOiCr48ybn
z-K7*Had{cf+=SH@6Gm(p>t0H;#UzJeyM^^(Y^XmYOUqAwx(Ry#JJQ0~$P*UfTt%Fl
zZ?%GW+a`+Rt}qg8iKHncDU9S5Z2pv%lW)-33X15t9Z}3RVjnI-C4H;ux_i+^>KN*%
z9c~m;jFW10)63q263W^G2VNm1^ZKcOdBh^hDMLBkvVyD_M8u^21FH&`^e0lY5lI_X
zk+YDT*Jv|-^*qUW71mWqZrhd>um>Y{$;uv$)Mi#ww|HGv)QG-i(gdg_B~u4wsxF6W
z;HQ`%$Hdas`>>z+N59$jDpkxsUex0?I;?|!d^}nf(JIvxZL`_Q<ZpD~^v?X((LmuA
zG~&QoZMEd(pQmlnVPpiLnwDWwLa<wIAv1)CRb)|jcZ6VNzntFu6t5xzvc6lQ{3bGF
z9Q<!+@gcEwENIMz&(DU;3XL%~G@irf7z>XZBk7OvbpEep&Iw}-wN4nL>-vOCtUsRE
zD_C`*OfYbvTJQl&WGc%OdUi6AH8W!bPO;K8f1P0NWaC<lG0uLQJRt0nsr`b%sUw2s
z=?=l;(}sP2`jD^-XL<xbUgNVDyM;Y-(I>cm)+_k->`}o-v%P}tfiA%x0)2w6xqiXB
zb4Gr~{D82p%{K^Ig7yC!T3tco=68dMa{d^5QQ5+p8<JV?n3<(4=pre7AyK}6R=8?<
Sl3DCqW_Erd);vDWU*f;C;L?Wx

delta 1565
zcmZ9M`%fHI6vw|av+OLx?gCq0g{7dW0fA5jS}2cNDOR54QRGp1bfI7i2o#~hF7hb+
zAf{E|@?2gDSbW8ru5M96)t@wJ#QKXiBqsi1TKxkwYK@+IhyI|G%>8`NJ?G4vdnR+f
z-j>(5WlKqcV$c8+@X5PZCM>ba$Aq*Mg<HE(0uN$2Sd5e;SR-W$E=bveKS@Ug?ebHC
zb@EBUEhUx>&H1riSrhg>Ic?7$%kC5gu{uTHZ&ix+;<E(*Qt}0J4LO{iHw^bBA)Llm
zqY(Gax%y7BHChon6@g{Cct5B{cWEJ&vT&UXt2794%buo-KcbU#k@(mJJ<A>Yp)Lv%
zzS2eT6D~c5rTiW&(y!)cs6yN>{lYH9>+P#P7OF7!)$cNXTeAXdEUP<bu-=5T8YDP0
zG@#KJ7MxSjWJ0rw7c`v51r0_xOlaY*Ruyd~yr`ia9U3}uk*hAgyu_Do9@C@Zl8To#
zgrL`iK29fJTqg8$zQUIQ4Z#>RVaSi?4V!S89>**_>EZ2Q8jhe>!xW}@O*1NHHKd@|
z<LJqi0xhSz9gVF;j?QvNLtB%IdC&Kkd}Y5XxK%8ev4|!1Yj20|vKcFQQv%pP-$3NN
z8M#<e@s=5@STkcCZ<}!q8)m$NBDUWd&FcH?N)@WvF=wds9xHVwN>yygnJ*Qw+s^CK
zHRf{VvsG;$8@Uq3esqm8SAV6kv7^1w(e3%Re_al>P|bh=;YdXqweu)hGOX;i!5H6z
zP~k)N3j1s@b<pNlsASpWyfCcd;0>5<RxkX$2sjpRvqpLmxCxsV`_c`gvb6Ef?hORF
zaX6krc*Y9iwh&ysg^=o-2(^WIv7fuV2)9L$rVzUqkvDPR^Z1YGg$hp4ng~BypQaK{
zz#q&tq&1|Y2stQ53Cd7Ux(O9nLN)CHade6j3Va49=>eH|9M6)H$+JRD%pj&ye4aRE
zK3V?o@sIf%1{DR;pNLI`FAAxt_lA-rGYcOsO+H1Tyb24wkhdn8e%}&OGBrs?DJcc~
zK?cbF0hC>a(`<QoC!rkA(Js(K#Z^*X3!Q^U%OaXu>Tk8#g309HZSL}s%rkhN!cC~5
zlSs%WT}oblJ!-Rfk>rMI*nmOtAjq_dWDk6{kV1_-?17nSBL^PgRro+QAD1Y<mJAtn
z|Cu<RypbjSr~YNkBLrI+Pvb*~?T+j7#6EF||8DHmgg!sUCiJ<pGf^n^BPYuQyC(Al
zZ%q~p2Cxdj?WqVh%JkXwDa+mSMX;!;454eMYWL#wIb@kWBkY#xa=|aBn+4-$S_Efj
zggrUiD9q;B4#B&7%%5u)_SRgVVCsC2;Pv_Qg5mB?!K>~z!3XY(f}IOpf<G_l`4x-Z
z!v1ElMlfNi@_)l-e5ovokDo(7l-$iW0{lKsJ$`tt4~H>nxj34~?5v%=Q$c=yAAcA?
ZTp!*XV^1nktfV87eXty2Y#Zm^e*tGh-fRE>

diff --git a/src/java/org/mxchange/jcountry/data/JobsCountrySingletonBean.java b/src/java/org/mxchange/jcountry/data/JobsCountrySingletonBean.java
index 7d05693..26f7786 100644
--- a/src/java/org/mxchange/jcountry/data/JobsCountrySingletonBean.java
+++ b/src/java/org/mxchange/jcountry/data/JobsCountrySingletonBean.java
@@ -27,7 +27,7 @@ import org.mxchange.jcoreee.database.BaseDatabaseBean;
 import org.mxchange.jcountry.exceptions.CountryAlreadyAddedException;
 
 /**
- * A singleton bean for country informations
+ * A singleton EJB for country informations
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
diff --git a/src/java/org/mxchange/jphone/phonenumbers/mobileprovider/JobsMobileProviderSingletonBean.java b/src/java/org/mxchange/jphone/phonenumbers/mobileprovider/JobsMobileProviderSingletonBean.java
index 7340569..6f7677d 100644
--- a/src/java/org/mxchange/jphone/phonenumbers/mobileprovider/JobsMobileProviderSingletonBean.java
+++ b/src/java/org/mxchange/jphone/phonenumbers/mobileprovider/JobsMobileProviderSingletonBean.java
@@ -23,7 +23,7 @@ import javax.persistence.Query;
 import org.mxchange.jcoreee.database.BaseDatabaseBean;
 
 /**
- * A singleton bean for SMS provider informations
+ * A singleton EJB for mobile provider informations
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
diff --git a/src/java/org/mxchange/jphone/phonenumbers/mobileprovider/PizzaAdminMobileProviderSingletonBean.java b/src/java/org/mxchange/jphone/phonenumbers/mobileprovider/PizzaAdminMobileProviderSingletonBean.java
new file mode 100644
index 0000000..4ba7008
--- /dev/null
+++ b/src/java/org/mxchange/jphone/phonenumbers/mobileprovider/PizzaAdminMobileProviderSingletonBean.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2016 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.jphone.phonenumbers.mobileprovider;
+
+import java.text.MessageFormat;
+import java.util.GregorianCalendar;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import org.mxchange.jcoreee.database.BaseDatabaseBean;
+import org.mxchange.jphone.exceptions.MobileProviderAlreadyAddedException;
+
+/**
+ * An administrative singleton EJB for mobile provider informations
+ * <p>
+ * @author Roland Haeder<roland@mxchange.org>
+ */
+@Startup
+@Singleton (name = "adminmobileprovider", mappedName = "ejb/pizzaservice-singleton-admin-mobile-provider", description = "A singleton session bean for mobile provider informations, admin-edition")
+public class PizzaAdminMobileProviderSingletonBean extends BaseDatabaseBean implements AdminMobileProviderSingletonBeanRemote {
+
+	/**
+	 * Serial number
+	 */
+	private static final long serialVersionUID = 15_846_983_298_691_207L;
+
+	@Override
+	public MobileProvider addMobileProvider (final MobileProvider mobileProvider) throws MobileProviderAlreadyAddedException {
+		// Log trace message
+		this.getLoggerBeanLocal().logTrace(MessageFormat.format("addMobileProvider: mobileProvider={0} - CALLED!", mobileProvider)); //NOI18N
+
+		// Is the instance valid?
+		if (null == mobileProvider) {
+			// Throw NPE
+			throw new NullPointerException("mobileProvider is null"); //NOI18N
+		} else if (mobileProvider.getProviderDialPrefix() == null) {
+			// Throw NPE again
+			throw new NullPointerException("mobileProvider.providerDialPrefix is null"); //NOI18N
+		} else if (mobileProvider.getProviderDialPrefix() < 1) {
+			// Not valid
+			throw new IllegalArgumentException(MessageFormat.format("mobileProvider.providerDialPrefix={0} is not valid.", mobileProvider.getProviderDialPrefix())); //NOI18N
+		} else if (mobileProvider.getProviderCountry() == null) {
+			// Throw again a NPE
+			throw new NullPointerException("mobileProvider.providerCountry is null"); //NOI18N
+		} else if (mobileProvider.getProviderMailPattern() == null) {
+			// ... and again ...
+			throw new NullPointerException("mobileProvider.providerMailPattern is null"); //NOI18N
+		} else if (mobileProvider.getProviderMailPattern().isEmpty()) {
+			// Empty pattern set (not allowed)
+			throw new IllegalArgumentException("mobileProvider.providerMailPattern is empty."); //NOI18N
+		} else if (!mobileProvider.getProviderMailPattern().contains("%s")) { //NOI18N
+			// No place-holder found
+			throw new IllegalArgumentException(MessageFormat.format("mobileProvider.providerMailPattern={0} does not contain '%s' which is need to be replaced with the full mobile number.", mobileProvider.getProviderMailPattern())); //NOI18N
+		} else if (mobileProvider.getProviderName() == null) {
+			// Throw NPE again
+			throw new NullPointerException("mobileProvider.providerName is null"); //NOI18N
+		} else if (mobileProvider.getProviderName().isEmpty()) {
+			// Empty name is not allowed
+			throw new IllegalArgumentException("mobileProvider.providerName is empty"); //NOI18N
+		}
+
+		// Set creation timestamp
+		mobileProvider.setProviderEntryCreated(new GregorianCalendar());
+
+		// Persist it
+		this.getEntityManager().persist(mobileProvider);
+
+		// ... and flush it to get id back
+		this.getEntityManager().flush();
+
+		// Log trace message
+		this.getLoggerBeanLocal().logTrace(MessageFormat.format("addMobileProvider: mobileProvider.providerId={0} - EXIT!", mobileProvider.getProviderId())); //NOI18N
+
+		// Return updated
+		return mobileProvider;
+	}
+
+}
diff --git a/src/java/org/mxchange/jusercore/model/login/JobsUserLoginSessionBean.java b/src/java/org/mxchange/jusercore/model/login/JobsUserLoginSessionBean.java
index 2e0793c..fa34ff2 100644
--- a/src/java/org/mxchange/jusercore/model/login/JobsUserLoginSessionBean.java
+++ b/src/java/org/mxchange/jusercore/model/login/JobsUserLoginSessionBean.java
@@ -32,7 +32,7 @@ import org.mxchange.jusercore.model.user.UserUtils;
 import org.mxchange.jusercore.model.user.status.UserAccountStatus;
 
 /**
- * A session bean for user logins
+ * A session EJB for user logins
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
@@ -45,13 +45,13 @@ public class JobsUserLoginSessionBean extends BaseDatabaseBean implements UserLo
 	private static final long serialVersionUID = 21_785_978_127_581_965L;
 
 	/**
-	 * Registration bean
+	 * Registration EJB
 	 */
 	@EJB
 	private UserRegistrationSessionBeanRemote registerBean;
 
 	/**
-	 * User bean
+	 * User EJB
 	 */
 	@EJB
 	private UserSessionBeanRemote userBean;
diff --git a/src/java/org/mxchange/jusercore/model/register/JobsUserRegistrationSessionBean.java b/src/java/org/mxchange/jusercore/model/register/JobsUserRegistrationSessionBean.java
index 4228620..61dfec5 100644
--- a/src/java/org/mxchange/jusercore/model/register/JobsUserRegistrationSessionBean.java
+++ b/src/java/org/mxchange/jusercore/model/register/JobsUserRegistrationSessionBean.java
@@ -39,7 +39,7 @@ public class JobsUserRegistrationSessionBean extends BaseDatabaseBean implements
 	private static final long serialVersionUID = 12_348_958_986_818_627L;
 
 	/**
-	 * User bean
+	 * User EJB
 	 */
 	@EJB
 	private UserSessionBeanRemote userBean;
diff --git a/src/java/org/mxchange/jusercore/model/user/JobsUserSessionBean.java b/src/java/org/mxchange/jusercore/model/user/JobsUserSessionBean.java
index 669d2d4..3dbe54f 100644
--- a/src/java/org/mxchange/jusercore/model/user/JobsUserSessionBean.java
+++ b/src/java/org/mxchange/jusercore/model/user/JobsUserSessionBean.java
@@ -37,7 +37,7 @@ import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
 import org.mxchange.jusercore.model.user.status.UserAccountStatus;
 
 /**
- * A user bean
+ * A user EJB
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
@@ -50,7 +50,7 @@ public class JobsUserSessionBean extends BaseDatabaseBean implements UserSession
 	private static final long serialVersionUID = 542_145_347_916L;
 
 	/**
-	 * Registration bean
+	 * Registration EJB
 	 */
 	@EJB
 	private UserRegistrationSessionBeanRemote registerBean;
-- 
2.39.5