1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portlet.expando.service.impl;
16  
17  import com.liferay.portal.PortalException;
18  import com.liferay.portal.SystemException;
19  import com.liferay.portal.security.auth.CompanyThreadLocal;
20  import com.liferay.portal.util.PortalUtil;
21  import com.liferay.portlet.expando.model.ExpandoColumn;
22  import com.liferay.portlet.expando.model.ExpandoColumnConstants;
23  import com.liferay.portlet.expando.model.ExpandoRow;
24  import com.liferay.portlet.expando.model.ExpandoTable;
25  import com.liferay.portlet.expando.model.ExpandoTableConstants;
26  import com.liferay.portlet.expando.model.ExpandoValue;
27  import com.liferay.portlet.expando.model.impl.ExpandoValueImpl;
28  import com.liferay.portlet.expando.service.base.ExpandoValueLocalServiceBaseImpl;
29  
30  import java.io.Serializable;
31  
32  import java.util.Collections;
33  import java.util.Date;
34  import java.util.List;
35  import java.util.Map;
36  
37  /**
38   * <a href="ExpandoValueLocalServiceImpl.java.html"><b><i>View Source</i></b>
39   * </a>
40   *
41   * @author Raymond Augé
42   * @author Brian Wing Shun Chan
43   */
44  public class ExpandoValueLocalServiceImpl
45      extends ExpandoValueLocalServiceBaseImpl {
46  
47      public ExpandoValue addValue(
48              long classNameId, long tableId, long columnId, long classPK,
49              String data)
50          throws SystemException {
51  
52          long companyId = CompanyThreadLocal.getCompanyId();
53  
54          ExpandoRow row = expandoRowPersistence.fetchByT_C(tableId, classPK);
55  
56          if (row == null) {
57              long rowId = counterLocalService.increment();
58  
59              row = expandoRowPersistence.create(rowId);
60  
61              row.setCompanyId(companyId);
62              row.setTableId(tableId);
63              row.setClassPK(classPK);
64  
65              expandoRowPersistence.update(row, false);
66          }
67  
68          ExpandoValue value = expandoValuePersistence.fetchByC_R(
69              columnId, row.getRowId());
70  
71          if (value == null) {
72              long valueId = counterLocalService.increment();
73  
74              value = expandoValuePersistence.create(valueId);
75  
76              value.setCompanyId(companyId);
77              value.setTableId(tableId);
78              value.setColumnId(columnId);
79              value.setRowId(row.getRowId());
80              value.setClassNameId(classNameId);
81              value.setClassPK(classPK);
82          }
83  
84          value.setData(data);
85  
86          expandoValuePersistence.update(value, false);
87  
88          return value;
89      }
90  
91      public ExpandoValue addValue(
92              String className, String tableName, String columnName, long classPK,
93              boolean data)
94          throws PortalException, SystemException {
95  
96          ExpandoTable table = expandoTableLocalService.getTable(
97              className, tableName);
98  
99          ExpandoColumn column = expandoColumnLocalService.getColumn(
100             table.getTableId(), columnName);
101 
102         ExpandoValue value = new ExpandoValueImpl();
103 
104         value.setCompanyId(table.getCompanyId());
105         value.setColumnId(column.getColumnId());
106         value.setBoolean(data);
107 
108         return addValue(
109             table.getClassNameId(), table.getTableId(), column.getColumnId(),
110             classPK, value.getData());
111     }
112 
113     public ExpandoValue addValue(
114             String className, String tableName, String columnName, long classPK,
115             boolean[] data)
116         throws PortalException, SystemException {
117 
118         ExpandoTable table = expandoTableLocalService.getTable(
119             className, tableName);
120 
121         ExpandoColumn column = expandoColumnLocalService.getColumn(
122             table.getTableId(), columnName);
123 
124         ExpandoValue value = new ExpandoValueImpl();
125 
126         value.setCompanyId(table.getCompanyId());
127         value.setColumnId(column.getColumnId());
128         value.setBooleanArray(data);
129 
130         return addValue(
131             table.getClassNameId(), table.getTableId(), column.getColumnId(),
132             classPK, value.getData());
133     }
134 
135     public ExpandoValue addValue(
136             String className, String tableName, String columnName, long classPK,
137             Date data)
138         throws PortalException, SystemException {
139 
140         ExpandoTable table = expandoTableLocalService.getTable(
141             className, tableName);
142 
143         ExpandoColumn column = expandoColumnLocalService.getColumn(
144             table.getTableId(), columnName);
145 
146         ExpandoValue value = new ExpandoValueImpl();
147 
148         value.setCompanyId(table.getCompanyId());
149         value.setColumnId(column.getColumnId());
150         value.setDate(data);
151 
152         return addValue(
153             table.getClassNameId(), table.getTableId(), column.getColumnId(),
154             classPK, value.getData());
155     }
156 
157     public ExpandoValue addValue(
158             String className, String tableName, String columnName, long classPK,
159             Date[] data)
160         throws PortalException, SystemException {
161 
162         ExpandoTable table = expandoTableLocalService.getTable(
163             className, tableName);
164 
165         ExpandoColumn column = expandoColumnLocalService.getColumn(
166             table.getTableId(), columnName);
167 
168         ExpandoValue value = new ExpandoValueImpl();
169 
170         value.setCompanyId(table.getCompanyId());
171         value.setColumnId(column.getColumnId());
172         value.setDateArray(data);
173 
174         return addValue(
175             table.getClassNameId(), table.getTableId(), column.getColumnId(),
176             classPK, value.getData());
177     }
178 
179     public ExpandoValue addValue(
180             String className, String tableName, String columnName, long classPK,
181             double data)
182         throws PortalException, SystemException {
183 
184         ExpandoTable table = expandoTableLocalService.getTable(
185             className, tableName);
186 
187         ExpandoColumn column = expandoColumnLocalService.getColumn(
188             table.getTableId(), columnName);
189 
190         ExpandoValue value = new ExpandoValueImpl();
191 
192         value.setCompanyId(table.getCompanyId());
193         value.setColumnId(column.getColumnId());
194         value.setDouble(data);
195 
196         return addValue(
197             table.getClassNameId(), table.getTableId(), column.getColumnId(),
198             classPK, value.getData());
199     }
200 
201     public ExpandoValue addValue(
202             String className, String tableName, String columnName, long classPK,
203             double[] data)
204         throws PortalException, SystemException {
205 
206         ExpandoTable table = expandoTableLocalService.getTable(
207             className, tableName);
208 
209         ExpandoColumn column = expandoColumnLocalService.getColumn(
210             table.getTableId(), columnName);
211 
212         ExpandoValue value = new ExpandoValueImpl();
213 
214         value.setCompanyId(table.getCompanyId());
215         value.setColumnId(column.getColumnId());
216         value.setDoubleArray(data);
217 
218         return addValue(
219             table.getClassNameId(), table.getTableId(), column.getColumnId(),
220             classPK, value.getData());
221     }
222 
223     public ExpandoValue addValue(
224             String className, String tableName, String columnName, long classPK,
225             float data)
226         throws PortalException, SystemException {
227 
228         ExpandoTable table = expandoTableLocalService.getTable(
229             className, tableName);
230 
231         ExpandoColumn column = expandoColumnLocalService.getColumn(
232             table.getTableId(), columnName);
233 
234         ExpandoValue value = new ExpandoValueImpl();
235 
236         value.setCompanyId(table.getCompanyId());
237         value.setColumnId(column.getColumnId());
238         value.setFloat(data);
239 
240         return addValue(
241             table.getClassNameId(), table.getTableId(), column.getColumnId(),
242             classPK, value.getData());
243     }
244 
245     public ExpandoValue addValue(
246             String className, String tableName, String columnName, long classPK,
247             float[] data)
248         throws PortalException, SystemException {
249 
250         ExpandoTable table = expandoTableLocalService.getTable(
251             className, tableName);
252 
253         ExpandoColumn column = expandoColumnLocalService.getColumn(
254             table.getTableId(), columnName);
255 
256         ExpandoValue value = new ExpandoValueImpl();
257 
258         value.setCompanyId(table.getCompanyId());
259         value.setColumnId(column.getColumnId());
260         value.setFloatArray(data);
261 
262         return addValue(
263             table.getClassNameId(), table.getTableId(), column.getColumnId(),
264             classPK, value.getData());
265     }
266 
267     public ExpandoValue addValue(
268             String className, String tableName, String columnName, long classPK,
269             int data)
270         throws PortalException, SystemException {
271 
272         ExpandoTable table = expandoTableLocalService.getTable(
273             className, tableName);
274 
275         ExpandoColumn column = expandoColumnLocalService.getColumn(
276             table.getTableId(), columnName);
277 
278         ExpandoValue value = new ExpandoValueImpl();
279 
280         value.setCompanyId(table.getCompanyId());
281         value.setColumnId(column.getColumnId());
282         value.setInteger(data);
283 
284         return addValue(
285             table.getClassNameId(), table.getTableId(), column.getColumnId(),
286             classPK, value.getData());
287     }
288 
289     public ExpandoValue addValue(
290             String className, String tableName, String columnName, long classPK,
291             int[] data)
292         throws PortalException, SystemException {
293 
294         ExpandoTable table = expandoTableLocalService.getTable(
295             className, tableName);
296 
297         ExpandoColumn column = expandoColumnLocalService.getColumn(
298             table.getTableId(), columnName);
299 
300         ExpandoValue value = new ExpandoValueImpl();
301 
302         value.setCompanyId(table.getCompanyId());
303         value.setColumnId(column.getColumnId());
304         value.setIntegerArray(data);
305 
306         return addValue(
307             table.getClassNameId(), table.getTableId(), column.getColumnId(),
308             classPK, value.getData());
309     }
310 
311     public ExpandoValue addValue(
312             String className, String tableName, String columnName, long classPK,
313             long data)
314         throws PortalException, SystemException {
315 
316         ExpandoTable table = expandoTableLocalService.getTable(
317             className, tableName);
318 
319         ExpandoColumn column = expandoColumnLocalService.getColumn(
320             table.getTableId(), columnName);
321 
322         ExpandoValue value = new ExpandoValueImpl();
323 
324         value.setCompanyId(table.getCompanyId());
325         value.setColumnId(column.getColumnId());
326         value.setLong(data);
327 
328         return addValue(
329             table.getClassNameId(), table.getTableId(), column.getColumnId(),
330             classPK, value.getData());
331     }
332 
333     public ExpandoValue addValue(
334             String className, String tableName, String columnName, long classPK,
335             long[] data)
336         throws PortalException, SystemException {
337 
338         ExpandoTable table = expandoTableLocalService.getTable(
339             className, tableName);
340 
341         ExpandoColumn column = expandoColumnLocalService.getColumn(
342             table.getTableId(), columnName);
343 
344         ExpandoValue value = new ExpandoValueImpl();
345 
346         value.setCompanyId(table.getCompanyId());
347         value.setColumnId(column.getColumnId());
348         value.setLongArray(data);
349 
350         return addValue(
351             table.getClassNameId(), table.getTableId(), column.getColumnId(),
352             classPK, value.getData());
353     }
354 
355     public ExpandoValue addValue(
356             String className, String tableName, String columnName, long classPK,
357             Object data)
358         throws PortalException, SystemException {
359 
360         ExpandoColumn column = expandoColumnLocalService.getColumn(
361             className, tableName, columnName);
362 
363         int type = column.getType();
364 
365         if (type == ExpandoColumnConstants.BOOLEAN) {
366             return addValue(
367                 className, tableName, columnName, classPK,
368                 ((Boolean)data).booleanValue());
369         }
370         else if (type == ExpandoColumnConstants.BOOLEAN_ARRAY) {
371             return addValue(
372                 className, tableName, columnName, classPK, (boolean[])data);
373         }
374         else if (type == ExpandoColumnConstants.DATE) {
375             return addValue(
376                 className, tableName, columnName, classPK, (Date)data);
377         }
378         else if (type == ExpandoColumnConstants.DATE_ARRAY) {
379             return addValue(
380                 className, tableName, columnName, classPK, (Date[])data);
381         }
382         else if (type == ExpandoColumnConstants.DOUBLE) {
383             return addValue(
384                 className, tableName, columnName, classPK,
385                 ((Double)data).doubleValue());
386         }
387         else if (type == ExpandoColumnConstants.DOUBLE_ARRAY) {
388             return addValue(
389                 className, tableName, columnName, classPK, (double[])data);
390         }
391         else if (type == ExpandoColumnConstants.FLOAT) {
392             return addValue(
393                 className, tableName, columnName, classPK,
394                 ((Float)data).floatValue());
395         }
396         else if (type == ExpandoColumnConstants.FLOAT_ARRAY) {
397             return addValue(
398                 className, tableName, columnName, classPK, (float[])data);
399         }
400         else if (type == ExpandoColumnConstants.INTEGER) {
401             return addValue(
402                 className, tableName, columnName, classPK,
403                 ((Integer)data).intValue());
404         }
405         else if (type == ExpandoColumnConstants.INTEGER_ARRAY) {
406             return addValue(
407                 className, tableName, columnName, classPK, (int[])data);
408         }
409         else if (type == ExpandoColumnConstants.LONG) {
410             return addValue(
411                 className, tableName, columnName, classPK,
412                 ((Long)data).longValue());
413         }
414         else if (type == ExpandoColumnConstants.LONG_ARRAY) {
415             return addValue(
416                 className, tableName, columnName, classPK, (long[])data);
417         }
418         else if (type == ExpandoColumnConstants.SHORT) {
419             return addValue(
420                 className, tableName, columnName, classPK,
421                 ((Short)data).shortValue());
422         }
423         else if (type == ExpandoColumnConstants.SHORT_ARRAY) {
424             return addValue(
425                 className, tableName, columnName, classPK, (short[])data);
426         }
427         else if (type == ExpandoColumnConstants.STRING_ARRAY) {
428             return addValue(
429                 className, tableName, columnName, classPK, (String[])data);
430         }
431         else {
432             return addValue(
433                 className, tableName, columnName, classPK, (String)data);
434         }
435     }
436 
437     public ExpandoValue addValue(
438             String className, String tableName, String columnName, long classPK,
439             short data)
440         throws PortalException, SystemException {
441 
442         ExpandoTable table = expandoTableLocalService.getTable(
443             className, tableName);
444 
445         ExpandoColumn column = expandoColumnLocalService.getColumn(
446             table.getTableId(), columnName);
447 
448         ExpandoValue value = new ExpandoValueImpl();
449 
450         value.setCompanyId(table.getCompanyId());
451         value.setColumnId(column.getColumnId());
452         value.setShort(data);
453 
454         return addValue(
455             table.getClassNameId(), table.getTableId(), column.getColumnId(),
456             classPK, value.getData());
457     }
458 
459     public ExpandoValue addValue(
460             String className, String tableName, String columnName, long classPK,
461             short[] data)
462         throws PortalException, SystemException {
463 
464         ExpandoTable table = expandoTableLocalService.getTable(
465             className, tableName);
466 
467         ExpandoColumn column = expandoColumnLocalService.getColumn(
468             table.getTableId(), columnName);
469 
470         ExpandoValue value = new ExpandoValueImpl();
471 
472         value.setCompanyId(table.getCompanyId());
473         value.setColumnId(column.getColumnId());
474         value.setShortArray(data);
475 
476         return addValue(
477             table.getClassNameId(), table.getTableId(), column.getColumnId(),
478             classPK, value.getData());
479     }
480 
481     public ExpandoValue addValue(
482             String className, String tableName, String columnName, long classPK,
483             String data)
484         throws PortalException, SystemException {
485 
486         ExpandoTable table = expandoTableLocalService.getTable(
487             className, tableName);
488 
489         ExpandoColumn column = expandoColumnLocalService.getColumn(
490             table.getTableId(), columnName);
491 
492         ExpandoValue value = new ExpandoValueImpl();
493 
494         value.setCompanyId(table.getCompanyId());
495         value.setColumnId(column.getColumnId());
496         value.setString(data);
497 
498         return addValue(
499             table.getClassNameId(), table.getTableId(), column.getColumnId(),
500             classPK, value.getData());
501     }
502 
503     public ExpandoValue addValue(
504             String className, String tableName, String columnName, long classPK,
505             String[] data)
506         throws PortalException, SystemException {
507 
508         ExpandoTable table = expandoTableLocalService.getTable(
509             className, tableName);
510 
511         ExpandoColumn column = expandoColumnLocalService.getColumn(
512             table.getTableId(), columnName);
513 
514         ExpandoValue value = new ExpandoValueImpl();
515 
516         value.setCompanyId(table.getCompanyId());
517         value.setColumnId(column.getColumnId());
518         value.setStringArray(data);
519 
520         return addValue(
521             table.getClassNameId(), table.getTableId(), column.getColumnId(),
522             classPK, value.getData());
523     }
524 
525     public void addValues(
526             long classNameId, long tableId, List<ExpandoColumn> columns,
527             long classPK, Map<String, String> data)
528         throws SystemException {
529 
530         long companyId = CompanyThreadLocal.getCompanyId();
531 
532         ExpandoRow row = expandoRowPersistence.fetchByT_C(tableId, classPK);
533 
534         if (row == null) {
535             long rowId = counterLocalService.increment();
536 
537             row = expandoRowPersistence.create(rowId);
538 
539             row.setCompanyId(companyId);
540             row.setTableId(tableId);
541             row.setClassPK(classPK);
542 
543             expandoRowPersistence.update(row, false);
544         }
545 
546         for (ExpandoColumn column : columns) {
547             if (data.containsKey(column.getName())) {
548                 ExpandoValue value = expandoValuePersistence.fetchByC_R(
549                     column.getColumnId(), row.getRowId());
550 
551                 if (value == null) {
552                     long valueId = counterLocalService.increment();
553 
554                     value = expandoValuePersistence.create(valueId);
555 
556                     value.setCompanyId(companyId);
557                     value.setTableId(tableId);
558                     value.setColumnId(column.getColumnId());
559                     value.setRowId(row.getRowId());
560                     value.setClassNameId(classNameId);
561                     value.setClassPK(classPK);
562                 }
563 
564                 value.setData(data.get(column.getName()));
565 
566                 expandoValuePersistence.update(value, false);
567             }
568         }
569     }
570 
571     public void deleteColumnValues(long columnId) throws SystemException {
572         expandoValuePersistence.removeByColumnId(columnId);
573     }
574 
575     public void deleteRowValues(long rowId) throws SystemException {
576         expandoValuePersistence.removeByRowId(rowId);
577     }
578 
579     public void deleteTableValues(long tableId) throws SystemException {
580         expandoValuePersistence.removeByTableId(tableId);
581     }
582 
583     public void deleteValue(long valueId)
584         throws PortalException, SystemException {
585 
586         expandoValuePersistence.remove(valueId);
587     }
588 
589     public void deleteValue(long columnId, long rowId)
590         throws PortalException, SystemException {
591 
592         expandoValuePersistence.removeByC_R(columnId, rowId);
593     }
594 
595     public void deleteValue(
596             long classNameId, String tableName, String columnName, long classPK)
597         throws PortalException, SystemException {
598 
599         long companyId = CompanyThreadLocal.getCompanyId();
600 
601         ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
602             companyId, classNameId, tableName);
603 
604         if (table == null) {
605             return;
606         }
607 
608         ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
609             table.getTableId(), columnName);
610 
611         if (column == null) {
612             return;
613         }
614 
615         ExpandoValue value = expandoValuePersistence.fetchByT_C_C(
616             table.getTableId(), column.getColumnId(), classPK);
617 
618         if (value != null) {
619             deleteValue(value.getValueId());
620         }
621     }
622 
623     public void deleteValue(
624             String className, String tableName, String columnName, long classPK)
625         throws PortalException, SystemException {
626 
627         long classNameId = PortalUtil.getClassNameId(className);
628 
629         deleteValue(classNameId, tableName, columnName, classPK);
630     }
631 
632     public void deleteValues(long classNameId, long classPK)
633         throws SystemException {
634 
635         expandoValuePersistence.removeByC_C(classNameId, classPK);
636     }
637 
638     public void deleteValues(String className, long classPK)
639         throws SystemException {
640 
641         long classNameId = PortalUtil.getClassNameId(className);
642 
643         deleteValues(classNameId, classPK);
644     }
645 
646     public List<ExpandoValue> getColumnValues(long columnId, int start, int end)
647         throws SystemException {
648 
649         return expandoValuePersistence.findByColumnId(columnId, start, end);
650     }
651 
652     public List<ExpandoValue> getColumnValues(
653             long classNameId, String tableName, String columnName, int start,
654             int end)
655         throws SystemException {
656 
657         long companyId = CompanyThreadLocal.getCompanyId();
658 
659         ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
660             companyId, classNameId, tableName);
661 
662         if (table == null) {
663             return Collections.EMPTY_LIST;
664         }
665 
666         ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
667             table.getTableId(), columnName);
668 
669         if (column == null) {
670             return Collections.EMPTY_LIST;
671         }
672 
673         return expandoValuePersistence.findByT_C(
674             table.getTableId(), column.getColumnId(), start, end);
675     }
676 
677     public List<ExpandoValue> getColumnValues(
678             long classNameId, String tableName, String columnName, String data,
679             int start, int end)
680         throws SystemException {
681 
682         long companyId = CompanyThreadLocal.getCompanyId();
683 
684         ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
685             companyId, classNameId, tableName);
686 
687         if (table == null) {
688             return Collections.EMPTY_LIST;
689         }
690 
691         ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
692             table.getTableId(), columnName);
693 
694         if (column == null) {
695             return Collections.EMPTY_LIST;
696         }
697 
698         return expandoValuePersistence.findByT_C_D(
699             table.getTableId(), column.getColumnId(), data, start, end);
700     }
701 
702     public List<ExpandoValue> getColumnValues(
703             String className, String tableName, String columnName, int start,
704             int end)
705         throws SystemException {
706 
707         long classNameId = PortalUtil.getClassNameId(className);
708 
709         return getColumnValues(classNameId, tableName, columnName, start, end);
710     }
711 
712     public List<ExpandoValue> getColumnValues(
713             String className, String tableName, String columnName, String data,
714             int start, int end)
715         throws SystemException {
716 
717         long classNameId = PortalUtil.getClassNameId(className);
718 
719         return getColumnValues(
720             classNameId, tableName, columnName, data, start, end);
721     }
722 
723     public int getColumnValuesCount(long columnId) throws SystemException {
724         return expandoValuePersistence.countByColumnId(columnId);
725     }
726 
727     public int getColumnValuesCount(
728             long classNameId, String tableName, String columnName)
729         throws SystemException {
730 
731         long companyId = CompanyThreadLocal.getCompanyId();
732 
733         ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
734             companyId, classNameId, tableName);
735 
736         if (table == null) {
737             return 0;
738         }
739 
740         ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
741             table.getTableId(), columnName);
742 
743         if (column == null) {
744             return 0;
745         }
746 
747         return expandoValuePersistence.countByT_C(
748             table.getTableId(), column.getColumnId());
749     }
750 
751     public int getColumnValuesCount(
752             long classNameId, String tableName, String columnName, String data)
753         throws SystemException {
754 
755         long companyId = CompanyThreadLocal.getCompanyId();
756 
757         ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
758             companyId, classNameId, tableName);
759 
760         if (table == null) {
761             return 0;
762         }
763 
764         ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
765             table.getTableId(), columnName);
766 
767         if (column == null) {
768             return 0;
769         }
770 
771         return expandoValuePersistence.countByT_C_D(
772             table.getTableId(), column.getColumnId(), data);
773     }
774 
775     public int getColumnValuesCount(
776             String className, String tableName, String columnName)
777         throws SystemException {
778 
779         long classNameId = PortalUtil.getClassNameId(className);
780 
781         return getColumnValuesCount(classNameId, tableName, columnName);
782     }
783 
784     public int getColumnValuesCount(
785             String className, String tableName, String columnName, String data)
786         throws SystemException {
787 
788         long classNameId = PortalUtil.getClassNameId(className);
789 
790         return getColumnValuesCount(classNameId, tableName, columnName, data);
791     }
792 
793     public Serializable getData(
794             String className, String tableName, String columnName, long classPK)
795         throws PortalException, SystemException {
796 
797         ExpandoColumn column = expandoColumnLocalService.getColumn(
798             className, tableName, columnName);
799 
800         ExpandoValue value = new ExpandoValueImpl();
801 
802         value.setColumnId(column.getColumnId());
803         value.setData(column.getDefaultData());
804 
805         int type = column.getType();
806 
807         if (type == ExpandoColumnConstants.BOOLEAN) {
808             return getData(
809                 className, tableName, columnName, classPK, value.getBoolean());
810         }
811         else if (type == ExpandoColumnConstants.BOOLEAN_ARRAY) {
812             return getData(
813                 className, tableName, columnName, classPK,
814                 value.getBooleanArray());
815         }
816         else if (type == ExpandoColumnConstants.DATE) {
817             return getData(
818                 className, tableName, columnName, classPK, value.getDate());
819         }
820         else if (type == ExpandoColumnConstants.DATE_ARRAY) {
821             return getData(
822                 className, tableName, columnName, classPK,
823                 value.getDateArray());
824         }
825         else if (type == ExpandoColumnConstants.DOUBLE) {
826             return getData(
827                 className, tableName, columnName, classPK, value.getDouble());
828         }
829         else if (type == ExpandoColumnConstants.DOUBLE_ARRAY) {
830             return getData(
831                 className, tableName, columnName, classPK,
832                 value.getDoubleArray());
833         }
834         else if (type == ExpandoColumnConstants.FLOAT) {
835             return getData(
836                 className, tableName, columnName, classPK, value.getFloat());
837         }
838         else if (type == ExpandoColumnConstants.FLOAT_ARRAY) {
839             return getData(
840                 className, tableName, columnName, classPK,
841                 value.getFloatArray());
842         }
843         else if (type == ExpandoColumnConstants.INTEGER) {
844             return getData(
845                 className, tableName, columnName, classPK, value.getInteger());
846         }
847         else if (type == ExpandoColumnConstants.INTEGER_ARRAY) {
848             return getData(
849                 className, tableName, columnName, classPK,
850                 value.getIntegerArray());
851         }
852         else if (type == ExpandoColumnConstants.LONG) {
853             return getData(
854                 className, tableName, columnName, classPK, value.getLong());
855         }
856         else if (type == ExpandoColumnConstants.LONG_ARRAY) {
857             return getData(
858                 className, tableName, columnName, classPK,
859                 value.getLongArray());
860         }
861         else if (type == ExpandoColumnConstants.SHORT) {
862             return getData(
863                 className, tableName, columnName, classPK, value.getShort());
864         }
865         else if (type == ExpandoColumnConstants.SHORT_ARRAY) {
866             return getData(
867                 className, tableName, columnName, classPK,
868                 value.getShortArray());
869         }
870         else if (type == ExpandoColumnConstants.STRING_ARRAY) {
871             return getData(
872                 className, tableName, columnName, classPK,
873                 value.getStringArray());
874         }
875         else {
876             return getData(
877                 className, tableName, columnName, classPK, value.getString());
878         }
879     }
880 
881     public boolean getData(
882             String className, String tableName, String columnName, long classPK,
883             boolean defaultData)
884         throws PortalException, SystemException {
885 
886         ExpandoValue value = getValue(
887             className, tableName, columnName, classPK);
888 
889         if (value == null) {
890             return defaultData;
891         }
892         else {
893             return value.getBoolean();
894         }
895     }
896 
897     public boolean[] getData(
898             String className, String tableName, String columnName, long classPK,
899             boolean[] defaultData)
900         throws PortalException, SystemException {
901 
902         ExpandoValue value = getValue(
903             className, tableName, columnName, classPK);
904 
905         if (value == null) {
906             return defaultData;
907         }
908         else {
909             return value.getBooleanArray();
910         }
911     }
912 
913     public Date getData(
914             String className, String tableName, String columnName, long classPK,
915             Date defaultData)
916         throws PortalException, SystemException {
917 
918         ExpandoValue value = getValue(
919             className, tableName, columnName, classPK);
920 
921         if (value == null) {
922             return defaultData;
923         }
924         else {
925             return value.getDate();
926         }
927     }
928 
929     public Date[] getData(
930             String className, String tableName, String columnName, long classPK,
931             Date[] defaultData)
932         throws PortalException, SystemException {
933 
934         ExpandoValue value = getValue(
935             className, tableName, columnName, classPK);
936 
937         if (value == null) {
938             return defaultData;
939         }
940         else {
941             return value.getDateArray();
942         }
943     }
944 
945     public double getData(
946             String className, String tableName, String columnName, long classPK,
947             double defaultData)
948         throws PortalException, SystemException {
949 
950         ExpandoValue value = getValue(
951             className, tableName, columnName, classPK);
952 
953         if (value == null) {
954             return defaultData;
955         }
956         else {
957             return value.getDouble();
958         }
959     }
960 
961     public double[] getData(
962             String className, String tableName, String columnName, long classPK,
963             double[] defaultData)
964         throws PortalException, SystemException {
965 
966         ExpandoValue value = getValue(
967             className, tableName, columnName, classPK);
968 
969         if (value == null) {
970             return defaultData;
971         }
972         else {
973             return value.getDoubleArray();
974         }
975     }
976 
977     public float getData(
978             String className, String tableName, String columnName, long classPK,
979             float defaultData)
980         throws PortalException, SystemException {
981 
982         ExpandoValue value = getValue(
983             className, tableName, columnName, classPK);
984 
985         if (value == null) {
986             return defaultData;
987         }
988         else {
989             return value.getFloat();
990         }
991     }
992 
993     public float[] getData(
994             String className, String tableName, String columnName, long classPK,
995             float[] defaultData)
996         throws PortalException, SystemException {
997 
998         ExpandoValue value = getValue(
999             className, tableName, columnName, classPK);
1000
1001        if (value == null) {
1002            return defaultData;
1003        }
1004        else {
1005            return value.getFloatArray();
1006        }
1007    }
1008
1009    public int getData(
1010            String className, String tableName, String columnName, long classPK,
1011            int defaultData)
1012        throws PortalException, SystemException {
1013
1014        ExpandoValue value = getValue(
1015            className, tableName, columnName, classPK);
1016
1017        if (value == null) {
1018            return defaultData;
1019        }
1020        else {
1021            return value.getInteger();
1022        }
1023    }
1024
1025    public int[] getData(
1026            String className, String tableName, String columnName, long classPK,
1027            int[] defaultData)
1028        throws PortalException, SystemException {
1029
1030        ExpandoValue value = getValue(
1031            className, tableName, columnName, classPK);
1032
1033        if (value == null) {
1034            return defaultData;
1035        }
1036        else {
1037            return value.getIntegerArray();
1038        }
1039    }
1040
1041    public long getData(
1042            String className, String tableName, String columnName, long classPK,
1043            long defaultData)
1044        throws PortalException, SystemException {
1045
1046        ExpandoValue value = getValue(
1047            className, tableName, columnName, classPK);
1048
1049        if (value == null) {
1050            return defaultData;
1051        }
1052        else {
1053            return value.getLong();
1054        }
1055    }
1056
1057    public long[] getData(
1058            String className, String tableName, String columnName, long classPK,
1059            long[] defaultData)
1060        throws PortalException, SystemException {
1061
1062        ExpandoValue value = getValue(
1063            className, tableName, columnName, classPK);
1064
1065        if (value == null) {
1066            return defaultData;
1067        }
1068        else {
1069            return value.getLongArray();
1070        }
1071    }
1072
1073    public short getData(
1074            String className, String tableName, String columnName, long classPK,
1075            short defaultData)
1076        throws PortalException, SystemException {
1077
1078        ExpandoValue value = getValue(
1079            className, tableName, columnName, classPK);
1080
1081        if (value == null) {
1082            return defaultData;
1083        }
1084        else {
1085            return value.getShort();
1086        }
1087    }
1088
1089    public short[] getData(
1090            String className, String tableName, String columnName, long classPK,
1091            short[] defaultData)
1092        throws PortalException, SystemException {
1093
1094        ExpandoValue value = getValue(
1095            className, tableName, columnName, classPK);
1096
1097        if (value == null) {
1098            return defaultData;
1099        }
1100        else {
1101            return value.getShortArray();
1102        }
1103    }
1104
1105    public String getData(
1106            String className, String tableName, String columnName, long classPK,
1107            String defaultData)
1108        throws PortalException, SystemException {
1109
1110        ExpandoValue value = getValue(
1111            className, tableName, columnName, classPK);
1112
1113        if (value == null) {
1114            return defaultData;
1115        }
1116        else {
1117            return value.getString();
1118        }
1119    }
1120
1121    public String[] getData(
1122            String className, String tableName, String columnName, long classPK,
1123            String[] defaultData)
1124        throws PortalException, SystemException {
1125
1126        ExpandoValue value = getValue(
1127            className, tableName, columnName, classPK);
1128
1129        if (value == null) {
1130            return defaultData;
1131        }
1132        else {
1133            return value.getStringArray();
1134        }
1135    }
1136
1137    public List<ExpandoValue> getDefaultTableColumnValues(
1138            long classNameId, String columnName, int start, int end)
1139        throws SystemException {
1140
1141        return getColumnValues(
1142            classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME, columnName,
1143            start, end);
1144    }
1145
1146    public List<ExpandoValue> getDefaultTableColumnValues(
1147            String className, String columnName, int start, int end)
1148        throws SystemException {
1149
1150        long classNameId = PortalUtil.getClassNameId(className);
1151
1152        return getDefaultTableColumnValues(classNameId, columnName, start, end);
1153    }
1154
1155    public int getDefaultTableColumnValuesCount(
1156            long classNameId, String columnName)
1157        throws SystemException {
1158
1159        return getColumnValuesCount(
1160            classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME, columnName);
1161    }
1162
1163    public int getDefaultTableColumnValuesCount(
1164            String className, String columnName)
1165        throws SystemException {
1166
1167        long classNameId = PortalUtil.getClassNameId(className);
1168
1169        return getDefaultTableColumnValuesCount(classNameId, columnName);
1170    }
1171
1172    public List<ExpandoValue> getRowValues(long rowId) throws SystemException {
1173        return expandoValuePersistence.findByRowId(rowId);
1174    }
1175
1176    public List<ExpandoValue> getRowValues(long rowId, int start, int end)
1177        throws SystemException {
1178
1179        return expandoValuePersistence.findByRowId(rowId, start, end);
1180    }
1181
1182    public List<ExpandoValue> getRowValues(
1183            long classNameId, String tableName, long classPK, int start,
1184            int end)
1185        throws SystemException {
1186
1187        long companyId = CompanyThreadLocal.getCompanyId();
1188
1189        ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
1190            companyId, classNameId, tableName);
1191
1192        if (table == null) {
1193            return Collections.EMPTY_LIST;
1194        }
1195
1196        return expandoValuePersistence.findByT_CPK(
1197            table.getTableId(), classPK, start, end);
1198    }
1199
1200    public List<ExpandoValue> getRowValues(
1201            String className, String tableName, long classPK, int start,
1202            int end)
1203        throws SystemException {
1204
1205        long classNameId = PortalUtil.getClassNameId(className);
1206
1207        return getRowValues(classNameId, tableName, classPK, start, end);
1208    }
1209
1210    public int getRowValuesCount(long rowId) throws SystemException {
1211        return expandoValuePersistence.countByRowId(rowId);
1212    }
1213
1214    public int getRowValuesCount(
1215            long classNameId, String tableName, long classPK)
1216        throws SystemException {
1217
1218        long companyId = CompanyThreadLocal.getCompanyId();
1219
1220        ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
1221            companyId, classNameId, tableName);
1222
1223        if (table == null) {
1224            return 0;
1225        }
1226
1227        return expandoValuePersistence.countByT_CPK(
1228            table.getTableId(), classPK);
1229    }
1230
1231    public int getRowValuesCount(
1232            String className, String tableName, long classPK)
1233        throws SystemException {
1234
1235        long classNameId = PortalUtil.getClassNameId(className);
1236
1237        return getRowValuesCount(classNameId, tableName, classPK);
1238    }
1239
1240    public ExpandoValue getValue(long valueId)
1241        throws PortalException, SystemException {
1242
1243        return expandoValuePersistence.findByPrimaryKey(valueId);
1244    }
1245
1246    public ExpandoValue getValue(long columnId, long rowId)
1247        throws PortalException, SystemException {
1248
1249        return expandoValuePersistence.findByC_R(columnId, rowId);
1250    }
1251
1252    public ExpandoValue getValue(long tableId, long columnId, long classPK)
1253        throws SystemException {
1254
1255        return expandoValuePersistence.fetchByT_C_C(
1256            tableId, columnId, classPK);
1257    }
1258
1259    public ExpandoValue getValue(
1260            long classNameId, String tableName, String columnName, long classPK)
1261        throws SystemException {
1262
1263        long companyId = CompanyThreadLocal.getCompanyId();
1264
1265        ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
1266            companyId, classNameId, tableName);
1267
1268        if (table == null) {
1269            return null;
1270        }
1271
1272        ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
1273            table.getTableId(), columnName);
1274
1275        if (column == null) {
1276            return null;
1277        }
1278
1279        return expandoValuePersistence.fetchByT_C_C(
1280            table.getTableId(), column.getColumnId(), classPK);
1281    }
1282
1283    public ExpandoValue getValue(
1284            String className, String tableName, String columnName, long classPK)
1285        throws SystemException {
1286
1287        long classNameId = PortalUtil.getClassNameId(className);
1288
1289        return getValue(classNameId, tableName, columnName, classPK);
1290    }
1291
1292}