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