1 136 package com.ivata.groupware.business.addressbook.struts; 137 138 import java.text.ParseException ; 139 import java.util.Arrays ; 140 import java.util.HashSet ; 141 import java.util.Iterator ; 142 import java.util.List ; 143 import java.util.Map ; 144 import java.util.Set ; 145 import java.util.Vector ; 146 147 import javax.servlet.http.HttpServletRequest ; 148 import javax.servlet.http.HttpSession ; 149 150 import org.apache.log4j.Logger; 151 import org.apache.struts.action.ActionMapping; 152 153 import com.ivata.groupware.admin.security.Security; 154 import com.ivata.groupware.admin.security.server.SecuritySession; 155 import com.ivata.groupware.admin.security.user.UserDO; 156 import com.ivata.groupware.admin.setting.SettingsInitializationException; 157 import com.ivata.groupware.business.addressbook.AddressBook; 158 import com.ivata.groupware.business.addressbook.address.AddressDO; 159 import com.ivata.groupware.business.addressbook.address.country.CountryDO; 160 import com.ivata.groupware.business.addressbook.person.PersonDO; 161 import com.ivata.groupware.business.addressbook.person.employee.EmployeeDO; 162 import com.ivata.groupware.business.addressbook.person.group.GroupDO; 163 import com.ivata.groupware.business.addressbook.telecomaddress.TelecomAddressConstants; 164 import com.ivata.groupware.business.addressbook.telecomaddress.TelecomAddressDO; 165 import com.ivata.groupware.util.SettingDateFormatter; 166 import com.ivata.mask.Mask; 167 import com.ivata.mask.MaskFactory; 168 import com.ivata.mask.util.StringHandling; 169 import com.ivata.mask.util.SystemException; 170 import com.ivata.mask.validation.ValidationError; 171 import com.ivata.mask.validation.ValidationErrors; 172 import com.ivata.mask.web.format.DateFormatterConstants; 173 import com.ivata.mask.web.struts.DialogForm; 174 175 176 185 public class PersonForm extends DialogForm { 186 189 private static Logger log = Logger.getLogger(PersonForm.class); 190 191 196 private AddressBook addressBook; 197 198 204 private Integer addressBookGroupId; 205 206 212 private String addressBookGroupName; 213 214 220 private Map addressBookGroupNames; 221 222 227 private Class baseClass; 228 229 232 private boolean canRemove; 233 236 private String changedAddressBook; 237 private SettingDateFormatter dateFormatter; 238 242 private String dateOfBirthString; 243 247 private boolean employee; 248 249 253 private boolean enableUser; 254 259 private Integer lastTelecomAddress; 260 261 266 private Mask mask; 267 271 private String moreTelecomAddresses; 272 273 277 private PersonDO person; 278 284 private Integer personTab_activeTab; 285 291 private String personTab_activeTabKey; 292 295 private boolean readOnly; 296 300 private boolean refreshOnExit; 301 304 private String restoreUser; 305 private Security security; 306 307 312 private List tabKeys = new Vector (); 313 317 private String tabPage; 318 324 private List telecomAddresses; 325 329 private String titleKey; 330 336 private List userGroups; 337 342 private String userName; 343 348 private boolean userTabReadOnly; 349 359 public PersonForm(final AddressBook addressBook, 360 final SettingDateFormatter dateFormatter, 361 final Security security, 362 final MaskFactory maskFactory) { 363 this.addressBook = addressBook; 364 this.dateFormatter = dateFormatter; 365 this.security = security; 366 mask = maskFactory.getMask(PersonDO.class); 367 } 368 369 376 protected void clear() { 377 addressBookGroupId = null; 378 addressBookGroupName = ""; 379 canRemove = false; 380 changedAddressBook = null; 381 dateOfBirthString = null; 382 enableUser = false; 383 employee = false; 384 lastTelecomAddress = null; 385 moreTelecomAddresses = null; 386 person = new PersonDO(); 387 personTab_activeTab = null; 388 personTab_activeTabKey = null; 389 readOnly = false; 390 refreshOnExit = true; 391 restoreUser = null; 392 tabKeys = new Vector (); 393 tabPage = "/addressBook/personDetails.jsp"; 394 telecomAddresses = new Vector (); 395 titleKey = "person.title.new"; 396 userName = null; 397 userGroups = null; 398 userTabReadOnly = false; 399 } 400 401 410 public void findAndSetCountry(final SecuritySession securitySession) { 411 AddressDO address = person.getAddress(); 413 CountryDO addressCountry = new CountryDO(); 414 if (address != null) { 415 if ((address.getCountry() != null) 416 && !StringHandling.isNullOrEmpty(address.getCountry().getCode())) { 417 try { 418 addressCountry = addressBook.findCountryByCode(securitySession, address.getCountry().getCode()); 419 } catch (SystemException e) { 420 throw new RuntimeException (e); 421 } 422 } 423 address.setCountry(addressCountry); 424 } 425 EmployeeDO employee = person.getEmployee(); 427 if (employee != null) { 428 CountryDO employeeCountry = new CountryDO(); 429 if ((employee.getCountry() != null) 430 && !StringHandling.isNullOrEmpty(employee.getCountry().getCode())) { 431 try { 432 employeeCountry = addressBook.findCountryByCode(securitySession, employee.getCountry().getCode()); 433 } catch (SystemException e) { 434 throw new RuntimeException (e); 435 } 436 } else { 437 employeeCountry = addressCountry; 440 } 441 employee.setCountry(employeeCountry); 442 } 443 } 444 452 public final Integer getAddressBookGroupId() { 453 return addressBookGroupId; 454 } 455 463 public final String getAddressBookGroupName() { 464 return addressBookGroupName; 465 } 466 474 public final Map getAddressBookGroupNames() { 475 return addressBookGroupNames; 476 } 477 478 485 public final Class getBaseClass() { 486 return baseClass; 487 } 488 489 494 public final boolean getCanRemove() { 495 return this.canRemove; 496 } 497 498 503 public final String getChangedAddressBook() { 504 return this.changedAddressBook; 505 } 506 507 513 public final String getDateOfBirthString() { 514 return dateOfBirthString; 515 } 516 517 523 public final boolean getEnableUser() { 524 return enableUser; 525 } 526 527 534 public final Integer getLastTelecomAddress() { 535 return lastTelecomAddress; 536 } 537 538 545 public final Mask getMask() { 546 return mask; 547 } 548 549 555 public final String getMoreTelecomAddresses() { 556 return moreTelecomAddresses; 557 } 558 559 566 public PersonDO getPerson() { 567 return person; 568 } 569 570 579 public final Integer getPersonTab_activeTab() { 580 return personTab_activeTab; 581 } 582 590 public final String getPersonTab_activeTabKey() { 591 return personTab_activeTabKey; 592 } 593 594 599 public final boolean getReadOnly() { 600 return this.readOnly; 601 } 602 603 609 public final boolean getRefreshOnExit() { 610 return refreshOnExit; 611 } 612 613 618 public final String getRestoreUser() { 619 return this.restoreUser; 620 } 621 628 public List getTabKeys() { 629 return tabKeys; 630 } 631 632 638 public final String getTabPage() { 639 return tabPage; 640 } 641 644 public List getTelecomAddresses() { 645 return telecomAddresses; 646 } 647 653 public final String getTitleKey() { 654 return titleKey; 655 } 656 657 664 public List getUserGroups() { 665 return userGroups; 666 } 667 668 675 public final String getUserName() { 676 return userName; 677 } 678 679 685 public boolean isEmployee() { 686 return employee; 687 } 688 695 public boolean isUserTabReadOnly() { 696 return userTabReadOnly; 697 } 698 699 707 public void reset(final ActionMapping mapping, 708 final HttpServletRequest request) { 709 if (request.getParameter("changedAddressBook")==null) { 711 this.setChangedAddressBook("false"); 712 } 713 if ("/addressBook/address.jsp".equals(tabPage)) { 715 AddressDO address = new AddressDO(); 716 address.setCountry(new CountryDO()); 717 person.setAddress(address); 718 } else if ("/addressBook/telecomAddress.jsp".equals(tabPage)) { 719 moreTelecomAddresses = null; 720 Iterator telecomAddressIterator = telecomAddresses.iterator(); 721 while (telecomAddressIterator.hasNext()) { 722 TelecomAddressDO telecomAddress = (TelecomAddressDO) telecomAddressIterator.next(); 723 telecomAddress.setAddress(""); 724 } 725 } else if ("/addressBook/member.jsp".equals(tabPage)) { 726 } else if ("/addressBook/user.jsp".equals(tabPage)) { 728 enableUser = false; 729 userName = ""; 730 } else if ("/addressBook/restoreUser.jsp".equals(tabPage)) { 731 int i = 0; 733 } else if ("/addressBook/employee.jsp".equals(tabPage)) { 734 employee = false; 735 EmployeeDO employee = person.getEmployee(); 736 employee.setCountry(new CountryDO()); 737 employee.setNumber(""); 738 employee.setVacationDays(null); 739 740 } else if (request.getParameter("person.company") != null) { 741 person.setCompany(""); 742 person.setDateOfBirth(null); 743 person.setFileAs(""); 744 person.setFirstNames(""); 745 person.setJobTitle(""); 746 person.setLastName(""); 747 person.setSalutation(""); 748 } 749 personTab_activeTab = null; 750 personTab_activeTabKey = ""; 751 752 super.reset(mapping, request); 753 } 754 762 public final void setAddressBookGroupId(final Integer addressBookId) { 763 this.addressBookGroupId = addressBookId; 764 } 765 773 public final void setAddressBookGroupName(final String addressBookGroupName) { 774 this.addressBookGroupName = addressBookGroupName; 775 } 776 784 public final void setAddressBookGroupNames(final Map addressBookGroups) { 785 this.addressBookGroupNames = addressBookGroups; 786 } 787 788 793 public final void setCanRemove(final boolean canRemove) { 794 this.canRemove = canRemove; 795 } 796 797 802 public final void setChangedAddressBook(final String changedAddressBook) { 803 this.changedAddressBook = changedAddressBook; 804 } 805 806 813 public final void setDateOfBirthString(final String dateOfBirthString) { 814 this.dateOfBirthString = dateOfBirthString; 815 } 816 822 public final void setEmployee(final boolean employee) { 823 this.employee = employee; 824 } 825 826 832 public final void setEnableUser(final boolean enableUser) { 833 this.enableUser = enableUser; 834 } 835 836 843 public final void setLastTelecomAddress(final Integer lastTelecomAddress) { 844 this.lastTelecomAddress = lastTelecomAddress; 845 } 846 847 853 public final void setMoreTelecomAddresses(final String moreTelecomAddresses) { 854 this.moreTelecomAddresses = moreTelecomAddresses; 855 } 856 857 864 public final void setPerson(final PersonDO person) { 865 this.person = person; 866 telecomAddresses = new Vector (); 868 telecomAddresses.addAll(person.getTelecomAddresses()); 869 userName = ""; 871 if (person.getUser() != null) { 872 userName = person.getUser().getName(); 873 } 874 875 if ((person.getGroup() != null) 877 && (person.getGroup().getAddressBook() != null)) { 878 GroupDO addressBook = person.getGroup().getAddressBook(); 879 addressBookGroupId = addressBook.getId(); 880 addressBookGroupName = addressBook.getName(); 881 } 882 } 883 888 public void setPersonFromTelecomAddresses() { 889 Iterator formTelecomAddressIterator = telecomAddresses.iterator(); 891 Set personTelecomAddresses = new HashSet (); 892 UserDO user = person.getUser(); 893 894 Iterator telecomAddressIterator = personTelecomAddresses.iterator(); 896 while (formTelecomAddressIterator.hasNext()) { 897 TelecomAddressDO thisTelecomAddress = (TelecomAddressDO) 898 formTelecomAddressIterator.next(); 899 if (!StringHandling.isNullOrEmpty(thisTelecomAddress.getAddress())) { 900 personTelecomAddresses.add(thisTelecomAddress); 901 } 902 } 903 person.setTelecomAddresses(personTelecomAddresses); 904 } 905 906 915 public final void setPersonTab_activeTab(final Integer personTab_activeTab) { 916 this.personTab_activeTab = personTab_activeTab; 917 } 918 926 public final void setPersonTab_activeTabKey(final String personTab_activeTabKey) { 927 this.personTab_activeTabKey = personTab_activeTabKey; 928 } 929 930 935 public final void setReadOnly(final boolean readOnly) { 936 this.readOnly = readOnly; 937 } 938 939 945 public final void setRefreshOnExit(final boolean refreshOnExit) { 946 this.refreshOnExit = refreshOnExit; 947 } 948 949 954 public final void setRestoreUser(final String restoreUser) { 955 this.restoreUser = restoreUser; 956 } 957 964 public final void setTabKeys(final List tabKeys) { 965 this.tabKeys = tabKeys; 966 } 967 968 974 public final void setTabPage(final String tabPage) { 975 this.tabPage = tabPage; 976 } 977 980 public final void setTelecomAddresses(final List telecomAddresses) { 981 this.telecomAddresses = telecomAddresses; 982 } 983 984 989 public final void setTelecomAddressesFromPerson() { 990 Iterator personTelecomAddressIterator = person.getTelecomAddresses().iterator(); 992 telecomAddresses = new Vector (); 993 while (personTelecomAddressIterator.hasNext()) { 994 TelecomAddressDO thisTelecomAddress = (TelecomAddressDO) 995 personTelecomAddressIterator.next(); 996 if (!StringHandling.isNullOrEmpty(thisTelecomAddress.getAddress())) { 997 telecomAddresses.add(thisTelecomAddress); 998 } 999 } 1000 int totalTelecomAddresses = telecomAddresses.size(); 1002 int totalToShow = totalTelecomAddresses < 3 ? 5 : totalTelecomAddresses + 3; 1003 if (!StringHandling.isNullOrEmpty(moreTelecomAddresses)) { 1005 totalToShow += 3; 1006 } 1007 for(int i=totalTelecomAddresses; i<totalToShow; ++i) { 1008 TelecomAddressDO newTelecomAddress = new TelecomAddressDO(); 1009 telecomAddresses.add(newTelecomAddress); 1010 newTelecomAddress.setType(i % TelecomAddressConstants.countTypes()); 1012 } 1013 } 1014 1015 1021 public final void setTitleKey(final String titleKey) { 1022 this.titleKey = titleKey; 1023 } 1024 1025 1032 public final void setUserGroups(final List userGroups) { 1033 this.userGroups = userGroups; 1034 } 1035 1036 1043 public final void setUserName(final String userName) { 1044 this.userName = userName; 1045 } 1046 1053 public final void setUserTabReadOnly(final boolean userTabReadOnly) { 1054 this.userTabReadOnly = userTabReadOnly; 1055 } 1056 1057 1060 public ValidationErrors validate(final HttpServletRequest request, 1061 final HttpSession session) { 1062 ValidationErrors validationErrors = super.validate(request, session); 1063 SecuritySession securitySession = (SecuritySession) 1064 session.getAttribute("securitySession"); 1065 1066 if (!StringHandling.isNullOrEmpty(userName)) { 1068 userName = userName.toLowerCase(); 1069 userName = userName.trim(); 1070 if (userName.indexOf(" ")!=-1) { 1072 userName = userName.replaceAll(" ",""); 1073 validationErrors.add(new ValidationError( 1074 "user", 1075 Security.BUNDLE_PATH, 1076 mask.getField("name"), 1077 "errors.addressBook.user.userName")); 1078 } 1079 if ((person.getUser() == null) 1080 || !userName.equals(person.getUser().getName())) { 1081 try { 1082 if (security.isUser(securitySession, userName)) { 1083 validationErrors.add(new ValidationError( 1084 "user", 1085 Security.BUNDLE_PATH, 1086 mask.getField("name"), 1087 "errors.unique")); 1088 } 1089 } catch (SystemException e1) { 1090 throw new RuntimeException (e1); 1091 } 1092 } 1093 } 1094 setPersonFromTelecomAddresses(); 1096 setTelecomAddressesFromPerson(); 1098 1099 findAndSetCountry(securitySession); 1102 AddressDO address = person.getAddress(); 1103 if (StringHandling.isNullOrEmpty(address.getPostCode()) 1104 && StringHandling.isNullOrEmpty(address.getRegion()) 1105 && StringHandling.isNullOrEmpty(address.getStreetAddress()) 1106 && StringHandling.isNullOrEmpty(address.getTown())) { 1107 person.setAddress(null); 1111 } 1112 1113 EmployeeDO employee = person.getEmployee(); 1114 if (!this.employee) { 1115 person.setEmployee(null); 1119 } 1120 1121 1122 UserDO user = person.getUser(); 1124 try { 1125 if ((person.getUser()!= null) 1127 && StringHandling.isNullOrEmpty(userName)) { 1128 person.setUser(null); 1129 } else { 1130 UserDO tmpUser = new UserDO(); 1133 tmpUser.setDeleted(user.isDeleted()); 1134 tmpUser.setEnabled(enableUser); 1135 tmpUser.setGroups(user.getGroups()); 1136 tmpUser.setName(userName); 1137 person.setUser(tmpUser); 1138 } 1139 validationErrors.addAll(addressBook.validate(securitySession, 1140 person)); 1141 1142 if (StringHandling.isNullOrEmpty(dateOfBirthString)) { 1146 person.setDateOfBirth(null); 1147 } else { 1148 try { 1149 dateFormatter.setUserName((String ) session.getAttribute("userName")); 1150 dateFormatter.setDateFormat(DateFormatterConstants.DATE_INPUT); 1151 dateFormatter.setDateTimeText("{0}"); 1152 1153 person.setDateOfBirth(dateFormatter.parse(dateOfBirthString)); 1154 } catch (SettingsInitializationException e) { 1155 throw new RuntimeException (e); 1156 } catch (ParseException e) { 1157 if (validationErrors == null) { 1158 validationErrors = new ValidationErrors(); 1159 } 1160 String [] parameters = {dateOfBirthString}; 1161 1162 validationErrors.add(new ValidationError( 1163 "personDetails", 1164 AddressBook.BUNDLE_PATH, 1165 mask.getField("dateOfBirthString"), 1166 "errors.date", 1167 Arrays.asList(parameters))); 1168 } 1169 } 1170 } catch (SystemException e) { 1171 e.printStackTrace(System.err); 1172 throw new RuntimeException (e); 1173 } 1174 if (!StringHandling.isNullOrEmpty(getOk())) { 1176 session.removeAttribute("personTab_activeTab"); 1177 } 1178 1179 person.setAddress(address); 1182 person.setEmployee(employee); 1183 person.setUser(user); 1185 return validationErrors; 1186 } 1187} | Popular Tags |