001: package org.tigris.scarab.om;
002:
003: /* ================================================================
004: * Copyright (c) 2000-2005 CollabNet. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are
008: * met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in the
015: * documentation and/or other materials provided with the distribution.
016: *
017: * 3. The end-user documentation included with the redistribution, if
018: * any, must include the following acknowlegement: "This product includes
019: * software developed by Collab.Net <http://www.Collab.Net/>."
020: * Alternately, this acknowlegement may appear in the software itself, if
021: * and wherever such third-party acknowlegements normally appear.
022: *
023: * 4. The hosted project names must not be used to endorse or promote
024: * products derived from this software without prior written
025: * permission. For written permission, please contact info@collab.net.
026: *
027: * 5. Products derived from this software may not use the "Tigris" or
028: * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
029: * prior written permission of Collab.Net.
030: *
031: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
032: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
033: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
034: * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
035: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
036: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
037: * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
038: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
039: * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
040: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
041: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
042: *
043: * ====================================================================
044: *
045: * This software consists of voluntary contributions made by many
046: * individuals on behalf of Collab.Net.
047: */
048:
049: import java.util.List;
050:
051: import org.apache.torque.TorqueException;
052: import org.apache.torque.util.Criteria;
053:
054: import org.tigris.scarab.tools.localization.L10NKeySet;
055: import org.tigris.scarab.util.AnonymousUserUtil;
056: import org.tigris.scarab.util.ScarabException;
057:
058: import org.apache.fulcrum.security.TurbineSecurity;
059: import org.apache.fulcrum.security.util.DataBackendException;
060: import org.apache.fulcrum.security.util.UnknownEntityException;
061:
062: /**
063: * This class manages ScarabUser objects.
064: *
065: * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
066: * @author <a href="mailto:jon@collab.net">Jon S. Stevens</a>
067: * @version $Id: ScarabUserManager.java 10042 2006-04-11 11:28:39Z jorgeuriarte $
068: */
069: public class ScarabUserManager extends BaseScarabUserManager {
070: public final static String HAS_ROLE_IN_MODULE = "hasRoleInModule";
071: public final static String GET_ACL = "getACL";
072:
073: /**
074: * Creates a new <code>ScarabUserManager</code> instance.
075: *
076: * @exception TorqueException if an error occurs
077: */
078: public ScarabUserManager() throws TorqueException {
079: super ();
080: setRegion(getClassName().replace('.', '_'));
081: }
082:
083: /**
084: * @return null if there is an UnknownEntityException
085: */
086: protected ScarabUser getInstanceImpl() {
087: ScarabUser user = null;
088: try {
089: user = (ScarabUser) AnonymousUserUtil.getAnonymousUser();
090: } catch (UnknownEntityException uee) {
091: } catch (DataBackendException e) {
092: }
093: return user;
094: }
095:
096: /**
097: * Return an instance of User based on username. Domain is currently
098: * unused.
099: */
100: public static ScarabUser getInstance(final String username)
101: throws TorqueException, ScarabException {
102: return getManager().getInstanceImpl(username);
103: }
104:
105: /**
106: * Return an instance of User based on username. <br/>
107: *
108: */
109: public static ScarabUser getInstanceByEmail(final String email)
110: throws TorqueException, ScarabException {
111: return getManager().getInstanceByEmailImpl(email);
112: }
113:
114: /**
115: * Gets a list of ScarabUsers based on usernames. Domain is currently
116: * unused.
117: *
118: * @param usernames a <code>String[]</code> value
119: * @return a <code>List</code> value
120: * @exception Exception if an error occurs
121: */
122: public static List getUsers(final String[] usernames)
123: throws TorqueException {
124: return getManager().getUsersImpl(usernames);
125: }
126:
127: /**
128: * Return an instance of User based on username. Domain is currently
129: * unused.
130: */
131: protected ScarabUser getInstanceImpl(final String username)
132: throws TorqueException, ScarabException {
133: ScarabUser user = null;
134: if (username != null) {
135: final Criteria crit = new Criteria();
136: crit.add(ScarabUserImplPeer.USERNAME, username);
137: final List users = ScarabUserImplPeer.doSelect(crit);
138: if (users.size() == 1) {
139: user = (ScarabUser) users.get(0);
140: } else if (users.size() > 1) {
141: throw new ScarabException(
142: L10NKeySet.ExceptionDuplicateUsername);
143: }
144: }
145: return user;
146: }
147:
148: /**
149: * Return an instance of User based on email. <br/>
150: *
151: */
152: protected ScarabUser getInstanceByEmailImpl(final String email)
153: throws TorqueException, ScarabException {
154: ScarabUser user = null;
155: if (email != null) {
156: final Criteria crit = new Criteria();
157: crit.add(ScarabUserImplPeer.EMAIL, email);
158: final List users = ScarabUserImplPeer.doSelect(crit);
159: if (users.size() == 1) {
160: user = (ScarabUser) users.get(0);
161: } else if (users.size() > 1) {
162: throw new ScarabException(
163: L10NKeySet.ExceptionDuplicateUsername);
164: }
165: }
166: return user;
167: }
168:
169: /**
170: * Gets a list of ScarabUsers based on usernames. Domain is currently
171: * unused.
172: *
173: * @param usernames a <code>String[]</code> value
174: * @return a <code>List</code> value
175: * @exception Exception if an error occurs
176: */
177: protected List getUsersImpl(final String[] usernames)
178: throws TorqueException {
179: List users = null;
180: if (usernames != null && usernames.length > 0) {
181: final Criteria crit = new Criteria();
182: crit.addIn(ScarabUserImplPeer.USERNAME, usernames);
183: users = ScarabUserImplPeer.doSelect(crit);
184: }
185: return users;
186: }
187:
188: /**
189: * Reactivate a User instance, if and only if it exists AND
190: * it has previously been delted (instance state is DELETED).
191: * returns reacitvated ScarabUser instance, or null, if user
192: * is NOT deleted. May return an internal Exception.
193: * @param su
194: * @return
195: * @throws Exception
196: */
197: public static ScarabUser reactivateUserIfDeleted(ScarabUser su)
198: throws Exception {
199: String username = su.getUserName();
200: ScarabUser reactivatedUser = (ScarabUser) TurbineSecurity
201: .getUser(username);
202: String cs = reactivatedUser.getConfirmed();
203: if (cs.equals(ScarabUser.DELETED)) {
204: reactivatedUser.setConfirmed(su.getConfirmed());
205: reactivatedUser.setEmail(su.getEmail());
206: String encryptedPassword = TurbineSecurity
207: .encryptPassword(su.getPassword());
208: reactivatedUser.setPassword(encryptedPassword);
209: reactivatedUser.setFirstName(su.getFirstName());
210: reactivatedUser.setLastName(su.getLastName());
211: reactivatedUser.save();
212: su = reactivatedUser;
213: } else {
214: su = null;
215: }
216: return su;
217: }
218:
219: }
|