1
14
15 package com.liferay.portlet.expando.service.impl;
16
17 import com.liferay.portal.kernel.exception.PortalException;
18 import com.liferay.portal.kernel.exception.SystemException;
19 import com.liferay.portal.kernel.util.Validator;
20 import com.liferay.portal.util.PortalUtil;
21 import com.liferay.portlet.expando.ColumnNameException;
22 import com.liferay.portlet.expando.ColumnTypeException;
23 import com.liferay.portlet.expando.DuplicateColumnNameException;
24 import com.liferay.portlet.expando.model.ExpandoColumn;
25 import com.liferay.portlet.expando.model.ExpandoColumnConstants;
26 import com.liferay.portlet.expando.model.ExpandoTable;
27 import com.liferay.portlet.expando.model.ExpandoTableConstants;
28 import com.liferay.portlet.expando.model.ExpandoValue;
29 import com.liferay.portlet.expando.model.impl.ExpandoValueImpl;
30 import com.liferay.portlet.expando.service.base.ExpandoColumnLocalServiceBaseImpl;
31
32 import java.util.Collections;
33 import java.util.Date;
34 import java.util.List;
35
36
43 public class ExpandoColumnLocalServiceImpl
44 extends ExpandoColumnLocalServiceBaseImpl {
45
46 public ExpandoColumn addColumn(long tableId, String name, int type)
47 throws PortalException, SystemException {
48
49 return addColumn(tableId, name, type, null);
50 }
51
52 public ExpandoColumn addColumn(
53 long tableId, String name, int type, Object defaultData)
54 throws PortalException, SystemException {
55
56
58 ExpandoTable table = expandoTablePersistence.findByPrimaryKey(tableId);
59
60 ExpandoValue value = validate(0, tableId, name, type, defaultData);
61
62 long columnId = counterLocalService.increment();
63
64 ExpandoColumn column = expandoColumnPersistence.create(columnId);
65
66 column.setCompanyId(table.getCompanyId());
67 column.setTableId(tableId);
68 column.setName(name);
69 column.setType(type);
70 column.setDefaultData(value.getData());
71
72 expandoColumnPersistence.update(column, false);
73
74
76 resourceLocalService.addResources(
77 table.getCompanyId(), 0, 0, ExpandoColumn.class.getName(),
78 column.getColumnId(), false, false, false);
79
80 return column;
81 }
82
83 public void deleteColumn(ExpandoColumn column) throws SystemException {
84
85
87 expandoColumnPersistence.remove(column);
88
89
91 expandoValueLocalService.deleteColumnValues(column.getColumnId());
92 }
93
94 public void deleteColumn(long columnId)
95 throws PortalException, SystemException {
96
97 ExpandoColumn column = expandoColumnPersistence.findByPrimaryKey(
98 columnId);
99
100 deleteColumn(column);
101 }
102
103 public void deleteColumn(
104 long companyId, long classNameId, String tableName, String name)
105 throws PortalException, SystemException {
106
107 ExpandoTable table = expandoTableLocalService.getTable(
108 companyId, classNameId, tableName);
109
110 deleteColumn(table.getTableId(), name);
111 }
112
113 public void deleteColumn(long tableId, String name)
114 throws PortalException, SystemException {
115
116 ExpandoColumn column = expandoColumnPersistence.findByT_N(
117 tableId, name);
118
119 deleteColumn(column);
120 }
121
122 public void deleteColumn(
123 long companyId, String className, String tableName, String name)
124 throws PortalException, SystemException {
125
126 long classNameId = PortalUtil.getClassNameId(className);
127
128 deleteColumn(companyId, classNameId, tableName, name);
129 }
130
131 public void deleteColumns(long tableId) throws SystemException {
132 List<ExpandoColumn> columns = expandoColumnPersistence.findByTableId(
133 tableId);
134
135 for (ExpandoColumn column : columns) {
136 deleteColumn(column);
137 }
138 }
139
140 public void deleteColumns(
141 long companyId, long classNameId, String tableName)
142 throws PortalException, SystemException {
143
144 ExpandoTable table = expandoTableLocalService.getTable(
145 companyId, classNameId, tableName);
146
147 deleteColumns(table.getTableId());
148 }
149
150 public void deleteColumns(
151 long companyId, String className, String tableName)
152 throws PortalException, SystemException {
153
154 long classNameId = PortalUtil.getClassNameId(className);
155
156 deleteColumns(companyId, classNameId, tableName);
157 }
158
159 public ExpandoColumn getColumn(long columnId)
160 throws PortalException, SystemException {
161
162 return expandoColumnPersistence.findByPrimaryKey(columnId);
163 }
164
165 public ExpandoColumn getColumn(
166 long companyId, long classNameId, String tableName, String name)
167 throws SystemException {
168
169 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
170 companyId, classNameId, tableName);
171
172 if (table == null) {
173 return null;
174 }
175
176 return expandoColumnPersistence.fetchByT_N(table.getTableId(), name);
177 }
178
179 public ExpandoColumn getColumn(long tableId, String name)
180 throws PortalException, SystemException {
181
182 return expandoColumnPersistence.findByT_N(tableId, name);
183 }
184
185 public ExpandoColumn getColumn(
186 long companyId, String className, String tableName, String name)
187 throws SystemException {
188
189 long classNameId = PortalUtil.getClassNameId(className);
190
191 return getColumn(companyId, classNameId, tableName, name);
192 }
193
194 public List<ExpandoColumn> getColumns(long tableId)
195 throws SystemException {
196
197 return expandoColumnPersistence.findByTableId(tableId);
198 }
199
200 public List<ExpandoColumn> getColumns(
201 long companyId, long classNameId, String tableName)
202 throws SystemException {
203
204 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
205 companyId, classNameId, tableName);
206
207 if (table == null) {
208 return Collections.EMPTY_LIST;
209 }
210
211 return expandoColumnPersistence.findByTableId(table.getTableId());
212 }
213
214 public List<ExpandoColumn> getColumns(
215 long companyId, String className, String tableName)
216 throws SystemException {
217
218 long classNameId = PortalUtil.getClassNameId(className);
219
220 return getColumns(companyId, classNameId, tableName);
221 }
222
223 public int getColumnsCount(long tableId) throws SystemException {
224 return expandoColumnPersistence.countByTableId(tableId);
225 }
226
227 public int getColumnsCount(
228 long companyId, long classNameId, String tableName)
229 throws SystemException {
230
231 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
232 companyId, classNameId, tableName);
233
234 if (table == null) {
235 return 0;
236 }
237
238 return expandoColumnPersistence.countByTableId(table.getTableId());
239 }
240
241 public int getColumnsCount(
242 long companyId, String className, String tableName)
243 throws SystemException {
244
245 long classNameId = PortalUtil.getClassNameId(className);
246
247 return getColumnsCount(companyId, classNameId, tableName);
248 }
249
250 public ExpandoColumn getDefaultTableColumn(
251 long companyId, long classNameId, String name)
252 throws SystemException {
253
254 return getColumn(
255 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME,
256 name);
257 }
258
259 public ExpandoColumn getDefaultTableColumn(
260 long companyId, String className, String name)
261 throws SystemException {
262
263 long classNameId = PortalUtil.getClassNameId(className);
264
265 return getColumn(
266 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME,
267 name);
268 }
269
270 public List<ExpandoColumn> getDefaultTableColumns(
271 long companyId, long classNameId)
272 throws SystemException {
273
274 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
275 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME);
276
277 if (table == null) {
278 return Collections.EMPTY_LIST;
279 }
280
281 return expandoColumnPersistence.findByTableId(table.getTableId());
282 }
283
284 public List<ExpandoColumn> getDefaultTableColumns(
285 long companyId, String className)
286 throws SystemException {
287
288 long classNameId = PortalUtil.getClassNameId(className);
289
290 return getColumns(
291 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME);
292 }
293
294 public int getDefaultTableColumnsCount(long companyId, long classNameId)
295 throws SystemException {
296
297 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
298 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME);
299
300 if (table == null) {
301 return 0;
302 }
303
304 return expandoColumnPersistence.countByTableId(table.getTableId());
305 }
306
307 public int getDefaultTableColumnsCount(long companyId, String className)
308 throws SystemException {
309
310 long classNameId = PortalUtil.getClassNameId(className);
311
312 return getColumnsCount(
313 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME);
314 }
315
316 public ExpandoColumn updateColumn(long columnId, String name, int type)
317 throws PortalException, SystemException {
318
319 return updateColumn(columnId, name, type, null);
320 }
321
322 public ExpandoColumn updateColumn(
323 long columnId, String name, int type, Object defaultData)
324 throws PortalException, SystemException {
325
326 ExpandoColumn column = expandoColumnPersistence.findByPrimaryKey(
327 columnId);
328
329 ExpandoValue value = validate(
330 columnId, column.getTableId(), name, type, defaultData);
331
332 column.setName(name);
333 column.setType(type);
334 column.setDefaultData(value.getData());
335
336 expandoColumnPersistence.update(column, false);
337
338 return column;
339 }
340
341 public ExpandoColumn updateTypeSettings(long columnId, String typeSettings)
342 throws PortalException, SystemException {
343
344 ExpandoColumn column = expandoColumnPersistence.findByPrimaryKey(
345 columnId);
346
347 column.setTypeSettings(typeSettings);
348
349 expandoColumnPersistence.update(column, false);
350
351 return column;
352 }
353
354 protected ExpandoValue validate(
355 long columnId, long tableId, String name, int type,
356 Object defaultData)
357 throws PortalException, SystemException {
358
359 if (Validator.isNull(name)) {
360 throw new ColumnNameException();
361 }
362
363 ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
364 tableId, name);
365
366 if ((column != null) && (column.getColumnId() != columnId)) {
367 throw new DuplicateColumnNameException();
368 }
369
370 if ((type != ExpandoColumnConstants.BOOLEAN) &&
371 (type != ExpandoColumnConstants.BOOLEAN_ARRAY) &&
372 (type != ExpandoColumnConstants.DATE) &&
373 (type != ExpandoColumnConstants.DATE_ARRAY) &&
374 (type != ExpandoColumnConstants.DOUBLE) &&
375 (type != ExpandoColumnConstants.DOUBLE_ARRAY) &&
376 (type != ExpandoColumnConstants.FLOAT) &&
377 (type != ExpandoColumnConstants.FLOAT_ARRAY) &&
378 (type != ExpandoColumnConstants.INTEGER) &&
379 (type != ExpandoColumnConstants.INTEGER_ARRAY) &&
380 (type != ExpandoColumnConstants.LONG) &&
381 (type != ExpandoColumnConstants.LONG_ARRAY) &&
382 (type != ExpandoColumnConstants.SHORT) &&
383 (type != ExpandoColumnConstants.SHORT_ARRAY) &&
384 (type != ExpandoColumnConstants.STRING) &&
385 (type != ExpandoColumnConstants.STRING_ARRAY)) {
386
387 throw new ColumnTypeException();
388 }
389
390 ExpandoValue value = new ExpandoValueImpl();
391
392 if (Validator.isNotNull(defaultData)) {
393 value.setColumnId(columnId);
394
395 if (type == ExpandoColumnConstants.BOOLEAN) {
396 value.setBoolean((Boolean)defaultData);
397 }
398 else if (type == ExpandoColumnConstants.BOOLEAN_ARRAY) {
399 value.setBooleanArray((boolean[])defaultData);
400 }
401 else if (type == ExpandoColumnConstants.DATE) {
402 value.setDate((Date)defaultData);
403 }
404 else if (type == ExpandoColumnConstants.DATE_ARRAY) {
405 value.setDateArray((Date[])defaultData);
406 }
407 else if (type == ExpandoColumnConstants.DOUBLE) {
408 value.setDouble((Double)defaultData);
409 }
410 else if (type == ExpandoColumnConstants.DOUBLE_ARRAY) {
411 value.setDoubleArray((double[])defaultData);
412 }
413 else if (type == ExpandoColumnConstants.FLOAT) {
414 value.setFloat((Float)defaultData);
415 }
416 else if (type == ExpandoColumnConstants.FLOAT_ARRAY) {
417 value.setFloatArray((float[])defaultData);
418 }
419 else if (type == ExpandoColumnConstants.INTEGER) {
420 value.setInteger((Integer)defaultData);
421 }
422 else if (type == ExpandoColumnConstants.INTEGER_ARRAY) {
423 value.setIntegerArray((int[])defaultData);
424 }
425 else if (type == ExpandoColumnConstants.LONG) {
426 value.setLong((Long)defaultData);
427 }
428 else if (type == ExpandoColumnConstants.LONG_ARRAY) {
429 value.setLongArray((long[])defaultData);
430 }
431 else if (type == ExpandoColumnConstants.SHORT) {
432 value.setShort((Short)defaultData);
433 }
434 else if (type == ExpandoColumnConstants.SHORT_ARRAY) {
435 value.setShortArray((short[])defaultData);
436 }
437 else if (type == ExpandoColumnConstants.STRING) {
438 value.setString((String)defaultData);
439 }
440 else if (type == ExpandoColumnConstants.STRING_ARRAY) {
441 value.setStringArray((String[])defaultData);
442 }
443 }
444
445 return value;
446 }
447
448 }