]> git.mxchange.org Git - jphone-core.git/blob - src/org/mxchange/jphone/model/phonenumbers/mobile/MobileNumber.java
0c895db05a8b10a9d09ffb08e11822def31627d4
[jphone-core.git] / src / org / mxchange / jphone / model / phonenumbers / mobile / MobileNumber.java
1 /*
2  * Copyright (C) 2016 - 2022 Free Software Foundation
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 package org.mxchange.jphone.model.phonenumbers.mobile;
18
19 import java.text.MessageFormat;
20 import java.util.Date;
21 import java.util.Objects;
22 import javax.persistence.Basic;
23 import javax.persistence.CascadeType;
24 import javax.persistence.Column;
25 import javax.persistence.Entity;
26 import javax.persistence.GeneratedValue;
27 import javax.persistence.GenerationType;
28 import javax.persistence.Id;
29 import javax.persistence.JoinColumn;
30 import javax.persistence.NamedQueries;
31 import javax.persistence.NamedQuery;
32 import javax.persistence.OneToOne;
33 import javax.persistence.Table;
34 import javax.persistence.Temporal;
35 import javax.persistence.TemporalType;
36 import javax.persistence.Transient;
37 import org.mxchange.jcoreutils.comparable.ComparableUtils;
38 import org.mxchange.jcoreutils.number.SafeNumberUtils;
39 import org.mxchange.jphone.model.phonenumbers.mobileprovider.CellphoneProvider;
40 import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
41 import org.mxchange.jphone.model.utils.MobileProviderUtils;
42
43 /**
44  * A POJO for dialable mobile numbers
45  * <p>
46  * @author Roland Häder<roland@mxchange.org>
47  */
48 @Entity (name = "mobile_numbers")
49 @Table (name = "mobile_numbers")
50 @NamedQueries (
51                 {
52                         @NamedQuery (name = "AllMobileNumbers", query = "SELECT m FROM mobile_numbers AS m ORDER BY m.mobileId ASC")
53                 }
54 )
55 @SuppressWarnings ("PersistenceUnitPresent")
56 public class MobileNumber implements DialableMobileNumber {
57
58         /**
59          * Serial number
60          */
61         @Transient
62         private static final long serialVersionUID = 13_859_879_482_106L;
63
64         /**
65          * Timestamp when this entry has been created
66          */
67         @Basic (optional = false)
68         @Temporal (TemporalType.TIMESTAMP)
69         @Column (name = "mobile_entry_created", nullable = false, updatable = false)
70         private Date mobileEntryCreated;
71
72         /**
73          * Timestamp when this entry has been created
74          */
75         @Temporal (TemporalType.TIMESTAMP)
76         @Column (name = "mobile_entry_updated", insertable = false)
77         private Date mobileEntryUpdated;
78
79         /**
80          * Id number
81          */
82         @Id
83         @GeneratedValue (strategy = GenerationType.IDENTITY)
84         @Column (name = "mobile_id", nullable = false, updatable = false)
85         private Long mobileId;
86
87         /**
88          * Number without prefix to dial
89          */
90         @Basic (optional = false)
91         @Column (name = "mobile_number", nullable = false)
92         private Long mobileNumber;
93
94         /**
95          * Connection to table "mobile_provider" (for dial prefix and more data)
96          */
97         @JoinColumn (name = "mobile_provider_id", nullable = false)
98         @OneToOne (targetEntity = CellphoneProvider.class, cascade = CascadeType.REFRESH, optional = false)
99         private MobileProvider mobileProvider;
100
101         /**
102          * Default constructor
103          */
104         public MobileNumber () {
105         }
106
107         /**
108          * Constructor with mobile provider and number
109          * <p>
110          * @param mobileProvider An instance of a MobileProvider class
111          * @param mobileNumber   Mobile calling number
112          */
113         public MobileNumber (final MobileProvider mobileProvider, final Long mobileNumber) {
114                 // Invoke default constructor
115                 this();
116
117                 // Are all parameter set?
118                 if (null == mobileNumber) {
119                         // Throw NPE
120                         throw new NullPointerException("mobileNumber is null"); //NOI18N
121                 } else if (mobileNumber < 1) {
122                         // Throw IAE
123                         throw new IllegalArgumentException(MessageFormat.format("mobileNumber={0} is not valid.", mobileNumber)); //NOI18N
124                 } else if (null == mobileProvider) {
125                         // Throw NPE
126                         throw new NullPointerException("mobileProvider is null"); //NOI18N
127                 } else if (mobileProvider.getProviderId() == null) {
128                         // Throw NPE again
129                         throw new NullPointerException("mobileProvider.providerId is null"); //NOI18N
130                 } else if (mobileProvider.getProviderId() < 1) {
131                         // Throw IAE
132                         throw new IllegalArgumentException(MessageFormat.format("mobileProvider.providerId={0} is not valid", mobileProvider.getProviderId())); //NOI18N
133                 }
134
135                 // Set all values
136                 this.mobileProvider = mobileProvider;
137                 this.mobileNumber = mobileNumber;
138         }
139
140         @Override
141         public int compareTo (final DialableMobileNumber mobileNumber) {
142                 // Is the parameter given?
143                 if (null == mobileNumber) {
144                         // Throw NPE
145                         throw new NullPointerException("Paramegter 'mobileNumber' is null"); //NOI18N
146                 } else if (Objects.equals(this, mobileNumber)) {
147                         // Same object
148                         return 0;
149                 }
150
151                 // Init comparisons
152                 final int[] comparators = {
153                         // First compare provider
154                         MobileProviderUtils.compare(this.getMobileProvider(), mobileNumber.getMobileProvider()),
155                         // Last number
156                         SafeNumberUtils.compare(this.getMobileNumber(), mobileNumber.getMobileNumber())
157                 };
158
159                 // Check all values
160                 final int comparison = ComparableUtils.checkAll(comparators);
161
162                 // Return value
163                 return comparison;
164         }
165
166         @Override
167         public boolean equals (final Object object) {
168                 if (null == object) {
169                         return false;
170                 } else if (this.getClass() != object.getClass()) {
171                         return false;
172                 }
173
174                 final DialableMobileNumber dialableMobileNumber = (DialableMobileNumber) object;
175
176                 if (!Objects.equals(this.getMobileId(), dialableMobileNumber.getMobileId())) {
177                         return false;
178                 } else if (!Objects.equals(this.getMobileProvider(), dialableMobileNumber.getMobileProvider())) {
179                         return false;
180                 } else if (!Objects.equals(this.getMobileNumber(), dialableMobileNumber.getMobileNumber())) {
181                         return false;
182                 }
183
184                 return true;
185         }
186
187         @Override
188         @SuppressWarnings ("ReturnOfDateField")
189         public Date getMobileEntryCreated () {
190                 return this.mobileEntryCreated;
191         }
192
193         @Override
194         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
195         public void setMobileEntryCreated (final Date mobileEntryCreated) {
196                 this.mobileEntryCreated = mobileEntryCreated;
197         }
198
199         @Override
200         @SuppressWarnings ("ReturnOfDateField")
201         public Date getMobileEntryUpdated () {
202                 return this.mobileEntryUpdated;
203         }
204
205         @Override
206         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
207         public void setMobileEntryUpdated (final Date mobileEntryUpdated) {
208                 this.mobileEntryUpdated = mobileEntryUpdated;
209         }
210
211         @Override
212         public Long getMobileId () {
213                 return this.mobileId;
214         }
215
216         @Override
217         public void setMobileId (final Long mobileId) {
218                 this.mobileId = mobileId;
219         }
220
221         @Override
222         public Long getMobileNumber () {
223                 return this.mobileNumber;
224         }
225
226         @Override
227         public void setMobileNumber (final Long mobileNumber) {
228                 this.mobileNumber = mobileNumber;
229         }
230
231         @Override
232         public MobileProvider getMobileProvider () {
233                 return this.mobileProvider;
234         }
235
236         @Override
237         public void setMobileProvider (final MobileProvider mobileProvider) {
238                 this.mobileProvider = mobileProvider;
239         }
240
241         @Override
242         public int hashCode () {
243                 int hash = 5;
244
245                 hash = 97 * hash + Objects.hashCode(this.getMobileId());
246                 hash = 97 * hash + Objects.hashCode(this.getMobileProvider());
247                 hash = 97 * hash + Objects.hashCode(this.getMobileNumber());
248
249                 return hash;
250         }
251
252 }