1 package com.pow2.user.dao;
2
3 import org.apache.log4j.Category;
4
5 import com.pow2.util.Util;
6 import com.pow2.resources.Prefs;
7
8
9 /***
10 * "Creator" class for UserDAO objects.
11 *
12 * @author Luca Fossato
13 * @created 22 aprile 2002
14 */
15 public class UserDAOFactory
16 {
17 /*** user dao provider key */
18 public final static String KEY_USER_DATA_PROVIDER = "user.data.provider";
19
20 /*** RDBMS user dao provider */
21 public final static String USER_DATA_PROVIDER_RDBMS = "rdbms";
22
23 /*** LDAP user dao provider */
24 public final static String USER_DATA_PROVIDER_LDAP = "ldap";
25
26 /*** an handle to the unique UserDAOFactory instance. */
27 private static UserDAOFactory instance = null;
28
29 /*** default data access provider */
30 private int defaultProvider;
31
32 /*** relational data base managements system provider */
33 private final static int PROVIDER_RDBMS = 0;
34
35 /*** LDAP provider */
36 private final static int PROVIDER_LDAP = 1;
37
38 /*** Log4J category. */
39 private Category cat = Category.getInstance(this.getClass());
40
41
42 /***
43 * Default private constructor.
44 */
45 private UserDAOFactory()
46 {
47 String provider = Prefs.instance().getProperty(KEY_USER_DATA_PROVIDER);
48
49 if (Util.isNull(provider))
50 defaultProvider = PROVIDER_RDBMS;
51
52 if (USER_DATA_PROVIDER_RDBMS.equals(provider))
53 defaultProvider = PROVIDER_RDBMS;
54
55 else if (USER_DATA_PROVIDER_LDAP.equals(provider))
56 defaultProvider = PROVIDER_LDAP;
57
58 cat.info("::UserDAOFactory - use [" + provider + "] user data provider");
59 }
60
61
62 /***
63 * Get the unique instance of UserDAOFactory class.
64 *
65 * @return the instance of UserDAOFactory class
66 */
67 public static synchronized UserDAOFactory instance()
68 {
69 if (instance == null)
70 instance = new UserDAOFactory();
71
72 return instance;
73 }
74
75
76 /***
77 * Return an UserDAO object whose subclass is specified by
78 * the <code>defaultProvider</code> member attribute.
79 */
80 public UserDAO getUserDAO()
81 {
82 return getUserDAO(defaultProvider);
83 }
84
85
86 /***
87 * Return an UserDAO object whose subclass is specified by the input
88 * <code>provider</code> parameter.
89 *
90 * @param provider specifies the UserDAO class type.
91 * @return the selected userDAO instance, or null if the input
92 * <code>provider</code> parameter doesn't match an UserDAO
93 * subclass.<br>
94 * Supported provider constants are:<br>
95 * <ul>
96 * <li>PROVIDER_RDBMS to use rdbms data access</li>
97 * <li>PROVIDER_LDAP to use ldap data access</li>
98 * </ul>
99 */
100 public UserDAO getUserDAO(int provider)
101 {
102 switch (provider)
103 {
104 case PROVIDER_RDBMS: return DBUserDAO.instance();
105 case PROVIDER_LDAP: return LDAPUserDAO.instance();
106 }
107
108 return null;
109 }
110
111
112 /***
113 * Get the current User data provider type,
114 * asspecified by the Prefs object.
115 *
116 * @return the User data provider type
117 */
118 public String getProviderType()
119 {
120 return Prefs.instance().getProperty(KEY_USER_DATA_PROVIDER);
121 }
122 }