]> git.mxchange.org Git - jphone-core.git/blob - src/org/mxchange/jphone/model/phonenumbers/mobile/MobileNumber.java
8585c82a837661e7a6a44dee9deede08f02aea6e
[jphone-core.git] / src / org / mxchange / jphone / model / phonenumbers / mobile / MobileNumber.java
1 /*
2  * Copyright (C) 2016, 2017 Roland Häder
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.util.Date;
20 import java.util.Objects;
21 import javax.persistence.Basic;
22 import javax.persistence.CascadeType;
23 import javax.persistence.Column;
24 import javax.persistence.Entity;
25 import javax.persistence.GeneratedValue;
26 import javax.persistence.GenerationType;
27 import javax.persistence.Id;
28 import javax.persistence.JoinColumn;
29 import javax.persistence.NamedQueries;
30 import javax.persistence.NamedQuery;
31 import javax.persistence.OneToOne;
32 import javax.persistence.Table;
33 import javax.persistence.Temporal;
34 import javax.persistence.TemporalType;
35 import javax.persistence.Transient;
36 import org.mxchange.jcountry.model.data.Country;
37 import org.mxchange.jphone.model.phonenumbers.mobileprovider.CellphoneProvider;
38 import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
39
40 /**
41  * A POJO for dialable cellphone numbers
42  * <p>
43  * @author Roland Häder<roland@mxchange.org>
44  */
45 @Entity (name = "mobile_numbers")
46 @Table (name = "mobile_numbers")
47 @NamedQueries (
48                 {
49                         @NamedQuery (name = "AllMobileNumbers", query = "SELECT c FROM mobile_numbers AS c ORDER BY c.phoneId ASC"),
50                         @NamedQuery (name = "SearchMobileNumberId", query = "SELECT c FROM mobile_numbers AS c WHERE c.phoneId = :mobileNumberId")
51                 }
52 )
53 @SuppressWarnings ("PersistenceUnitPresent")
54 public class MobileNumber implements DialableMobileNumber {
55
56         /**
57          * Serial number
58          */
59         @Transient
60         private static final long serialVersionUID = 13_859_879_482_106L;
61
62         /**
63          * Connection to table "mobile_provider" (for dial prefix and more data)
64          */
65         @JoinColumn (name = "mobile_provider_id", nullable = false)
66         @OneToOne (targetEntity = CellphoneProvider.class, cascade = CascadeType.REFRESH, optional = false)
67         private MobileProvider mobileProvider;
68
69         /**
70          * Timestamp when this entry has been created
71          */
72         @Basic (optional = false)
73         @Temporal (TemporalType.TIMESTAMP)
74         @Column (name = "mobile_entry_created", nullable = false, updatable = false)
75         private Date phoneEntryCreated;
76
77         /**
78          * Timestamp when this entry has been created
79          */
80         @Temporal (TemporalType.TIMESTAMP)
81         @Column (name = "mobile_entry_updated", updatable = false)
82         private Date phoneEntryUpdated;
83
84         /**
85          * Id number
86          */
87         @Id
88         @GeneratedValue (strategy = GenerationType.IDENTITY)
89         @Column (name = "mobile_id", nullable = false, updatable = false)
90         private Long phoneId;
91
92         /**
93          * Number without prefix to dial
94          */
95         @Basic (optional = false)
96         @Column (name = "mobile_number", nullable = false)
97         private Long phoneNumber;
98
99         /**
100          * Default constructor
101          */
102         public MobileNumber () {
103         }
104
105         /**
106          * Constructor with cellphone provider and number
107          * <p>
108          * @param mobileProvider Mobile provider
109          * @param mobileNumber Mobile number
110          */
111         public MobileNumber (final MobileProvider mobileProvider, final Long mobileNumber) {
112                 // Call default constructor
113                 this();
114
115                 // Set all values
116                 this.mobileProvider = mobileProvider;
117                 this.phoneNumber = mobileNumber;
118         }
119
120         @Override
121         public boolean equals (final Object object) {
122                 if (null == object) {
123                         return false;
124                 } else if (this.getClass() != object.getClass()) {
125                         return false;
126                 }
127
128                 final DialableMobileNumber other = (DialableMobileNumber) object;
129
130                 if (!Objects.equals(this.getPhoneId(), other.getPhoneId())) {
131                         return false;
132                 } else if (!Objects.equals(this.getMobileProvider(), other.getMobileProvider())) {
133                         return false;
134                 } else if (!Objects.equals(this.getPhoneNumber(), other.getPhoneNumber())) {
135                         return false;
136                 }
137
138                 return true;
139         }
140
141         @Override
142         public MobileProvider getMobileProvider () {
143                 return this.mobileProvider;
144         }
145
146         @Override
147         public void setMobileProvider (final MobileProvider mobileProvider) {
148                 this.mobileProvider = mobileProvider;
149         }
150
151         @Override
152         @Deprecated
153         public Integer getPhoneAreaCode () {
154                 throw new UnsupportedOperationException("Mobile numbers don't have area codes. Please fix your code."); //NOI18N
155         }
156
157         @Override
158         @Deprecated
159         public void setPhoneAreaCode (final Integer phoneAreaCode) {
160                 throw new UnsupportedOperationException("Mobile numbers don't have area codes. Please fix your code."); //NOI18N
161         }
162
163         @Override
164         @Deprecated
165         public Country getPhoneCountry () {
166                 throw new UnsupportedOperationException("The country code is provided by MobileProvider."); //To change body of generated methods, choose Tools | Templates.
167         }
168
169         @Override
170         @Deprecated
171         public void setPhoneCountry (final Country country) {
172                 throw new UnsupportedOperationException("The country code is provided by MobileProvider."); //To change body of generated methods, choose Tools | Templates.
173         }
174
175         @Override
176         @SuppressWarnings ("ReturnOfDateField")
177         public Date getPhoneEntryCreated () {
178                 return this.phoneEntryCreated;
179         }
180
181         @Override
182         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
183         public void setPhoneEntryCreated (final Date phoneEntryCreated) {
184                 this.phoneEntryCreated = phoneEntryCreated;
185         }
186
187         @Override
188         @SuppressWarnings ("ReturnOfDateField")
189         public Date getPhoneEntryUpdated () {
190                 return this.phoneEntryUpdated;
191         }
192
193         @Override
194         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
195         public void setPhoneEntryUpdated (final Date phoneEntryUpdated) {
196                 this.phoneEntryUpdated = phoneEntryUpdated;
197         }
198
199         @Override
200         public Long getPhoneId () {
201                 return this.phoneId;
202         }
203
204         @Override
205         public void setPhoneId (final Long phoneId) {
206                 this.phoneId = phoneId;
207         }
208
209         @Override
210         public Long getPhoneNumber () {
211                 return this.phoneNumber;
212         }
213
214         @Override
215         public void setPhoneNumber (final Long phoneNumber) {
216                 this.phoneNumber = phoneNumber;
217         }
218
219         @Override
220         public int hashCode () {
221                 int hash = 5;
222
223                 hash = 97 * hash + Objects.hashCode(this.getPhoneId());
224                 hash = 97 * hash + Objects.hashCode(this.getMobileProvider());
225                 hash = 97 * hash + Objects.hashCode(this.getPhoneNumber());
226
227                 return hash;
228         }
229
230 }