2 * Copyright (C) 2016 - 2022 Free Software Foundation
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.
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.
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/>.
17 package org.mxchange.jphone.model.phonenumbers.mobile;
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.Comparables;
38 import org.mxchange.jcoreutils.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;
44 * A POJO for dialable mobile numbers
46 * @author Roland Häder<roland@mxchange.org>
48 @Entity (name = "mobile_numbers")
49 @Table (name = "mobile_numbers")
52 @NamedQuery (name = "AllMobileNumbers", query = "SELECT m FROM mobile_numbers AS m ORDER BY m.mobileId ASC")
55 @SuppressWarnings ("PersistenceUnitPresent")
56 public class MobileNumber implements DialableMobileNumber {
62 private static final long serialVersionUID = 13_859_879_482_106L;
65 * Timestamp when this entry has been created
67 @Basic (optional = false)
68 @Temporal (TemporalType.TIMESTAMP)
69 @Column (name = "mobile_entry_created", nullable = false, updatable = false)
70 private Date mobileEntryCreated;
73 * Timestamp when this entry has been created
75 @Temporal (TemporalType.TIMESTAMP)
76 @Column (name = "mobile_entry_updated", insertable = false)
77 private Date mobileEntryUpdated;
83 @GeneratedValue (strategy = GenerationType.IDENTITY)
84 @Column (name = "mobile_id", nullable = false, updatable = false)
85 private Long mobileId;
88 * Number without prefix to dial
90 @Basic (optional = false)
91 @Column (name = "mobile_number", nullable = false)
92 private Long mobileNumber;
95 * Connection to table "mobile_provider" (for dial prefix and more data)
97 @JoinColumn (name = "mobile_provider_id", nullable = false)
98 @OneToOne (targetEntity = CellphoneProvider.class, cascade = CascadeType.REFRESH, optional = false)
99 private MobileProvider mobileProvider;
102 * Default constructor
104 public MobileNumber () {
108 * Constructor with mobile provider and number
110 * @param mobileProvider An instance of a MobileProvider class
111 * @param mobileNumber Mobile calling number
113 public MobileNumber (final MobileProvider mobileProvider, final Long mobileNumber) {
114 // Invoke default constructor
117 // Are all parameter set?
118 if (null == mobileNumber) {
120 throw new NullPointerException("mobileNumber is null"); //NOI18N
121 } else if (mobileNumber < 1) {
123 throw new IllegalArgumentException(MessageFormat.format("mobileNumber={0} is not valid.", mobileNumber)); //NOI18N
124 } else if (null == mobileProvider) {
126 throw new NullPointerException("mobileProvider is null"); //NOI18N
127 } else if (mobileProvider.getProviderId() == null) {
129 throw new NullPointerException("mobileProvider.providerId is null"); //NOI18N
130 } else if (mobileProvider.getProviderId() < 1) {
132 throw new IllegalArgumentException(MessageFormat.format("mobileProvider.providerId={0} is not valid", mobileProvider.getProviderId())); //NOI18N
136 this.mobileProvider = mobileProvider;
137 this.mobileNumber = mobileNumber;
141 public int compareTo (final DialableMobileNumber otherNumber) {
142 // Is the parameter given?
143 if (null == otherNumber) {
145 throw new NullPointerException("otherNumber is null"); //NOI18N
146 } else if (otherNumber.equals(this)) {
152 final int[] comparators = {
153 // First compare provider
154 MobileProviderUtils.compare(this.getMobileProvider(), otherNumber.getMobileProvider()),
156 SafeNumberUtils.compare(this.getMobileNumber(), otherNumber.getMobileNumber())
160 final int comparison = Comparables.checkAll(comparators);
167 public boolean equals (final Object object) {
168 if (null == object) {
170 } else if (this.getClass() != object.getClass()) {
174 final DialableMobileNumber dialableMobileNumber = (DialableMobileNumber) object;
176 if (!Objects.equals(this.getMobileId(), dialableMobileNumber.getMobileId())) {
178 } else if (!Objects.equals(this.getMobileProvider(), dialableMobileNumber.getMobileProvider())) {
180 } else if (!Objects.equals(this.getMobileNumber(), dialableMobileNumber.getMobileNumber())) {
188 @SuppressWarnings ("ReturnOfDateField")
189 public Date getMobileEntryCreated () {
190 return this.mobileEntryCreated;
194 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
195 public void setMobileEntryCreated (final Date mobileEntryCreated) {
196 this.mobileEntryCreated = mobileEntryCreated;
200 @SuppressWarnings ("ReturnOfDateField")
201 public Date getMobileEntryUpdated () {
202 return this.mobileEntryUpdated;
206 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
207 public void setMobileEntryUpdated (final Date mobileEntryUpdated) {
208 this.mobileEntryUpdated = mobileEntryUpdated;
212 public Long getMobileId () {
213 return this.mobileId;
217 public void setMobileId (final Long mobileId) {
218 this.mobileId = mobileId;
222 public Long getMobileNumber () {
223 return this.mobileNumber;
227 public void setMobileNumber (final Long mobileNumber) {
228 this.mobileNumber = mobileNumber;
232 public MobileProvider getMobileProvider () {
233 return this.mobileProvider;
237 public void setMobileProvider (final MobileProvider mobileProvider) {
238 this.mobileProvider = mobileProvider;
242 public int hashCode () {
245 hash = 97 * hash + Objects.hashCode(this.getMobileId());
246 hash = 97 * hash + Objects.hashCode(this.getMobileProvider());
247 hash = 97 * hash + Objects.hashCode(this.getMobileNumber());