]> git.mxchange.org Git - jphone-core.git/blob - src/org/mxchange/jphone/phonenumbers/landline/LandLineNumber.java
Continued a bit:
[jphone-core.git] / src / org / mxchange / jphone / phonenumbers / landline / LandLineNumber.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.phonenumbers.landline;
18
19 import java.util.Calendar;
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.data.Country;
37 import org.mxchange.jcountry.data.CountryData;
38
39 /**
40  * A POJO for dialable phone numbers
41  * <p>
42  * @author Roland Häder<roland@mxchange.org>
43  */
44 @Entity (name = "landline_numbers")
45 @Table (name = "landline_numbers")
46 @NamedQueries (
47                 {
48                         @NamedQuery (name = "AllLandLineNumbers", query = "SELECT p FROM landline_numbers AS p ORDER BY p.phoneId ASC"),
49                         @NamedQuery (name = "SearchLandLineNumberId", query = "SELECT p FROM landline_numbers AS p WHERE p.phoneId = :landLineNumberId")
50                 }
51 )
52 @SuppressWarnings ("PersistenceUnitPresent")
53 public class LandLineNumber implements DialableLandLineNumber {
54
55         /**
56          * Serial number
57          */
58         @Transient
59         private static final long serialVersionUID = 18_563_748_781_956L;
60
61         /**
62          * Area code (example: 2151 for Krefeld)
63          */
64         @Basic (optional = false)
65         @Column (name = "landline_area_code", length = 10, nullable = false)
66         private Integer phoneAreaCode;
67
68         /**
69          * Connection to table "country_data"
70          */
71         @JoinColumn (name = "landline_country_id", nullable = false, updatable = false)
72         @OneToOne (targetEntity = CountryData.class, cascade = CascadeType.REFRESH, optional = false)
73         private Country phoneCountry;
74
75         /**
76          * Timestamp when this entry has been created
77          */
78         @Basic (optional = false)
79         @Temporal (TemporalType.TIMESTAMP)
80         @Column (name = "landline_entry_created", nullable = false, updatable = false)
81         private Calendar phoneEntryCreated;
82
83         /**
84          * Timestamp when this entry has been created
85          */
86         @Temporal (TemporalType.TIMESTAMP)
87         @Column (name = "landline_entry_updated", updatable = false)
88         private Calendar phoneEntryUpdated;
89
90         /**
91          * Id number
92          */
93         @Id
94         @GeneratedValue (strategy = GenerationType.IDENTITY)
95         @Column (name = "landline_id", length = 10, nullable = false, updatable = false)
96         private Long phoneId;
97
98         /**
99          * Phone number with out dial prefix
100          */
101         @Basic (optional = false)
102         @Column (name = "landline_number", nullable = false)
103         private Long phoneNumber;
104
105         /**
106          * Default constructor
107          */
108         public LandLineNumber () {
109         }
110
111         /**
112          * Constructor with country instance, area code and number
113          * <p>
114          * @param phoneCountry Country instance
115          * @param phoneAreaCode Phone area code
116          * @param phoneNumber Phone number
117          */
118         public LandLineNumber (final Country phoneCountry, final Integer phoneAreaCode, final Long phoneNumber) {
119                 // Call default constructor
120                 this();
121
122                 // Set all values
123                 this.phoneCountry = phoneCountry;
124                 this.phoneAreaCode = phoneAreaCode;
125                 this.phoneNumber = phoneNumber;
126         }
127
128         @Override
129         public void copyAll (final DialableLandLineNumber sourceNumber) {
130                 // Validate instance
131                 if (null == sourceNumber) {
132                         // Throw NPE
133                         throw new NullPointerException("sourceNumber is null"); //NOI18N
134                 }
135
136                 // Copy all
137                 this.setPhoneAreaCode(sourceNumber.getPhoneAreaCode());
138                 this.getPhoneCountry().copyAll(sourceNumber.getPhoneCountry());
139                 this.setPhoneEntryCreated(sourceNumber.getPhoneEntryCreated());
140                 this.setPhoneId(sourceNumber.getPhoneId());
141                 this.setPhoneNumber(sourceNumber.getPhoneNumber());
142         }
143
144         @Override
145         public boolean equals (final Object object) {
146                 if (null == object) {
147                         return false;
148                 } else if (this.getClass() != object.getClass()) {
149                         return false;
150                 }
151
152                 final DialableLandLineNumber other = (DialableLandLineNumber) object;
153
154                 if (!Objects.equals(this.getPhoneId(), other.getPhoneId())) {
155                         return false;
156                 } else if (!Objects.equals(this.getPhoneNumber(), other.getPhoneNumber())) {
157                         return false;
158                 } else if (!Objects.equals(this.getPhoneAreaCode(), other.getPhoneAreaCode())) {
159                         return false;
160                 } else if (!Objects.equals(this.getPhoneCountry(), other.getPhoneCountry())) {
161                         return false;
162                 }
163
164                 return true;
165         }
166
167         @Override
168         public Integer getPhoneAreaCode () {
169                 return this.phoneAreaCode;
170         }
171
172         @Override
173         public void setPhoneAreaCode (final Integer phoneAreaCode) {
174                 this.phoneAreaCode = phoneAreaCode;
175         }
176
177         @Override
178         public Country getPhoneCountry () {
179                 return this.phoneCountry;
180         }
181
182         @Override
183         public void setPhoneCountry (final Country phoneCountry) {
184                 this.phoneCountry = phoneCountry;
185         }
186
187         @Override
188         @SuppressWarnings ("ReturnOfDateField")
189         public Calendar getPhoneEntryCreated () {
190                 return this.phoneEntryCreated;
191         }
192
193         @Override
194         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
195         public void setPhoneEntryCreated (final Calendar phoneEntryCreated) {
196                 this.phoneEntryCreated = phoneEntryCreated;
197         }
198
199         @Override
200         @SuppressWarnings ("ReturnOfDateField")
201         public Calendar getPhoneEntryUpdated () {
202                 return this.phoneEntryUpdated;
203         }
204
205         @Override
206         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
207         public void setPhoneEntryUpdated (final Calendar phoneEntryUpdated) {
208                 this.phoneEntryUpdated = phoneEntryUpdated;
209         }
210
211         @Override
212         public Long getPhoneId () {
213                 return this.phoneId;
214         }
215
216         @Override
217         public void setPhoneId (final Long phoneId) {
218                 this.phoneId = phoneId;
219         }
220
221         @Override
222         public Long getPhoneNumber () {
223                 return this.phoneNumber;
224         }
225
226         @Override
227         public void setPhoneNumber (final Long phoneNumber) {
228                 this.phoneNumber = phoneNumber;
229         }
230
231         @Override
232         public int hashCode () {
233                 int hash = 7;
234
235                 hash = 47 * hash + Objects.hashCode(this.getPhoneId());
236                 hash = 47 * hash + Objects.hashCode(this.getPhoneNumber());
237                 hash = 47 * hash + Objects.hashCode(this.getPhoneAreaCode());
238                 hash = 47 * hash + Objects.hashCode(this.getPhoneCountry());
239
240                 return hash;
241         }
242
243 }