1   /**
2    * Copyright (c) 2000-2008 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.service.persistence;
24  
25  import com.liferay.portal.NoSuchPasswordPolicyException;
26  import com.liferay.portal.SystemException;
27  import com.liferay.portal.kernel.dao.orm.DynamicQuery;
28  import com.liferay.portal.kernel.dao.orm.FinderCacheUtil;
29  import com.liferay.portal.kernel.dao.orm.Query;
30  import com.liferay.portal.kernel.dao.orm.QueryPos;
31  import com.liferay.portal.kernel.dao.orm.QueryUtil;
32  import com.liferay.portal.kernel.dao.orm.Session;
33  import com.liferay.portal.kernel.util.GetterUtil;
34  import com.liferay.portal.kernel.util.ListUtil;
35  import com.liferay.portal.kernel.util.OrderByComparator;
36  import com.liferay.portal.kernel.util.StringPool;
37  import com.liferay.portal.kernel.util.StringUtil;
38  import com.liferay.portal.model.ModelListener;
39  import com.liferay.portal.model.PasswordPolicy;
40  import com.liferay.portal.model.impl.PasswordPolicyImpl;
41  import com.liferay.portal.model.impl.PasswordPolicyModelImpl;
42  import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
43  
44  import org.apache.commons.logging.Log;
45  import org.apache.commons.logging.LogFactory;
46  
47  import java.util.ArrayList;
48  import java.util.Collections;
49  import java.util.Iterator;
50  import java.util.List;
51  
52  /**
53   * <a href="PasswordPolicyPersistenceImpl.java.html"><b><i>View Source</i></b></a>
54   *
55   * @author Brian Wing Shun Chan
56   *
57   */
58  public class PasswordPolicyPersistenceImpl extends BasePersistenceImpl
59      implements PasswordPolicyPersistence {
60      public PasswordPolicy create(long passwordPolicyId) {
61          PasswordPolicy passwordPolicy = new PasswordPolicyImpl();
62  
63          passwordPolicy.setNew(true);
64          passwordPolicy.setPrimaryKey(passwordPolicyId);
65  
66          return passwordPolicy;
67      }
68  
69      public PasswordPolicy remove(long passwordPolicyId)
70          throws NoSuchPasswordPolicyException, SystemException {
71          Session session = null;
72  
73          try {
74              session = openSession();
75  
76              PasswordPolicy passwordPolicy = (PasswordPolicy)session.get(PasswordPolicyImpl.class,
77                      new Long(passwordPolicyId));
78  
79              if (passwordPolicy == null) {
80                  if (_log.isWarnEnabled()) {
81                      _log.warn("No PasswordPolicy exists with the primary key " +
82                          passwordPolicyId);
83                  }
84  
85                  throw new NoSuchPasswordPolicyException(
86                      "No PasswordPolicy exists with the primary key " +
87                      passwordPolicyId);
88              }
89  
90              return remove(passwordPolicy);
91          }
92          catch (NoSuchPasswordPolicyException nsee) {
93              throw nsee;
94          }
95          catch (Exception e) {
96              throw processException(e);
97          }
98          finally {
99              closeSession(session);
100         }
101     }
102 
103     public PasswordPolicy remove(PasswordPolicy passwordPolicy)
104         throws SystemException {
105         if (_listeners.length > 0) {
106             for (ModelListener listener : _listeners) {
107                 listener.onBeforeRemove(passwordPolicy);
108             }
109         }
110 
111         passwordPolicy = removeImpl(passwordPolicy);
112 
113         if (_listeners.length > 0) {
114             for (ModelListener listener : _listeners) {
115                 listener.onAfterRemove(passwordPolicy);
116             }
117         }
118 
119         return passwordPolicy;
120     }
121 
122     protected PasswordPolicy removeImpl(PasswordPolicy passwordPolicy)
123         throws SystemException {
124         Session session = null;
125 
126         try {
127             session = openSession();
128 
129             session.delete(passwordPolicy);
130 
131             session.flush();
132 
133             return passwordPolicy;
134         }
135         catch (Exception e) {
136             throw processException(e);
137         }
138         finally {
139             closeSession(session);
140 
141             FinderCacheUtil.clearCache(PasswordPolicy.class.getName());
142         }
143     }
144 
145     /**
146      * @deprecated Use <code>update(PasswordPolicy passwordPolicy, boolean merge)</code>.
147      */
148     public PasswordPolicy update(PasswordPolicy passwordPolicy)
149         throws SystemException {
150         if (_log.isWarnEnabled()) {
151             _log.warn(
152                 "Using the deprecated update(PasswordPolicy passwordPolicy) method. Use update(PasswordPolicy passwordPolicy, boolean merge) instead.");
153         }
154 
155         return update(passwordPolicy, false);
156     }
157 
158     /**
159      * Add, update, or merge, the entity. This method also calls the model
160      * listeners to trigger the proper events associated with adding, deleting,
161      * or updating an entity.
162      *
163      * @param        passwordPolicy the entity to add, update, or merge
164      * @param        merge boolean value for whether to merge the entity. The
165      *                default value is false. Setting merge to true is more
166      *                expensive and should only be true when passwordPolicy is
167      *                transient. See LEP-5473 for a detailed discussion of this
168      *                method.
169      * @return        true if the portlet can be displayed via Ajax
170      */
171     public PasswordPolicy update(PasswordPolicy passwordPolicy, boolean merge)
172         throws SystemException {
173         boolean isNew = passwordPolicy.isNew();
174 
175         if (_listeners.length > 0) {
176             for (ModelListener listener : _listeners) {
177                 if (isNew) {
178                     listener.onBeforeCreate(passwordPolicy);
179                 }
180                 else {
181                     listener.onBeforeUpdate(passwordPolicy);
182                 }
183             }
184         }
185 
186         passwordPolicy = updateImpl(passwordPolicy, merge);
187 
188         if (_listeners.length > 0) {
189             for (ModelListener listener : _listeners) {
190                 if (isNew) {
191                     listener.onAfterCreate(passwordPolicy);
192                 }
193                 else {
194                     listener.onAfterUpdate(passwordPolicy);
195                 }
196             }
197         }
198 
199         return passwordPolicy;
200     }
201 
202     public PasswordPolicy updateImpl(
203         com.liferay.portal.model.PasswordPolicy passwordPolicy, boolean merge)
204         throws SystemException {
205         Session session = null;
206 
207         try {
208             session = openSession();
209 
210             if (merge) {
211                 session.merge(passwordPolicy);
212             }
213             else {
214                 if (passwordPolicy.isNew()) {
215                     session.save(passwordPolicy);
216                 }
217             }
218 
219             session.flush();
220 
221             passwordPolicy.setNew(false);
222 
223             return passwordPolicy;
224         }
225         catch (Exception e) {
226             throw processException(e);
227         }
228         finally {
229             closeSession(session);
230 
231             FinderCacheUtil.clearCache(PasswordPolicy.class.getName());
232         }
233     }
234 
235     public PasswordPolicy findByPrimaryKey(long passwordPolicyId)
236         throws NoSuchPasswordPolicyException, SystemException {
237         PasswordPolicy passwordPolicy = fetchByPrimaryKey(passwordPolicyId);
238 
239         if (passwordPolicy == null) {
240             if (_log.isWarnEnabled()) {
241                 _log.warn("No PasswordPolicy exists with the primary key " +
242                     passwordPolicyId);
243             }
244 
245             throw new NoSuchPasswordPolicyException(
246                 "No PasswordPolicy exists with the primary key " +
247                 passwordPolicyId);
248         }
249 
250         return passwordPolicy;
251     }
252 
253     public PasswordPolicy fetchByPrimaryKey(long passwordPolicyId)
254         throws SystemException {
255         Session session = null;
256 
257         try {
258             session = openSession();
259 
260             return (PasswordPolicy)session.get(PasswordPolicyImpl.class,
261                 new Long(passwordPolicyId));
262         }
263         catch (Exception e) {
264             throw processException(e);
265         }
266         finally {
267             closeSession(session);
268         }
269     }
270 
271     public PasswordPolicy findByC_DP(long companyId, boolean defaultPolicy)
272         throws NoSuchPasswordPolicyException, SystemException {
273         PasswordPolicy passwordPolicy = fetchByC_DP(companyId, defaultPolicy);
274 
275         if (passwordPolicy == null) {
276             StringBuilder msg = new StringBuilder();
277 
278             msg.append("No PasswordPolicy exists with the key {");
279 
280             msg.append("companyId=" + companyId);
281 
282             msg.append(", ");
283             msg.append("defaultPolicy=" + defaultPolicy);
284 
285             msg.append(StringPool.CLOSE_CURLY_BRACE);
286 
287             if (_log.isWarnEnabled()) {
288                 _log.warn(msg.toString());
289             }
290 
291             throw new NoSuchPasswordPolicyException(msg.toString());
292         }
293 
294         return passwordPolicy;
295     }
296 
297     public PasswordPolicy fetchByC_DP(long companyId, boolean defaultPolicy)
298         throws SystemException {
299         boolean finderClassNameCacheEnabled = PasswordPolicyModelImpl.CACHE_ENABLED;
300         String finderClassName = PasswordPolicy.class.getName();
301         String finderMethodName = "fetchByC_DP";
302         String[] finderParams = new String[] {
303                 Long.class.getName(), Boolean.class.getName()
304             };
305         Object[] finderArgs = new Object[] {
306                 new Long(companyId), Boolean.valueOf(defaultPolicy)
307             };
308 
309         Object result = null;
310 
311         if (finderClassNameCacheEnabled) {
312             result = FinderCacheUtil.getResult(finderClassName,
313                     finderMethodName, finderParams, finderArgs, this);
314         }
315 
316         if (result == null) {
317             Session session = null;
318 
319             try {
320                 session = openSession();
321 
322                 StringBuilder query = new StringBuilder();
323 
324                 query.append(
325                     "FROM com.liferay.portal.model.PasswordPolicy WHERE ");
326 
327                 query.append("companyId = ?");
328 
329                 query.append(" AND ");
330 
331                 query.append("defaultPolicy = ?");
332 
333                 query.append(" ");
334 
335                 Query q = session.createQuery(query.toString());
336 
337                 QueryPos qPos = QueryPos.getInstance(q);
338 
339                 qPos.add(companyId);
340 
341                 qPos.add(defaultPolicy);
342 
343                 List<PasswordPolicy> list = q.list();
344 
345                 FinderCacheUtil.putResult(finderClassNameCacheEnabled,
346                     finderClassName, finderMethodName, finderParams,
347                     finderArgs, list);
348 
349                 if (list.size() == 0) {
350                     return null;
351                 }
352                 else {
353                     return list.get(0);
354                 }
355             }
356             catch (Exception e) {
357                 throw processException(e);
358             }
359             finally {
360                 closeSession(session);
361             }
362         }
363         else {
364             List<PasswordPolicy> list = (List<PasswordPolicy>)result;
365 
366             if (list.size() == 0) {
367                 return null;
368             }
369             else {
370                 return list.get(0);
371             }
372         }
373     }
374 
375     public PasswordPolicy findByC_N(long companyId, String name)
376         throws NoSuchPasswordPolicyException, SystemException {
377         PasswordPolicy passwordPolicy = fetchByC_N(companyId, name);
378 
379         if (passwordPolicy == null) {
380             StringBuilder msg = new StringBuilder();
381 
382             msg.append("No PasswordPolicy exists with the key {");
383 
384             msg.append("companyId=" + companyId);
385 
386             msg.append(", ");
387             msg.append("name=" + name);
388 
389             msg.append(StringPool.CLOSE_CURLY_BRACE);
390 
391             if (_log.isWarnEnabled()) {
392                 _log.warn(msg.toString());
393             }
394 
395             throw new NoSuchPasswordPolicyException(msg.toString());
396         }
397 
398         return passwordPolicy;
399     }
400 
401     public PasswordPolicy fetchByC_N(long companyId, String name)
402         throws SystemException {
403         boolean finderClassNameCacheEnabled = PasswordPolicyModelImpl.CACHE_ENABLED;
404         String finderClassName = PasswordPolicy.class.getName();
405         String finderMethodName = "fetchByC_N";
406         String[] finderParams = new String[] {
407                 Long.class.getName(), String.class.getName()
408             };
409         Object[] finderArgs = new Object[] { new Long(companyId), name };
410 
411         Object result = null;
412 
413         if (finderClassNameCacheEnabled) {
414             result = FinderCacheUtil.getResult(finderClassName,
415                     finderMethodName, finderParams, finderArgs, this);
416         }
417 
418         if (result == null) {
419             Session session = null;
420 
421             try {
422                 session = openSession();
423 
424                 StringBuilder query = new StringBuilder();
425 
426                 query.append(
427                     "FROM com.liferay.portal.model.PasswordPolicy WHERE ");
428 
429                 query.append("companyId = ?");
430 
431                 query.append(" AND ");
432 
433                 if (name == null) {
434                     query.append("name IS NULL");
435                 }
436                 else {
437                     query.append("name = ?");
438                 }
439 
440                 query.append(" ");
441 
442                 Query q = session.createQuery(query.toString());
443 
444                 QueryPos qPos = QueryPos.getInstance(q);
445 
446                 qPos.add(companyId);
447 
448                 if (name != null) {
449                     qPos.add(name);
450                 }
451 
452                 List<PasswordPolicy> list = q.list();
453 
454                 FinderCacheUtil.putResult(finderClassNameCacheEnabled,
455                     finderClassName, finderMethodName, finderParams,
456                     finderArgs, list);
457 
458                 if (list.size() == 0) {
459                     return null;
460                 }
461                 else {
462                     return list.get(0);
463                 }
464             }
465             catch (Exception e) {
466                 throw processException(e);
467             }
468             finally {
469                 closeSession(session);
470             }
471         }
472         else {
473             List<PasswordPolicy> list = (List<PasswordPolicy>)result;
474 
475             if (list.size() == 0) {
476                 return null;
477             }
478             else {
479                 return list.get(0);
480             }
481         }
482     }
483 
484     public List<Object> findWithDynamicQuery(DynamicQuery dynamicQuery)
485         throws SystemException {
486         Session session = null;
487 
488         try {
489             session = openSession();
490 
491             dynamicQuery.compile(session);
492 
493             return dynamicQuery.list();
494         }
495         catch (Exception e) {
496             throw processException(e);
497         }
498         finally {
499             closeSession(session);
500         }
501     }
502 
503     public List<Object> findWithDynamicQuery(DynamicQuery dynamicQuery,
504         int start, int end) throws SystemException {
505         Session session = null;
506 
507         try {
508             session = openSession();
509 
510             dynamicQuery.setLimit(start, end);
511 
512             dynamicQuery.compile(session);
513 
514             return dynamicQuery.list();
515         }
516         catch (Exception e) {
517             throw processException(e);
518         }
519         finally {
520             closeSession(session);
521         }
522     }
523 
524     public List<PasswordPolicy> findAll() throws SystemException {
525         return findAll(QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
526     }
527 
528     public List<PasswordPolicy> findAll(int start, int end)
529         throws SystemException {
530         return findAll(start, end, null);
531     }
532 
533     public List<PasswordPolicy> findAll(int start, int end,
534         OrderByComparator obc) throws SystemException {
535         boolean finderClassNameCacheEnabled = PasswordPolicyModelImpl.CACHE_ENABLED;
536         String finderClassName = PasswordPolicy.class.getName();
537         String finderMethodName = "findAll";
538         String[] finderParams = new String[] {
539                 "java.lang.Integer", "java.lang.Integer",
540                 "com.liferay.portal.kernel.util.OrderByComparator"
541             };
542         Object[] finderArgs = new Object[] {
543                 String.valueOf(start), String.valueOf(end), String.valueOf(obc)
544             };
545 
546         Object result = null;
547 
548         if (finderClassNameCacheEnabled) {
549             result = FinderCacheUtil.getResult(finderClassName,
550                     finderMethodName, finderParams, finderArgs, this);
551         }
552 
553         if (result == null) {
554             Session session = null;
555 
556             try {
557                 session = openSession();
558 
559                 StringBuilder query = new StringBuilder();
560 
561                 query.append("FROM com.liferay.portal.model.PasswordPolicy ");
562 
563                 if (obc != null) {
564                     query.append("ORDER BY ");
565                     query.append(obc.getOrderBy());
566                 }
567 
568                 Query q = session.createQuery(query.toString());
569 
570                 List<PasswordPolicy> list = (List<PasswordPolicy>)QueryUtil.list(q,
571                         getDialect(), start, end);
572 
573                 if (obc == null) {
574                     Collections.sort(list);
575                 }
576 
577                 FinderCacheUtil.putResult(finderClassNameCacheEnabled,
578                     finderClassName, finderMethodName, finderParams,
579                     finderArgs, list);
580 
581                 return list;
582             }
583             catch (Exception e) {
584                 throw processException(e);
585             }
586             finally {
587                 closeSession(session);
588             }
589         }
590         else {
591             return (List<PasswordPolicy>)result;
592         }
593     }
594 
595     public void removeByC_DP(long companyId, boolean defaultPolicy)
596         throws NoSuchPasswordPolicyException, SystemException {
597         PasswordPolicy passwordPolicy = findByC_DP(companyId, defaultPolicy);
598 
599         remove(passwordPolicy);
600     }
601 
602     public void removeByC_N(long companyId, String name)
603         throws NoSuchPasswordPolicyException, SystemException {
604         PasswordPolicy passwordPolicy = findByC_N(companyId, name);
605 
606         remove(passwordPolicy);
607     }
608 
609     public void removeAll() throws SystemException {
610         for (PasswordPolicy passwordPolicy : findAll()) {
611             remove(passwordPolicy);
612         }
613     }
614 
615     public int countByC_DP(long companyId, boolean defaultPolicy)
616         throws SystemException {
617         boolean finderClassNameCacheEnabled = PasswordPolicyModelImpl.CACHE_ENABLED;
618         String finderClassName = PasswordPolicy.class.getName();
619         String finderMethodName = "countByC_DP";
620         String[] finderParams = new String[] {
621                 Long.class.getName(), Boolean.class.getName()
622             };
623         Object[] finderArgs = new Object[] {
624                 new Long(companyId), Boolean.valueOf(defaultPolicy)
625             };
626 
627         Object result = null;
628 
629         if (finderClassNameCacheEnabled) {
630             result = FinderCacheUtil.getResult(finderClassName,
631                     finderMethodName, finderParams, finderArgs, this);
632         }
633 
634         if (result == null) {
635             Session session = null;
636 
637             try {
638                 session = openSession();
639 
640                 StringBuilder query = new StringBuilder();
641 
642                 query.append("SELECT COUNT(*) ");
643                 query.append(
644                     "FROM com.liferay.portal.model.PasswordPolicy WHERE ");
645 
646                 query.append("companyId = ?");
647 
648                 query.append(" AND ");
649 
650                 query.append("defaultPolicy = ?");
651 
652                 query.append(" ");
653 
654                 Query q = session.createQuery(query.toString());
655 
656                 QueryPos qPos = QueryPos.getInstance(q);
657 
658                 qPos.add(companyId);
659 
660                 qPos.add(defaultPolicy);
661 
662                 Long count = null;
663 
664                 Iterator<Long> itr = q.list().iterator();
665 
666                 if (itr.hasNext()) {
667                     count = itr.next();
668                 }
669 
670                 if (count == null) {
671                     count = new Long(0);
672                 }
673 
674                 FinderCacheUtil.putResult(finderClassNameCacheEnabled,
675                     finderClassName, finderMethodName, finderParams,
676                     finderArgs, count);
677 
678                 return count.intValue();
679             }
680             catch (Exception e) {
681                 throw processException(e);
682             }
683             finally {
684                 closeSession(session);
685             }
686         }
687         else {
688             return ((Long)result).intValue();
689         }
690     }
691 
692     public int countByC_N(long companyId, String name)
693         throws SystemException {
694         boolean finderClassNameCacheEnabled = PasswordPolicyModelImpl.CACHE_ENABLED;
695         String finderClassName = PasswordPolicy.class.getName();
696         String finderMethodName = "countByC_N";
697         String[] finderParams = new String[] {
698                 Long.class.getName(), String.class.getName()
699             };
700         Object[] finderArgs = new Object[] { new Long(companyId), name };
701 
702         Object result = null;
703 
704         if (finderClassNameCacheEnabled) {
705             result = FinderCacheUtil.getResult(finderClassName,
706                     finderMethodName, finderParams, finderArgs, this);
707         }
708 
709         if (result == null) {
710             Session session = null;
711 
712             try {
713                 session = openSession();
714 
715                 StringBuilder query = new StringBuilder();
716 
717                 query.append("SELECT COUNT(*) ");
718                 query.append(
719                     "FROM com.liferay.portal.model.PasswordPolicy WHERE ");
720 
721                 query.append("companyId = ?");
722 
723                 query.append(" AND ");
724 
725                 if (name == null) {
726                     query.append("name IS NULL");
727                 }
728                 else {
729                     query.append("name = ?");
730                 }
731 
732                 query.append(" ");
733 
734                 Query q = session.createQuery(query.toString());
735 
736                 QueryPos qPos = QueryPos.getInstance(q);
737 
738                 qPos.add(companyId);
739 
740                 if (name != null) {
741                     qPos.add(name);
742                 }
743 
744                 Long count = null;
745 
746                 Iterator<Long> itr = q.list().iterator();
747 
748                 if (itr.hasNext()) {
749                     count = itr.next();
750                 }
751 
752                 if (count == null) {
753                     count = new Long(0);
754                 }
755 
756                 FinderCacheUtil.putResult(finderClassNameCacheEnabled,
757                     finderClassName, finderMethodName, finderParams,
758                     finderArgs, count);
759 
760                 return count.intValue();
761             }
762             catch (Exception e) {
763                 throw processException(e);
764             }
765             finally {
766                 closeSession(session);
767             }
768         }
769         else {
770             return ((Long)result).intValue();
771         }
772     }
773 
774     public int countAll() throws SystemException {
775         boolean finderClassNameCacheEnabled = PasswordPolicyModelImpl.CACHE_ENABLED;
776         String finderClassName = PasswordPolicy.class.getName();
777         String finderMethodName = "countAll";
778         String[] finderParams = new String[] {  };
779         Object[] finderArgs = new Object[] {  };
780 
781         Object result = null;
782 
783         if (finderClassNameCacheEnabled) {
784             result = FinderCacheUtil.getResult(finderClassName,
785                     finderMethodName, finderParams, finderArgs, this);
786         }
787 
788         if (result == null) {
789             Session session = null;
790 
791             try {
792                 session = openSession();
793 
794                 Query q = session.createQuery(
795                         "SELECT COUNT(*) FROM com.liferay.portal.model.PasswordPolicy");
796 
797                 Long count = null;
798 
799                 Iterator<Long> itr = q.list().iterator();
800 
801                 if (itr.hasNext()) {
802                     count = itr.next();
803                 }
804 
805                 if (count == null) {
806                     count = new Long(0);
807                 }
808 
809                 FinderCacheUtil.putResult(finderClassNameCacheEnabled,
810                     finderClassName, finderMethodName, finderParams,
811                     finderArgs, count);
812 
813                 return count.intValue();
814             }
815             catch (Exception e) {
816                 throw processException(e);
817             }
818             finally {
819                 closeSession(session);
820             }
821         }
822         else {
823             return ((Long)result).intValue();
824         }
825     }
826 
827     public void registerListener(ModelListener listener) {
828         List<ModelListener> listeners = ListUtil.fromArray(_listeners);
829 
830         listeners.add(listener);
831 
832         _listeners = listeners.toArray(new ModelListener[listeners.size()]);
833     }
834 
835     public void unregisterListener(ModelListener listener) {
836         List<ModelListener> listeners = ListUtil.fromArray(_listeners);
837 
838         listeners.remove(listener);
839 
840         _listeners = listeners.toArray(new ModelListener[listeners.size()]);
841     }
842 
843     public void afterPropertiesSet() {
844         String[] listenerClassNames = StringUtil.split(GetterUtil.getString(
845                     com.liferay.portal.util.PropsUtil.get(
846                         "value.object.listener.com.liferay.portal.model.PasswordPolicy")));
847 
848         if (listenerClassNames.length > 0) {
849             try {
850                 List<ModelListener> listeners = new ArrayList<ModelListener>();
851 
852                 for (String listenerClassName : listenerClassNames) {
853                     listeners.add((ModelListener)Class.forName(
854                             listenerClassName).newInstance());
855                 }
856 
857                 _listeners = listeners.toArray(new ModelListener[listeners.size()]);
858             }
859             catch (Exception e) {
860                 _log.error(e);
861             }
862         }
863     }
864 
865     private static Log _log = LogFactory.getLog(PasswordPolicyPersistenceImpl.class);
866     private ModelListener[] _listeners = new ModelListener[0];
867 }