1 64 package com.ivata.groupware.admin.setting; 65 66 import java.text.SimpleDateFormat ; 67 import java.util.Arrays ; 68 import java.util.Iterator ; 69 import java.util.Locale ; 70 import java.util.Map ; 71 import java.util.ResourceBundle ; 72 73 import com.ivata.groupware.admin.security.server.SecuritySession; 74 import com.ivata.groupware.admin.security.user.UserDO; 75 import com.ivata.groupware.business.BusinessLogic; 76 import com.ivata.groupware.container.persistence.QueryPersistenceManager; 77 import com.ivata.mask.persistence.FinderException; 78 import com.ivata.mask.persistence.PersistenceSession; 79 import com.ivata.mask.util.StringHandling; 80 import com.ivata.mask.util.SystemException; 81 import com.ivata.mask.validation.ValidationError; 82 import com.ivata.mask.validation.ValidationErrors; 83 import com.ivata.mask.validation.ValidationException; 84 85 86 94 public class SettingsImpl extends BusinessLogic implements Settings { 95 99 private QueryPersistenceManager persistenceManager; 100 101 106 public SettingsImpl(final QueryPersistenceManager persistenceManager) { 107 this.persistenceManager = persistenceManager; 108 } 109 119 public void amendSetting(final SecuritySession securitySession, 120 final String name, 121 final Object value, 122 final UserDO user) 123 throws SystemException { 124 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 125 try { 126 SettingDO generalSetting = (SettingDO) persistenceManager.findInstance(persistenceSession, 128 "adminSettingByName", new Object [] {name}); 129 130 if ((generalSetting.getType() == SettingConstants.DATA_TYPE_INTEGER) 131 && !(value instanceof Integer )) { 132 throw new ValidationException( 133 new ValidationError( 134 "errors.setting.type.integer", 135 Arrays.asList(new Object [] { 136 value.getClass().getName(), 137 value 138 }))); 139 } else if ((generalSetting.getType() == SettingConstants.DATA_TYPE_BOOLEAN) 140 && !(value instanceof Boolean )) { 141 new ValidationError( 142 "errors.setting.type.boolean", 143 Arrays.asList(new Object [] { 144 value.getClass().getName(), 145 value 146 })); 147 } else if (!(value instanceof String )) { 148 String className; 149 if (value == null) { 150 className = "[None]"; 151 } else { 152 className = value.getClass().getName(); 153 } 154 new ValidationError( 155 "errors.setting.type.string", 156 Arrays.asList(new Object [] { 157 className, 158 value 159 })); 160 } 161 162 if (user == null) { 165 generalSetting.setValue(value.toString()); 166 persistenceManager.amend(persistenceSession, generalSetting); 167 } else { 168 try { 169 SettingDO setting = (SettingDO) persistenceManager.findInstance(persistenceSession, 170 "adminSettingByNameUserName", new Object [] {name, user.getName()}); 171 setting.setValue(StringHandling.getNotNull(value, null)); 172 } catch (FinderException e) { 173 SettingDO setting = new SettingDO(); 175 setting.setDescription(generalSetting.getDescription()); 176 setting.setEnabled(generalSetting.isEnabled()); 177 setting.setName(name); 178 setting.setType(generalSetting.getType()); 179 setting.setUser(user); 180 setting.setValue(value.toString()); 181 persistenceManager.add(persistenceSession, setting); 182 } 183 184 } 185 } catch (Exception e) { 186 persistenceSession.cancel(); 187 throw new SystemException(e); 188 } finally { 189 persistenceSession.close(); 190 } 191 } 192 193 201 private SettingDO findSetting(final SecuritySession securitySession, 202 final String name, 203 final UserDO user) 204 throws SystemException { 205 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 206 try { 207 208 SettingDO setting = null; 209 210 if ((user != null) 212 && (user.getName() != null)) { 213 try { 214 setting = (SettingDO) persistenceManager.findInstance(persistenceSession, 215 "adminSettingByNameUserName", new Object [] {name, user.getName()}); 216 } catch (FinderException e) { 217 } 219 } 220 221 if (setting == null) { 223 setting = (SettingDO) persistenceManager.findInstance(persistenceSession, 224 "adminSettingByName", new Object [] {name}); 225 } 226 return setting; 227 } catch (Exception e) { 228 persistenceSession.cancel(); 229 if (e instanceof SystemException) { 230 throw (SystemException) e; 231 } 232 throw new SystemException(e); 233 } finally { 234 persistenceSession.close(); 235 } 236 } 237 238 254 public final Boolean getBooleanSetting(final SecuritySession session, 255 final String name, 256 final UserDO user) throws SystemException { 257 return (Boolean ) getSettingOfType(session, name, user, Boolean .class); 258 } 259 275 public final Integer getIntegerSetting(final SecuritySession session, 276 final String name, 277 final UserDO user) throws SystemException { 278 return (Integer ) getSettingOfType(session, name, user, Integer .class); 279 } 280 281 302 public final Object getSetting(final SecuritySession securitySession, 303 final String name, 304 final UserDO userDO) throws SystemException { 305 SettingDO setting = findSetting(securitySession, name, userDO); 306 Object returnObject; 307 switch (setting.getType()) { 309 case SettingConstants.DATA_TYPE_INTEGER: 310 returnObject = new Integer (setting.getValue()); 311 break; 312 313 case SettingConstants.DATA_TYPE_BOOLEAN: 314 returnObject = new Boolean (setting.getValue()); 315 break; 316 317 default: 319 returnObject = setting.getValue(); 320 break; 321 } 322 return returnObject; 323 } 324 325 332 private Object getSettingOfType(final SecuritySession session, 333 final String name, 334 final UserDO user, 335 final Class settingType) 336 throws SettingsDataTypeException, 337 SystemException { 338 Object oTest = getSetting(session, name, user); 339 if ((oTest != null) && 340 (!oTest.getClass().getName().equals(settingType.getName()))) { 341 throw new SettingsDataTypeException("Setting '" 342 + name 343 + "' has class '" 344 + oTest.getClass().getName() 345 + "', expected '" 346 + settingType.getName() 347 + "'."); 348 } 349 return oTest; 350 } 351 352 358 public final int getSettingType(final SecuritySession securitySession, 359 final String name) throws SystemException { 360 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 361 try { 362 return ((SettingDO) persistenceManager.findInstance(persistenceSession, "adminSettingName", 363 new Object [] {name})).getType(); 364 } catch (Exception e) { 365 persistenceSession.cancel(); 366 throw new SystemException(e); 367 } finally { 368 persistenceSession.close(); 369 } 370 } 371 372 388 public final String getStringSetting(final SecuritySession session, 389 final String name, 390 final UserDO user) throws SystemException { 391 return (String ) getSettingOfType(session, name, user, String .class); 392 } 393 403 public boolean isSettingEnabled(final SecuritySession securitySession, 404 final String 405 name) 406 throws SystemException { 407 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 408 try { 409 SettingDO setting = (SettingDO) persistenceManager.findInstance(persistenceSession, 410 "adminSettingByName", new Object [] {name}); 411 return setting.isEnabled(); 412 } catch (FinderException e) { 413 return false; 414 } catch (Exception e) { 415 persistenceSession.cancel(); 416 throw new SystemException(e); 417 } finally { 418 persistenceSession.close(); 419 } 420 } 421 422 430 public void revertSetting(final SecuritySession securitySession, 431 final String name, 432 final UserDO user) 433 throws SystemException { 434 assert(user != null); 435 436 PersistenceSession persistenceSession = persistenceManager.openSession(securitySession); 437 try { 438 SettingDO setting = (SettingDO) persistenceManager.findInstance(persistenceSession, 439 "adminSettingByNameUserName", new Object [] {name, user.getName()}); 440 persistenceManager.remove(persistenceSession, setting); 441 } catch (FinderException e) { 442 } catch (Exception e) { 444 persistenceSession.cancel(); 445 throw new SystemException(e); 446 } finally { 447 persistenceSession.close(); 448 } 449 } 450 451 465 public ValidationErrors validate(final SecuritySession session, 466 final Map settings, 467 final Locale locale, 468 final int settingType) throws SystemException { 469 ResourceBundle resources = ResourceBundle.getBundle("com.ivata.groupware.admin.ApplicationResources", locale); 470 ValidationErrors errors = new ValidationErrors(); 471 472 String settingAreaString = ""; 473 if (settingType == SettingConstants.SETTING_SYSTEM) { 474 settingAreaString = resources.getString("setting.system"); 475 } else if (settingType == SettingConstants.SETTING_USER) { 476 settingAreaString = resources.getString("setting.user"); 477 } 478 479 String currentName = ""; 482 Integer valueInteger; 483 String valueString; 484 Boolean valueBoolean; 485 486 for (Iterator i = settings.keySet().iterator(); i.hasNext(); ) { 487 currentName = (String ) i.next(); 488 489 if (currentName.equals("emailHost") || 491 currentName.equals("emailHostSmtp") || 492 currentName.equals("emailFolderInbox") || 493 currentName.equals("emailFolderSent") || 494 currentName.equals("emailFolderTrash") || 495 currentName.equals("emailFolderDrafts")) { 496 497 if (StringHandling.isNullOrEmpty((String ) settings.get(currentName))) { 498 errors.add(new ValidationError( 499 "errors.setting.required", 500 Arrays.asList(new String [] {settingAreaString, 501 resources.getString("setting.field." 502 + currentName)}))); 503 } 504 505 } else if (currentName.equals("emailPort")) { 507 valueInteger = (Integer ) settings.get(currentName); 508 if (valueInteger.intValue() < 1 || valueInteger.intValue() > 65535) { 509 errors.add(new ValidationError( 510 "errors.setting.range", 511 Arrays.asList(new String [] {settingAreaString, 512 resources.getString("setting.field." 513 + currentName), 514 "1", 515 "65535"}))); 516 517 } 518 519 } else if (currentName.equals("libraryHome") || 521 currentName.equals("libraryRecent") || 522 currentName.equals("libraryCommentSpacer")) { 523 524 valueInteger = (Integer ) settings.get(currentName); 525 if (valueInteger.intValue() < 1) { 526 errors.add(new ValidationError( 527 "errors.setting.greaterThan", 528 Arrays.asList(new String [] {settingAreaString, 529 resources.getString("setting.field." 530 + currentName), 531 "0"}))); 532 533 } 534 535 536 } else if (currentName.equals("i18nDateInputDisplay") || 538 currentName.equals("i18nDateLong") || 539 currentName.equals("i18nDateLongDay") || 540 currentName.equals("i18nDateLongYear") || 541 currentName.equals("i18nDateShort") || 542 currentName.equals("i18nDateShortYear") || 543 currentName.equals("i18nDateWeekDay") || 544 currentName.equals("i18nDateShortToday") || 545 currentName.equals("i18nDateShortYesterday") || 546 currentName.equals("i18nDateThisAfternoon") || 547 currentName.equals("i18nDateThisMorning") || 548 currentName.equals("i18nDateThisEvening") || 549 currentName.equals("i18nDateYesterdayMorning") || 550 currentName.equals("i18nDateYesterdayAfternoon") || 551 currentName.equals("i18nDateYesterdayEvening")) { 552 553 try { 555 SimpleDateFormat testDateFormat = new SimpleDateFormat ((String ) settings.get(currentName)); 556 } catch (IllegalArgumentException e) { 557 errors.add(new ValidationError( 558 "errors.setting.date", 559 Arrays.asList(new String [] {settingAreaString, 560 resources.getString("setting.field." 561 + currentName)}))); 562 } 563 564 } else if (currentName.equals("i18nTimeInputDisplay") || 566 currentName.equals("i18nTimeLong") || 567 currentName.equals("i18nTimeShort")) { 568 569 try { 571 SimpleDateFormat testDateFormat = new SimpleDateFormat ((String ) settings.get(currentName)); 572 } catch (IllegalArgumentException e) { 573 errors.add(new ValidationError( 574 "errors.setting.time", 575 Arrays.asList(new String [] {settingAreaString, 576 resources.getString("setting.field." 577 + currentName)}))); 578 } 579 580 581 } 582 583 } 584 return errors; 585 } 586 } 587 | Popular Tags |