1   /**
2    * Copyright (c) 2000-2009 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.NoSuchOrganizationException;
26  import com.liferay.portal.SystemException;
27  import com.liferay.portal.kernel.annotation.BeanReference;
28  import com.liferay.portal.kernel.cache.CacheRegistry;
29  import com.liferay.portal.kernel.dao.jdbc.MappingSqlQuery;
30  import com.liferay.portal.kernel.dao.jdbc.MappingSqlQueryFactoryUtil;
31  import com.liferay.portal.kernel.dao.jdbc.RowMapper;
32  import com.liferay.portal.kernel.dao.jdbc.SqlUpdate;
33  import com.liferay.portal.kernel.dao.jdbc.SqlUpdateFactoryUtil;
34  import com.liferay.portal.kernel.dao.orm.DynamicQuery;
35  import com.liferay.portal.kernel.dao.orm.EntityCacheUtil;
36  import com.liferay.portal.kernel.dao.orm.FinderCacheUtil;
37  import com.liferay.portal.kernel.dao.orm.FinderPath;
38  import com.liferay.portal.kernel.dao.orm.Query;
39  import com.liferay.portal.kernel.dao.orm.QueryPos;
40  import com.liferay.portal.kernel.dao.orm.QueryUtil;
41  import com.liferay.portal.kernel.dao.orm.SQLQuery;
42  import com.liferay.portal.kernel.dao.orm.Session;
43  import com.liferay.portal.kernel.dao.orm.Type;
44  import com.liferay.portal.kernel.log.Log;
45  import com.liferay.portal.kernel.log.LogFactoryUtil;
46  import com.liferay.portal.kernel.util.GetterUtil;
47  import com.liferay.portal.kernel.util.OrderByComparator;
48  import com.liferay.portal.kernel.util.StringPool;
49  import com.liferay.portal.kernel.util.StringUtil;
50  import com.liferay.portal.kernel.util.Validator;
51  import com.liferay.portal.model.ModelListener;
52  import com.liferay.portal.model.Organization;
53  import com.liferay.portal.model.impl.OrganizationImpl;
54  import com.liferay.portal.model.impl.OrganizationModelImpl;
55  import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
56  
57  import java.sql.Types;
58  
59  import java.util.ArrayList;
60  import java.util.Collections;
61  import java.util.List;
62  
63  /**
64   * <a href="OrganizationPersistenceImpl.java.html"><b><i>View Source</i></b></a>
65   *
66   * @author Brian Wing Shun Chan
67   *
68   */
69  public class OrganizationPersistenceImpl extends BasePersistenceImpl
70      implements OrganizationPersistence {
71      public static final String FINDER_CLASS_NAME_ENTITY = OrganizationImpl.class.getName();
72      public static final String FINDER_CLASS_NAME_LIST = FINDER_CLASS_NAME_ENTITY +
73          ".List";
74      public static final FinderPath FINDER_PATH_FIND_BY_COMPANYID = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
75              OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
76              "findByCompanyId", new String[] { Long.class.getName() });
77      public static final FinderPath FINDER_PATH_FIND_BY_OBC_COMPANYID = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
78              OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
79              "findByCompanyId",
80              new String[] {
81                  Long.class.getName(),
82                  
83              "java.lang.Integer", "java.lang.Integer",
84                  "com.liferay.portal.kernel.util.OrderByComparator"
85              });
86      public static final FinderPath FINDER_PATH_COUNT_BY_COMPANYID = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
87              OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
88              "countByCompanyId", new String[] { Long.class.getName() });
89      public static final FinderPath FINDER_PATH_FIND_BY_LOCATIONS = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
90              OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
91              "findByLocations", new String[] { Long.class.getName() });
92      public static final FinderPath FINDER_PATH_FIND_BY_OBC_LOCATIONS = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
93              OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
94              "findByLocations",
95              new String[] {
96                  Long.class.getName(),
97                  
98              "java.lang.Integer", "java.lang.Integer",
99                  "com.liferay.portal.kernel.util.OrderByComparator"
100             });
101     public static final FinderPath FINDER_PATH_COUNT_BY_LOCATIONS = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
102             OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
103             "countByLocations", new String[] { Long.class.getName() });
104     public static final FinderPath FINDER_PATH_FIND_BY_C_P = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
105             OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
106             "findByC_P",
107             new String[] { Long.class.getName(), Long.class.getName() });
108     public static final FinderPath FINDER_PATH_FIND_BY_OBC_C_P = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
109             OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
110             "findByC_P",
111             new String[] {
112                 Long.class.getName(), Long.class.getName(),
113                 
114             "java.lang.Integer", "java.lang.Integer",
115                 "com.liferay.portal.kernel.util.OrderByComparator"
116             });
117     public static final FinderPath FINDER_PATH_COUNT_BY_C_P = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
118             OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
119             "countByC_P",
120             new String[] { Long.class.getName(), Long.class.getName() });
121     public static final FinderPath FINDER_PATH_FETCH_BY_C_N = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
122             OrganizationModelImpl.FINDER_CACHE_ENABLED,
123             FINDER_CLASS_NAME_ENTITY, "fetchByC_N",
124             new String[] { Long.class.getName(), String.class.getName() });
125     public static final FinderPath FINDER_PATH_COUNT_BY_C_N = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
126             OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
127             "countByC_N",
128             new String[] { Long.class.getName(), String.class.getName() });
129     public static final FinderPath FINDER_PATH_FIND_ALL = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
130             OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
131             "findAll", new String[0]);
132     public static final FinderPath FINDER_PATH_COUNT_ALL = new FinderPath(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
133             OrganizationModelImpl.FINDER_CACHE_ENABLED, FINDER_CLASS_NAME_LIST,
134             "countAll", new String[0]);
135 
136     public void cacheResult(Organization organization) {
137         EntityCacheUtil.putResult(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
138             OrganizationImpl.class, organization.getPrimaryKey(), organization);
139 
140         FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_C_N,
141             new Object[] {
142                 new Long(organization.getCompanyId()),
143                 
144             organization.getName()
145             }, organization);
146     }
147 
148     public void cacheResult(List<Organization> organizations) {
149         for (Organization organization : organizations) {
150             if (EntityCacheUtil.getResult(
151                         OrganizationModelImpl.ENTITY_CACHE_ENABLED,
152                         OrganizationImpl.class, organization.getPrimaryKey(),
153                         this) == null) {
154                 cacheResult(organization);
155             }
156         }
157     }
158 
159     public void clearCache() {
160         CacheRegistry.clear(OrganizationImpl.class.getName());
161         EntityCacheUtil.clearCache(OrganizationImpl.class.getName());
162         FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
163         FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
164     }
165 
166     public Organization create(long organizationId) {
167         Organization organization = new OrganizationImpl();
168 
169         organization.setNew(true);
170         organization.setPrimaryKey(organizationId);
171 
172         return organization;
173     }
174 
175     public Organization remove(long organizationId)
176         throws NoSuchOrganizationException, SystemException {
177         Session session = null;
178 
179         try {
180             session = openSession();
181 
182             Organization organization = (Organization)session.get(OrganizationImpl.class,
183                     new Long(organizationId));
184 
185             if (organization == null) {
186                 if (_log.isWarnEnabled()) {
187                     _log.warn("No Organization exists with the primary key " +
188                         organizationId);
189                 }
190 
191                 throw new NoSuchOrganizationException(
192                     "No Organization exists with the primary key " +
193                     organizationId);
194             }
195 
196             return remove(organization);
197         }
198         catch (NoSuchOrganizationException nsee) {
199             throw nsee;
200         }
201         catch (Exception e) {
202             throw processException(e);
203         }
204         finally {
205             closeSession(session);
206         }
207     }
208 
209     public Organization remove(Organization organization)
210         throws SystemException {
211         for (ModelListener<Organization> listener : listeners) {
212             listener.onBeforeRemove(organization);
213         }
214 
215         organization = removeImpl(organization);
216 
217         for (ModelListener<Organization> listener : listeners) {
218             listener.onAfterRemove(organization);
219         }
220 
221         return organization;
222     }
223 
224     protected Organization removeImpl(Organization organization)
225         throws SystemException {
226         try {
227             clearGroups.clear(organization.getPrimaryKey());
228         }
229         catch (Exception e) {
230             throw processException(e);
231         }
232         finally {
233             FinderCacheUtil.clearCache("Groups_Orgs");
234         }
235 
236         try {
237             clearUsers.clear(organization.getPrimaryKey());
238         }
239         catch (Exception e) {
240             throw processException(e);
241         }
242         finally {
243             FinderCacheUtil.clearCache("Users_Orgs");
244         }
245 
246         shrinkTree(organization);
247 
248         Session session = null;
249 
250         try {
251             session = openSession();
252 
253             if (organization.isCachedModel() || BatchSessionUtil.isEnabled()) {
254                 Object staleObject = session.get(OrganizationImpl.class,
255                         organization.getPrimaryKeyObj());
256 
257                 if (staleObject != null) {
258                     session.evict(staleObject);
259                 }
260             }
261 
262             session.delete(organization);
263 
264             session.flush();
265         }
266         catch (Exception e) {
267             throw processException(e);
268         }
269         finally {
270             closeSession(session);
271         }
272 
273         FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
274 
275         OrganizationModelImpl organizationModelImpl = (OrganizationModelImpl)organization;
276 
277         FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_C_N,
278             new Object[] {
279                 new Long(organizationModelImpl.getOriginalCompanyId()),
280                 
281             organizationModelImpl.getOriginalName()
282             });
283 
284         EntityCacheUtil.removeResult(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
285             OrganizationImpl.class, organization.getPrimaryKey());
286 
287         return organization;
288     }
289 
290     /**
291      * @deprecated Use <code>update(Organization organization, boolean merge)</code>.
292      */
293     public Organization update(Organization organization)
294         throws SystemException {
295         if (_log.isWarnEnabled()) {
296             _log.warn(
297                 "Using the deprecated update(Organization organization) method. Use update(Organization organization, boolean merge) instead.");
298         }
299 
300         return update(organization, false);
301     }
302 
303     /**
304      * Add, update, or merge, the entity. This method also calls the model
305      * listeners to trigger the proper events associated with adding, deleting,
306      * or updating an entity.
307      *
308      * @param        organization the entity to add, update, or merge
309      * @param        merge boolean value for whether to merge the entity. The
310      *                default value is false. Setting merge to true is more
311      *                expensive and should only be true when organization is
312      *                transient. See LEP-5473 for a detailed discussion of this
313      *                method.
314      * @return        true if the portlet can be displayed via Ajax
315      */
316     public Organization update(Organization organization, boolean merge)
317         throws SystemException {
318         boolean isNew = organization.isNew();
319 
320         for (ModelListener<Organization> listener : listeners) {
321             if (isNew) {
322                 listener.onBeforeCreate(organization);
323             }
324             else {
325                 listener.onBeforeUpdate(organization);
326             }
327         }
328 
329         organization = updateImpl(organization, merge);
330 
331         for (ModelListener<Organization> listener : listeners) {
332             if (isNew) {
333                 listener.onAfterCreate(organization);
334             }
335             else {
336                 listener.onAfterUpdate(organization);
337             }
338         }
339 
340         return organization;
341     }
342 
343     public Organization updateImpl(
344         com.liferay.portal.model.Organization organization, boolean merge)
345         throws SystemException {
346         boolean isNew = organization.isNew();
347 
348         OrganizationModelImpl organizationModelImpl = (OrganizationModelImpl)organization;
349 
350         if (isNew) {
351             expandTree(organization);
352         }
353         else {
354             if (organization.getParentOrganizationId() != organizationModelImpl.getOriginalParentOrganizationId()) {
355                 shrinkTree(organization);
356                 expandTree(organization);
357             }
358         }
359 
360         Session session = null;
361 
362         try {
363             session = openSession();
364 
365             BatchSessionUtil.update(session, organization, merge);
366 
367             organization.setNew(false);
368         }
369         catch (Exception e) {
370             throw processException(e);
371         }
372         finally {
373             closeSession(session);
374         }
375 
376         FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
377 
378         EntityCacheUtil.putResult(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
379             OrganizationImpl.class, organization.getPrimaryKey(), organization);
380 
381         if (!isNew &&
382                 ((organization.getCompanyId() != organizationModelImpl.getOriginalCompanyId()) ||
383                 !Validator.equals(organization.getName(),
384                     organizationModelImpl.getOriginalName()))) {
385             FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_C_N,
386                 new Object[] {
387                     new Long(organizationModelImpl.getOriginalCompanyId()),
388                     
389                 organizationModelImpl.getOriginalName()
390                 });
391         }
392 
393         if (isNew ||
394                 ((organization.getCompanyId() != organizationModelImpl.getOriginalCompanyId()) ||
395                 !Validator.equals(organization.getName(),
396                     organizationModelImpl.getOriginalName()))) {
397             FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_C_N,
398                 new Object[] {
399                     new Long(organization.getCompanyId()),
400                     
401                 organization.getName()
402                 }, organization);
403         }
404 
405         return organization;
406     }
407 
408     public Organization findByPrimaryKey(long organizationId)
409         throws NoSuchOrganizationException, SystemException {
410         Organization organization = fetchByPrimaryKey(organizationId);
411 
412         if (organization == null) {
413             if (_log.isWarnEnabled()) {
414                 _log.warn("No Organization exists with the primary key " +
415                     organizationId);
416             }
417 
418             throw new NoSuchOrganizationException(
419                 "No Organization exists with the primary key " +
420                 organizationId);
421         }
422 
423         return organization;
424     }
425 
426     public Organization fetchByPrimaryKey(long organizationId)
427         throws SystemException {
428         Organization organization = (Organization)EntityCacheUtil.getResult(OrganizationModelImpl.ENTITY_CACHE_ENABLED,
429                 OrganizationImpl.class, organizationId, this);
430 
431         if (organization == null) {
432             Session session = null;
433 
434             try {
435                 session = openSession();
436 
437                 organization = (Organization)session.get(OrganizationImpl.class,
438                         new Long(organizationId));
439             }
440             catch (Exception e) {
441                 throw processException(e);
442             }
443             finally {
444                 if (organization != null) {
445                     cacheResult(organization);
446                 }
447 
448                 closeSession(session);
449             }
450         }
451 
452         return organization;
453     }
454 
455     public List<Organization> findByCompanyId(long companyId)
456         throws SystemException {
457         Object[] finderArgs = new Object[] { new Long(companyId) };
458 
459         List<Organization> list = (List<Organization>)FinderCacheUtil.getResult(FINDER_PATH_FIND_BY_COMPANYID,
460                 finderArgs, this);
461 
462         if (list == null) {
463             Session session = null;
464 
465             try {
466                 session = openSession();
467 
468                 StringBuilder query = new StringBuilder();
469 
470                 query.append(
471                     "FROM com.liferay.portal.model.Organization WHERE ");
472 
473                 query.append("companyId = ?");
474 
475                 query.append(" ");
476 
477                 query.append("ORDER BY ");
478 
479                 query.append("name ASC");
480 
481                 Query q = session.createQuery(query.toString());
482 
483                 QueryPos qPos = QueryPos.getInstance(q);
484 
485                 qPos.add(companyId);
486 
487                 list = q.list();
488             }
489             catch (Exception e) {
490                 throw processException(e);
491             }
492             finally {
493                 if (list == null) {
494                     list = new ArrayList<Organization>();
495                 }
496 
497                 cacheResult(list);
498 
499                 FinderCacheUtil.putResult(FINDER_PATH_FIND_BY_COMPANYID,
500                     finderArgs, list);
501 
502                 closeSession(session);
503             }
504         }
505 
506         return list;
507     }
508 
509     public List<Organization> findByCompanyId(long companyId, int start, int end)
510         throws SystemException {
511         return findByCompanyId(companyId, start, end, null);
512     }
513 
514     public List<Organization> findByCompanyId(long companyId, int start,
515         int end, OrderByComparator obc) throws SystemException {
516         Object[] finderArgs = new Object[] {
517                 new Long(companyId),
518                 
519                 String.valueOf(start), String.valueOf(end), String.valueOf(obc)
520             };
521 
522         List<Organization> list = (List<Organization>)FinderCacheUtil.getResult(FINDER_PATH_FIND_BY_OBC_COMPANYID,
523                 finderArgs, this);
524 
525         if (list == null) {
526             Session session = null;
527 
528             try {
529                 session = openSession();
530 
531                 StringBuilder query = new StringBuilder();
532 
533                 query.append(
534                     "FROM com.liferay.portal.model.Organization WHERE ");
535 
536                 query.append("companyId = ?");
537 
538                 query.append(" ");
539 
540                 if (obc != null) {
541                     query.append("ORDER BY ");
542                     query.append(obc.getOrderBy());
543                 }
544 
545                 else {
546                     query.append("ORDER BY ");
547 
548                     query.append("name ASC");
549                 }
550 
551                 Query q = session.createQuery(query.toString());
552 
553                 QueryPos qPos = QueryPos.getInstance(q);
554 
555                 qPos.add(companyId);
556 
557                 list = (List<Organization>)QueryUtil.list(q, getDialect(),
558                         start, end);
559             }
560             catch (Exception e) {
561                 throw processException(e);
562             }
563             finally {
564                 if (list == null) {
565                     list = new ArrayList<Organization>();
566                 }
567 
568                 cacheResult(list);
569 
570                 FinderCacheUtil.putResult(FINDER_PATH_FIND_BY_OBC_COMPANYID,
571                     finderArgs, list);
572 
573                 closeSession(session);
574             }
575         }
576 
577         return list;
578     }
579 
580     public Organization findByCompanyId_First(long companyId,
581         OrderByComparator obc)
582         throws NoSuchOrganizationException, SystemException {
583         List<Organization> list = findByCompanyId(companyId, 0, 1, obc);
584 
585         if (list.isEmpty()) {
586             StringBuilder msg = new StringBuilder();
587 
588             msg.append("No Organization exists with the key {");
589 
590             msg.append("companyId=" + companyId);
591 
592             msg.append(StringPool.CLOSE_CURLY_BRACE);
593 
594             throw new NoSuchOrganizationException(msg.toString());
595         }
596         else {
597             return list.get(0);
598         }
599     }
600 
601     public Organization findByCompanyId_Last(long companyId,
602         OrderByComparator obc)
603         throws NoSuchOrganizationException, SystemException {
604         int count = countByCompanyId(companyId);
605 
606         List<Organization> list = findByCompanyId(companyId, count - 1, count,
607                 obc);
608 
609         if (list.isEmpty()) {
610             StringBuilder msg = new StringBuilder();
611 
612             msg.append("No Organization exists with the key {");
613 
614             msg.append("companyId=" + companyId);
615 
616             msg.append(StringPool.CLOSE_CURLY_BRACE);
617 
618             throw new NoSuchOrganizationException(msg.toString());
619         }
620         else {
621             return list.get(0);
622         }
623     }
624 
625     public Organization[] findByCompanyId_PrevAndNext(long organizationId,
626         long companyId, OrderByComparator obc)
627         throws NoSuchOrganizationException, SystemException {
628         Organization organization = findByPrimaryKey(organizationId);
629 
630         int count = countByCompanyId(companyId);
631 
632         Session session = null;
633 
634         try {
635             session = openSession();
636 
637             StringBuilder query = new StringBuilder();
638 
639             query.append("FROM com.liferay.portal.model.Organization WHERE ");
640 
641             query.append("companyId = ?");
642 
643             query.append(" ");
644 
645             if (obc != null) {
646                 query.append("ORDER BY ");
647                 query.append(obc.getOrderBy());
648             }
649 
650             else {
651                 query.append("ORDER BY ");
652 
653                 query.append("name ASC");
654             }
655 
656             Query q = session.createQuery(query.toString());
657 
658             QueryPos qPos = QueryPos.getInstance(q);
659 
660             qPos.add(companyId);
661 
662             Object[] objArray = QueryUtil.getPrevAndNext(q, count, obc,
663                     organization);
664 
665             Organization[] array = new OrganizationImpl[3];
666 
667             array[0] = (Organization)objArray[0];
668             array[1] = (Organization)objArray[1];
669             array[2] = (Organization)objArray[2];
670 
671             return array;
672         }
673         catch (Exception e) {
674             throw processException(e);
675         }
676         finally {
677             closeSession(session);
678         }
679     }
680 
681     public List<Organization> findByLocations(long companyId)
682         throws SystemException {
683         Object[] finderArgs = new Object[] { new Long(companyId) };
684 
685         List<Organization> list = (List<Organization>)FinderCacheUtil.getResult(FINDER_PATH_FIND_BY_LOCATIONS,
686                 finderArgs, this);
687 
688         if (list == null) {
689             Session session = null;
690 
691             try {
692                 session = openSession();
693 
694                 StringBuilder query = new StringBuilder();
695 
696                 query.append(
697                     "FROM com.liferay.portal.model.Organization WHERE ");
698 
699                 query.append("companyId = ?");
700 
701                 query.append(" AND parentOrganizationId != 0 ");
702 
703                 query.append("ORDER BY ");
704 
705                 query.append("name ASC");
706 
707                 Query q = session.createQuery(query.toString());
708 
709                 QueryPos qPos = QueryPos.getInstance(q);
710 
711                 qPos.add(companyId);
712 
713                 list = q.list();
714             }
715             catch (Exception e) {
716                 throw processException(e);
717             }
718             finally {
719                 if (list == null) {
720                     list = new ArrayList<Organization>();
721                 }
722 
723                 cacheResult(list);
724 
725                 FinderCacheUtil.putResult(FINDER_PATH_FIND_BY_LOCATIONS,
726                     finderArgs, list);
727 
728                 closeSession(session);
729             }
730         }
731 
732         return list;
733     }
734 
735     public List<Organization> findByLocations(long companyId, int start, int end)
736         throws SystemException {
737         return findByLocations(companyId, start, end, null);
738     }
739 
740     public List<Organization> findByLocations(long companyId, int start,
741         int end, OrderByComparator obc) throws SystemException {
742         Object[] finderArgs = new Object[] {
743                 new Long(companyId),
744                 
745                 String.valueOf(start), String.valueOf(end), String.valueOf(obc)
746             };
747 
748         List<Organization> list = (List<Organization>)FinderCacheUtil.getResult(FINDER_PATH_FIND_BY_OBC_LOCATIONS,
749                 finderArgs, this);
750 
751         if (list == null) {
752             Session session = null;
753 
754             try {
755                 session = openSession();
756 
757                 StringBuilder query = new StringBuilder();
758 
759                 query.append(
760                     "FROM com.liferay.portal.model.Organization WHERE ");
761 
762                 query.append("companyId = ?");
763 
764                 query.append(" AND parentOrganizationId != 0 ");
765 
766                 if (obc != null) {
767                     query.append("ORDER BY ");
768                     query.append(obc.getOrderBy());
769                 }
770 
771                 else {
772                     query.append("ORDER BY ");
773 
774                     query.append("name ASC");
775                 }
776 
777                 Query q = session.createQuery(query.toString());
778 
779                 QueryPos qPos = QueryPos.getInstance(q);
780 
781                 qPos.add(companyId);
782 
783                 list = (List<Organization>)QueryUtil.list(q, getDialect(),
784                         start, end);
785             }
786             catch (Exception e) {
787                 throw processException(e);
788             }
789             finally {
790                 if (list == null) {
791                     list = new ArrayList<Organization>();
792                 }
793 
794                 cacheResult(list);
795 
796                 FinderCacheUtil.putResult(FINDER_PATH_FIND_BY_OBC_LOCATIONS,
797                     finderArgs, list);
798 
799                 closeSession(session);
800             }
801         }
802 
803         return list;
804     }
805 
806     public Organization findByLocations_First(long companyId,
807         OrderByComparator obc)
808         throws NoSuchOrganizationException, SystemException {
809         List<Organization> list = findByLocations(companyId, 0, 1, obc);
810 
811         if (list.isEmpty()) {
812             StringBuilder msg = new StringBuilder();
813 
814             msg.append("No Organization exists with the key {");
815 
816             msg.append("companyId=" + companyId);
817 
818             msg.append(StringPool.CLOSE_CURLY_BRACE);
819 
820             throw new NoSuchOrganizationException(msg.toString());
821         }
822         else {
823             return list.get(0);
824         }
825     }
826 
827     public Organization findByLocations_Last(long companyId,
828         OrderByComparator obc)
829         throws NoSuchOrganizationException, SystemException {
830         int count = countByLocations(companyId);
831 
832         List<Organization> list = findByLocations(companyId, count - 1, count,
833                 obc);
834 
835         if (list.isEmpty()) {
836             StringBuilder msg = new StringBuilder();
837 
838             msg.append("No Organization exists with the key {");
839 
840             msg.append("companyId=" + companyId);
841 
842             msg.append(StringPool.CLOSE_CURLY_BRACE);
843 
844             throw new NoSuchOrganizationException(msg.toString());
845         }
846         else {
847             return list.get(0);
848         }
849     }
850 
851     public Organization[] findByLocations_PrevAndNext(long organizationId,
852         long companyId, OrderByComparator obc)
853         throws NoSuchOrganizationException, SystemException {
854         Organization organization = findByPrimaryKey(organizationId);
855 
856         int count = countByLocations(companyId);
857 
858         Session session = null;
859 
860         try {
861             session = openSession();
862 
863             StringBuilder query = new StringBuilder();
864 
865             query.append("FROM com.liferay.portal.model.Organization WHERE ");
866 
867             query.append("companyId = ?");
868 
869             query.append(" AND parentOrganizationId != 0 ");
870 
871             if (obc != null) {
872                 query.append("ORDER BY ");
873                 query.append(obc.getOrderBy());
874             }
875 
876             else {
877                 query.append("ORDER BY ");
878 
879                 query.append("name ASC");
880             }
881 
882             Query q = session.createQuery(query.toString());
883 
884             QueryPos qPos = QueryPos.getInstance(q);
885 
886             qPos.add(companyId);
887 
888             Object[] objArray = QueryUtil.getPrevAndNext(q, count, obc,
889                     organization);
890 
891             Organization[] array = new OrganizationImpl[3];
892 
893             array[0] = (Organization)objArray[0];
894             array[1] = (Organization)objArray[1];
895             array[2] = (Organization)objArray[2];
896 
897             return array;
898         }
899         catch (Exception e) {
900             throw processException(e);
901         }
902         finally {
903             closeSession(session);
904         }
905     }
906 
907     public List<Organization> findByC_P(long companyId,
908         long parentOrganizationId) throws SystemException {
909         Object[] finderArgs = new Object[] {
910                 new Long(companyId), new Long(parentOrganizationId)
911             };
912 
913         List<Organization> list = (List<Organization>)FinderCacheUtil.getResult(FINDER_PATH_FIND_BY_C_P,
914                 finderArgs, this);
915 
916         if (list == null) {
917             Session session = null;
918 
919             try {
920                 session = openSession();
921 
922                 StringBuilder query = new StringBuilder();
923 
924                 query.append(
925                     "FROM com.liferay.portal.model.Organization WHERE ");
926 
927                 query.append("companyId = ?");
928 
929                 query.append(" AND ");
930 
931                 query.append("parentOrganizationId = ?");
932 
933                 query.append(" ");
934 
935                 query.append("ORDER BY ");
936 
937                 query.append("name ASC");
938 
939                 Query q = session.createQuery(query.toString());
940 
941                 QueryPos qPos = QueryPos.getInstance(q);
942 
943                 qPos.add(companyId);
944 
945                 qPos.add(parentOrganizationId);
946 
947                 list = q.list();
948             }
949             catch (Exception e) {
950                 throw processException(e);
951             }
952             finally {
953                 if (list == null) {
954                     list = new ArrayList<Organization>();
955                 }
956 
957                 cacheResult(list);
958 
959                 FinderCacheUtil.putResult(FINDER_PATH_FIND_BY_C_P, finderArgs,
960                     list);
961 
962                 closeSession(session);
963             }
964         }
965 
966         return list;
967     }
968 
969     public List<Organization> findByC_P(long companyId,
970         long parentOrganizationId, int start, int end)
971         throws SystemException {
972         return findByC_P(companyId, parentOrganizationId, start, end, null);
973     }
974 
975     public List<Organization> findByC_P(long companyId,
976         long parentOrganizationId, int start, int end, OrderByComparator obc)
977         throws SystemException {
978         Object[] finderArgs = new Object[] {
979                 new Long(companyId), new Long(parentOrganizationId),
980                 
981                 String.valueOf(start), String.valueOf(end), String.valueOf(obc)
982             };
983 
984         List<Organization> list = (List<Organization>)FinderCacheUtil.getResult(FINDER_PATH_FIND_BY_OBC_C_P,
985                 finderArgs, this);
986 
987         if (list == null) {
988             Session session = null;
989 
990             try {
991                 session = openSession();
992 
993                 StringBuilder query = new StringBuilder();
994 
995                 query.append(
996                     "FROM com.liferay.portal.model.Organization WHERE ");
997 
998                 query.append("companyId = ?");
999 
1000                query.append(" AND ");
1001
1002                query.append("parentOrganizationId = ?");
1003
1004                query.append(" ");
1005
1006                if (obc != null) {
1007                    query.append("ORDER BY ");
1008                    query.append(obc.getOrderBy());
1009                }
1010
1011                else {
1012                    query.append("ORDER BY ");
1013
1014                    query.append("name ASC");
1015                }
1016
1017                Query q = session.createQuery(query.toString());
1018
1019                QueryPos qPos = QueryPos.getInstance(q);
1020
1021                qPos.add(companyId);
1022
1023                qPos.add(parentOrganizationId);
1024
1025                list = (List<Organization>)QueryUtil.list(q, getDialect(),
1026                        start, end);
1027            }
1028            catch (Exception e) {
1029                throw processException(e);
1030            }
1031            finally {
1032                if (list == null) {
1033                    list = new ArrayList<Organization>();
1034                }
1035
1036                cacheResult(list);
1037
1038                FinderCacheUtil.putResult(FINDER_PATH_FIND_BY_OBC_C_P,
1039                    finderArgs, list);
1040
1041                closeSession(session);
1042            }
1043        }
1044
1045        return list;
1046    }
1047
1048    public Organization findByC_P_First(long companyId,
1049        long parentOrganizationId, OrderByComparator obc)
1050        throws NoSuchOrganizationException, SystemException {
1051        List<Organization> list = findByC_P(companyId, parentOrganizationId, 0,
1052                1, obc);
1053
1054        if (list.isEmpty()) {
1055            StringBuilder msg = new StringBuilder();
1056
1057            msg.append("No Organization exists with the key {");
1058
1059            msg.append("companyId=" + companyId);
1060
1061            msg.append(", ");
1062            msg.append("parentOrganizationId=" + parentOrganizationId);
1063
1064            msg.append(StringPool.CLOSE_CURLY_BRACE);
1065
1066            throw new NoSuchOrganizationException(msg.toString());
1067        }
1068        else {
1069            return list.get(0);
1070        }
1071    }
1072
1073    public Organization findByC_P_Last(long companyId,
1074        long parentOrganizationId, OrderByComparator obc)
1075        throws NoSuchOrganizationException, SystemException {
1076        int count = countByC_P(companyId, parentOrganizationId);
1077
1078        List<Organization> list = findByC_P(companyId, parentOrganizationId,
1079                count - 1, count, obc);
1080
1081        if (list.isEmpty()) {
1082            StringBuilder msg = new StringBuilder();
1083
1084            msg.append("No Organization exists with the key {");
1085
1086            msg.append("companyId=" + companyId);
1087
1088            msg.append(", ");
1089            msg.append("parentOrganizationId=" + parentOrganizationId);
1090
1091            msg.append(StringPool.CLOSE_CURLY_BRACE);
1092
1093            throw new NoSuchOrganizationException(msg.toString());
1094        }
1095        else {
1096            return list.get(0);
1097        }
1098    }
1099
1100    public Organization[] findByC_P_PrevAndNext(long organizationId,
1101        long companyId, long parentOrganizationId, OrderByComparator obc)
1102        throws NoSuchOrganizationException, SystemException {
1103        Organization organization = findByPrimaryKey(organizationId);
1104
1105        int count = countByC_P(companyId, parentOrganizationId);
1106
1107        Session session = null;
1108
1109        try {
1110            session = openSession();
1111
1112            StringBuilder query = new StringBuilder();
1113
1114            query.append("FROM com.liferay.portal.model.Organization WHERE ");
1115
1116            query.append("companyId = ?");
1117
1118            query.append(" AND ");
1119
1120            query.append("parentOrganizationId = ?");
1121
1122            query.append(" ");
1123
1124            if (obc != null) {
1125                query.append("ORDER BY ");
1126                query.append(obc.getOrderBy());
1127            }
1128
1129            else {
1130                query.append("ORDER BY ");
1131
1132                query.append("name ASC");
1133            }
1134
1135            Query q = session.createQuery(query.toString());
1136
1137            QueryPos qPos = QueryPos.getInstance(q);
1138
1139            qPos.add(companyId);
1140
1141            qPos.add(parentOrganizationId);
1142
1143            Object[] objArray = QueryUtil.getPrevAndNext(q, count, obc,
1144                    organization);
1145
1146            Organization[] array = new OrganizationImpl[3];
1147
1148            array[0] = (Organization)objArray[0];
1149            array[1] = (Organization)objArray[1];
1150            array[2] = (Organization)objArray[2];
1151
1152            return array;
1153        }
1154        catch (Exception e) {
1155            throw processException(e);
1156        }
1157        finally {
1158            closeSession(session);
1159        }
1160    }
1161
1162    public Organization findByC_N(long companyId, String name)
1163        throws NoSuchOrganizationException, SystemException {
1164        Organization organization = fetchByC_N(companyId, name);
1165
1166        if (organization == null) {
1167            StringBuilder msg = new StringBuilder();
1168
1169            msg.append("No Organization exists with the key {");
1170
1171            msg.append("companyId=" + companyId);
1172
1173            msg.append(", ");
1174            msg.append("name=" + name);
1175
1176            msg.append(StringPool.CLOSE_CURLY_BRACE);
1177
1178            if (_log.isWarnEnabled()) {
1179                _log.warn(msg.toString());
1180            }
1181
1182            throw new NoSuchOrganizationException(msg.toString());
1183        }
1184
1185        return organization;
1186    }
1187
1188    public Organization fetchByC_N(long companyId, String name)
1189        throws SystemException {
1190        return fetchByC_N(companyId, name, true);
1191    }
1192
1193    public Organization fetchByC_N(long companyId, String name,
1194        boolean retrieveFromCache) throws SystemException {
1195        Object[] finderArgs = new Object[] { new Long(companyId), name };
1196
1197        Object result = null;
1198
1199        if (retrieveFromCache) {
1200            result = FinderCacheUtil.getResult(FINDER_PATH_FETCH_BY_C_N,
1201                    finderArgs, this);
1202        }
1203
1204        if (result == null) {
1205            Session session = null;
1206
1207            try {
1208                session = openSession();
1209
1210                StringBuilder query = new StringBuilder();
1211
1212                query.append(
1213                    "FROM com.liferay.portal.model.Organization WHERE ");
1214
1215                query.append("companyId = ?");
1216
1217                query.append(" AND ");
1218
1219                if (name == null) {
1220                    query.append("name IS NULL");
1221                }
1222                else {
1223                    query.append("name = ?");
1224                }
1225
1226                query.append(" ");
1227
1228                query.append("ORDER BY ");
1229
1230                query.append("name ASC");
1231
1232                Query q = session.createQuery(query.toString());
1233
1234                QueryPos qPos = QueryPos.getInstance(q);
1235
1236                qPos.add(companyId);
1237
1238                if (name != null) {
1239                    qPos.add(name);
1240                }
1241
1242                List<Organization> list = q.list();
1243
1244                result = list;
1245
1246                Organization organization = null;
1247
1248                if (list.isEmpty()) {
1249                    FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_C_N,
1250                        finderArgs, list);
1251                }
1252                else {
1253                    organization = list.get(0);
1254
1255                    cacheResult(organization);
1256
1257                    if ((organization.getCompanyId() != companyId) ||
1258                            (organization.getName() == null) ||
1259                            !organization.getName().equals(name)) {
1260                        FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_C_N,
1261                            finderArgs, organization);
1262                    }
1263                }
1264
1265                return organization;
1266            }
1267            catch (Exception e) {
1268                throw processException(e);
1269            }
1270            finally {
1271                if (result == null) {
1272                    FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_C_N,
1273                        finderArgs, new ArrayList<Organization>());
1274                }
1275
1276                closeSession(session);
1277            }
1278        }
1279        else {
1280            if (result instanceof List) {
1281                return null;
1282            }
1283            else {
1284                return (Organization)result;
1285            }
1286        }
1287    }
1288
1289    public List<Object> findWithDynamicQuery(DynamicQuery dynamicQuery)
1290        throws SystemException {
1291        Session session = null;
1292
1293        try {
1294            session = openSession();
1295
1296            dynamicQuery.compile(session);
1297
1298            return dynamicQuery.list();
1299        }
1300        catch (Exception e) {
1301            throw processException(e);
1302        }
1303        finally {
1304            closeSession(session);
1305        }
1306    }
1307
1308    public List<Object> findWithDynamicQuery(DynamicQuery dynamicQuery,
1309        int start, int end) throws SystemException {
1310        Session session = null;
1311
1312        try {
1313            session = openSession();
1314
1315            dynamicQuery.setLimit(start, end);
1316
1317            dynamicQuery.compile(session);
1318
1319            return dynamicQuery.list();
1320        }
1321        catch (Exception e) {
1322            throw processException(e);
1323        }
1324        finally {
1325            closeSession(session);
1326        }
1327    }
1328
1329    public List<Organization> findAll() throws SystemException {
1330        return findAll(QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
1331    }
1332
1333    public List<Organization> findAll(int start, int end)
1334        throws SystemException {
1335        return findAll(start, end, null);
1336    }
1337
1338    public List<Organization> findAll(int start, int end, OrderByComparator obc)
1339        throws SystemException {
1340        Object[] finderArgs = new Object[] {
1341                String.valueOf(start), String.valueOf(end), String.valueOf(obc)
1342            };
1343
1344        List<Organization> list = (List<Organization>)FinderCacheUtil.getResult(FINDER_PATH_FIND_ALL,
1345                finderArgs, this);
1346
1347        if (list == null) {
1348            Session session = null;
1349
1350            try {
1351                session = openSession();
1352
1353                StringBuilder query = new StringBuilder();
1354
1355                query.append("FROM com.liferay.portal.model.Organization ");
1356
1357                if (obc != null) {
1358                    query.append("ORDER BY ");
1359                    query.append(obc.getOrderBy());
1360                }
1361
1362                else {
1363                    query.append("ORDER BY ");
1364
1365                    query.append("name ASC");
1366                }
1367
1368                Query q = session.createQuery(query.toString());
1369
1370                if (obc == null) {
1371                    list = (List<Organization>)QueryUtil.list(q, getDialect(),
1372                            start, end, false);
1373
1374                    Collections.sort(list);
1375                }
1376                else {
1377                    list = (List<Organization>)QueryUtil.list(q, getDialect(),
1378                            start, end);
1379                }
1380            }
1381            catch (Exception e) {
1382                throw processException(e);
1383            }
1384            finally {
1385                if (list == null) {
1386                    list = new ArrayList<Organization>();
1387                }
1388
1389                cacheResult(list);
1390
1391                FinderCacheUtil.putResult(FINDER_PATH_FIND_ALL, finderArgs, list);
1392
1393                closeSession(session);
1394            }
1395        }
1396
1397        return list;
1398    }
1399
1400    public void removeByCompanyId(long companyId) throws SystemException {
1401        for (Organization organization : findByCompanyId(companyId)) {
1402            remove(organization);
1403        }
1404    }
1405
1406    public void removeByLocations(long companyId) throws SystemException {
1407        for (Organization organization : findByLocations(companyId)) {
1408            remove(organization);
1409        }
1410    }
1411
1412    public void removeByC_P(long companyId, long parentOrganizationId)
1413        throws SystemException {
1414        for (Organization organization : findByC_P(companyId,
1415                parentOrganizationId)) {
1416            remove(organization);
1417        }
1418    }
1419
1420    public void removeByC_N(long companyId, String name)
1421        throws NoSuchOrganizationException, SystemException {
1422        Organization organization = findByC_N(companyId, name);
1423
1424        remove(organization);
1425    }
1426
1427    public void removeAll() throws SystemException {
1428        for (Organization organization : findAll()) {
1429            remove(organization);
1430        }
1431    }
1432
1433    public int countByCompanyId(long companyId) throws SystemException {
1434        Object[] finderArgs = new Object[] { new Long(companyId) };
1435
1436        Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_BY_COMPANYID,
1437                finderArgs, this);
1438
1439        if (count == null) {
1440            Session session = null;
1441
1442            try {
1443                session = openSession();
1444
1445                StringBuilder query = new StringBuilder();
1446
1447                query.append("SELECT COUNT(*) ");
1448                query.append(
1449                    "FROM com.liferay.portal.model.Organization WHERE ");
1450
1451                query.append("companyId = ?");
1452
1453                query.append(" ");
1454
1455                Query q = session.createQuery(query.toString());
1456
1457                QueryPos qPos = QueryPos.getInstance(q);
1458
1459                qPos.add(companyId);
1460
1461                count = (Long)q.uniqueResult();
1462            }
1463            catch (Exception e) {
1464                throw processException(e);
1465            }
1466            finally {
1467                if (count == null) {
1468                    count = Long.valueOf(0);
1469                }
1470
1471                FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_COMPANYID,
1472                    finderArgs, count);
1473
1474                closeSession(session);
1475            }
1476        }
1477
1478        return count.intValue();
1479    }
1480
1481    public int countByLocations(long companyId) throws SystemException {
1482        Object[] finderArgs = new Object[] { new Long(companyId) };
1483
1484        Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_BY_LOCATIONS,
1485                finderArgs, this);
1486
1487        if (count == null) {
1488            Session session = null;
1489
1490            try {
1491                session = openSession();
1492
1493                StringBuilder query = new StringBuilder();
1494
1495                query.append("SELECT COUNT(*) ");
1496                query.append(
1497                    "FROM com.liferay.portal.model.Organization WHERE ");
1498
1499                query.append("companyId = ?");
1500
1501                query.append(" AND parentOrganizationId != 0 ");
1502
1503                Query q = session.createQuery(query.toString());
1504
1505                QueryPos qPos = QueryPos.getInstance(q);
1506
1507                qPos.add(companyId);
1508
1509                count = (Long)q.uniqueResult();
1510            }
1511            catch (Exception e) {
1512                throw processException(e);
1513            }
1514            finally {
1515                if (count == null) {
1516                    count = Long.valueOf(0);
1517                }
1518
1519                FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_LOCATIONS,
1520                    finderArgs, count);
1521
1522                closeSession(session);
1523            }
1524        }
1525
1526        return count.intValue();
1527    }
1528
1529    public int countByC_P(long companyId, long parentOrganizationId)
1530        throws SystemException {
1531        Object[] finderArgs = new Object[] {
1532                new Long(companyId), new Long(parentOrganizationId)
1533            };
1534
1535        Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_BY_C_P,
1536                finderArgs, this);
1537
1538        if (count == null) {
1539            Session session = null;
1540
1541            try {
1542                session = openSession();
1543
1544                StringBuilder query = new StringBuilder();
1545
1546                query.append("SELECT COUNT(*) ");
1547                query.append(
1548                    "FROM com.liferay.portal.model.Organization WHERE ");
1549
1550                query.append("companyId = ?");
1551
1552                query.append(" AND ");
1553
1554                query.append("parentOrganizationId = ?");
1555
1556                query.append(" ");
1557
1558                Query q = session.createQuery(query.toString());
1559
1560                QueryPos qPos = QueryPos.getInstance(q);
1561
1562                qPos.add(companyId);
1563
1564                qPos.add(parentOrganizationId);
1565
1566                count = (Long)q.uniqueResult();
1567            }
1568            catch (Exception e) {
1569                throw processException(e);
1570            }
1571            finally {
1572                if (count == null) {
1573                    count = Long.valueOf(0);
1574                }
1575
1576                FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_C_P, finderArgs,
1577                    count);
1578
1579                closeSession(session);
1580            }
1581        }
1582
1583        return count.intValue();
1584    }
1585
1586    public int countByC_N(long companyId, String name)
1587        throws SystemException {
1588        Object[] finderArgs = new Object[] { new Long(companyId), name };
1589
1590        Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_BY_C_N,
1591                finderArgs, this);
1592
1593        if (count == null) {
1594            Session session = null;
1595
1596            try {
1597                session = openSession();
1598
1599                StringBuilder query = new StringBuilder();
1600
1601                query.append("SELECT COUNT(*) ");
1602                query.append(
1603                    "FROM com.liferay.portal.model.Organization WHERE ");
1604
1605                query.append("companyId = ?");
1606
1607                query.append(" AND ");
1608
1609                if (name == null) {
1610                    query.append("name IS NULL");
1611                }
1612                else {
1613                    query.append("name = ?");
1614                }
1615
1616                query.append(" ");
1617
1618                Query q = session.createQuery(query.toString());
1619
1620                QueryPos qPos = QueryPos.getInstance(q);
1621
1622                qPos.add(companyId);
1623
1624                if (name != null) {
1625                    qPos.add(name);
1626                }
1627
1628                count = (Long)q.uniqueResult();
1629            }
1630            catch (Exception e) {
1631                throw processException(e);
1632            }
1633            finally {
1634                if (count == null) {
1635                    count = Long.valueOf(0);
1636                }
1637
1638                FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_C_N, finderArgs,
1639                    count);
1640
1641                closeSession(session);
1642            }
1643        }
1644
1645        return count.intValue();
1646    }
1647
1648    public int countAll() throws SystemException {
1649        Object[] finderArgs = new Object[0];
1650
1651        Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_ALL,
1652                finderArgs, this);
1653
1654        if (count == null) {
1655            Session session = null;
1656
1657            try {
1658                session = openSession();
1659
1660                Query q = session.createQuery(
1661                        "SELECT COUNT(*) FROM com.liferay.portal.model.Organization");
1662
1663                count = (Long)q.uniqueResult();
1664            }
1665            catch (Exception e) {
1666                throw processException(e);
1667            }
1668            finally {
1669                if (count == null) {
1670                    count = Long.valueOf(0);
1671                }
1672
1673                FinderCacheUtil.putResult(FINDER_PATH_COUNT_ALL, finderArgs,
1674                    count);
1675
1676                closeSession(session);
1677            }
1678        }
1679
1680        return count.intValue();
1681    }
1682
1683    public List<com.liferay.portal.model.Group> getGroups(long pk)
1684        throws SystemException {
1685        return getGroups(pk, QueryUtil.ALL_POS, QueryUtil.ALL_POS);
1686    }
1687
1688    public List<com.liferay.portal.model.Group> getGroups(long pk, int start,
1689        int end) throws SystemException {
1690        return getGroups(pk, start, end, null);
1691    }
1692
1693    public static final FinderPath FINDER_PATH_GET_GROUPS = new FinderPath(com.liferay.portal.model.impl.GroupModelImpl.ENTITY_CACHE_ENABLED,
1694            OrganizationModelImpl.FINDER_CACHE_ENABLED_GROUPS_ORGS,
1695            "Groups_Orgs", "getGroups",
1696            new String[] {
1697                Long.class.getName(), "java.lang.Integer", "java.lang.Integer",
1698                "com.liferay.portal.kernel.util.OrderByComparator"
1699            });
1700
1701    public List<com.liferay.portal.model.Group> getGroups(long pk, int start,
1702        int end, OrderByComparator obc) throws SystemException {
1703        Object[] finderArgs = new Object[] {
1704                new Long(pk), String.valueOf(start), String.valueOf(end),
1705                String.valueOf(obc)
1706            };
1707
1708        List<com.liferay.portal.model.Group> list = (List<com.liferay.portal.model.Group>)FinderCacheUtil.getResult(FINDER_PATH_GET_GROUPS,
1709                finderArgs, this);
1710
1711        if (list == null) {
1712            Session session = null;
1713
1714            try {
1715                session = openSession();
1716
1717                StringBuilder sb = new StringBuilder();
1718
1719                sb.append(_SQL_GETGROUPS);
1720
1721                if (obc != null) {
1722                    sb.append("ORDER BY ");
1723                    sb.append(obc.getOrderBy());
1724                }
1725
1726                else {
1727                    sb.append("ORDER BY ");
1728
1729                    sb.append("Group_.name ASC");
1730                }
1731
1732                String sql = sb.toString();
1733
1734                SQLQuery q = session.createSQLQuery(sql);
1735
1736                q.addEntity("Group_",
1737                    com.liferay.portal.model.impl.GroupImpl.class);
1738
1739                QueryPos qPos = QueryPos.getInstance(q);
1740
1741                qPos.add(pk);
1742
1743                list = (List<com.liferay.portal.model.Group>)QueryUtil.list(q,
1744                        getDialect(), start, end);
1745            }
1746            catch (Exception e) {
1747                throw processException(e);
1748            }
1749            finally {
1750                if (list == null) {
1751                    list = new ArrayList<com.liferay.portal.model.Group>();
1752                }
1753
1754                groupPersistence.cacheResult(list);
1755
1756                FinderCacheUtil.putResult(FINDER_PATH_GET_GROUPS, finderArgs,
1757                    list);
1758
1759                closeSession(session);
1760            }
1761        }
1762
1763        return list;
1764    }
1765
1766    public static final FinderPath FINDER_PATH_GET_GROUPS_SIZE = new FinderPath(com.liferay.portal.model.impl.GroupModelImpl.ENTITY_CACHE_ENABLED,
1767            OrganizationModelImpl.FINDER_CACHE_ENABLED_GROUPS_ORGS,
1768            "Groups_Orgs", "getGroupsSize",
1769            new String[] { Long.class.getName() });
1770
1771    public int getGroupsSize(long pk) throws SystemException {
1772        Object[] finderArgs = new Object[] { new Long(pk) };
1773
1774        Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_GET_GROUPS_SIZE,
1775                finderArgs, this);
1776
1777        if (count == null) {
1778            Session session = null;
1779
1780            try {
1781                session = openSession();
1782
1783                SQLQuery q = session.createSQLQuery(_SQL_GETGROUPSSIZE);
1784
1785                q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
1786
1787                QueryPos qPos = QueryPos.getInstance(q);
1788
1789                qPos.add(pk);
1790
1791                count = (Long)q.uniqueResult();
1792            }
1793            catch (Exception e) {
1794                throw processException(e);
1795            }
1796            finally {
1797                if (count == null) {
1798                    count = Long.valueOf(0);
1799                }
1800
1801                FinderCacheUtil.putResult(FINDER_PATH_GET_GROUPS_SIZE,
1802                    finderArgs, count);
1803
1804                closeSession(session);
1805            }
1806        }
1807
1808        return count.intValue();
1809    }
1810
1811    public static final FinderPath FINDER_PATH_CONTAINS_GROUP = new FinderPath(com.liferay.portal.model.impl.GroupModelImpl.ENTITY_CACHE_ENABLED,
1812            OrganizationModelImpl.FINDER_CACHE_ENABLED_GROUPS_ORGS,
1813            "Groups_Orgs", "containsGroup",
1814            new String[] { Long.class.getName(), Long.class.getName() });
1815
1816    public boolean containsGroup(long pk, long groupPK)
1817        throws SystemException {
1818        Object[] finderArgs = new Object[] { new Long(pk), new Long(groupPK) };
1819
1820        Boolean value = (Boolean)FinderCacheUtil.getResult(FINDER_PATH_CONTAINS_GROUP,
1821                finderArgs, this);
1822
1823        if (value == null) {
1824            try {
1825                value = Boolean.valueOf(containsGroup.contains(pk, groupPK));
1826            }
1827            catch (Exception e) {
1828                throw processException(e);
1829            }
1830            finally {
1831                if (value == null) {
1832                    value = Boolean.FALSE;
1833                }
1834
1835                FinderCacheUtil.putResult(FINDER_PATH_CONTAINS_GROUP,
1836                    finderArgs, value);
1837            }
1838        }
1839
1840        return value.booleanValue();
1841    }
1842
1843    public boolean containsGroups(long pk) throws SystemException {
1844        if (getGroupsSize(pk) > 0) {
1845            return true;
1846        }
1847        else {
1848            return false;
1849        }
1850    }
1851
1852    public void addGroup(long pk, long groupPK) throws SystemException {
1853        try {
1854            addGroup.add(pk, groupPK);
1855        }
1856        catch (Exception e) {
1857            throw processException(e);
1858        }
1859        finally {
1860            FinderCacheUtil.clearCache("Groups_Orgs");
1861        }
1862    }
1863
1864    public void addGroup(long pk, com.liferay.portal.model.Group group)
1865        throws SystemException {
1866        try {
1867            addGroup.add(pk, group.getPrimaryKey());
1868        }
1869        catch (Exception e) {
1870            throw processException(e);
1871        }
1872        finally {
1873            FinderCacheUtil.clearCache("Groups_Orgs");
1874        }
1875    }
1876
1877    public void addGroups(long pk, long[] groupPKs) throws SystemException {
1878        try {
1879            for (long groupPK : groupPKs) {
1880                addGroup.add(pk, groupPK);
1881            }
1882        }
1883        catch (Exception e) {
1884            throw processException(e);
1885        }
1886        finally {
1887            FinderCacheUtil.clearCache("Groups_Orgs");
1888        }
1889    }
1890
1891    public void addGroups(long pk, List<com.liferay.portal.model.Group> groups)
1892        throws SystemException {
1893        try {
1894            for (com.liferay.portal.model.Group group : groups) {
1895                addGroup.add(pk, group.getPrimaryKey());
1896            }
1897        }
1898        catch (Exception e) {
1899            throw processException(e);
1900        }
1901        finally {
1902            FinderCacheUtil.clearCache("Groups_Orgs");
1903        }
1904    }
1905
1906    public void clearGroups(long pk) throws SystemException {
1907        try {
1908            clearGroups.clear(pk);
1909        }
1910        catch (Exception e) {
1911            throw processException(e);
1912        }
1913        finally {
1914            FinderCacheUtil.clearCache("Groups_Orgs");
1915        }
1916    }
1917
1918    public void removeGroup(long pk, long groupPK) throws SystemException {
1919        try {
1920            removeGroup.remove(pk, groupPK);
1921        }
1922        catch (Exception e) {
1923            throw processException(e);
1924        }
1925        finally {
1926            FinderCacheUtil.clearCache("Groups_Orgs");
1927        }
1928    }
1929
1930    public void removeGroup(long pk, com.liferay.portal.model.Group group)
1931        throws SystemException {
1932        try {
1933            removeGroup.remove(pk, group.getPrimaryKey());
1934        }
1935        catch (Exception e) {
1936            throw processException(e);
1937        }
1938        finally {
1939            FinderCacheUtil.clearCache("Groups_Orgs");
1940        }
1941    }
1942
1943    public void removeGroups(long pk, long[] groupPKs)
1944        throws SystemException {
1945        try {
1946            for (long groupPK : groupPKs) {
1947                removeGroup.remove(pk, groupPK);
1948            }
1949        }
1950        catch (Exception e) {
1951            throw processException(e);
1952        }
1953        finally {
1954            FinderCacheUtil.clearCache("Groups_Orgs");
1955        }
1956    }
1957
1958    public void removeGroups(long pk,
1959        List<com.liferay.portal.model.Group> groups) throws SystemException {
1960        try {
1961            for (com.liferay.portal.model.Group group : groups) {
1962                removeGroup.remove(pk, group.getPrimaryKey());
1963            }
1964        }
1965        catch (Exception e) {
1966            throw processException(e);
1967        }
1968        finally {
1969            FinderCacheUtil.clearCache("Groups_Orgs");
1970        }
1971    }
1972
1973    public void setGroups(long pk, long[] groupPKs) throws SystemException {
1974        try {
1975            clearGroups.clear(pk);
1976
1977            for (long groupPK : groupPKs) {
1978                addGroup.add(pk, groupPK);
1979            }
1980        }
1981        catch (Exception e) {
1982            throw processException(e);
1983        }
1984        finally {
1985            FinderCacheUtil.clearCache("Groups_Orgs");
1986        }
1987    }
1988
1989    public void setGroups(long pk, List<com.liferay.portal.model.Group> groups)
1990        throws SystemException {
1991        try {
1992            clearGroups.clear(pk);
1993
1994            for (com.liferay.portal.model.Group group : groups) {
1995                addGroup.add(pk, group.getPrimaryKey());
1996            }
1997        }
1998        catch (Exception e) {
1999            throw processException(e);
2000        }
2001        finally {
2002            FinderCacheUtil.clearCache("Groups_Orgs");
2003        }
2004    }
2005
2006    public List<com.liferay.portal.model.User> getUsers(long pk)
2007        throws SystemException {
2008        return getUsers(pk, QueryUtil.ALL_POS, QueryUtil.ALL_POS);
2009    }
2010
2011    public List<com.liferay.portal.model.User> getUsers(long pk, int start,
2012        int end) throws SystemException {
2013        return getUsers(pk, start, end, null);
2014    }
2015
2016    public static final FinderPath FINDER_PATH_GET_USERS = new FinderPath(com.liferay.portal.model.impl.UserModelImpl.ENTITY_CACHE_ENABLED,
2017            OrganizationModelImpl.FINDER_CACHE_ENABLED_USERS_ORGS,
2018            "Users_Orgs", "getUsers",
2019            new String[] {
2020                Long.class.getName(), "java.lang.Integer", "java.lang.Integer",
2021                "com.liferay.portal.kernel.util.OrderByComparator"
2022            });
2023
2024    public List<com.liferay.portal.model.User> getUsers(long pk, int start,
2025        int end, OrderByComparator obc) throws SystemException {
2026        Object[] finderArgs = new Object[] {
2027                new Long(pk), String.valueOf(start), String.valueOf(end),
2028                String.valueOf(obc)
2029            };
2030
2031        List<com.liferay.portal.model.User> list = (List<com.liferay.portal.model.User>)FinderCacheUtil.getResult(FINDER_PATH_GET_USERS,
2032                finderArgs, this);
2033
2034        if (list == null) {
2035            Session session = null;
2036
2037            try {
2038                session = openSession();
2039
2040                StringBuilder sb = new StringBuilder();
2041
2042                sb.append(_SQL_GETUSERS);
2043
2044                if (obc != null) {
2045                    sb.append("ORDER BY ");
2046                    sb.append(obc.getOrderBy());
2047                }
2048
2049                String sql = sb.toString();
2050
2051                SQLQuery q = session.createSQLQuery(sql);
2052
2053                q.addEntity("User_",
2054                    com.liferay.portal.model.impl.UserImpl.class);
2055
2056                QueryPos qPos = QueryPos.getInstance(q);
2057
2058                qPos.add(pk);
2059
2060                list = (List<com.liferay.portal.model.User>)QueryUtil.list(q,
2061                        getDialect(), start, end);
2062            }
2063            catch (Exception e) {
2064                throw processException(e);
2065            }
2066            finally {
2067                if (list == null) {
2068                    list = new ArrayList<com.liferay.portal.model.User>();
2069                }
2070
2071                userPersistence.cacheResult(list);
2072
2073                FinderCacheUtil.putResult(FINDER_PATH_GET_USERS, finderArgs,
2074                    list);
2075
2076                closeSession(session);
2077            }
2078        }
2079
2080        return list;
2081    }
2082
2083    public static final FinderPath FINDER_PATH_GET_USERS_SIZE = new FinderPath(com.liferay.portal.model.impl.UserModelImpl.ENTITY_CACHE_ENABLED,
2084            OrganizationModelImpl.FINDER_CACHE_ENABLED_USERS_ORGS,
2085            "Users_Orgs", "getUsersSize", new String[] { Long.class.getName() });
2086
2087    public int getUsersSize(long pk) throws SystemException {
2088        Object[] finderArgs = new Object[] { new Long(pk) };
2089
2090        Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_GET_USERS_SIZE,
2091                finderArgs, this);
2092
2093        if (count == null) {
2094            Session session = null;
2095
2096            try {
2097                session = openSession();
2098
2099                SQLQuery q = session.createSQLQuery(_SQL_GETUSERSSIZE);
2100
2101                q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
2102
2103                QueryPos qPos = QueryPos.getInstance(q);
2104
2105                qPos.add(pk);
2106
2107                count = (Long)q.uniqueResult();
2108            }
2109            catch (Exception e) {
2110                throw processException(e);
2111            }
2112            finally {
2113                if (count == null) {
2114                    count = Long.valueOf(0);
2115                }
2116
2117                FinderCacheUtil.putResult(FINDER_PATH_GET_USERS_SIZE,
2118                    finderArgs, count);
2119
2120                closeSession(session);
2121            }
2122        }
2123
2124        return count.intValue();
2125    }
2126
2127    public static final FinderPath FINDER_PATH_CONTAINS_USER = new FinderPath(com.liferay.portal.model.impl.UserModelImpl.ENTITY_CACHE_ENABLED,
2128            OrganizationModelImpl.FINDER_CACHE_ENABLED_USERS_ORGS,
2129            "Users_Orgs", "containsUser",
2130            new String[] { Long.class.getName(), Long.class.getName() });
2131
2132    public boolean containsUser(long pk, long userPK) throws SystemException {
2133        Object[] finderArgs = new Object[] { new Long(pk), new Long(userPK) };
2134
2135        Boolean value = (Boolean)FinderCacheUtil.getResult(FINDER_PATH_CONTAINS_USER,
2136                finderArgs, this);
2137
2138        if (value == null) {
2139            try {
2140                value = Boolean.valueOf(containsUser.contains(pk, userPK));
2141            }
2142            catch (Exception e) {
2143                throw processException(e);
2144            }
2145            finally {
2146                if (value == null) {
2147                    value = Boolean.FALSE;
2148                }
2149
2150                FinderCacheUtil.putResult(FINDER_PATH_CONTAINS_USER,
2151                    finderArgs, value);
2152            }
2153        }
2154
2155        return value.booleanValue();
2156    }
2157
2158    public boolean containsUsers(long pk) throws SystemException {
2159        if (getUsersSize(pk) > 0) {
2160            return true;
2161        }
2162        else {
2163            return false;
2164        }
2165    }
2166
2167    public void addUser(long pk, long userPK) throws SystemException {
2168        try {
2169            addUser.add(pk, userPK);
2170        }
2171        catch (Exception e) {
2172            throw processException(e);
2173        }
2174        finally {
2175            FinderCacheUtil.clearCache("Users_Orgs");
2176        }
2177    }
2178
2179    public void addUser(long pk, com.liferay.portal.model.User user)
2180        throws SystemException {
2181        try {
2182            addUser.add(pk, user.getPrimaryKey());
2183        }
2184        catch (Exception e) {
2185            throw processException(e);
2186        }
2187        finally {
2188            FinderCacheUtil.clearCache("Users_Orgs");
2189        }
2190    }
2191
2192    public void addUsers(long pk, long[] userPKs) throws SystemException {
2193        try {
2194            for (long userPK : userPKs) {
2195                addUser.add(pk, userPK);
2196            }
2197        }
2198        catch (Exception e) {
2199            throw processException(e);
2200        }
2201        finally {
2202            FinderCacheUtil.clearCache("Users_Orgs");
2203        }
2204    }
2205
2206    public void addUsers(long pk, List<com.liferay.portal.model.User> users)
2207        throws SystemException {
2208        try {
2209            for (com.liferay.portal.model.User user : users) {
2210                addUser.add(pk, user.getPrimaryKey());
2211            }
2212        }
2213        catch (Exception e) {
2214            throw processException(e);
2215        }
2216        finally {
2217            FinderCacheUtil.clearCache("Users_Orgs");
2218        }
2219    }
2220
2221    public void clearUsers(long pk) throws SystemException {
2222        try {
2223            clearUsers.clear(pk);
2224        }
2225        catch (Exception e) {
2226            throw processException(e);
2227        }
2228        finally {
2229            FinderCacheUtil.clearCache("Users_Orgs");
2230        }
2231    }
2232
2233    public void removeUser(long pk, long userPK) throws SystemException {
2234        try {
2235            removeUser.remove(pk, userPK);
2236        }
2237        catch (Exception e) {
2238            throw processException(e);
2239        }
2240        finally {
2241            FinderCacheUtil.clearCache("Users_Orgs");
2242        }
2243    }
2244
2245    public void removeUser(long pk, com.liferay.portal.model.User user)
2246        throws SystemException {
2247        try {
2248            removeUser.remove(pk, user.getPrimaryKey());
2249        }
2250        catch (Exception e) {
2251            throw processException(e);
2252        }
2253        finally {
2254            FinderCacheUtil.clearCache("Users_Orgs");
2255        }
2256    }
2257
2258    public void removeUsers(long pk, long[] userPKs) throws SystemException {
2259        try {
2260            for (long userPK : userPKs) {
2261                removeUser.remove(pk, userPK);
2262            }
2263        }
2264        catch (Exception e) {
2265            throw processException(e);
2266        }
2267        finally {
2268            FinderCacheUtil.clearCache("Users_Orgs");
2269        }
2270    }
2271
2272    public void removeUsers(long pk, List<com.liferay.portal.model.User> users)
2273        throws SystemException {
2274        try {
2275            for (com.liferay.portal.model.User user : users) {
2276                removeUser.remove(pk, user.getPrimaryKey());
2277            }
2278        }
2279        catch (Exception e) {
2280            throw processException(e);
2281        }
2282        finally {
2283            FinderCacheUtil.clearCache("Users_Orgs");
2284        }
2285    }
2286
2287    public void setUsers(long pk, long[] userPKs) throws SystemException {
2288        try {
2289            clearUsers.clear(pk);
2290
2291            for (long userPK : userPKs) {
2292                addUser.add(pk, userPK);
2293            }
2294        }
2295        catch (Exception e) {
2296            throw processException(e);
2297        }
2298        finally {
2299            FinderCacheUtil.clearCache("Users_Orgs");
2300        }
2301    }
2302
2303    public void setUsers(long pk, List<com.liferay.portal.model.User> users)
2304        throws SystemException {
2305        try {
2306            clearUsers.clear(pk);
2307
2308            for (com.liferay.portal.model.User user : users) {
2309                addUser.add(pk, user.getPrimaryKey());
2310            }
2311        }
2312        catch (Exception e) {
2313            throw processException(e);
2314        }
2315        finally {
2316            FinderCacheUtil.clearCache("Users_Orgs");
2317        }
2318    }
2319
2320    public void rebuildTree(long companyId, boolean force)
2321        throws SystemException {
2322        if (force || (countOrphanTreeNodes(companyId) > 0)) {
2323            rebuildTree(companyId, 0, 1);
2324
2325            CacheRegistry.clear(OrganizationImpl.class.getName());
2326            EntityCacheUtil.clearCache(OrganizationImpl.class.getName());
2327            FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
2328            FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
2329        }
2330    }
2331
2332    protected long countOrphanTreeNodes(long companyId)
2333        throws SystemException {
2334        Session session = null;
2335
2336        try {
2337            session = openSession();
2338
2339            SQLQuery q = session.createSQLQuery(
2340                    "SELECT COUNT(*) AS COUNT_VALUE FROM Organization_ WHERE companyId = ? AND (leftOrganizationId = 0 OR leftOrganizationId IS NULL OR rightOrganizationId = 0 OR rightOrganizationId IS NULL)");
2341
2342            q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
2343
2344            QueryPos qPos = QueryPos.getInstance(q);
2345
2346            qPos.add(companyId);
2347
2348            return (Long)q.uniqueResult();
2349        }
2350        catch (Exception e) {
2351            throw processException(e);
2352        }
2353        finally {
2354            closeSession(session);
2355        }
2356    }
2357
2358    protected void expandTree(Organization organization)
2359        throws SystemException {
2360        long companyId = organization.getCompanyId();
2361
2362        long lastRightOrganizationId = getLastRightOrganizationId(companyId,
2363                organization.getParentOrganizationId());
2364
2365        long leftOrganizationId = 2;
2366        long rightOrganizationId = 3;
2367
2368        if (lastRightOrganizationId > 0) {
2369            leftOrganizationId = lastRightOrganizationId + 1;
2370            rightOrganizationId = lastRightOrganizationId + 2;
2371
2372            expandTreeLeftOrganizationId.expand(companyId,
2373                lastRightOrganizationId);
2374            expandTreeRightOrganizationId.expand(companyId,
2375                lastRightOrganizationId);
2376
2377            CacheRegistry.clear(OrganizationImpl.class.getName());
2378            EntityCacheUtil.clearCache(OrganizationImpl.class.getName());
2379            FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
2380            FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
2381        }
2382
2383        organization.setLeftOrganizationId(leftOrganizationId);
2384        organization.setRightOrganizationId(rightOrganizationId);
2385    }
2386
2387    protected long getLastRightOrganizationId(long companyId,
2388        long parentOrganizationId) throws SystemException {
2389        Session session = null;
2390
2391        try {
2392            session = openSession();
2393
2394            SQLQuery q = session.createSQLQuery(
2395                    "SELECT rightOrganizationId FROM Organization_ WHERE (companyId = ?) AND (parentOrganizationId = ?) ORDER BY rightOrganizationId DESC");
2396
2397            q.addScalar("rightOrganizationId", Type.LONG);
2398
2399            QueryPos qPos = QueryPos.getInstance(q);
2400
2401            qPos.add(companyId);
2402            qPos.add(parentOrganizationId);
2403
2404            List<Long> list = (List<Long>)QueryUtil.list(q, getDialect(), 0, 1);
2405
2406            if (list.isEmpty()) {
2407                if (parentOrganizationId > 0) {
2408                    Organization parentOrganization = findByPrimaryKey(parentOrganizationId);
2409
2410                    return parentOrganization.getLeftOrganizationId();
2411                }
2412
2413                return 0;
2414            }
2415            else {
2416                return list.get(0);
2417            }
2418        }
2419        catch (Exception e) {
2420            throw processException(e);
2421        }
2422        finally {
2423            closeSession(session);
2424        }
2425    }
2426
2427    protected long rebuildTree(long companyId, long parentOrganizationId,
2428        long leftOrganizationId) throws SystemException {
2429        List<Long> organizationIds = null;
2430
2431        Session session = null;
2432
2433        try {
2434            session = openSession();
2435
2436            SQLQuery q = session.createSQLQuery(
2437                    "SELECT organizationId FROM Organization_ WHERE companyId = ? AND parentOrganizationId = ? ORDER BY organizationId ASC");
2438
2439            q.addScalar("organizationId", Type.LONG);
2440
2441            QueryPos qPos = QueryPos.getInstance(q);
2442
2443            qPos.add(companyId);
2444            qPos.add(parentOrganizationId);
2445
2446            organizationIds = q.list();
2447        }
2448        catch (Exception e) {
2449            throw processException(e);
2450        }
2451        finally {
2452            closeSession(session);
2453        }
2454
2455        long rightOrganizationId = leftOrganizationId + 1;
2456
2457        for (long organizationId : organizationIds) {
2458            rightOrganizationId = rebuildTree(companyId, organizationId,
2459                    rightOrganizationId);
2460        }
2461
2462        if (parentOrganizationId > 0) {
2463            updateTree.update(parentOrganizationId, leftOrganizationId,
2464                rightOrganizationId);
2465        }
2466
2467        return rightOrganizationId + 1;
2468    }
2469
2470    protected void shrinkTree(Organization organization) {
2471        long companyId = organization.getCompanyId();
2472
2473        long leftOrganizationId = organization.getLeftOrganizationId();
2474        long rightOrganizationId = organization.getRightOrganizationId();
2475
2476        long delta = (rightOrganizationId - leftOrganizationId) + 1;
2477
2478        shrinkTreeLeftOrganizationId.shrink(companyId, rightOrganizationId,
2479            delta);
2480        shrinkTreeRightOrganizationId.shrink(companyId, rightOrganizationId,
2481            delta);
2482
2483        CacheRegistry.clear(OrganizationImpl.class.getName());
2484        EntityCacheUtil.clearCache(OrganizationImpl.class.getName());
2485        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
2486        FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
2487    }
2488
2489    public void afterPropertiesSet() {
2490        String[] listenerClassNames = StringUtil.split(GetterUtil.getString(
2491                    com.liferay.portal.util.PropsUtil.get(
2492                        "value.object.listener.com.liferay.portal.model.Organization")));
2493
2494        if (listenerClassNames.length > 0) {
2495            try {
2496                List<ModelListener<Organization>> listenersList = new ArrayList<ModelListener<Organization>>();
2497
2498                for (String listenerClassName : listenerClassNames) {
2499                    listenersList.add((ModelListener<Organization>)Class.forName(
2500                            listenerClassName).newInstance());
2501                }
2502
2503                listeners = listenersList.toArray(new ModelListener[listenersList.size()]);
2504            }
2505            catch (Exception e) {
2506                _log.error(e);
2507            }
2508        }
2509
2510        containsGroup = new ContainsGroup(this);
2511
2512        addGroup = new AddGroup(this);
2513        clearGroups = new ClearGroups(this);
2514        removeGroup = new RemoveGroup(this);
2515
2516        containsUser = new ContainsUser(this);
2517
2518        addUser = new AddUser(this);
2519        clearUsers = new ClearUsers(this);
2520        removeUser = new RemoveUser(this);
2521
2522        expandTreeLeftOrganizationId = new ExpandTreeLeftOrganizationId();
2523        expandTreeRightOrganizationId = new ExpandTreeRightOrganizationId();
2524        shrinkTreeLeftOrganizationId = new ShrinkTreeLeftOrganizationId();
2525        shrinkTreeRightOrganizationId = new ShrinkTreeRightOrganizationId();
2526        updateTree = new UpdateTree();
2527    }
2528
2529    @BeanReference(name = "com.liferay.portal.service.persistence.AccountPersistence.impl")
2530    protected com.liferay.portal.service.persistence.AccountPersistence accountPersistence;
2531    @BeanReference(name = "com.liferay.portal.service.persistence.AddressPersistence.impl")
2532    protected com.liferay.portal.service.persistence.AddressPersistence addressPersistence;
2533    @BeanReference(name = "com.liferay.portal.service.persistence.BrowserTrackerPersistence.impl")
2534    protected com.liferay.portal.service.persistence.BrowserTrackerPersistence browserTrackerPersistence;
2535    @BeanReference(name = "com.liferay.portal.service.persistence.ClassNamePersistence.impl")
2536    protected com.liferay.portal.service.persistence.ClassNamePersistence classNamePersistence;
2537    @BeanReference(name = "com.liferay.portal.service.persistence.CompanyPersistence.impl")
2538    protected com.liferay.portal.service.persistence.CompanyPersistence companyPersistence;
2539    @BeanReference(name = "com.liferay.portal.service.persistence.ContactPersistence.impl")
2540    protected com.liferay.portal.service.persistence.ContactPersistence contactPersistence;
2541    @BeanReference(name = "com.liferay.portal.service.persistence.CountryPersistence.impl")
2542    protected com.liferay.portal.service.persistence.CountryPersistence countryPersistence;
2543    @BeanReference(name = "com.liferay.portal.service.persistence.EmailAddressPersistence.impl")
2544    protected com.liferay.portal.service.persistence.EmailAddressPersistence emailAddressPersistence;
2545    @BeanReference(name = "com.liferay.portal.service.persistence.GroupPersistence.impl")
2546    protected com.liferay.portal.service.persistence.GroupPersistence groupPersistence;
2547    @BeanReference(name = "com.liferay.portal.service.persistence.ImagePersistence.impl")
2548    protected com.liferay.portal.service.persistence.ImagePersistence imagePersistence;
2549    @BeanReference(name = "com.liferay.portal.service.persistence.LayoutPersistence.impl")
2550    protected com.liferay.portal.service.persistence.LayoutPersistence layoutPersistence;
2551    @BeanReference(name = "com.liferay.portal.service.persistence.LayoutSetPersistence.impl")
2552    protected com.liferay.portal.service.persistence.LayoutSetPersistence layoutSetPersistence;
2553    @BeanReference(name = "com.liferay.portal.service.persistence.ListTypePersistence.impl")
2554    protected com.liferay.portal.service.persistence.ListTypePersistence listTypePersistence;
2555    @BeanReference(name = "com.liferay.portal.service.persistence.MembershipRequestPersistence.impl")
2556    protected com.liferay.portal.service.persistence.MembershipRequestPersistence membershipRequestPersistence;
2557    @BeanReference(name = "com.liferay.portal.service.persistence.OrganizationPersistence.impl")
2558    protected com.liferay.portal.service.persistence.OrganizationPersistence organizationPersistence;
2559    @BeanReference(name = "com.liferay.portal.service.persistence.OrgGroupPermissionPersistence.impl")
2560    protected com.liferay.portal.service.persistence.OrgGroupPermissionPersistence orgGroupPermissionPersistence;
2561    @BeanReference(name = "com.liferay.portal.service.persistence.OrgGroupRolePersistence.impl")
2562    protected com.liferay.portal.service.persistence.OrgGroupRolePersistence orgGroupRolePersistence;
2563    @BeanReference(name = "com.liferay.portal.service.persistence.OrgLaborPersistence.impl")
2564    protected com.liferay.portal.service.persistence.OrgLaborPersistence orgLaborPersistence;
2565    @BeanReference(name = "com.liferay.portal.service.persistence.PasswordPolicyPersistence.impl")
2566    protected com.liferay.portal.service.persistence.PasswordPolicyPersistence passwordPolicyPersistence;
2567    @BeanReference(name = "com.liferay.portal.service.persistence.PasswordPolicyRelPersistence.impl")
2568    protected com.liferay.portal.service.persistence.PasswordPolicyRelPersistence passwordPolicyRelPersistence;
2569    @BeanReference(name = "com.liferay.portal.service.persistence.PasswordTrackerPersistence.impl")
2570    protected com.liferay.portal.service.persistence.PasswordTrackerPersistence passwordTrackerPersistence;
2571    @BeanReference(name = "com.liferay.portal.service.persistence.PermissionPersistence.impl")
2572    protected com.liferay.portal.service.persistence.PermissionPersistence permissionPersistence;
2573    @BeanReference(name = "com.liferay.portal.service.persistence.PhonePersistence.impl")
2574    protected com.liferay.portal.service.persistence.PhonePersistence phonePersistence;
2575    @BeanReference(name = "com.liferay.portal.service.persistence.PluginSettingPersistence.impl")
2576    protected com.liferay.portal.service.persistence.PluginSettingPersistence pluginSettingPersistence;
2577    @BeanReference(name = "com.liferay.portal.service.persistence.PortletPersistence.impl")
2578    protected com.liferay.portal.service.persistence.PortletPersistence portletPersistence;
2579    @BeanReference(name = "com.liferay.portal.service.persistence.PortletItemPersistence.impl")
2580    protected com.liferay.portal.service.persistence.PortletItemPersistence portletItemPersistence;
2581    @BeanReference(name = "com.liferay.portal.service.persistence.PortletPreferencesPersistence.impl")
2582    protected com.liferay.portal.service.persistence.PortletPreferencesPersistence portletPreferencesPersistence;
2583    @BeanReference(name = "com.liferay.portal.service.persistence.RegionPersistence.impl")
2584    protected com.liferay.portal.service.persistence.RegionPersistence regionPersistence;
2585    @BeanReference(name = "com.liferay.portal.service.persistence.ReleasePersistence.impl")
2586    protected com.liferay.portal.service.persistence.ReleasePersistence releasePersistence;
2587    @BeanReference(name = "com.liferay.portal.service.persistence.ResourcePersistence.impl")
2588    protected com.liferay.portal.service.persistence.ResourcePersistence resourcePersistence;
2589    @BeanReference(name = "com.liferay.portal.service.persistence.ResourceActionPersistence.impl")
2590    protected com.liferay.portal.service.persistence.ResourceActionPersistence resourceActionPersistence;
2591    @BeanReference(name = "com.liferay.portal.service.persistence.ResourceCodePersistence.impl")
2592    protected com.liferay.portal.service.persistence.ResourceCodePersistence resourceCodePersistence;
2593    @BeanReference(name = "com.liferay.portal.service.persistence.ResourcePermissionPersistence.impl")
2594    protected com.liferay.portal.service.persistence.ResourcePermissionPersistence resourcePermissionPersistence;
2595    @BeanReference(name = "com.liferay.portal.service.persistence.RolePersistence.impl")
2596    protected com.liferay.portal.service.persistence.RolePersistence rolePersistence;
2597    @BeanReference(name = "com.liferay.portal.service.persistence.ServiceComponentPersistence.impl")
2598    protected com.liferay.portal.service.persistence.ServiceComponentPersistence serviceComponentPersistence;
2599    @BeanReference(name = "com.liferay.portal.service.persistence.ShardPersistence.impl")
2600    protected com.liferay.portal.service.persistence.ShardPersistence shardPersistence;
2601    @BeanReference(name = "com.liferay.portal.service.persistence.SubscriptionPersistence.impl")
2602    protected com.liferay.portal.service.persistence.SubscriptionPersistence subscriptionPersistence;
2603    @BeanReference(name = "com.liferay.portal.service.persistence.UserPersistence.impl")
2604    protected com.liferay.portal.service.persistence.UserPersistence userPersistence;
2605    @BeanReference(name = "com.liferay.portal.service.persistence.UserGroupPersistence.impl")
2606    protected com.liferay.portal.service.persistence.UserGroupPersistence userGroupPersistence;
2607    @BeanReference(name = "com.liferay.portal.service.persistence.UserGroupRolePersistence.impl")
2608    protected com.liferay.portal.service.persistence.UserGroupRolePersistence userGroupRolePersistence;
2609    @BeanReference(name = "com.liferay.portal.service.persistence.UserIdMapperPersistence.impl")
2610    protected com.liferay.portal.service.persistence.UserIdMapperPersistence userIdMapperPersistence;
2611    @BeanReference(name = "com.liferay.portal.service.persistence.UserTrackerPersistence.impl")
2612    protected com.liferay.portal.service.persistence.UserTrackerPersistence userTrackerPersistence;
2613    @BeanReference(name = "com.liferay.portal.service.persistence.UserTrackerPathPersistence.impl")
2614    protected com.liferay.portal.service.persistence.UserTrackerPathPersistence userTrackerPathPersistence;
2615    @BeanReference(name = "com.liferay.portal.service.persistence.WebDAVPropsPersistence.impl")
2616    protected com.liferay.portal.service.persistence.WebDAVPropsPersistence webDAVPropsPersistence;
2617    @BeanReference(name = "com.liferay.portal.service.persistence.WebsitePersistence.impl")
2618    protected com.liferay.portal.service.persistence.WebsitePersistence websitePersistence;
2619    @BeanReference(name = "com.liferay.portlet.tags.service.persistence.TagsAssetPersistence.impl")
2620    protected com.liferay.portlet.tags.service.persistence.TagsAssetPersistence tagsAssetPersistence;
2621    protected ContainsGroup containsGroup;
2622    protected AddGroup addGroup;
2623    protected ClearGroups clearGroups;
2624    protected RemoveGroup removeGroup;
2625    protected ContainsUser containsUser;
2626    protected AddUser addUser;
2627    protected ClearUsers clearUsers;
2628    protected RemoveUser removeUser;
2629
2630    protected class ContainsGroup {
2631        protected ContainsGroup(OrganizationPersistenceImpl persistenceImpl) {
2632            super();
2633
2634            _mappingSqlQuery = MappingSqlQueryFactoryUtil.getMappingSqlQuery(getDataSource(),
2635                    _SQL_CONTAINSGROUP,
2636                    new int[] { Types.BIGINT, Types.BIGINT }, RowMapper.COUNT);
2637        }
2638
2639        protected boolean contains(long organizationId, long groupId) {
2640            List<Integer> results = _mappingSqlQuery.execute(new Object[] {
2641                        new Long(organizationId), new Long(groupId)
2642                    });
2643
2644            if (results.size() > 0) {
2645                Integer count = results.get(0);
2646
2647                if (count.intValue() > 0) {
2648                    return true;
2649                }
2650            }
2651
2652            return false;
2653        }
2654
2655        private MappingSqlQuery _mappingSqlQuery;
2656    }
2657
2658    protected class AddGroup {
2659        protected AddGroup(OrganizationPersistenceImpl persistenceImpl) {
2660            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2661                    "INSERT INTO Groups_Orgs (organizationId, groupId) VALUES (?, ?)",
2662                    new int[] { Types.BIGINT, Types.BIGINT });
2663            _persistenceImpl = persistenceImpl;
2664        }
2665
2666        protected void add(long organizationId, long groupId)
2667            throws SystemException {
2668            if (!_persistenceImpl.containsGroup.contains(organizationId, groupId)) {
2669                ModelListener<com.liferay.portal.model.Group>[] groupListeners = groupPersistence.getListeners();
2670
2671                for (ModelListener<Organization> listener : listeners) {
2672                    listener.onBeforeAddAssociation(organizationId,
2673                        com.liferay.portal.model.Group.class.getName(), groupId);
2674                }
2675
2676                for (ModelListener<com.liferay.portal.model.Group> listener : groupListeners) {
2677                    listener.onBeforeAddAssociation(groupId,
2678                        Organization.class.getName(), organizationId);
2679                }
2680
2681                _sqlUpdate.update(new Object[] {
2682                        new Long(organizationId), new Long(groupId)
2683                    });
2684
2685                for (ModelListener<Organization> listener : listeners) {
2686                    listener.onAfterAddAssociation(organizationId,
2687                        com.liferay.portal.model.Group.class.getName(), groupId);
2688                }
2689
2690                for (ModelListener<com.liferay.portal.model.Group> listener : groupListeners) {
2691                    listener.onAfterAddAssociation(groupId,
2692                        Organization.class.getName(), organizationId);
2693                }
2694            }
2695        }
2696
2697        private SqlUpdate _sqlUpdate;
2698        private OrganizationPersistenceImpl _persistenceImpl;
2699    }
2700
2701    protected class ClearGroups {
2702        protected ClearGroups(OrganizationPersistenceImpl persistenceImpl) {
2703            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2704                    "DELETE FROM Groups_Orgs WHERE organizationId = ?",
2705                    new int[] { Types.BIGINT });
2706        }
2707
2708        protected void clear(long organizationId) throws SystemException {
2709            ModelListener<com.liferay.portal.model.Group>[] groupListeners = groupPersistence.getListeners();
2710
2711            List<com.liferay.portal.model.Group> groups = null;
2712
2713            if ((listeners.length > 0) || (groupListeners.length > 0)) {
2714                groups = getGroups(organizationId);
2715
2716                for (com.liferay.portal.model.Group group : groups) {
2717                    for (ModelListener<Organization> listener : listeners) {
2718                        listener.onBeforeRemoveAssociation(organizationId,
2719                            com.liferay.portal.model.Group.class.getName(),
2720                            group.getPrimaryKey());
2721                    }
2722
2723                    for (ModelListener<com.liferay.portal.model.Group> listener : groupListeners) {
2724                        listener.onBeforeRemoveAssociation(group.getPrimaryKey(),
2725                            Organization.class.getName(), organizationId);
2726                    }
2727                }
2728            }
2729
2730            _sqlUpdate.update(new Object[] { new Long(organizationId) });
2731
2732            if ((listeners.length > 0) || (groupListeners.length > 0)) {
2733                for (com.liferay.portal.model.Group group : groups) {
2734                    for (ModelListener<Organization> listener : listeners) {
2735                        listener.onAfterRemoveAssociation(organizationId,
2736                            com.liferay.portal.model.Group.class.getName(),
2737                            group.getPrimaryKey());
2738                    }
2739
2740                    for (ModelListener<com.liferay.portal.model.Group> listener : groupListeners) {
2741                        listener.onBeforeRemoveAssociation(group.getPrimaryKey(),
2742                            Organization.class.getName(), organizationId);
2743                    }
2744                }
2745            }
2746        }
2747
2748        private SqlUpdate _sqlUpdate;
2749    }
2750
2751    protected class RemoveGroup {
2752        protected RemoveGroup(OrganizationPersistenceImpl persistenceImpl) {
2753            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2754                    "DELETE FROM Groups_Orgs WHERE organizationId = ? AND groupId = ?",
2755                    new int[] { Types.BIGINT, Types.BIGINT });
2756            _persistenceImpl = persistenceImpl;
2757        }
2758
2759        protected void remove(long organizationId, long groupId)
2760            throws SystemException {
2761            if (_persistenceImpl.containsGroup.contains(organizationId, groupId)) {
2762                ModelListener<com.liferay.portal.model.Group>[] groupListeners = groupPersistence.getListeners();
2763
2764                for (ModelListener<Organization> listener : listeners) {
2765                    listener.onBeforeRemoveAssociation(organizationId,
2766                        com.liferay.portal.model.Group.class.getName(), groupId);
2767                }
2768
2769                for (ModelListener<com.liferay.portal.model.Group> listener : groupListeners) {
2770                    listener.onBeforeRemoveAssociation(groupId,
2771                        Organization.class.getName(), organizationId);
2772                }
2773
2774                _sqlUpdate.update(new Object[] {
2775                        new Long(organizationId), new Long(groupId)
2776                    });
2777
2778                for (ModelListener<Organization> listener : listeners) {
2779                    listener.onAfterRemoveAssociation(organizationId,
2780                        com.liferay.portal.model.Group.class.getName(), groupId);
2781                }
2782
2783                for (ModelListener<com.liferay.portal.model.Group> listener : groupListeners) {
2784                    listener.onAfterRemoveAssociation(groupId,
2785                        Organization.class.getName(), organizationId);
2786                }
2787            }
2788        }
2789
2790        private SqlUpdate _sqlUpdate;
2791        private OrganizationPersistenceImpl _persistenceImpl;
2792    }
2793
2794    protected class ContainsUser {
2795        protected ContainsUser(OrganizationPersistenceImpl persistenceImpl) {
2796            super();
2797
2798            _mappingSqlQuery = MappingSqlQueryFactoryUtil.getMappingSqlQuery(getDataSource(),
2799                    _SQL_CONTAINSUSER,
2800                    new int[] { Types.BIGINT, Types.BIGINT }, RowMapper.COUNT);
2801        }
2802
2803        protected boolean contains(long organizationId, long userId) {
2804            List<Integer> results = _mappingSqlQuery.execute(new Object[] {
2805                        new Long(organizationId), new Long(userId)
2806                    });
2807
2808            if (results.size() > 0) {
2809                Integer count = results.get(0);
2810
2811                if (count.intValue() > 0) {
2812                    return true;
2813                }
2814            }
2815
2816            return false;
2817        }
2818
2819        private MappingSqlQuery _mappingSqlQuery;
2820    }
2821
2822    protected class AddUser {
2823        protected AddUser(OrganizationPersistenceImpl persistenceImpl) {
2824            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2825                    "INSERT INTO Users_Orgs (organizationId, userId) VALUES (?, ?)",
2826                    new int[] { Types.BIGINT, Types.BIGINT });
2827            _persistenceImpl = persistenceImpl;
2828        }
2829
2830        protected void add(long organizationId, long userId)
2831            throws SystemException {
2832            if (!_persistenceImpl.containsUser.contains(organizationId, userId)) {
2833                ModelListener<com.liferay.portal.model.User>[] userListeners = userPersistence.getListeners();
2834
2835                for (ModelListener<Organization> listener : listeners) {
2836                    listener.onBeforeAddAssociation(organizationId,
2837                        com.liferay.portal.model.User.class.getName(), userId);
2838                }
2839
2840                for (ModelListener<com.liferay.portal.model.User> listener : userListeners) {
2841                    listener.onBeforeAddAssociation(userId,
2842                        Organization.class.getName(), organizationId);
2843                }
2844
2845                _sqlUpdate.update(new Object[] {
2846                        new Long(organizationId), new Long(userId)
2847                    });
2848
2849                for (ModelListener<Organization> listener : listeners) {
2850                    listener.onAfterAddAssociation(organizationId,
2851                        com.liferay.portal.model.User.class.getName(), userId);
2852                }
2853
2854                for (ModelListener<com.liferay.portal.model.User> listener : userListeners) {
2855                    listener.onAfterAddAssociation(userId,
2856                        Organization.class.getName(), organizationId);
2857                }
2858            }
2859        }
2860
2861        private SqlUpdate _sqlUpdate;
2862        private OrganizationPersistenceImpl _persistenceImpl;
2863    }
2864
2865    protected class ClearUsers {
2866        protected ClearUsers(OrganizationPersistenceImpl persistenceImpl) {
2867            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2868                    "DELETE FROM Users_Orgs WHERE organizationId = ?",
2869                    new int[] { Types.BIGINT });
2870        }
2871
2872        protected void clear(long organizationId) throws SystemException {
2873            ModelListener<com.liferay.portal.model.User>[] userListeners = userPersistence.getListeners();
2874
2875            List<com.liferay.portal.model.User> users = null;
2876
2877            if ((listeners.length > 0) || (userListeners.length > 0)) {
2878                users = getUsers(organizationId);
2879
2880                for (com.liferay.portal.model.User user : users) {
2881                    for (ModelListener<Organization> listener : listeners) {
2882                        listener.onBeforeRemoveAssociation(organizationId,
2883                            com.liferay.portal.model.User.class.getName(),
2884                            user.getPrimaryKey());
2885                    }
2886
2887                    for (ModelListener<com.liferay.portal.model.User> listener : userListeners) {
2888                        listener.onBeforeRemoveAssociation(user.getPrimaryKey(),
2889                            Organization.class.getName(), organizationId);
2890                    }
2891                }
2892            }
2893
2894            _sqlUpdate.update(new Object[] { new Long(organizationId) });
2895
2896            if ((listeners.length > 0) || (userListeners.length > 0)) {
2897                for (com.liferay.portal.model.User user : users) {
2898                    for (ModelListener<Organization> listener : listeners) {
2899                        listener.onAfterRemoveAssociation(organizationId,
2900                            com.liferay.portal.model.User.class.getName(),
2901                            user.getPrimaryKey());
2902                    }
2903
2904                    for (ModelListener<com.liferay.portal.model.User> listener : userListeners) {
2905                        listener.onBeforeRemoveAssociation(user.getPrimaryKey(),
2906                            Organization.class.getName(), organizationId);
2907                    }
2908                }
2909            }
2910        }
2911
2912        private SqlUpdate _sqlUpdate;
2913    }
2914
2915    protected class RemoveUser {
2916        protected RemoveUser(OrganizationPersistenceImpl persistenceImpl) {
2917            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2918                    "DELETE FROM Users_Orgs WHERE organizationId = ? AND userId = ?",
2919                    new int[] { Types.BIGINT, Types.BIGINT });
2920            _persistenceImpl = persistenceImpl;
2921        }
2922
2923        protected void remove(long organizationId, long userId)
2924            throws SystemException {
2925            if (_persistenceImpl.containsUser.contains(organizationId, userId)) {
2926                ModelListener<com.liferay.portal.model.User>[] userListeners = userPersistence.getListeners();
2927
2928                for (ModelListener<Organization> listener : listeners) {
2929                    listener.onBeforeRemoveAssociation(organizationId,
2930                        com.liferay.portal.model.User.class.getName(), userId);
2931                }
2932
2933                for (ModelListener<com.liferay.portal.model.User> listener : userListeners) {
2934                    listener.onBeforeRemoveAssociation(userId,
2935                        Organization.class.getName(), organizationId);
2936                }
2937
2938                _sqlUpdate.update(new Object[] {
2939                        new Long(organizationId), new Long(userId)
2940                    });
2941
2942                for (ModelListener<Organization> listener : listeners) {
2943                    listener.onAfterRemoveAssociation(organizationId,
2944                        com.liferay.portal.model.User.class.getName(), userId);
2945                }
2946
2947                for (ModelListener<com.liferay.portal.model.User> listener : userListeners) {
2948                    listener.onAfterRemoveAssociation(userId,
2949                        Organization.class.getName(), organizationId);
2950                }
2951            }
2952        }
2953
2954        private SqlUpdate _sqlUpdate;
2955        private OrganizationPersistenceImpl _persistenceImpl;
2956    }
2957
2958    protected ExpandTreeLeftOrganizationId expandTreeLeftOrganizationId;
2959    protected ExpandTreeRightOrganizationId expandTreeRightOrganizationId;
2960    protected ShrinkTreeLeftOrganizationId shrinkTreeLeftOrganizationId;
2961    protected ShrinkTreeRightOrganizationId shrinkTreeRightOrganizationId;
2962    protected UpdateTree updateTree;
2963
2964    protected class ExpandTreeLeftOrganizationId {
2965        protected ExpandTreeLeftOrganizationId() {
2966            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2967                    "UPDATE Organization_ SET leftOrganizationId = (leftOrganizationId + 2) WHERE (companyId = ?) AND (leftOrganizationId > ?)",
2968                    new int[] { Types.BIGINT, Types.BIGINT });
2969        }
2970
2971        protected void expand(long companyId, long leftOrganizationId) {
2972            _sqlUpdate.update(new Object[] { companyId, leftOrganizationId });
2973        }
2974
2975        private SqlUpdate _sqlUpdate;
2976    }
2977
2978    protected class ExpandTreeRightOrganizationId {
2979        protected ExpandTreeRightOrganizationId() {
2980            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2981                    "UPDATE Organization_ SET rightOrganizationId = (rightOrganizationId + 2) WHERE (companyId = ?) AND (rightOrganizationId > ?)",
2982                    new int[] { Types.BIGINT, Types.BIGINT });
2983        }
2984
2985        protected void expand(long companyId, long rightOrganizationId) {
2986            _sqlUpdate.update(new Object[] { companyId, rightOrganizationId });
2987        }
2988
2989        private SqlUpdate _sqlUpdate;
2990    }
2991
2992    protected class ShrinkTreeLeftOrganizationId {
2993        protected ShrinkTreeLeftOrganizationId() {
2994            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
2995                    "UPDATE Organization_ SET leftOrganizationId = (leftOrganizationId - ?) WHERE (companyId = ?) AND (leftOrganizationId > ?)",
2996                    new int[] { Types.BIGINT, Types.BIGINT, Types.BIGINT });
2997        }
2998
2999        protected void shrink(long companyId, long leftOrganizationId,
3000            long delta) {
3001            _sqlUpdate.update(new Object[] { delta, companyId, leftOrganizationId });
3002        }
3003
3004        private SqlUpdate _sqlUpdate;
3005    }
3006
3007    protected class ShrinkTreeRightOrganizationId {
3008        protected ShrinkTreeRightOrganizationId() {
3009            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
3010                    "UPDATE Organization_ SET rightOrganizationId = (rightOrganizationId - ?) WHERE (companyId = ?) AND (rightOrganizationId > ?)",
3011                    new int[] { Types.BIGINT, Types.BIGINT, Types.BIGINT });
3012        }
3013
3014        protected void shrink(long companyId, long rightOrganizationId,
3015            long delta) {
3016            _sqlUpdate.update(new Object[] { delta, companyId, rightOrganizationId });
3017        }
3018
3019        private SqlUpdate _sqlUpdate;
3020    }
3021
3022    protected class UpdateTree {
3023        protected UpdateTree() {
3024            _sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(getDataSource(),
3025                    "UPDATE Organization_ SET leftOrganizationId = ?, rightOrganizationId = ? WHERE organizationId = ?",
3026                    new int[] { Types.BIGINT, Types.BIGINT, Types.BIGINT });
3027        }
3028
3029        protected void update(long organizationId, long leftOrganizationId,
3030            long rightOrganizationId) {
3031            _sqlUpdate.update(new Object[] {
3032                    leftOrganizationId, rightOrganizationId, organizationId
3033                });
3034        }
3035
3036        private SqlUpdate _sqlUpdate;
3037    }
3038
3039    private static final String _SQL_GETGROUPS = "SELECT {Group_.*} FROM Group_ INNER JOIN Groups_Orgs ON (Groups_Orgs.groupId = Group_.groupId) WHERE (Groups_Orgs.organizationId = ?)";
3040    private static final String _SQL_GETGROUPSSIZE = "SELECT COUNT(*) AS COUNT_VALUE FROM Groups_Orgs WHERE organizationId = ?";
3041    private static final String _SQL_CONTAINSGROUP = "SELECT COUNT(*) AS COUNT_VALUE FROM Groups_Orgs WHERE organizationId = ? AND groupId = ?";
3042    private static final String _SQL_GETUSERS = "SELECT {User_.*} FROM User_ INNER JOIN Users_Orgs ON (Users_Orgs.userId = User_.userId) WHERE (Users_Orgs.organizationId = ?)";
3043    private static final String _SQL_GETUSERSSIZE = "SELECT COUNT(*) AS COUNT_VALUE FROM Users_Orgs WHERE organizationId = ?";
3044    private static final String _SQL_CONTAINSUSER = "SELECT COUNT(*) AS COUNT_VALUE FROM Users_Orgs WHERE organizationId = ? AND userId = ?";
3045    private static Log _log = LogFactoryUtil.getLog(OrganizationPersistenceImpl.class);
3046}