]> git.mxchange.org Git - jjobs-war.git/blob - src/java/org/mxchange/jjobs/beans/helper/JobsWebViewHelperBean.java
4ab1d7349e8c7242776fe703f9806c0b3dfe87cf
[jjobs-war.git] / src / java / org / mxchange / jjobs / beans / helper / JobsWebViewHelperBean.java
1 /*
2  * Copyright (C) 2016 - 2018 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.DateFormat;
20 import java.text.MessageFormat;
21 import javax.enterprise.event.Event;
22 import javax.enterprise.inject.Any;
23 import javax.faces.view.ViewScoped;
24 import javax.inject.Inject;
25 import javax.inject.Named;
26 import org.mxchange.jcontacts.events.contact.created.CreatedContactEvent;
27 import org.mxchange.jcontacts.events.contact.created.ObservableCreatedContactEvent;
28 import org.mxchange.jcontacts.model.contact.Contact;
29 import org.mxchange.jcontactsbusiness.model.basicdata.BasicData;
30 import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice;
31 import org.mxchange.jcontactsbusiness.model.department.Department;
32 import org.mxchange.jcontactsbusiness.model.employee.Employable;
33 import org.mxchange.jcontactsbusiness.model.headquarter.Headquarter;
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.jjobs.model.receipt.BillableReceipt;
38 import org.mxchange.jphone.events.fax.created.CreatedFaxNumberEvent;
39 import org.mxchange.jphone.events.fax.created.ObservableCreatedFaxNumberEvent;
40 import org.mxchange.jphone.events.landline.created.CreatedLandLineNumberEvent;
41 import org.mxchange.jphone.events.landline.created.ObservableCreatedLandLineNumberEvent;
42 import org.mxchange.jphone.events.mobile.created.CreatedMobileNumberEvent;
43 import org.mxchange.jphone.events.mobile.created.ObservableCreatedMobileNumberEvent;
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 userController;
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.userController.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          * <p>
448          * @return Basic company data as string
449          */
450         public String renderBasicData (final BasicData basicData) {
451                 // Default is empty string, so let's get started
452                 final StringBuilder sb = new StringBuilder(30);
453
454                 // Is basic company data set?
455                 if (basicData instanceof BasicData) {
456                         // Add company name
457                         sb.append(basicData.getCompanyName()); //NOI18N
458
459                         // Is email address set?
460                         if (basicData.getCompanyEmailAddress() != null) {
461                                 // Add it
462                                 sb.append(", ").append(basicData.getCompanyEmailAddress()); //NOI18N
463                         }
464
465                         // Is tax number set?
466                         if (basicData.getCompanyTaxNumber() != null) {
467                                 // Add it
468                                 sb.append(", ").append(basicData.getCompanyTaxNumber()); //NOI18N
469                         }
470                 }
471
472                 // Return it
473                 return sb.toString();
474         }
475
476         /**
477          * Returns the branch office's full address. If null is provided, an empty
478          * string is returned.
479          * <p>
480          * @param branchOffice Branch office instance
481          * <p>
482          * @return Branch office's address
483          */
484         public String renderBranchOffice (final BranchOffice branchOffice) {
485                 // Default is empty string, so let's get started
486                 final StringBuilder sb = new StringBuilder(30);
487
488                 // Is a branch office instance given?
489                 if (branchOffice instanceof BranchOffice) {
490                         // This should not happen:
491                         assert (branchOffice.getBranchCompany() instanceof BasicData) : "branchOffice.branchCompany is null"; //NOI18N
492
493                         // Yes, then append all data
494                         sb.append(branchOffice.getBranchCompany().getCompanyName());
495                         sb.append(", "); //NOI18N
496                         sb.append(branchOffice.getBranchStreet());
497                         sb.append(" "); //NOI18N
498                         sb.append(branchOffice.getBranchHouseNumber());
499                         sb.append(", "); //NOI18N
500                         sb.append(branchOffice.getBranchCountry().getCountryCode());
501                         sb.append(" "); //NOI18N
502                         sb.append(branchOffice.getBranchZipCode());
503                         sb.append(" "); //NOI18N
504                         sb.append(branchOffice.getBranchCity());
505                 }
506
507                 // Return it
508                 return sb.toString();
509         }
510
511         /**
512          * Returns the contact's personal title, family name and name. If null is
513          * provided, an empty string is returned.
514          * <p>
515          * @param contact Contact instance
516          * <p>
517          * @return Contact's full name
518          */
519         public String renderContact (final Contact contact) {
520                 // Default is empty string, so let's get started
521                 final StringBuilder sb = new StringBuilder(20);
522
523                 // Is contact set?
524                 if (contact instanceof Contact) {
525                         // Then create name
526                         sb.append(this.getMessageFromBundle(contact.getContactPersonalTitle().getMessageKey()));
527                         sb.append(" "); //NOI18N
528                         sb.append(contact.getContactFirstName());
529                         sb.append(" "); //NOI18N
530                         sb.append(contact.getContactFamilyName());
531                 }
532
533                 // Return it
534                 return sb.toString();
535         }
536
537         /**
538          * Returns the department's name and name of assigned company. If null is
539          * provided, an empty string is returned.
540          * <p>
541          * @param department Department instance
542          * <p>
543          * @return Department's full name
544          */
545         public String renderDepartment (final Department department) {
546                 // Default is empty string, so let's get started
547                 final StringBuilder sb = new StringBuilder(10);
548
549                 // Is a department set?
550                 if (department instanceof Department) {
551                         // Then create name
552                         sb.append(this.getMessageFromBundle(department.getDepartmentI18nKey()));
553                         sb.append(" ("); //NOI18N
554                         sb.append(department.getDepartmentCompany().getCompanyName());
555                         sb.append(")"); //NOI18N
556                 }
557
558                 // Return it
559                 return sb.toString();
560         }
561
562         /**
563          * Returns the employee's number, personal title, family name and name if
564          * available. If null is provided, an empty string is returned.
565          * <p>
566          * @param employee Employable instance
567          * <p>
568          * @return Contact's full name
569          */
570         public String renderEmployee (final Employable employee) {
571                 // Default is empty string, so let's get started
572                 final StringBuilder sb = new StringBuilder(20);
573
574                 // Is employee set?
575                 if (employee instanceof Employable) {
576                         // Then create name
577                         sb.append(employee.getEmployeeNumber());
578
579                         // Is a department found?
580                         if (employee.getEmployeeDepartment() instanceof Department) {
581                                 // Then add it's name to it
582                                 sb.append(" ("); //NOI18N
583                                 sb.append(this.renderDepartment(employee.getEmployeeDepartment()));
584                                 sb.append(")"); //NOI18N
585                         }
586
587                         // Is contact data found?
588                         if (employee.getEmployeePersonalData() instanceof Contact) {
589                                 // Yes, then render it
590                                 final String contactName = this.renderContact(employee.getEmployeePersonalData());
591
592                                 // Is it given?
593                                 if (contactName != null) {
594                                         // Then add it
595                                         sb.append(" ("); //NOI18N
596                                         sb.append(contactName);
597                                         sb.append(")"); //NOI18N
598                                 }
599                         }
600                 }
601
602                 // Return it
603                 return sb.toString();
604         }
605
606         /**
607          * Returns the headquarter address. If null is provided, an empty string is
608          * returned.
609          * <p>
610          * @param headquarter Headquarter instance
611          * <p>
612          * @return Headquarter address
613          */
614         public String renderHeadquarter (final Headquarter headquarter) {
615                 // Default is empty string, so let's get started
616                 final StringBuilder sb = new StringBuilder(10);
617
618                 // Is a headquarter set?
619                 if (headquarter instanceof Headquarter) {
620                         // Then create name
621                         sb.append(headquarter.getHeadquarterStreet());
622                         sb.append(" "); //NOI18N
623                         sb.append(headquarter.getHeadquarterHouseNumber());
624
625                         // Is store/suite number set?
626                         if (headquarter.getHeadquarterStore() instanceof Short) {
627                                 sb.append(" ("); //NOI18N
628                                 sb.append(this.getMessageFromBundle("DATA_STORE")); //NOI18N
629                                 sb.append(" "); //NOI18N
630                                 sb.append(headquarter.getHeadquarterStore());
631                                 sb.append(", "); //NOI18N
632                                 sb.append(this.getMessageFromBundle("DATA_SUITE_NUMBER")); //NOI18N
633                                 sb.append(" "); //NOI18N
634                                 sb.append(headquarter.getHeadquarterSuiteNumber());
635                                 sb.append(")"); //NOI18N
636                         }
637
638                         // Continue with country, ZIP code and city
639                         sb.append(", "); //NOI18N
640                         sb.append(headquarter.getHeadquarterCountry().getCountryCode());
641                         sb.append(" "); //NOI18N
642                         sb.append(headquarter.getHeadquarterZipCode());
643                         sb.append(" "); //NOI18N
644                         sb.append(headquarter.getHeadquarterCity());
645                 }
646
647                 // Return it
648                 return sb.toString();
649         }
650
651         /**
652          * Returns the receipt. If null is provided, an empty string is returned.
653          * <p>
654          * @param receipt Receipt instance
655          * <p>
656          * @return Product name
657          */
658         public String renderReceipt (final BillableReceipt receipt) {
659                 // Default is empty string, so let's get started
660                 final StringBuilder sb = new StringBuilder(50);
661
662                 // Is receipt set?
663                 if (receipt instanceof BillableReceipt) {
664                         // Add relevant data
665                         sb.append(this.getMessageFromBundle("RECEIPT_ISSUED")).append(" "); //NOI18N
666                         sb.append(DateFormat.getInstance().format(receipt.getReceiptIssued())).append(", "); //NOI18N
667                         sb.append(this.getMessageFromBundle("PAYMENT_TYPE")).append(" "); //NOI18N
668                         sb.append(this.getMessageFromBundle(receipt.getReceiptPaymentType().getI18nKey()));
669
670                         // Is receipt number included?
671                         if (receipt.getReceiptNumber() != null) {
672                                 // Append it
673                                 sb.append(", ").append(this.getMessageFromBundle("RECEIPT_NUMBER")).append(" "); //NOI18N
674                                 sb.append(receipt.getReceiptNumber());
675                         }
676
677                         // Add company (over branch office)
678                         sb.append(" ("); //NOI18N
679                         sb.append(receipt.getReceiptBranchOffice().getBranchCompany().getCompanyName());
680                         sb.append(")"); //NOI18N
681                 }
682
683                 // Return it
684                 return sb.toString();
685         }
686
687         /**
688          * Returns the user's personal title, family name and name. If null is
689          * provided, an empty string is returned.
690          * <p>
691          * @param user User instance
692          * <p>
693          * @return User's full name
694          */
695         public String renderUser (final User user) {
696                 // Default is empty string, so let's get started
697                 final StringBuilder sb = new StringBuilder(20);
698
699                 // Is user given?
700                 if (user instanceof User) {
701                         // Add user name first
702                         sb.append(user.getUserName());
703                         sb.append(" ("); //NOI18N
704
705                         // Add contact data
706                         sb.append(this.renderContact(user.getUserContact()));
707
708                         // Close brace
709                         sb.append(")"); //NOI18N
710                 }
711
712                 // Return it
713                 return sb.toString();
714         }
715
716         /**
717          * Set's all given contact's phone instances: land-line, mobile and
718          * faxNumber
719          * <p>
720          * @param contact Contact to set phone instances for
721          */
722         private void setPhoneInstances (final Contact contact) {
723                 // The contact must be valid
724                 if (null == contact) {
725                         // Throw NPE
726                         throw new NullPointerException("contact is null"); //NOI18N
727                 } else if (contact.getContactId() == null) {
728                         // Throw again ...
729                         throw new NullPointerException("contact.contactId is null"); //NOI18N
730                 } else if (contact.getContactId() < 1) {
731                         // Not valid
732                         throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is not valid", contact.getContactId())); //NOI18N
733                 }
734
735                 // Is mobile set?
736                 if (contact.getContactMobileNumber() instanceof DialableMobileNumber) {
737                         // Yes, then set it in admin controller
738                         this.setMobileNumber(contact.getContactMobileNumber());
739                 }
740
741                 // Is land-line set?
742                 if (contact.getContactLandLineNumber() instanceof DialableLandLineNumber) {
743                         // Yes, then set it in admin controller
744                         this.setLandLineNumber(contact.getContactLandLineNumber());
745                 }
746
747                 // Is faxNumber set?
748                 if (contact.getContactFaxNumber() instanceof DialableFaxNumber) {
749                         // Yes, then set it in admin controller
750                         this.setFaxNumber(contact.getContactFaxNumber());
751                 }
752         }
753
754 }