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