| 1 package org.apache.turbine.services.security.torque; 2 3 18 19 import java.beans.PropertyDescriptor ; 20 21 import java.util.ArrayList ; 22 import java.util.Iterator ; 23 import java.util.List ; 24 25 import org.apache.commons.configuration.Configuration; 26 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 30 import org.apache.torque.TorqueException; 31 import org.apache.torque.om.Persistent; 32 import org.apache.torque.util.BasePeer; 33 import org.apache.torque.util.Criteria; 34 35 import org.apache.turbine.om.security.User; 36 import org.apache.turbine.services.InitializationException; 37 import org.apache.turbine.services.security.TurbineSecurity; 38 import org.apache.turbine.util.security.DataBackendException; 39 40 48 49 public class UserPeerManager 50 implements UserPeerManagerConstants 51 { 52 53 private static Class userPeerClass = null; 54 55 56 private static Class userObject = null; 57 58 59 private static String tableName = null; 60 61 62 private static String nameColumn = null; 63 64 65 private static String idColumn = null; 66 67 68 private static String passwordColumn = null; 69 70 71 private static String firstNameColumn = null; 72 73 74 private static String lastNameColumn = null; 75 76 77 private static String emailColumn = null; 78 79 80 private static String confirmColumn = null; 81 82 83 private static String createDateColumn = null; 84 85 86 private static String lastLoginColumn = null; 87 88 89 private static String objectdataColumn = null; 90 91 92 private static PropertyDescriptor namePropDesc = null; 93 94 95 private static PropertyDescriptor idPropDesc = null; 96 97 98 private static PropertyDescriptor passwordPropDesc = null; 99 100 101 private static PropertyDescriptor firstNamePropDesc = null; 102 103 104 private static PropertyDescriptor lastNamePropDesc = null; 105 106 107 private static PropertyDescriptor emailPropDesc = null; 108 109 110 private static PropertyDescriptor confirmPropDesc = null; 111 112 113 private static PropertyDescriptor createDatePropDesc = null; 114 115 116 private static PropertyDescriptor lastLoginPropDesc = null; 117 118 119 private static PropertyDescriptor objectdataPropDesc = null; 120 121 122 static Log log = LogFactory.getLog(UserPeerManager.class); 123 124 133 134 public static void init(Configuration conf) 135 throws InitializationException 136 { 137 String userPeerClassName = conf.getString(USER_PEER_CLASS_KEY, 138 USER_PEER_CLASS_DEFAULT); 139 String userObjectName = null; 140 141 try 142 { 143 userPeerClass = Class.forName(userPeerClassName); 144 145 tableName = 146 (String ) userPeerClass.getField("TABLE_NAME").get(null); 147 148 153 155 userObject = getPersistenceClass(); 156 157 userObjectName = conf.getString(USER_CLASS_KEY, 158 userObject.getName()); 159 160 userObject = Class.forName(userObjectName); 162 163 167 168 nameColumn = (String ) userPeerClass.getField( 169 conf.getString(USER_NAME_COLUMN_KEY, 170 USER_NAME_COLUMN_DEFAULT) 171 ).get(null); 172 173 idColumn = (String ) userPeerClass.getField( 174 conf.getString(USER_ID_COLUMN_KEY, 175 USER_ID_COLUMN_DEFAULT) 176 ).get(null); 177 178 passwordColumn = (String ) userPeerClass.getField( 179 conf.getString(USER_PASSWORD_COLUMN_KEY, 180 USER_PASSWORD_COLUMN_DEFAULT) 181 ).get(null); 182 183 firstNameColumn = (String ) userPeerClass.getField( 184 conf.getString(USER_FIRST_NAME_COLUMN_KEY, 185 USER_FIRST_NAME_COLUMN_DEFAULT) 186 ).get(null); 187 188 lastNameColumn = (String ) userPeerClass.getField( 189 conf.getString(USER_LAST_NAME_COLUMN_KEY, 190 USER_LAST_NAME_COLUMN_DEFAULT) 191 ).get(null); 192 193 emailColumn = (String ) userPeerClass.getField( 194 conf.getString(USER_EMAIL_COLUMN_KEY, 195 USER_EMAIL_COLUMN_DEFAULT) 196 ).get(null); 197 198 confirmColumn = (String ) userPeerClass.getField( 199 conf.getString(USER_CONFIRM_COLUMN_KEY, 200 USER_CONFIRM_COLUMN_DEFAULT) 201 ).get(null); 202 203 createDateColumn = (String ) userPeerClass.getField( 204 conf.getString(USER_CREATE_COLUMN_KEY, 205 USER_CREATE_COLUMN_DEFAULT) 206 ).get(null); 207 208 lastLoginColumn = (String ) userPeerClass.getField( 209 conf.getString(USER_LAST_LOGIN_COLUMN_KEY, 210 USER_LAST_LOGIN_COLUMN_DEFAULT) 211 ).get(null); 212 213 objectdataColumn = (String ) userPeerClass.getField( 214 conf.getString(USER_OBJECTDATA_COLUMN_KEY, 215 USER_OBJECTDATA_COLUMN_DEFAULT) 216 ).get(null); 217 218 namePropDesc = 219 new PropertyDescriptor (conf.getString( 220 USER_NAME_PROPERTY_KEY, 221 USER_NAME_PROPERTY_DEFAULT), 222 userObject); 223 224 idPropDesc = 225 new PropertyDescriptor (conf.getString( 226 USER_ID_PROPERTY_KEY, 227 USER_ID_PROPERTY_DEFAULT), 228 userObject); 229 230 passwordPropDesc = 231 new PropertyDescriptor (conf.getString( 232 USER_PASSWORD_PROPERTY_KEY, 233 USER_PASSWORD_PROPERTY_DEFAULT), 234 userObject); 235 236 firstNamePropDesc = 237 new PropertyDescriptor (conf.getString( 238 USER_FIRST_NAME_PROPERTY_KEY, 239 USER_FIRST_NAME_PROPERTY_DEFAULT), 240 userObject); 241 242 lastNamePropDesc = 243 new PropertyDescriptor (conf.getString( 244 USER_LAST_NAME_PROPERTY_KEY, 245 USER_LAST_NAME_PROPERTY_DEFAULT), 246 userObject); 247 248 emailPropDesc = 249 new PropertyDescriptor (conf.getString( 250 USER_EMAIL_PROPERTY_KEY, 251 USER_EMAIL_PROPERTY_DEFAULT), 252 userObject); 253 254 confirmPropDesc = 255 new PropertyDescriptor (conf.getString( 256 USER_CONFIRM_PROPERTY_KEY, 257 USER_CONFIRM_PROPERTY_DEFAULT), 258 userObject); 259 260 createDatePropDesc = 261 new PropertyDescriptor (conf.getString( 262 USER_CREATE_PROPERTY_KEY, 263 USER_CREATE_PROPERTY_DEFAULT), 264 userObject); 265 266 lastLoginPropDesc = 267 new PropertyDescriptor (conf.getString( 268 USER_LAST_LOGIN_PROPERTY_KEY, 269 USER_LAST_LOGIN_PROPERTY_DEFAULT), 270 userObject); 271 272 objectdataPropDesc = 273 new PropertyDescriptor (conf.getString( 274 USER_OBJECTDATA_PROPERTY_KEY, 275 USER_OBJECTDATA_PROPERTY_DEFAULT), 276 userObject); 277 } 278 catch (Exception e) 279 { 280 if (userPeerClassName == null || userPeerClass == null) 281 { 282 throw new InitializationException( 283 "Could not find UserPeer class (" 284 + userPeerClassName + ")", e); 285 } 286 if (tableName == null) 287 { 288 throw new InitializationException( 289 "Failed to get the table name from the Peer object", e); 290 } 291 292 if (userObject == null || userObjectName == null) 293 { 294 throw new InitializationException( 295 "Failed to get the object type from the Peer object", e); 296 } 297 298 299 if (nameColumn == null || namePropDesc == null) 300 { 301 throw new InitializationException( 302 "UserPeer " + userPeerClassName 303 + " has no name column information!", e); 304 } 305 if (idColumn == null || idPropDesc == null) 306 { 307 throw new InitializationException( 308 "UserPeer " + userPeerClassName 309 + " has no id column information!", e); 310 } 311 if (passwordColumn == null || passwordPropDesc == null) 312 { 313 throw new InitializationException( 314 "UserPeer " + userPeerClassName 315 + " has no password column information!", e); 316 } 317 if (firstNameColumn == null || firstNamePropDesc == null) 318 { 319 throw new InitializationException( 320 "UserPeer " + userPeerClassName 321 + " has no firstName column information!", e); 322 } 323 if (lastNameColumn == null || lastNamePropDesc == null) 324 { 325 throw new InitializationException( 326 "UserPeer " + userPeerClassName 327 + " has no lastName column information!", e); 328 } 329 if (emailColumn == null || emailPropDesc == null) 330 { 331 throw new InitializationException( 332 "UserPeer " + userPeerClassName 333 + " has no email column information!", e); 334 } 335 if (confirmColumn == null || confirmPropDesc == null) 336 { 337 throw new InitializationException( 338 "UserPeer " + userPeerClassName 339 + " has no confirm column information!", e); 340 } 341 if (createDateColumn == null || createDatePropDesc == null) 342 { 343 throw new InitializationException( 344 "UserPeer " + userPeerClassName 345 + " has no createDate column information!", e); 346 } 347 if (lastLoginColumn == null || lastLoginPropDesc == null) 348 { 349 throw new InitializationException( 350 "UserPeer " + userPeerClassName 351 + " has no lastLogin column information!", e); 352 } 353 if (objectdataColumn == null || objectdataPropDesc == null) 354 { 355 throw new InitializationException( 356 "UserPeer " + userPeerClassName 357 + " has no objectdata column information!", e); 358 } 359 } 360 } 361 362 367 public static String getTableName() 368 { 369 return tableName; 370 } 371 372 378 public static String getNameColumn() 379 { 380 return nameColumn; 381 } 382 383 389 public static String getIdColumn() 390 { 391 return idColumn; 392 } 393 394 400 public static String getPasswordColumn() 401 { 402 return passwordColumn; 403 } 404 405 411 public static String getFirstNameColumn() 412 { 413 return firstNameColumn; 414 } 415 416 422 public static String getLastNameColumn() 423 { 424 return lastNameColumn; 425 } 426 427 433 public static String getEmailColumn() 434 { 435 return emailColumn; 436 } 437 438 444 public static String getConfirmColumn() 445 { 446 return confirmColumn; 447 } 448 449 455 public static String getCreateDateColumn() 456 { 457 return createDateColumn; 458 } 459 460 466 public static String getLastLoginColumn() 467 { 468 return lastLoginColumn; 469 } 470 471 477 public static String getObjectdataColumn() 478 { 479 return objectdataColumn; 480 } 481 482 489 public static String getColumnName(String name) 490 { 491 StringBuffer sb = new StringBuffer (); 492 sb.append(getTableName()); 493 sb.append("."); 494 sb.append(name); 495 return sb.toString(); 496 } 497 498 506 public String getFullColumnName(String name) 507 { 508 return getColumnName(name); 509 } 510 511 512 520 521 public static Persistent newPersistentInstance() 522 { 523 Persistent obj = null; 524 525 if(userObject == null) 526 { 527 return obj; 534 } 535 536 try 537 { 538 obj = (Persistent) userObject.newInstance(); 539 } 540 catch (Exception e) 541 { 542 log.error("Could not instantiate a user object", e); 543 obj = null; 544 } 545 return obj; 546 } 547 548 558 public static boolean checkExists(User user) 559 throws DataBackendException, Exception  560 { 561 Criteria criteria = new Criteria(); 562 563 criteria.addSelectColumn(getIdColumn()); 564 565 criteria.add(getNameColumn(), user.getName()); 566 567 List results = BasePeer.doSelect(criteria); 568 569 if (results.size() > 1) 570 { 571 throw new DataBackendException("Multiple users named '" + 572 user.getName() + "' exist!"); 573 } 574 return (results.size() == 1); 575 } 576 577 583 public static List selectAllUsers() 584 throws Exception  585 { 586 Criteria criteria = new Criteria(); 587 criteria.addAscendingOrderByColumn(getLastNameColumn()); 588 criteria.addAscendingOrderByColumn(getFirstNameColumn()); 589 criteria.setIgnoreCase(true); 590 return doSelect(criteria); 591 } 592 593 599 public static List selectAllConfirmedUsers() 600 throws Exception  601 { 602 Criteria criteria = new Criteria(); 603 604 criteria.add (getConfirmColumn(), User.CONFIRM_DATA); 605 criteria.addAscendingOrderByColumn(getLastNameColumn()); 606 criteria.addAscendingOrderByColumn(getFirstNameColumn()); 607 criteria.setIgnoreCase(true); 608 return doSelect(criteria); 609 } 610 611 621 622 632 633 public static Criteria buildCriteria(User user) 634 { 635 Criteria crit; 636 637 try 638 { 639 Class [] clazz = new Class [] { userObject }; 640 Object [] params = 641 new Object [] { ((TorqueUser) user).getPersistentObj() }; 642 643 crit = (Criteria) userPeerClass 644 .getMethod("buildCriteria", clazz) 645 .invoke(null, params); 646 } 647 catch (Exception e) 648 { 649 crit = null; 650 } 651 652 return crit; 653 } 654 655 662 663 public static void doUpdate(Criteria criteria) 664 throws TorqueException 665 { 666 try 667 { 668 Class [] clazz = new Class [] { Criteria.class }; 669 Object [] params = new Object [] { criteria }; 670 671 userPeerClass 672 .getMethod("doUpdate", clazz) 673 .invoke(null, params); 674 } 675 catch (Exception e) 676 { 677 throw new TorqueException("doUpdate failed", e); 678 } 679 } 680 681 688 689 public static void doInsert(Criteria criteria) 690 throws TorqueException 691 { 692 try 693 { 694 Class [] clazz = new Class [] { Criteria.class }; 695 Object [] params = new Object [] { criteria }; 696 697 userPeerClass 698 .getMethod("doInsert", clazz) 699 .invoke(null, params); 700 } 701 catch (Exception e) 702 { 703 throw new TorqueException("doInsert failed", e); 704 } 705 } 706 707 716 public static List doSelect(Criteria criteria) 717 throws TorqueException 718 { 719 List list; 720 721 try 722 { 723 Class [] clazz = 724 new Class [] { Criteria.class }; 725 Object [] params = new Object [] { criteria }; 726 727 list = (List ) userPeerClass 728 .getMethod("doSelect", clazz) 729 .invoke(null, params); 730 } 731 catch (Exception e) 732 { 733 throw new TorqueException("doSelect failed", e); 734 } 735 List newList = new ArrayList (list.size()); 736 737 for (Iterator it = list.iterator(); it.hasNext(); ) 741 { 742 User u = getNewUser((Persistent) it.next()); 743 newList.add(u); 744 } 745 746 return newList; 747 } 748 749 756 public static void doDelete(Criteria criteria) 757 throws TorqueException 758 { 759 try 760 { 761 Class [] clazz = new Class [] { Criteria.class }; 762 Object [] params = new Object [] { criteria }; 763 764 userPeerClass 765 .getMethod("doDelete", clazz) 766 .invoke(null, params); 767 } 768 catch (Exception e) 769 { 770 throw new TorqueException("doDelete failed", e); 771 } 772 } 773 774 780 public static void setUserName( |