]> git.mxchange.org Git - jjobs-war.git/blob - src/java/org/mxchange/jjobs/beans/contact/JobsAdminContactWebRequestBean.java
Don't cherry-pick:
[jjobs-war.git] / src / java / org / mxchange / jjobs / beans / contact / JobsAdminContactWebRequestBean.java
1 /*
2  * Copyright (C) 2016 - 2020 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 Affero General Public License as
6  * published by the Free Software Foundation, either version 3 of the
7  * License, or (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 Affero General Public License for more details.
13  *
14  * You should have received a copy of the GNU Affero General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 package org.mxchange.jjobs.beans.contact;
18
19 import java.text.MessageFormat;
20 import java.util.Date;
21 import javax.ejb.EJB;
22 import javax.enterprise.context.RequestScoped;
23 import javax.enterprise.event.Event;
24 import javax.enterprise.event.Observes;
25 import javax.enterprise.inject.Any;
26 import javax.faces.FacesException;
27 import javax.inject.Inject;
28 import javax.inject.Named;
29 import org.mxchange.jcontacts.events.contact.add.AdminAddedContactEvent;
30 import org.mxchange.jcontacts.events.contact.add.ObservableAdminAddedContactEvent;
31 import org.mxchange.jcontacts.events.contact.created.ObservableCreatedContactEvent;
32 import org.mxchange.jcontacts.events.contact.deleted.AdminDeletedContactEvent;
33 import org.mxchange.jcontacts.events.contact.deleted.ObservableAdminDeletedContactEvent;
34 import org.mxchange.jcontacts.events.contact.update.AdminUpdatedContactEvent;
35 import org.mxchange.jcontacts.events.contact.update.ObservableAdminUpdatedContactEvent;
36 import org.mxchange.jcontacts.exceptions.ContactAlreadyAddedException;
37 import org.mxchange.jcontacts.exceptions.ContactNotFoundException;
38 import org.mxchange.jcontacts.model.contact.AdminContactSessionBeanRemote;
39 import org.mxchange.jcontacts.model.contact.Contact;
40 import org.mxchange.jcontacts.model.contact.ContactSessionBeanRemote;
41 import org.mxchange.jcontacts.model.contact.Contacts;
42 import org.mxchange.jcontacts.model.contact.UserContact;
43 import org.mxchange.jcontacts.model.contact.title.PersonalTitle;
44 import org.mxchange.jcountry.model.data.Country;
45 import org.mxchange.jjobs.beans.BaseJobsBean;
46 import org.mxchange.jjobs.beans.contact.list.JobsContactListWebViewController;
47 import org.mxchange.jphone.model.phonenumbers.DialableNumber;
48 import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber;
49 import org.mxchange.jphone.model.phonenumbers.fax.FaxNumber;
50 import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber;
51 import org.mxchange.jphone.model.phonenumbers.landline.LandLineNumber;
52 import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber;
53 import org.mxchange.jphone.model.phonenumbers.mobile.MobileNumber;
54 import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
55
56 /**
57  * An administrative user controller (bean)
58  * <p>
59  * @author Roland Häder<roland@mxchange.org>
60  */
61 @Named ("adminContactController")
62 @RequestScoped
63 public class JobsAdminContactWebRequestBean extends BaseJobsBean implements JobsAdminContactWebRequestController {
64
65         /**
66          * Serial number
67          */
68         private static final long serialVersionUID = 542_145_347_916L;
69
70         /**
71          * Academic academicTitle
72          */
73         private String academicTitle;
74
75         /**
76          * An event fired when the administrator has added a new contact
77          */
78         @Inject
79         @Any
80         private Event<ObservableAdminAddedContactEvent> addedContactEvent;
81
82         /**
83          * Administrative contact EJB
84          */
85         @EJB (lookup = "java:global/jjobs-ejb/adminContact!org.mxchange.jcontacts.model.contact.AdminContactSessionBeanRemote")
86         private AdminContactSessionBeanRemote adminContactBean;
87
88         /**
89          * Birth day
90          */
91         private Date birthday;
92
93         /**
94          * City
95          */
96         private String city;
97
98         /**
99          * Optional comments
100          */
101         private String comment;
102
103         /**
104          * Current contact instance
105          */
106         private Contact contact;
107
108         /**
109          * EJB for general contact purposes
110          */
111         @EJB (lookup = "java:global/jjobs-ejb/contact!org.mxchange.jcontacts.model.contact.ContactSessionBeanRemote")
112         private ContactSessionBeanRemote contactBean;
113
114         /**
115          * General contact controller
116          */
117         @Inject
118         private JobsContactWebRequestController contactController;
119
120         /**
121          * Country instance
122          */
123         private Country contactCountry;
124
125         /**
126          * Contact id
127          */
128         private Long contactId;
129
130         /**
131          * An instance of a contact list controller
132          */
133         @Inject
134         private JobsContactListWebViewController contactListController;
135
136         /**
137          * Event being fired when an administrator has deleted a contact
138          */
139         @Any
140         @Inject
141         private Event<ObservableAdminDeletedContactEvent> deletedContactEvent;
142
143         /**
144          * Email address
145          */
146         private String emailAddress;
147
148         /**
149          * Family name
150          */
151         private String familyName;
152
153         /**
154          * Fax number's area code
155          */
156         private Integer faxAreaCode;
157
158         /**
159          * Country instance for fax number
160          */
161         private Country faxCountry;
162
163         /**
164          * Fax id number
165          */
166         private Long faxId;
167
168         /**
169          * Fax number
170          */
171         private Long faxNumber;
172
173         /**
174          * First name
175          */
176         private String firstName;
177
178         /**
179          * House number
180          */
181         private Short houseNumber;
182
183         /**
184          * House number extension
185          */
186         private String houseNumberExtension;
187
188         /**
189          * Whether a fax entry has been unlinked
190          */
191         private boolean isFaxUnlinked;
192
193         /**
194          * Whether a land-line number has been unlinked
195          */
196         private boolean isLandLineUnlinked;
197
198         /**
199          * Whether a cmobile entry has been unlinked
200          */
201         private boolean isMobileNumberUnlinked;
202
203         /**
204          * Phone number area code
205          */
206         private Integer landLineAreaCode;
207
208         /**
209          * Country instance for phone number
210          */
211         private Country landLineCountry;
212
213         /**
214          * Land-line id number
215          */
216         private Long landLineId;
217
218         /**
219          * Phone number
220          */
221         private Long landLineNumber;
222
223         /**
224          * Mobile id number
225          */
226         private Long mobileId;
227
228         /**
229          * Mobile number
230          */
231         private Long mobileNumber;
232
233         /**
234          * Mobile number's provider
235          */
236         private MobileProvider mobileProvider;
237
238         /**
239          * PersonalTitle instance
240          */
241         private PersonalTitle personalTitle;
242
243         /**
244          * Street
245          */
246         private String street;
247
248         /**
249          * An event fired when the administrator has updated contact data
250          */
251         @Inject
252         @Any
253         private Event<ObservableAdminUpdatedContactEvent> updatedContactEvent;
254
255         /**
256          * ZIP code
257          */
258         private Integer zipCode;
259
260         /**
261          * Default constructor
262          */
263         public JobsAdminContactWebRequestBean () {
264                 // Call super constructor
265                 super();
266         }
267
268         /**
269          * Adds contact data to database and redirects on success. If the contact is
270          * already found, a proper exception is thrown.
271          */
272         public void addContact () {
273                 // Are all minimum fields set?
274                 if (this.getPersonalTitle() == null) {
275                         // Throw NPE
276                         throw new NullPointerException("personalTitle is null"); //NOI18N
277                 } else if (this.getFirstName() == null) {
278                         // Throw NPE
279                         throw new NullPointerException("firstName is null"); //NOI18N
280                 } else if (this.getFirstName().isEmpty()) {
281                         // Empty string
282                         throw new IllegalStateException("firstName is empty"); //NOI18N
283                 } else if (this.getFamilyName() == null) {
284                         // Throw NPE
285                         throw new NullPointerException("familyName is null"); //NOI18N
286                 } else if (this.getFamilyName().isEmpty()) {
287                         // Empty string
288                         throw new IllegalStateException("familyName is empty"); //NOI18N
289                 }
290
291                 // Create new contact instance
292                 final Contact createdContact = this.createContactInstance();
293
294                 // Default is not same contact
295                 if (this.contactListController.isContactFound(createdContact)) {
296                         // Already registered
297                         throw new FacesException(new ContactAlreadyAddedException(createdContact));
298                 }
299
300                 // Init contact
301                 final Contact updatedContact;
302
303                 // Try to call EJB
304                 try {
305                         // Call EJB
306                         updatedContact = this.adminContactBean.addContact(createdContact);
307                 } catch (final ContactAlreadyAddedException ex) {
308                         // Throw again
309                         throw new FacesException(ex);
310                 }
311
312                 // Fire event
313                 this.addedContactEvent.fire(new AdminAddedContactEvent(updatedContact));
314
315                 // Clear this bean
316                 this.clear();
317         }
318
319         /**
320          * Observer for events being fired when a bean helper has successfully
321          * created a contact instance.
322          * <p>
323          * @param event Event being fired
324          */
325         public void afterCreatedContactEvent (@Observes final ObservableCreatedContactEvent event) {
326                 // Log message
327                 //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("AdminContactController::afterCreatedContactEvent(): contact={0} - CALLED!", contact)); //NOI18N
328
329                 // The event instance must be valid
330                 if (null == event) {
331                         // Throw NPE again
332                         throw new NullPointerException("event is null"); //NOI18N
333                 } else if (event.getCreatedContact() == null) {
334                         // Throw NPE again
335                         throw new NullPointerException("event.createdContact is null"); //NOI18N //NOI18N
336                 } else if (event.getCreatedContact().getContactId() == null) {
337                         // Throw NPE again
338                         throw new NullPointerException("event.createdContact.contactId is null"); //NOI18N //NOI18N
339                 } else if (event.getCreatedContact().getContactId() < 1) {
340                         // Not valid
341                         throw new IllegalStateException(MessageFormat.format("event.createdContact.contactId={0} is not valid.", event.getCreatedContact().getContactId())); //NOI18N
342                 }
343
344                 // Set contact for e.g. delete method
345                 this.setContact(event.getCreatedContact());
346
347                 // Get contact instance from event
348                 final Contact createdContact = event.getCreatedContact();
349
350                 // Set all fields: contact
351                 this.setContactId(createdContact.getContactId());
352                 this.setAcademicTitle(createdContact.getContactTitle());
353                 this.setBirthday(createdContact.getContactBirthday());
354                 this.setCity(createdContact.getContactCity());
355                 this.setComment(createdContact.getContactComment());
356                 this.setContactCountry(createdContact.getContactCountry());
357                 this.setEmailAddress(createdContact.getContactEmailAddress());
358                 this.setFamilyName(createdContact.getContactFamilyName());
359                 this.setFirstName(createdContact.getContactFirstName());
360                 this.setPersonalTitle(createdContact.getContactPersonalTitle());
361                 this.setHouseNumber(createdContact.getContactHouseNumber());
362                 this.setHouseNumberExtension(createdContact.getContactHouseNumberExtension());
363                 this.setStreet(createdContact.getContactStreet());
364                 this.setZipCode(createdContact.getContactZipCode());
365
366                 // Is the cell phone set?
367                 if (createdContact.getContactMobileNumber() instanceof DialableMobileNumber) {
368                         // ... cmobile data
369                         this.setMobileId(createdContact.getContactMobileNumber().getMobileId());
370                         this.setMobileProvider(createdContact.getContactMobileNumber().getMobileProvider());
371                         this.setMobileNumber(createdContact.getContactMobileNumber().getMobileNumber());
372                 }
373
374                 // Is the fax set?
375                 if (createdContact.getContactFaxNumber() instanceof DialableFaxNumber) {
376                         // ... fax data
377                         this.setFaxId(createdContact.getContactFaxNumber().getPhoneId());
378                         this.setFaxAreaCode(createdContact.getContactFaxNumber().getPhoneAreaCode());
379                         this.setFaxCountry(createdContact.getContactFaxNumber().getPhoneCountry());
380                         this.setFaxNumber(createdContact.getContactFaxNumber().getPhoneNumber());
381                 }
382
383                 // Is the land-line number set?
384                 if (createdContact.getContactLandLineNumber() instanceof DialableLandLineNumber) {
385                         // .. land-line data
386                         this.setLandLineId(createdContact.getContactLandLineNumber().getPhoneId());
387                         this.setLandLineAreaCode(createdContact.getContactLandLineNumber().getPhoneAreaCode());
388                         this.setLandLineCountry(createdContact.getContactLandLineNumber().getPhoneCountry());
389                         this.setLandLineNumber(createdContact.getContactLandLineNumber().getPhoneNumber());
390                 }
391
392                 // Log message
393                 //* NOISY-DEBUG: */ System.out.println("AdminContactController::afterCreatedContactEvent(): EXIT!"); //NOI18N
394         }
395
396         @Override
397         public Contact createContactInstance () {
398                 // Are all minimum fields set?
399                 if (this.getPersonalTitle() == null) {
400                         // Throw NPE
401                         throw new NullPointerException("personalTitle is null"); //NOI18N
402                 } else if (this.getFirstName() == null) {
403                         // Throw NPE
404                         throw new NullPointerException("firstName is null"); //NOI18N
405                 } else if (this.getFirstName().isEmpty()) {
406                         // Empty string
407                         throw new IllegalStateException("firstName is empty"); //NOI18N
408                 } else if (this.getFamilyName() == null) {
409                         // Throw NPE
410                         throw new NullPointerException("familyName is null"); //NOI18N
411                 } else if (this.getFamilyName().isEmpty()) {
412                         // Empty string
413                         throw new IllegalStateException("familyName is empty"); //NOI18N
414                 }
415
416                 // Generate phone number
417                 final DialableLandLineNumber landLine = new LandLineNumber(this.getLandLineCountry(), this.getLandLineAreaCode(), this.getLandLineNumber());
418                 final DialableMobileNumber mobile = new MobileNumber(this.getMobileProvider(), this.getMobileNumber());
419                 final DialableFaxNumber fax = new FaxNumber(this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber());
420
421                 // Create new instance
422                 final Contact localContact = new UserContact(this.getPersonalTitle(), this.getFirstName(), this.getFamilyName());
423
424                 // Add all others
425                 localContact.setContactId(this.getContactId());
426                 localContact.setContactTitle(this.getAcademicTitle());
427                 localContact.setContactBirthday(this.getBirthday());
428                 localContact.setContactStreet(this.getStreet());
429                 localContact.setContactHouseNumber(this.getHouseNumber());
430                 localContact.setContactZipCode(this.getZipCode());
431                 localContact.setContactCity(this.getCity());
432                 localContact.setContactCountry(this.getContactCountry());
433                 localContact.setContactEmailAddress(this.getEmailAddress());
434                 localContact.setContactBirthday(this.getBirthday());
435                 localContact.setContactComment(this.getComment());
436
437                 // Set ownContact
438                 localContact.setContactOwnContact(Boolean.TRUE);
439
440                 // Don't set null or wrong references
441                 if ((landLine instanceof DialableLandLineNumber) && (landLine.getPhoneCountry() instanceof Country) && (this.getLandLineAreaCode() != null) && (this.getLandLineNumber() != null) && (this.getLandLineAreaCode() > 0) && (this.getLandLineNumber() > 0)) {
442                         // Now the number must be given
443                         if (landLine.getPhoneAreaCode() == null) {
444                                 // Is null
445                                 throw new NullPointerException("phone.phoneAreaCode is null"); //NOI18N
446                         } else if (landLine.getPhoneAreaCode() < 1) {
447                                 // Abort here
448                                 throw new IllegalArgumentException("phone.phoneAreaCode is zero or below."); //NOI18N
449                         } else if (landLine.getPhoneNumber() == null) {
450                                 // Is null
451                                 throw new NullPointerException("phone.phoneNumber is null"); //NOI18N
452                         } else if (landLine.getPhoneNumber() < 1) {
453                                 // Abort here
454                                 throw new IllegalArgumentException("phone.phoneNumber is zero or below."); //NOI18N
455                         }
456
457                         // Set phone number
458                         localContact.setContactLandLineNumber(landLine);
459                 }
460
461                 // Don't set null or wrong references
462                 if ((fax instanceof DialableFaxNumber) && (fax.getPhoneCountry() instanceof Country) && (this.getFaxAreaCode() != null) && (this.getFaxNumber() != null) && (this.getFaxAreaCode() > 0) && (this.getFaxNumber() > 0)) {
463                         // Now the number must be given
464                         if (fax.getPhoneAreaCode() == null) {
465                                 // Is null
466                                 throw new NullPointerException("fax.phoneAreaCode is null"); //NOI18N
467                         } else if (fax.getPhoneAreaCode() < 1) {
468                                 // Abort here
469                                 throw new IllegalArgumentException("fax.phoneAreaCode is zero or below."); //NOI18N
470                         } else if (fax.getPhoneNumber() == null) {
471                                 // Is null
472                                 throw new NullPointerException("fax.phoneNumber is null"); //NOI18N
473                         } else if (fax.getPhoneNumber() < 1) {
474                                 // Abort here
475                                 throw new IllegalArgumentException("fax.phoneNumber is zero or below."); //NOI18N
476                         }
477
478                         // Set fax number
479                         localContact.setContactFaxNumber(fax);
480                 }
481
482                 // Is the provider set?
483                 if ((mobile instanceof DialableMobileNumber) && (this.getMobileProvider() instanceof MobileProvider) && (this.getMobileNumber() != null) && (this.getMobileNumber() > 0)) {
484                         // Is the number set?
485                         if (mobile.getMobileNumber() == null) {
486                                 // Is null
487                                 throw new NullPointerException("cmobile.phoneNumber is null"); //NOI18N
488                         } else if (mobile.getMobileNumber() < 1) {
489                                 // Abort here
490                                 throw new IllegalArgumentException("cmobile.phoneNumber is zero or below."); //NOI18N
491                         }
492
493                         // Set cmobile number
494                         localContact.setContactMobileNumber(mobile);
495                 }
496
497                 // Return it
498                 return localContact;
499         }
500
501         /**
502          * Deletes currently chosen contact and returns to list view
503          *
504          * @return
505          */
506         public String deleteContactData () {
507                 // Is contact set?
508                 if (this.getContact() == null) {
509                         // Throw NPE
510                         throw new NullPointerException("this.contact is null");
511                 } else if (this.getContact().getContactId() == null) {
512                         // Throw NPE again
513                         throw new NullPointerException("this.contact.contactId is null");
514                 } else if (this.getContact().getContactId() < 1) {
515                         // Throw IAE
516                         throw new NullPointerException(MessageFormat.format("this.contact.contactId={0} is not valid.", this.getContact().getContactId()));
517                 }
518
519                 try {
520                         // Invoke EJB
521                         this.adminContactBean.deleteContactData(this.getContact());
522                 } catch (final ContactNotFoundException ex) {
523                         // Throw it again
524                         throw new FacesException(ex);
525                 }
526
527                 // Fire event
528                 this.deletedContactEvent.fire(new AdminDeletedContactEvent(this.getContact()));
529
530                 // Return to list view
531                 return "admin_list_contact";
532         }
533
534         /**
535          * Edits currently loaded contact's data in database.
536          */
537         public void editContactData () {
538                 // Get contact instance
539                 final Contact createdContact = this.createContactInstance();
540
541                 // Check if contact instance is in helper and valid
542                 if (null == createdContact) {
543                         // Throw NPE
544                         throw new NullPointerException("beanHelper.contact is null"); //NOI18N
545                 } else if (createdContact.getContactId() == null) {
546                         // Throw NPE again
547                         throw new NullPointerException("beanHelper.contact.contactId is null"); //NOI18N //NOI18N
548                 } else if (createdContact.getContactId() < 1) {
549                         // Invalid id
550                         throw new IllegalStateException(MessageFormat.format("beanHelper.contact.contactId={0} is invalid", createdContact.getContactId())); //NOI18N
551                 }
552
553                 // Update all data in contact
554                 this.updateContactData(createdContact);
555
556                 // Call EJB for updating contact data
557                 final Contact updatedContact = this.contactBean.updateContactData(createdContact, this.isMobileNumberUnlinked, this.isLandLineUnlinked, this.isFaxUnlinked);
558
559                 // Fire event
560                 this.updatedContactEvent.fire(new AdminUpdatedContactEvent(updatedContact));
561
562                 // Clear bean
563                 this.clear();
564         }
565
566         /**
567          * Returns a text representation of given mobile number or null if not set.
568          * <p>
569          * @param mobileNumber Mobile number
570          * <p>
571          * @return Text representation or null
572          */
573         public String generateMobileNumber (final DialableMobileNumber mobileNumber) {
574                 // Is it null?
575                 if (null == mobileNumber) {
576                         // Return null
577                         return null;
578                 }
579
580                 // Get all data
581                 final String number = String.format(
582                                          "%s%d%d", //NOI18N
583                                          mobileNumber.getMobileProvider().getProviderCountry().getCountryExternalDialPrefix(),
584                                          mobileNumber.getMobileProvider().getProviderDialPrefix(),
585                                          mobileNumber.getMobileNumber()
586                          );
587
588                 // Return it
589                 return number;
590         }
591
592         /**
593          * Returns a text representation of given land-line or fax number or null if
594          * not set.
595          * <p>
596          * @param phoneNumber Land-line or fax number
597          * <p>
598          * @return Text representation or null
599          */
600         public String generatePhoneNumber (final DialableNumber phoneNumber) {
601                 // Is it null?
602                 if (null == phoneNumber) {
603                         // Return null
604                         return null;
605                 }
606
607                 // Generate it
608                 final String number = String.format(
609                                          "%s%d%d", //NOI18N
610                                          phoneNumber.getPhoneCountry().getCountryExternalDialPrefix(),
611                                          phoneNumber.getPhoneAreaCode(),
612                                          phoneNumber.getPhoneNumber()
613                          );
614
615                 // Return it
616                 return number;
617         }
618
619         /**
620          * Getter for academic title
621          * <p>
622          * @return Academic title
623          */
624         public String getAcademicTitle () {
625                 return this.academicTitle;
626         }
627
628         /**
629          * Setter for academic title
630          * <p>
631          * @param academicTitle Academic title
632          */
633         public void setAcademicTitle (final String academicTitle) {
634                 this.academicTitle = academicTitle;
635         }
636
637         /**
638          * Getter for birth day
639          * <p>
640          * @return Birth day
641          */
642         @SuppressWarnings ("ReturnOfDateField")
643         public Date getBirthday () {
644                 return this.birthday;
645         }
646
647         /**
648          * Setter for birth day
649          * <p>
650          * @param birthday Birth day
651          */
652         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
653         public void setBirthday (final Date birthday) {
654                 this.birthday = birthday;
655         }
656
657         /**
658          * Getter for city name
659          * <p>
660          * @return City name
661          */
662         public String getCity () {
663                 return this.city;
664         }
665
666         /**
667          * Setter for city name
668          * <p>
669          * @param city City name
670          */
671         public void setCity (final String city) {
672                 this.city = city;
673         }
674
675         /**
676          * Getter for comments
677          * <p>
678          * @return Comments
679          */
680         public String getComment () {
681                 return this.comment;
682         }
683
684         /**
685          * Setter for comment
686          * <p>
687          * @param comment Comments
688          */
689         public void setComment (final String comment) {
690                 this.comment = comment;
691         }
692
693         /**
694          * Getter for contact instance
695          * <p>
696          * @return Contact instance
697          */
698         public Contact getContact () {
699                 return this.contact;
700         }
701
702         /**
703          * Setter for contact instance
704          * <p>
705          * @param contact Contact instance
706          */
707         public void setContact (final Contact contact) {
708                 this.contact = contact;
709         }
710
711         /**
712          * Getter for contactCountry instance
713          * <p>
714          * @return Country instance
715          */
716         public Country getContactCountry () {
717                 return this.contactCountry;
718         }
719
720         /**
721          * Setter for contactCountry instance
722          * <p>
723          * @param contactCountry Country instance
724          */
725         public void setContactCountry (final Country contactCountry) {
726                 this.contactCountry = contactCountry;
727         }
728
729         /**
730          * Getter for contact id
731          * <p>
732          * @return Contact id
733          */
734         public Long getContactId () {
735                 return this.contactId;
736         }
737
738         /**
739          * Setter for contact id
740          * <p>
741          * @param contactId Contact id
742          */
743         public void setContactId (final Long contactId) {
744                 this.contactId = contactId;
745         }
746
747         @Override
748         public String getControllerType () {
749                 return "admin"; //NOI18N
750         }
751
752         /**
753          * Getter for email address
754          * <p>
755          * @return Email address
756          */
757         public String getEmailAddress () {
758                 return this.emailAddress;
759         }
760
761         /**
762          * Setter for email address
763          * <p>
764          * @param emailAddress Email address
765          */
766         public void setEmailAddress (final String emailAddress) {
767                 this.emailAddress = emailAddress;
768         }
769
770         /**
771          * Family name
772          * <p>
773          * @return the familyName
774          */
775         public String getFamilyName () {
776                 return this.familyName;
777         }
778
779         /**
780          * Family name
781          * <p>
782          * @param familyName the familyName to set
783          */
784         public void setFamilyName (final String familyName) {
785                 this.familyName = familyName;
786         }
787
788         /**
789          * Getter for fax number's area code
790          * <p>
791          * @return Fax number's area code
792          */
793         public Integer getFaxAreaCode () {
794                 return this.faxAreaCode;
795         }
796
797         /**
798          * Setter for fax number's area code
799          * <p>
800          * @param faxAreaCode Fax number's area code
801          */
802         public void setFaxAreaCode (final Integer faxAreaCode) {
803                 this.faxAreaCode = faxAreaCode;
804         }
805
806         /**
807          * Getter for fax's country instance
808          * <p>
809          * @return Fax' country instance
810          */
811         public Country getFaxCountry () {
812                 return this.faxCountry;
813         }
814
815         /**
816          * Setter for fax's country instance
817          * <p>
818          * @param faxCountry Fax' country instance
819          */
820         public void setFaxCountry (final Country faxCountry) {
821                 this.faxCountry = faxCountry;
822         }
823
824         /**
825          * Getter for fax id
826          * <p>
827          * @return Fax id
828          */
829         public Long getFaxId () {
830                 return this.faxId;
831         }
832
833         /**
834          * Setter for fax id
835          * <p>
836          * @param faxId Fax id
837          */
838         public void setFaxId (final Long faxId) {
839                 this.faxId = faxId;
840         }
841
842         /**
843          * Getter for fax number
844          * <p>
845          * @return Fax number
846          */
847         public Long getFaxNumber () {
848                 return this.faxNumber;
849         }
850
851         /**
852          * Setter for fax number
853          * <p>
854          * @param faxNumber Fax number
855          */
856         public void setFaxNumber (final Long faxNumber) {
857                 this.faxNumber = faxNumber;
858         }
859
860         /**
861          * Getter for first name
862          * <p>
863          * @return First name
864          */
865         public String getFirstName () {
866                 return this.firstName;
867         }
868
869         /**
870          * Setter for first name
871          * <p>
872          * @param firstName First name
873          */
874         public void setFirstName (final String firstName) {
875                 this.firstName = firstName;
876         }
877
878         /**
879          * Getter for house number
880          * <p>
881          * @return House number
882          */
883         public Short getHouseNumber () {
884                 return this.houseNumber;
885         }
886
887         /**
888          * Setter for house number
889          * <p>
890          * @param houseNumber House number
891          */
892         public void setHouseNumber (final Short houseNumber) {
893                 this.houseNumber = houseNumber;
894         }
895
896         /**
897          * Getter for house number extension. Example: 123a, 'a' is the extension
898          * and 123 is the house number.
899          * <p>
900          * @return House number extension
901          */
902         public String getHouseNumberExtension () {
903                 return this.houseNumberExtension;
904         }
905
906         /**
907          * Setter for house number extension
908          * <p>
909          * @param houseNumberExtension House number extension
910          */
911         public void setHouseNumberExtension (final String houseNumberExtension) {
912                 this.houseNumberExtension = houseNumberExtension;
913         }
914
915         /**
916          * Getter for land-line number's area code
917          * <p>
918          * @return Land-line number's area code
919          */
920         public Integer getLandLineAreaCode () {
921                 return this.landLineAreaCode;
922         }
923
924         /**
925          * Setter for land-line number's area code
926          * <p>
927          * @param landLineAreaCode Land-line number's area code
928          */
929         public void setLandLineAreaCode (final Integer landLineAreaCode) {
930                 this.landLineAreaCode = landLineAreaCode;
931         }
932
933         /**
934          * Getter for land-line number's country instance
935          * <p>
936          * @return Land-line number's country instance
937          */
938         public Country getLandLineCountry () {
939                 return this.landLineCountry;
940         }
941
942         /**
943          * Setter for land-line number's country instance
944          * <p>
945          * @param landLineCountry Land-line number's country instance
946          */
947         public void setLandLineCountry (final Country landLineCountry) {
948                 this.landLineCountry = landLineCountry;
949         }
950
951         /**
952          * Getter for land-line id
953          * <p>
954          * @return Land-line id
955          */
956         public Long getLandLineId () {
957                 return this.landLineId;
958         }
959
960         /**
961          * Setter for land-line id
962          * <p>
963          * @param landLineId Land-line id
964          */
965         public void setLandLineId (final Long landLineId) {
966                 this.landLineId = landLineId;
967         }
968
969         /**
970          * Getter for land-line number
971          * <p>
972          * @return Land-line number
973          */
974         public Long getLandLineNumber () {
975                 return this.landLineNumber;
976         }
977
978         /**
979          * Setter for land-line number
980          * <p>
981          * @param landLineNumber Land-line number
982          */
983         public void setLandLineNumber (final Long landLineNumber) {
984                 this.landLineNumber = landLineNumber;
985         }
986
987         /**
988          * Getter for mobile id
989          * <p>
990          * @return Mobile id
991          */
992         public Long getMobileId () {
993                 return this.mobileId;
994         }
995
996         /**
997          * Setter for mobile id
998          * <p>
999          * @param mobileId Mobile id
1000          */
1001         public void setMobileId (final Long mobileId) {
1002                 this.mobileId = mobileId;
1003         }
1004
1005         /**
1006          * Getter for mobile number
1007          * <p>
1008          * @return Mobile number
1009          */
1010         public Long getMobileNumber () {
1011                 return this.mobileNumber;
1012         }
1013
1014         /**
1015          * Setter for mobile number
1016          * <p>
1017          * @param mobileNumber Mobile number
1018          */
1019         public void setMobileNumber (final Long mobileNumber) {
1020                 this.mobileNumber = mobileNumber;
1021         }
1022
1023         /**
1024          * Getter for mobile number's carrier
1025          * <p>
1026          * @return Mobile number's carrier
1027          */
1028         public MobileProvider getMobileProvider () {
1029                 return this.mobileProvider;
1030         }
1031
1032         /**
1033          * Setter for mobile number's carrier prefix
1034          * <p>
1035          * @param mobileProvider Mobile number's carrier prefix
1036          */
1037         public void setMobileProvider (final MobileProvider mobileProvider) {
1038                 this.mobileProvider = mobileProvider;
1039         }
1040
1041         /**
1042          * Getter for personal title
1043          * <p>
1044          * @return Personal title
1045          */
1046         public PersonalTitle getPersonalTitle () {
1047                 return this.personalTitle;
1048         }
1049
1050         /**
1051          * Setter for personal title
1052          * <p>
1053          * @param personalTitle Personal title
1054          */
1055         public void setPersonalTitle (final PersonalTitle personalTitle) {
1056                 this.personalTitle = personalTitle;
1057         }
1058
1059         /**
1060          * Getter for street name
1061          * <p>
1062          * @return Street name
1063          */
1064         public String getStreet () {
1065                 return this.street;
1066         }
1067
1068         /**
1069          * Setter for street name
1070          * <p>
1071          * @param street Street name
1072          */
1073         public void setStreet (final String street) {
1074                 this.street = street;
1075         }
1076
1077         /**
1078          * Getter for ZIP code
1079          * <p>
1080          * @return ZIP code
1081          */
1082         public Integer getZipCode () {
1083                 return this.zipCode;
1084         }
1085
1086         /**
1087          * Setter for ZIP code
1088          * <p>
1089          * @param zipCode ZIP code
1090          */
1091         public void setZipCode (final Integer zipCode) {
1092                 this.zipCode = zipCode;
1093         }
1094
1095         @Override
1096         public void validateContactData () {
1097                 if (this.getPersonalTitle() == null) {
1098                         // Throw NPE again
1099                         throw new NullPointerException("contactController.gender is null"); //NOI18N
1100                 } else if (this.getFirstName() == null) {
1101                         // ... and again
1102                         throw new NullPointerException("contactController.firstName is null"); //NOI18N
1103                 } else if (this.getFirstName().isEmpty()) {
1104                         // ... and again
1105                         throw new IllegalArgumentException("contactController.firstName is empty"); //NOI18N
1106                 } else if (this.getFamilyName() == null) {
1107                         // ... and again
1108                         throw new NullPointerException("contactController.familyName is null"); //NOI18N
1109                 } else if (this.getFamilyName().isEmpty()) {
1110                         // ... and again
1111                         throw new IllegalArgumentException("contactController.familyName is empty"); //NOI18N
1112                 } else if (this.getEmailAddress() == null) {
1113                         // ... and again
1114                         throw new NullPointerException("contactController.emailAddress is null"); //NOI18N
1115                 } else if (this.getEmailAddress().isEmpty()) {
1116                         // ... and again
1117                         throw new IllegalArgumentException("contactController.emailAddress is empty"); //NOI18N
1118                 }
1119         }
1120
1121         /**
1122          * Clears this bean
1123          */
1124         private void clear () {
1125                 // Clear all data
1126                 this.setContact(null);
1127
1128                 // - personal data
1129                 this.setAcademicTitle(null);
1130                 this.setFirstName(null);
1131                 this.setFamilyName(null);
1132                 this.setStreet(null);
1133                 this.setHouseNumber(null);
1134                 this.setHouseNumberExtension(null);
1135                 this.setZipCode(null);
1136                 this.setCity(null);
1137                 this.setContactCountry(null);
1138
1139                 // - contact data
1140                 this.setEmailAddress(null);
1141                 this.setLandLineCountry(null);
1142                 this.setLandLineAreaCode(null);
1143                 this.setLandLineNumber(null);
1144                 this.setMobileProvider(null);
1145                 this.setMobileNumber(null);
1146                 this.setFaxCountry(null);
1147                 this.setFaxAreaCode(null);
1148                 this.setFaxNumber(null);
1149
1150                 // - other data
1151                 this.setBirthday(null);
1152                 this.setComment(null);
1153         }
1154
1155         /**
1156          * Updates all data in contact instance.
1157          * <p>
1158          * @param contact Contact instance
1159          */
1160         private void updateContactData (final Contact contact) {
1161                 // Contact instance should be valid
1162                 if (null == contact) {
1163                         // Throw NPE
1164                         throw new NullPointerException("contact is null"); //NOI18N
1165                 } else if (contact.getContactId() == null) {
1166                         // Throw NPE again
1167                         throw new NullPointerException("contact.contactId is null"); //NOI18N //NOI18N
1168                 } else if (contact.getContactId() < 1) {
1169                         // Invalid id
1170                         throw new IllegalStateException(MessageFormat.format("contact.contactId={0} is invalid", contact.getContactId())); //NOI18N
1171                 }
1172
1173                 // Update all fields
1174                 contact.setContactPersonalTitle(this.getPersonalTitle());
1175                 contact.setContactTitle(this.getAcademicTitle());
1176                 contact.setContactFirstName(this.getFirstName());
1177                 contact.setContactFamilyName(this.getFamilyName());
1178                 contact.setContactStreet(this.getStreet());
1179                 contact.setContactHouseNumber(this.getHouseNumber());
1180                 contact.setContactHouseNumberExtension(this.getHouseNumberExtension());
1181                 contact.setContactZipCode(this.getZipCode());
1182                 contact.setContactCity(this.getCity());
1183                 contact.setContactCountry(this.getContactCountry());
1184
1185                 // Update contact's cmobile number
1186                 this.isMobileNumberUnlinked = Contacts.updateMobileNumber(contact, this.getMobileProvider(), this.getMobileNumber());
1187
1188                 // Update contact's land-line number
1189                 this.isLandLineUnlinked = Contacts.updateLandLineNumber(contact, this.getLandLineCountry(), this.getLandLineAreaCode(), this.getLandLineNumber());
1190
1191                 // Update contact's fax number
1192                 this.isFaxUnlinked = Contacts.updateFaxNumber(contact, this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber());
1193         }
1194
1195 }