001
014
015 package com.liferay.portlet.expando.service.impl;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.util.LocaleUtil;
020 import com.liferay.portal.kernel.util.StringBundler;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.util.PortalUtil;
023 import com.liferay.portlet.expando.ColumnNameException;
024 import com.liferay.portlet.expando.ColumnTypeException;
025 import com.liferay.portlet.expando.DuplicateColumnNameException;
026 import com.liferay.portlet.expando.model.ExpandoColumn;
027 import com.liferay.portlet.expando.model.ExpandoColumnConstants;
028 import com.liferay.portlet.expando.model.ExpandoTable;
029 import com.liferay.portlet.expando.model.ExpandoTableConstants;
030 import com.liferay.portlet.expando.model.ExpandoValue;
031 import com.liferay.portlet.expando.model.impl.ExpandoValueImpl;
032 import com.liferay.portlet.expando.service.base.ExpandoColumnLocalServiceBaseImpl;
033
034 import java.util.Collection;
035 import java.util.Collections;
036 import java.util.Date;
037 import java.util.List;
038 import java.util.Locale;
039 import java.util.Map;
040
041
045 public class ExpandoColumnLocalServiceImpl
046 extends ExpandoColumnLocalServiceBaseImpl {
047
048 @Override
049 public ExpandoColumn addColumn(long tableId, String name, int type)
050 throws PortalException, SystemException {
051
052 return addColumn(tableId, name, type, null);
053 }
054
055 @Override
056 public ExpandoColumn addColumn(
057 long tableId, String name, int type, Object defaultData)
058 throws PortalException, SystemException {
059
060
061
062 ExpandoTable table = expandoTablePersistence.findByPrimaryKey(tableId);
063
064 ExpandoValue value = validate(0, tableId, name, type, defaultData);
065
066 long columnId = counterLocalService.increment();
067
068 ExpandoColumn column = expandoColumnPersistence.create(columnId);
069
070 column.setCompanyId(table.getCompanyId());
071 column.setTableId(tableId);
072 column.setName(name);
073 column.setType(type);
074 column.setDefaultData(value.getData());
075
076 expandoColumnPersistence.update(column);
077
078
079
080 resourceLocalService.addResources(
081 table.getCompanyId(), 0, 0, ExpandoColumn.class.getName(),
082 column.getColumnId(), false, false, false);
083
084 return column;
085 }
086
087 @Override
088 public void deleteColumn(ExpandoColumn column) throws SystemException {
089
090
091
092 expandoColumnPersistence.remove(column);
093
094
095
096 expandoValueLocalService.deleteColumnValues(column.getColumnId());
097 }
098
099 @Override
100 public void deleteColumn(long columnId)
101 throws PortalException, SystemException {
102
103 ExpandoColumn column = expandoColumnPersistence.findByPrimaryKey(
104 columnId);
105
106 deleteColumn(column);
107 }
108
109 @Override
110 public void deleteColumn(
111 long companyId, long classNameId, String tableName, String name)
112 throws PortalException, SystemException {
113
114 ExpandoTable table = expandoTableLocalService.getTable(
115 companyId, classNameId, tableName);
116
117 deleteColumn(table.getTableId(), name);
118 }
119
120 @Override
121 public void deleteColumn(long tableId, String name) throws SystemException {
122 ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
123 tableId, name);
124
125 if (column != null) {
126 expandoColumnPersistence.remove(column);
127 }
128 }
129
130 @Override
131 public void deleteColumn(
132 long companyId, String className, String tableName, String name)
133 throws PortalException, SystemException {
134
135 long classNameId = PortalUtil.getClassNameId(className);
136
137 deleteColumn(companyId, classNameId, tableName, name);
138 }
139
140 @Override
141 public void deleteColumns(long tableId) throws SystemException {
142 List<ExpandoColumn> columns = expandoColumnPersistence.findByTableId(
143 tableId);
144
145 for (ExpandoColumn column : columns) {
146 deleteColumn(column);
147 }
148 }
149
150 @Override
151 public void deleteColumns(
152 long companyId, long classNameId, String tableName)
153 throws PortalException, SystemException {
154
155 ExpandoTable table = expandoTableLocalService.getTable(
156 companyId, classNameId, tableName);
157
158 deleteColumns(table.getTableId());
159 }
160
161 @Override
162 public void deleteColumns(
163 long companyId, String className, String tableName)
164 throws PortalException, SystemException {
165
166 long classNameId = PortalUtil.getClassNameId(className);
167
168 deleteColumns(companyId, classNameId, tableName);
169 }
170
171 @Override
172 public ExpandoColumn getColumn(long columnId)
173 throws PortalException, SystemException {
174
175 return expandoColumnPersistence.findByPrimaryKey(columnId);
176 }
177
178 @Override
179 public ExpandoColumn getColumn(
180 long companyId, long classNameId, String tableName, String name)
181 throws SystemException {
182
183 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
184 companyId, classNameId, tableName);
185
186 if (table == null) {
187 return null;
188 }
189
190 return expandoColumnPersistence.fetchByT_N(table.getTableId(), name);
191 }
192
193 @Override
194 public ExpandoColumn getColumn(long tableId, String name)
195 throws SystemException {
196
197 return expandoColumnPersistence.fetchByT_N(tableId, name);
198 }
199
200 @Override
201 public ExpandoColumn getColumn(
202 long companyId, String className, String tableName, String name)
203 throws SystemException {
204
205 long classNameId = PortalUtil.getClassNameId(className);
206
207 return getColumn(companyId, classNameId, tableName, name);
208 }
209
210 @Override
211 public List<ExpandoColumn> getColumns(long tableId) throws SystemException {
212 return expandoColumnPersistence.findByTableId(tableId);
213 }
214
215 @Override
216 public List<ExpandoColumn> getColumns(
217 long tableId, Collection<String> names)
218 throws SystemException {
219
220 return expandoColumnPersistence.findByT_N(
221 tableId, names.toArray(new String[names.size()]));
222 }
223
224 @Override
225 public List<ExpandoColumn> getColumns(
226 long companyId, long classNameId, String tableName)
227 throws SystemException {
228
229 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
230 companyId, classNameId, tableName);
231
232 if (table == null) {
233 return Collections.emptyList();
234 }
235
236 return expandoColumnPersistence.findByTableId(table.getTableId());
237 }
238
239 @Override
240 public List<ExpandoColumn> getColumns(
241 long companyId, long classNameId, String tableName,
242 Collection<String> names)
243 throws SystemException {
244
245 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
246 companyId, classNameId, tableName);
247
248 if (table == null) {
249 return Collections.emptyList();
250 }
251
252 return expandoColumnPersistence.findByT_N(
253 table.getTableId(), names.toArray(new String[names.size()]));
254 }
255
256 @Override
257 public List<ExpandoColumn> getColumns(
258 long companyId, String className, String tableName)
259 throws SystemException {
260
261 long classNameId = PortalUtil.getClassNameId(className);
262
263 return getColumns(companyId, classNameId, tableName);
264 }
265
266 @Override
267 public List<ExpandoColumn> getColumns(
268 long companyId, String className, String tableName,
269 Collection<String> columnNames)
270 throws SystemException {
271
272 long classNameId = PortalUtil.getClassNameId(className);
273
274 return getColumns(companyId, classNameId, tableName, columnNames);
275 }
276
277 @Override
278 public int getColumnsCount(long tableId) throws SystemException {
279 return expandoColumnPersistence.countByTableId(tableId);
280 }
281
282 @Override
283 public int getColumnsCount(
284 long companyId, long classNameId, String tableName)
285 throws SystemException {
286
287 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
288 companyId, classNameId, tableName);
289
290 if (table == null) {
291 return 0;
292 }
293
294 return expandoColumnPersistence.countByTableId(table.getTableId());
295 }
296
297 @Override
298 public int getColumnsCount(
299 long companyId, String className, String tableName)
300 throws SystemException {
301
302 long classNameId = PortalUtil.getClassNameId(className);
303
304 return getColumnsCount(companyId, classNameId, tableName);
305 }
306
307 @Override
308 public ExpandoColumn getDefaultTableColumn(
309 long companyId, long classNameId, String name)
310 throws SystemException {
311
312 return getColumn(
313 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME,
314 name);
315 }
316
317 @Override
318 public ExpandoColumn getDefaultTableColumn(
319 long companyId, String className, String name)
320 throws SystemException {
321
322 long classNameId = PortalUtil.getClassNameId(className);
323
324 return getColumn(
325 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME,
326 name);
327 }
328
329 @Override
330 public List<ExpandoColumn> getDefaultTableColumns(
331 long companyId, long classNameId)
332 throws SystemException {
333
334 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
335 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME);
336
337 if (table == null) {
338 return Collections.emptyList();
339 }
340
341 return expandoColumnPersistence.findByTableId(table.getTableId());
342 }
343
344 @Override
345 public List<ExpandoColumn> getDefaultTableColumns(
346 long companyId, String className)
347 throws SystemException {
348
349 long classNameId = PortalUtil.getClassNameId(className);
350
351 return getColumns(
352 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME);
353 }
354
355 @Override
356 public int getDefaultTableColumnsCount(long companyId, long classNameId)
357 throws SystemException {
358
359 ExpandoTable table = expandoTablePersistence.fetchByC_C_N(
360 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME);
361
362 if (table == null) {
363 return 0;
364 }
365
366 return expandoColumnPersistence.countByTableId(table.getTableId());
367 }
368
369 @Override
370 public int getDefaultTableColumnsCount(long companyId, String className)
371 throws SystemException {
372
373 long classNameId = PortalUtil.getClassNameId(className);
374
375 return getColumnsCount(
376 companyId, classNameId, ExpandoTableConstants.DEFAULT_TABLE_NAME);
377 }
378
379 @Override
380 public ExpandoColumn updateColumn(long columnId, String name, int type)
381 throws PortalException, SystemException {
382
383 return expandoColumnLocalService.updateColumn(
384 columnId, name, type, null);
385 }
386
387 @Override
388 public ExpandoColumn updateColumn(
389 long columnId, String name, int type, Object defaultData)
390 throws PortalException, SystemException {
391
392 ExpandoColumn column = expandoColumnPersistence.findByPrimaryKey(
393 columnId);
394
395 ExpandoValue value = validate(
396 columnId, column.getTableId(), name, type, defaultData);
397
398 column.setName(name);
399 column.setType(type);
400 column.setDefaultData(value.getData());
401
402 expandoColumnPersistence.update(column);
403
404 return column;
405 }
406
407 @Override
408 public ExpandoColumn updateTypeSettings(long columnId, String typeSettings)
409 throws PortalException, SystemException {
410
411 ExpandoColumn column = expandoColumnPersistence.findByPrimaryKey(
412 columnId);
413
414 column.setTypeSettings(typeSettings);
415
416 expandoColumnPersistence.update(column);
417
418 return column;
419 }
420
421 protected ExpandoValue validate(
422 long columnId, long tableId, String name, int type,
423 Object defaultData)
424 throws PortalException, SystemException {
425
426 if (Validator.isNull(name)) {
427 throw new ColumnNameException();
428 }
429
430 ExpandoColumn column = expandoColumnPersistence.fetchByT_N(
431 tableId, name);
432
433 if ((column != null) && (column.getColumnId() != columnId)) {
434 StringBundler sb = new StringBundler(7);
435
436 sb.append("{tableId=");
437 sb.append(tableId);
438 sb.append(", columnId=");
439 sb.append(columnId);
440 sb.append(", name=");
441 sb.append(name);
442 sb.append("}");
443
444 throw new DuplicateColumnNameException(sb.toString());
445 }
446
447 if ((type != ExpandoColumnConstants.BOOLEAN) &&
448 (type != ExpandoColumnConstants.BOOLEAN_ARRAY) &&
449 (type != ExpandoColumnConstants.DATE) &&
450 (type != ExpandoColumnConstants.DATE_ARRAY) &&
451 (type != ExpandoColumnConstants.DOUBLE) &&
452 (type != ExpandoColumnConstants.DOUBLE_ARRAY) &&
453 (type != ExpandoColumnConstants.FLOAT) &&
454 (type != ExpandoColumnConstants.FLOAT_ARRAY) &&
455 (type != ExpandoColumnConstants.INTEGER) &&
456 (type != ExpandoColumnConstants.INTEGER_ARRAY) &&
457 (type != ExpandoColumnConstants.LONG) &&
458 (type != ExpandoColumnConstants.LONG_ARRAY) &&
459 (type != ExpandoColumnConstants.NUMBER) &&
460 (type != ExpandoColumnConstants.NUMBER_ARRAY) &&
461 (type != ExpandoColumnConstants.SHORT) &&
462 (type != ExpandoColumnConstants.SHORT_ARRAY) &&
463 (type != ExpandoColumnConstants.STRING) &&
464 (type != ExpandoColumnConstants.STRING_ARRAY) &&
465 (type != ExpandoColumnConstants.STRING_ARRAY_LOCALIZED) &&
466 (type != ExpandoColumnConstants.STRING_LOCALIZED)) {
467
468 throw new ColumnTypeException();
469 }
470
471 ExpandoValue value = new ExpandoValueImpl();
472
473 if (defaultData == null) {
474 return value;
475 }
476
477 value.setColumnId(columnId);
478
479 if (type == ExpandoColumnConstants.BOOLEAN) {
480 value.setBoolean((Boolean)defaultData);
481 }
482 else if (type == ExpandoColumnConstants.BOOLEAN_ARRAY) {
483 value.setBooleanArray((boolean[])defaultData);
484 }
485 else if (type == ExpandoColumnConstants.DATE) {
486 value.setDate((Date)defaultData);
487 }
488 else if (type == ExpandoColumnConstants.DATE_ARRAY) {
489 value.setDateArray((Date[])defaultData);
490 }
491 else if (type == ExpandoColumnConstants.DOUBLE) {
492 value.setDouble((Double)defaultData);
493 }
494 else if (type == ExpandoColumnConstants.DOUBLE_ARRAY) {
495 value.setDoubleArray((double[])defaultData);
496 }
497 else if (type == ExpandoColumnConstants.FLOAT) {
498 value.setFloat((Float)defaultData);
499 }
500 else if (type == ExpandoColumnConstants.FLOAT_ARRAY) {
501 value.setFloatArray((float[])defaultData);
502 }
503 else if (type == ExpandoColumnConstants.INTEGER) {
504 value.setInteger((Integer)defaultData);
505 }
506 else if (type == ExpandoColumnConstants.INTEGER_ARRAY) {
507 value.setIntegerArray((int[])defaultData);
508 }
509 else if (type == ExpandoColumnConstants.LONG) {
510 value.setLong((Long)defaultData);
511 }
512 else if (type == ExpandoColumnConstants.LONG_ARRAY) {
513 value.setLongArray((long[])defaultData);
514 }
515 else if (type == ExpandoColumnConstants.NUMBER) {
516 value.setNumber((Number)defaultData);
517 }
518 else if (type == ExpandoColumnConstants.NUMBER_ARRAY) {
519 value.setNumberArray((Number[])defaultData);
520 }
521 else if (type == ExpandoColumnConstants.SHORT) {
522 value.setShort((Short)defaultData);
523 }
524 else if (type == ExpandoColumnConstants.SHORT_ARRAY) {
525 value.setShortArray((short[])defaultData);
526 }
527 else if (type == ExpandoColumnConstants.STRING) {
528 value.setString((String)defaultData);
529 }
530 else if (type == ExpandoColumnConstants.STRING_ARRAY) {
531 value.setStringArray((String[])defaultData);
532 }
533 else if (type == ExpandoColumnConstants.STRING_ARRAY_LOCALIZED) {
534 value.setStringArrayMap(
535 (Map<Locale, String[]>)defaultData, LocaleUtil.getDefault());
536 }
537 else if (type == ExpandoColumnConstants.STRING_LOCALIZED) {
538 value.setStringMap(
539 (Map<Locale, String>)defaultData, LocaleUtil.getDefault());
540 }
541
542 return value;
543 }
544
545 }