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