]> git.mxchange.org Git - jjobs-war.git/blob - src/java/org/mxchange/jjobs/beans/helper/JobsWebViewHelperBean.java
Please cherry-pick:
[jjobs-war.git] / src / java / org / mxchange / jjobs / beans / helper / JobsWebViewHelperBean.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.helper;
18
19 import java.text.MessageFormat;
20 import javax.enterprise.event.Event;
21 import javax.enterprise.inject.Any;
22 import javax.faces.view.ViewScoped;
23 import javax.inject.Inject;
24 import javax.inject.Named;
25 import org.mxchange.jcontacts.events.contact.created.CreatedContactEvent;
26 import org.mxchange.jcontacts.events.contact.created.ObservableCreatedContactEvent;
27 import org.mxchange.jcontacts.model.contact.Contact;
28 import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
29 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
30 import org.mxchange.jcontactsbusiness.model.department.Department;
31 import org.mxchange.jcontactsbusiness.model.employee.Employable;
32 import org.mxchange.jcontactsbusiness.model.headquarter.Headquarter;
33 import org.mxchange.jcountry.model.data.Country;
34 import org.mxchange.jjobs.beans.BaseJobsBean;
35 import org.mxchange.jjobs.beans.localization.JobsLocalizationSessionController;
36 import org.mxchange.jjobs.beans.user.JobsUserWebRequestController;
37 import org.mxchange.jphone.events.fax.created.CreatedFaxNumberEvent;
38 import org.mxchange.jphone.events.fax.created.ObservableCreatedFaxNumberEvent;
39 import org.mxchange.jphone.events.landline.created.CreatedLandLineNumberEvent;
40 import org.mxchange.jphone.events.landline.created.ObservableCreatedLandLineNumberEvent;
41 import org.mxchange.jphone.events.mobile.created.CreatedMobileNumberEvent;
42 import org.mxchange.jphone.events.mobile.created.ObservableCreatedMobileNumberEvent;
43 import org.mxchange.jphone.model.phonenumbers.DialableNumber;
44 import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber;
45 import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber;
46 import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber;
47 import org.mxchange.jusercore.events.user.created.CreatedUserEvent;
48 import org.mxchange.jusercore.events.user.created.ObservableCreatedUserEvent;
49 import org.mxchange.jusercore.model.user.User;
50
51 /**
52  * A general helper for beans
53  * <p>
54  * @author Roland Häder<roland@mxchange.org>
55  */
56 @Named ("beanHelper")
57 @ViewScoped
58 public class JobsWebViewHelperBean extends BaseJobsBean implements JobsWebViewHelperController {
59
60         /**
61          * Serial number
62          */
63         private static final long serialVersionUID = 17_258_793_567_145_701L;
64
65         /**
66          * Contact instance
67          */
68         private Contact contact;
69
70         /**
71          * Event for when a contact instance was created
72          */
73         @Any
74         @Inject
75         private Event<ObservableCreatedContactEvent> contactCreatedEvent;
76
77         /**
78          * Fax number
79          */
80         private DialableFaxNumber faxNumber;
81
82         /**
83          * Event for when a fax number instance was created
84          */
85         @Any
86         @Inject
87         private Event<ObservableCreatedFaxNumberEvent> faxNumberCreatedEvent;
88
89         /**
90          * Land-line number
91          */
92         private DialableLandLineNumber landLineNumber;
93
94         /**
95          * Event for when a land-line number instance was created
96          */
97         @Any
98         @Inject
99         private Event<ObservableCreatedLandLineNumberEvent> landLineNumberCreatedEvent;
100
101         /**
102          * Localization controller
103          */
104         @Inject
105         private JobsLocalizationSessionController localizationController;
106
107         /**
108          * Mobile number
109          */
110         private DialableMobileNumber mobileNumber;
111
112         /**
113          * Event for when a mobile number instance was created
114          */
115         @Any
116         @Inject
117         private Event<ObservableCreatedMobileNumberEvent> mobileNumberCreatedEvent;
118
119         /**
120          * User instance
121          */
122         private User user;
123
124         /**
125          * Regular user controller
126          */
127         @Inject
128         private JobsUserWebRequestController userListController;
129
130         /**
131          * Event for when a user instance was created
132          */
133         @Any
134         @Inject
135         private Event<ObservableCreatedUserEvent> userCreatedEvent;
136
137         /**
138          * Default constructor
139          */
140         public JobsWebViewHelperBean () {
141                 // Call super constructor
142                 super();
143         }
144
145         /**
146          * Getter for contact instance
147          * <p>
148          * @return Contact instance
149          */
150         public Contact getContact () {
151                 return this.contact;
152         }
153
154         /**
155          * Setter for contact instance
156          * <p>
157          * @param contact Contact instance
158          */
159         public void setContact (final Contact contact) {
160                 this.contact = contact;
161         }
162
163         /**
164          * Returns a message key depending on if this contact is a user and/or a
165          * contact. If this contact is unused, a default key is returned.
166          * <p>
167          * @param contact Contact instance to check
168          * <p>
169          * @return Message key
170          */
171         public String getContactUsageMessageKey (final Contact contact) {
172                 // The contact must be valid
173                 if (null == contact) {
174                         // Throw NPE
175                         throw new NullPointerException("contact is null"); //NOI18N
176                 } else if (contact.getContactId() == null) {
177                         // Throw again ...
178                         throw new NullPointerException("contact.contactId is null"); //NOI18N
179                 } else if (contact.getContactId() < 1) {
180                         // Not valid
181                         throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is not valid", contact.getContactId())); //NOI18N
182                 }
183
184                 // Default key is "unused"
185                 String messageKey = "CONTACT_IS_UNUSED"; //NOI18N
186
187                 // Check user first
188                 if (this.contactListController.isContactFound(contact)) {
189                         // Only user
190                         messageKey = "CONTACT_IS_USER"; //NOI18N
191                 }
192
193                 // Return message key
194                 return messageKey;
195         }
196
197         /**
198          * Getter for dialable fax number
199          * <p>
200          * @return Dialable fax number
201          */
202         public DialableFaxNumber getFaxNumber () {
203                 return this.faxNumber;
204         }
205
206         /**
207          * Setter for dialable fax number
208          * <p>
209          * @param faxNumber Dialable fax number
210          */
211         public void setFaxNumber (final DialableFaxNumber faxNumber) {
212                 this.faxNumber = faxNumber;
213         }
214
215         /**
216          * Getter for dialable land-line number
217          * <p>
218          * @return Dialable land-line number
219          */
220         public DialableLandLineNumber getLandLineNumber () {
221                 return this.landLineNumber;
222         }
223
224         /**
225          * Setter for dialable land-line number
226          * <p>
227          * @param landLineNumber Dialable land-line number
228          */
229         public void setLandLineNumber (final DialableLandLineNumber landLineNumber) {
230                 this.landLineNumber = landLineNumber;
231         }
232
233         /**
234          * Getter for dialable mobile number
235          * <p>
236          * @return Dialable mobile number
237          */
238         public DialableMobileNumber getMobileNumber () {
239                 return this.mobileNumber;
240         }
241
242         /**
243          * Setter for dialable mobile number
244          * <p>
245          * @param mobileNumber Dialable mobile number
246          */
247         public void setMobileNumber (final DialableMobileNumber mobileNumber) {
248                 this.mobileNumber = mobileNumber;
249         }
250
251         /**
252          * Getter for user instance
253          * <p>
254          * @return User instance
255          */
256         public User getUser () {
257                 return this.user;
258         }
259
260         /**
261          * Setter for user instance
262          * <p>
263          * @param user User instance
264          */
265         public void setUser (final User user) {
266                 this.user = user;
267         }
268
269         /**
270          * Notifies other controllers (backing beans) if a contact id has been
271          * successfully converted to a Contact instance.
272          */
273         public void notifyControllerContactConverted () {
274                 // Validate contact instance
275                 if (this.getContact() == null) {
276                         // Throw NPE
277                         throw new NullPointerException("this.contact is null"); //NOI18N
278                 } else if (this.getContact().getContactId() == null) {
279                         // Throw NPE again
280                         throw new NullPointerException("this.contact.contactId is null"); //NOI18N
281                 } else if (this.getContact().getContactId() < 1) {
282                         // Not valid
283                         throw new IllegalStateException(MessageFormat.format("this.contact.contactId={0} is not valid.", this.getContact().getContactId())); //NOI18N
284                 }
285
286                 // Set all phone instances
287                 this.setPhoneInstances(this.getContact());
288
289                 // Set all fields: user
290                 this.contactCreatedEvent.fire(new CreatedContactEvent(this.getContact()));
291         }
292
293         /**
294          * Notifies other controllers (backing beans) if a phone id has been
295          * successfully converted to a DialableFaxNumber instance.
296          */
297         public void notifyControllerFaxNumberConverted () {
298                 // Validate fax instance
299                 if (this.getFaxNumber() == null) {
300                         // Throw NPE
301                         throw new NullPointerException("this.faxNumber is null"); //NOI18N
302                 } else if (this.getFaxNumber().getPhoneId() == null) {
303                         // Throw again
304                         throw new NullPointerException("this.faxNumber.phoneId is null"); //NOI18N
305                 } else if (this.getFaxNumber().getPhoneId() < 1) {
306                         // Invalid id number
307                         throw new IllegalArgumentException(MessageFormat.format("this.faxNumber.phoneId={0} is not valid", this.getFaxNumber().getPhoneId())); //NOI18N
308                 } else if (this.getFaxNumber().getPhoneAreaCode() == null) {
309                         // Throw again
310                         throw new NullPointerException("this.faxNumber.phoneAreaCode is null"); //NOI18N
311                 } else if (this.getFaxNumber().getPhoneAreaCode() < 1) {
312                         // Invalid id number
313                         throw new IllegalArgumentException(MessageFormat.format("this.faxNumber.phoneAreaCode={0} is not valid", this.getFaxNumber().getPhoneAreaCode())); //NOI18N
314                 } else if (this.getFaxNumber().getPhoneCountry() == null) {
315                         // Throw NPE again
316                         throw new NullPointerException("this.faxNumber.phoneCountry is null"); //NOI18N
317                 } else if (this.getFaxNumber().getPhoneCountry().getCountryId() == null) {
318                         // ... throw again
319                         throw new NullPointerException("this.faxNumber.phoneCountry.countryId is null"); //NOI18N
320                 } else if (this.getFaxNumber().getPhoneCountry().getCountryId() < 1) {
321                         // Invalid id
322                         throw new IllegalArgumentException(MessageFormat.format("this.faxNumber.phoneCountry.countryId={0} is invalid", this.getFaxNumber().getPhoneCountry().getCountryId())); //NOI18N
323                 } else if (this.getFaxNumber().getPhoneNumber() == null) {
324                         // Throw NPE again ...
325                         throw new NullPointerException("this.faxNumber.phoneNumber is null"); //NOI18N
326                 } else if (this.getFaxNumber().getPhoneNumber() < 1) {
327                         // Invalid id number
328                         throw new IllegalArgumentException(MessageFormat.format("this.faxNumber.phoneNumber={0} is not valid", this.getFaxNumber().getPhoneNumber())); //NOI18N
329                 }
330
331                 // Fire event
332                 this.faxNumberCreatedEvent.fire(new CreatedFaxNumberEvent(this.getFaxNumber()));
333         }
334
335         /**
336          * Notifies other controllers (backing beans) if a phone id has been
337          * successfully converted to a DialableLandLineNumber instance.
338          */
339         public void notifyControllerLandLineNumberConverted () {
340                 // Validate land-line instance
341                 if (this.getLandLineNumber() == null) {
342                         // Throw NPE
343                         throw new NullPointerException("this.landLineNumber is null"); //NOI18N
344                 } else if (this.getLandLineNumber().getPhoneId() == null) {
345                         // Throw again
346                         throw new NullPointerException("this.landLineNumber.phoneId is null"); //NOI18N
347                 } else if (this.getLandLineNumber().getPhoneId() < 1) {
348                         // Invalid id number
349                         throw new IllegalArgumentException(MessageFormat.format("this.landLineNumber.phoneId={0} is not valid", this.getLandLineNumber().getPhoneId())); //NOI18N
350                 } else if (this.getLandLineNumber().getPhoneAreaCode() == null) {
351                         // Throw again
352                         throw new NullPointerException("this.landLineNumber.phoneAreaCode is null"); //NOI18N
353                 } else if (this.getLandLineNumber().getPhoneAreaCode() < 1) {
354                         // Invalid id number
355                         throw new IllegalArgumentException(MessageFormat.format("this.landLineNumber.phoneAreaCode={0} is not valid", this.getFaxNumber().getPhoneAreaCode())); //NOI18N
356                 } else if (this.getLandLineNumber().getPhoneCountry() == null) {
357                         // Throw NPE again
358                         throw new NullPointerException("this.landLineNumber.phoneCountry is null"); //NOI18N
359                 } else if (this.getLandLineNumber().getPhoneCountry().getCountryId() == null) {
360                         // ... throw again
361                         throw new NullPointerException("this.landLineNumber.phoneCountry.countryId is null"); //NOI18N
362                 } else if (this.getLandLineNumber().getPhoneCountry().getCountryId() < 1) {
363                         // Invalid id
364                         throw new IllegalArgumentException(MessageFormat.format("this.landLineNumber.phoneCountry.countryId={0} is invalid", this.getLandLineNumber().getPhoneCountry().getCountryId())); //NOI18N
365                 } else if (this.getLandLineNumber().getPhoneNumber() == null) {
366                         // Throw NPE again ...
367                         throw new NullPointerException("this.landLineNumber.phoneNumber is null"); //NOI18N
368                 } else if (this.getLandLineNumber().getPhoneNumber() < 1) {
369                         // Invalid id number
370                         throw new IllegalArgumentException(MessageFormat.format("this.landLineNumber.phoneNumber={0} is not valid", this.getLandLineNumber().getPhoneNumber())); //NOI18N
371                 }
372
373                 // Fire event
374                 this.landLineNumberCreatedEvent.fire(new CreatedLandLineNumberEvent(this.getLandLineNumber()));
375         }
376
377         /**
378          * Notifies other controllers (backing beans) if a phone id has been
379          * successfully converted to a DialableMobileNumber instance.
380          */
381         public void notifyControllerMobileNumberConverted () {
382                 // Validate mobile instance
383                 if (this.getMobileNumber() == null) {
384                         // Throw NPE
385                         throw new NullPointerException("this.mobileNumber is null"); //NOI18N
386                 } else if (this.getMobileNumber().getPhoneId() == null) {
387                         // Throw again
388                         throw new NullPointerException("this.mobileNumber.phoneId is null"); //NOI18N
389                 } else if (this.getMobileNumber().getPhoneId() < 1) {
390                         // Invalid id number
391                         throw new IllegalArgumentException(MessageFormat.format("this.mobileNumber.phoneId={0} is not valid", this.getMobileNumber().getPhoneId())); //NOI18N
392                 } else if (this.getMobileNumber().getMobileProvider() == null) {
393                         // Throw NPE again
394                         throw new NullPointerException("this.mobileNumber.mobileProvider is null"); //NOI18N
395                 } else if (this.getMobileNumber().getMobileProvider().getProviderId() == null) {
396                         // ... throw again
397                         throw new NullPointerException("this.mobileNumber.mobileProvider.providerId is null"); //NOI18N
398                 } else if (this.getMobileNumber().getMobileProvider().getProviderId() < 1) {
399                         // Invalid id
400                         throw new IllegalArgumentException(MessageFormat.format("this.mobileNumber.mobileProvider.providerId={0} is invalid", this.getMobileNumber().getMobileProvider().getProviderId())); //NOI18N
401                 } else if (this.getMobileNumber().getPhoneNumber() == null) {
402                         // Throw NPE again ...
403                         throw new NullPointerException("this.mobileNumber.phoneNumber is null"); //NOI18N
404                 } else if (this.getMobileNumber().getPhoneNumber() < 1) {
405                         // Invalid id number
406                         throw new IllegalArgumentException(MessageFormat.format("this.mobileNumber.phoneNumber={0} is not valid", this.getMobileNumber().getPhoneNumber())); //NOI18N
407                 }
408
409                 // Fire event
410                 this.mobileNumberCreatedEvent.fire(new CreatedMobileNumberEvent(this.getMobileNumber()));
411         }
412
413         /**
414          * Notifies other controllers (backing beans) if a user id has been
415          * successfully converted to a User instance.
416          */
417         public void notifyControllerUserConverted () {
418                 // Validate user instance
419                 if (this.getUser() == null) {
420                         // Throw NPE
421                         throw new NullPointerException("this.user is null"); //NOI18N
422                 } else if (this.getUser().getUserId() == null) {
423                         // Throw NPE again
424                         throw new NullPointerException("this.user.userId is null"); //NOI18N
425                 } else if (this.getUser().getUserId() < 1) {
426                         // Not valid
427                         throw new IllegalStateException(MessageFormat.format("this.user.userId={0} is not valid.", this.getUser().getUserId())); //NOI18N
428                 }
429
430                 // Get contact
431                 final Contact userContact = this.getUser().getUserContact();
432
433                 // Set contact here, too. This avoids parameters that cannot auto-complete in IDEs.
434                 this.setContact(userContact);
435
436                 // Set all phone instances
437                 this.setPhoneInstances(userContact);
438
439                 // Fire event
440                 this.userCreatedEvent.fire(new CreatedUserEvent(this.getUser()));
441         }
442
443         /**
444          * Renders data of basic company data
445          * <p>
446          * @param basicData    Basic company data instance
447          * @param useShortName Whether to use short name or long name of company
448          * <p>
449          * @return Basic company data as string
450          */
451         public String renderBasicData (final BasicData basicData, final boolean useShortName) {
452                 // Default is empty string, so let's get started
453                 final StringBuilder sb = new StringBuilder(30);
454
455                 // Is basic company data set?
456                 if (basicData instanceof BasicData) {
457                         // Short or long name?
458                         if (useShortName) {
459                                 // Add company's long name
460                                 sb.append(basicData.getCompanyShortName()); //NOI18N
461                         } else {
462                                 // Add company's long name
463                                 sb.append(basicData.getCompanyName()); //NOI18N
464                         }
465
466                         // Is email address set?
467                         if (basicData.getCompanyEmailAddress() != null) {
468                                 // Add it
469                                 sb.append(", ").append(basicData.getCompanyEmailAddress()); //NOI18N
470                         }
471
472                         // Is tax number set?
473                         if (basicData.getCompanyTaxNumber() != null) {
474                                 // Add it
475                                 sb.append(", ").append(basicData.getCompanyTaxNumber()); //NOI18N
476                         }
477                 }
478
479                 // Return it
480                 return sb.toString();
481         }
482
483         /**
484          * Returns the branch office's full address. If null is provided, an empty
485          * string is returned.
486          * <p>
487          * @param branchOffice Branch office instance
488          * <p>
489          * @return Branch office's address
490          */
491         public String renderBranchOffice (final BranchOffice branchOffice) {
492                 // Default is empty string, so let's get started
493                 final StringBuilder sb = new StringBuilder(30);
494
495                 // Is a branch office instance given?
496                 if (branchOffice instanceof BranchOffice) {
497                         // This should not happen:
498                         assert (branchOffice.getBranchCompany() instanceof BasicData) : "branchOffice.branchCompany is null"; //NOI18N
499
500                         // Yes, then append all data
501                         sb.append(this.renderBasicData(branchOffice.getBranchCompany(), true));
502                         sb.append(", "); //NOI18N
503                         sb.append(branchOffice.getBranchStreet());
504                         sb.append(" "); //NOI18N
505                         sb.append(branchOffice.getBranchHouseNumber());
506                         sb.append(", "); //NOI18N
507                         sb.append(branchOffice.getBranchCountry().getCountryCode());
508                         sb.append(" "); //NOI18N
509                         sb.append(branchOffice.getBranchZipCode());
510                         sb.append(" "); //NOI18N
511                         sb.append(branchOffice.getBranchCity());
512                 }
513
514                 // Return it
515                 return sb.toString();
516         }
517
518         /**
519          * Returns the contact's personal title, family name and name. If null is
520          * provided, an empty string is returned.
521          * <p>
522          * @param contact Contact instance
523          * <p>
524          * @return Contact's full name
525          */
526         public String renderContact (final Contact contact) {
527                 // Default is empty string, so let's get started
528                 final StringBuilder sb = new StringBuilder(20);
529
530                 // Is contact set?
531                 if (contact instanceof Contact) {
532                         // Then create name
533                         sb.append(this.getMessageFromBundle(contact.getContactPersonalTitle().getMessageKey()));
534                         sb.append(" "); //NOI18N
535                         sb.append(contact.getContactFirstName());
536                         sb.append(" "); //NOI18N
537                         sb.append(contact.getContactFamilyName());
538                 }
539
540                 // Return it
541                 return sb.toString();
542         }
543
544         /**
545          * Returns the text representation of given country. If null is provided, an
546          * empty string is returned.
547          * <p>
548          * @param country Country instance
549          * <p>
550          * @return Country's text representation
551          */
552         public String renderCountry (final Country country) {
553                 // Default is empty string, so let's get started
554                 final StringBuilder sb = new StringBuilder(20);
555
556                 // Is a country given?
557                 if (country instanceof Country) {
558                         // Yes, then render it
559                         sb.append(this.getMessageFromBundle(country.getCountryI18nKey()));
560                         sb.append(" ("); //NOI18N
561                         sb.append(country.getCountryCode());
562                         sb.append(")"); //NOI18N
563                 }
564
565                 // Return it
566                 return sb.toString();
567         }
568
569         /**
570          * Returns the department's name and name of assigned company. If null is
571          * provided, an empty string is returned.
572          * <p>
573          * @param department Department instance
574          * <p>
575          * @return Department's full name
576          */
577         public String renderDepartment (final Department department) {
578                 // Default is empty string, so let's get started
579                 final StringBuilder sb = new StringBuilder(10);
580
581                 // Is a department set?
582                 if (department instanceof Department) {
583                         // Then create name
584                         sb.append(this.getMessageFromBundle(department.getDepartmentI18nKey()));
585                         sb.append(" ("); //NOI18N
586                         sb.append(this.renderBasicData(department.getDepartmentCompany(), true));
587                         sb.append(")"); //NOI18N
588                 }
589
590                 // Return it
591                 return sb.toString();
592         }
593
594         /**
595          * Returns the employee's number, personal title, family name and name if
596          * available. If null is provided, an empty string is returned.
597          * <p>
598          * @param employee Employable instance
599          * <p>
600          * @return A string representing an employee
601          */
602         public String renderEmployee (final Employable employee) {
603                 // Default is empty string, so let's get started
604                 final StringBuilder sb = new StringBuilder(20);
605
606                 // Is employee set?
607                 if (employee instanceof Employable) {
608                         // Is the number given?
609                         if (employee.getEmployeeNumber() != null) {
610                                 // Then create name
611                                 sb.append(employee.getEmployeeNumber());
612                         }
613
614                         // Is contact data found?
615                         if (employee.getEmployeePersonalData() instanceof Contact) {
616                                 // Yes, then render it
617                                 final String contactName = this.renderContact(employee.getEmployeePersonalData());
618
619                                 // Is it given?
620                                 if (contactName != null && !contactName.isEmpty()) {
621                                         // Only add braces when employee number is given
622                                         if (employee.getEmployeeNumber() != null) {
623                                                 sb.append(" ("); //NOI18N
624                                         }
625
626                                         // Then add it
627                                         sb.append(contactName);
628
629                                         // Only add braces when employee number is given
630                                         if (employee.getEmployeeNumber() != null) {
631                                                 sb.append(")"); //NOI18N
632                                         }
633                                 }
634                         }
635
636                         // Is a department found?
637                         if (employee.getEmployeeDepartment() instanceof Department) {
638                                 // Only add braces when employee number is given
639                                 if (employee.getEmployeeNumber() != null || employee.getEmployeePersonalData() instanceof Contact) {
640                                         sb.append(" ("); //NOI18N
641                                 }
642
643                                 // Add department name
644                                 sb.append(this.renderDepartment(employee.getEmployeeDepartment()));
645
646                                 // Only add braces when employee number is given
647                                 if (employee.getEmployeeNumber() != null || employee.getEmployeePersonalData() instanceof Contact) {
648                                         sb.append(")"); //NOI18N
649                                 }
650                         }
651                 }
652
653                 // Return it
654                 return sb.toString();
655         }
656
657         /**
658          * Returns the headquarter address. If null is provided, an empty string is
659          * returned.
660          * <p>
661          * @param headquarter Headquarter instance
662          * <p>
663          * @return Headquarter address
664          */
665         public String renderHeadquarter (final Headquarter headquarter) {
666                 // Default is empty string, so let's get started
667                 final StringBuilder sb = new StringBuilder(10);
668
669                 // Is a headquarter set?
670                 if (headquarter instanceof Headquarter) {
671                         // Then create name
672                         sb.append(headquarter.getHeadquarterStreet());
673                         sb.append(" "); //NOI18N
674                         sb.append(headquarter.getHeadquarterHouseNumber());
675
676                         // Is store/suite number set?
677                         if (headquarter.getHeadquarterStore() instanceof Short) {
678                                 sb.append(" ("); //NOI18N
679                                 sb.append(this.getMessageFromBundle("DATA_STORE")); //NOI18N
680                                 sb.append(" "); //NOI18N
681                                 sb.append(headquarter.getHeadquarterStore());
682                                 sb.append(", "); //NOI18N
683                                 sb.append(this.getMessageFromBundle("DATA_SUITE_NUMBER")); //NOI18N
684                                 sb.append(" "); //NOI18N
685                                 sb.append(headquarter.getHeadquarterSuiteNumber());
686                                 sb.append(")"); //NOI18N
687                         }
688
689                         // Continue with country, ZIP code and city
690                         sb.append(", "); //NOI18N
691                         sb.append(headquarter.getHeadquarterCountry().getCountryCode());
692                         sb.append(" "); //NOI18N
693                         sb.append(headquarter.getHeadquarterZipCode());
694                         sb.append(" "); //NOI18N
695                         sb.append(headquarter.getHeadquarterCity());
696                 }
697
698                 // Return it
699                 return sb.toString();
700         }
701
702         /**
703          * Renders given mobile number (land-line and fax number). If null is
704          * provided, an empty string is returned.
705          * <p>
706          * @param mobileNumber Mobile number to render
707          * <p>
708          * @return Mobile number
709          */
710         public String renderMobileNumber (final DialableMobileNumber mobileNumber) {
711                 // Default is empty string, so let's get started
712                 final StringBuilder sb = new StringBuilder(20);
713
714                 // Is a phone number given?
715                 if (mobileNumber instanceof DialableMobileNumber) {
716                         // Yes, then render it
717                         sb.append(mobileNumber.getMobileProvider().getProviderCountry().getCountryAbroadDialPrefix());
718                         sb.append(mobileNumber.getMobileProvider().getProviderCountry().getCountryPhoneCode());
719                         sb.append(" ("); //NOI18N
720                         sb.append(mobileNumber.getMobileProvider().getProviderDialPrefix());
721                         sb.append(") "); //NOI18N
722                         sb.append(mobileNumber.getPhoneNumber());
723                 }
724
725                 // Return it
726                 return sb.toString();
727         }
728
729         /**
730          * Renders given phone number (land-line and fax number). If null is
731          * provided, an empty string is returned.
732          * <p>
733          * @param number Phone number to render
734          * <p>
735          * @return Phone number
736          * <p>
737          * @throws IllegalArgumentException If a mobile number is provided
738          */
739         public String renderPhoneNumber (final DialableNumber number) {
740                 // Validate parameter
741                 if (number instanceof DialableMobileNumber) {
742                         // Not allowed here
743                         throw new IllegalArgumentException("Mobile numbers cannot be rendered with this method. Please use renderMobileNumber() instead."); //NOI18N
744                 }
745
746                 // Default is empty string, so let's get started
747                 final StringBuilder sb = new StringBuilder(20);
748
749                 // Is a phone number given?
750                 if (number instanceof DialableNumber) {
751                         // Yes, then render it
752                         sb.append(number.getPhoneCountry().getCountryAbroadDialPrefix());
753                         sb.append(number.getPhoneCountry().getCountryPhoneCode());
754                         sb.append(" ("); //NOI18N
755                         sb.append(number.getPhoneAreaCode());
756                         sb.append(") "); //NOI18N
757                         sb.append(number.getPhoneNumber());
758                 }
759
760                 // Return it
761                 return sb.toString();
762         }
763
764         /**
765          * Returns the user's personal title, family name and name. If null is
766          * provided, an empty string is returned.
767          * <p>
768          * @param user User instance
769          * <p>
770          * @return User's full name
771          */
772         public String renderUser (final User user) {
773                 // Default is empty string, so let's get started
774                 final StringBuilder sb = new StringBuilder(20);
775
776                 // Is user given?
777                 if (user instanceof User) {
778                         // Add user name first
779                         sb.append(user.getUserName());
780                         sb.append(" ("); //NOI18N
781
782                         // Add contact data
783                         sb.append(this.renderContact(user.getUserContact()));
784
785                         // Close brace
786                         sb.append(")"); //NOI18N
787                 }
788
789                 // Return it
790                 return sb.toString();
791         }
792
793         /**
794          * Set's all given contact's phone instances: land-line, mobile and
795          * faxNumber
796          * <p>
797          * @param contact Contact to set phone instances for
798          */
799         private void setPhoneInstances (final Contact contact) {
800                 // The contact must be valid
801                 if (null == contact) {
802                         // Throw NPE
803                         throw new NullPointerException("contact is null"); //NOI18N
804                 } else if (contact.getContactId() == null) {
805                         // Throw again ...
806                         throw new NullPointerException("contact.contactId is null"); //NOI18N
807                 } else if (contact.getContactId() < 1) {
808                         // Not valid
809                         throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is not valid", contact.getContactId())); //NOI18N
810                 }
811
812                 // Is mobile set?
813                 if (contact.getContactMobileNumber() instanceof DialableMobileNumber) {
814                         // Yes, then set it in admin controller
815                         this.setMobileNumber(contact.getContactMobileNumber());
816                 }
817
818                 // Is land-line set?
819                 if (contact.getContactLandLineNumber() instanceof DialableLandLineNumber) {
820                         // Yes, then set it in admin controller
821                         this.setLandLineNumber(contact.getContactLandLineNumber());
822                 }
823
824                 // Is faxNumber set?
825                 if (contact.getContactFaxNumber() instanceof DialableFaxNumber) {
826                         // Yes, then set it in admin controller
827                         this.setFaxNumber(contact.getContactFaxNumber());
828                 }
829         }
830
831 }