001
014
015 package com.liferay.portlet.documentlibrary.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.systemevent.SystemEvent;
020 import com.liferay.portal.kernel.util.ArrayUtil;
021 import com.liferay.portal.kernel.util.LocaleUtil;
022 import com.liferay.portal.kernel.util.OrderByComparator;
023 import com.liferay.portal.kernel.util.ParamUtil;
024 import com.liferay.portal.kernel.util.SortedArrayList;
025 import com.liferay.portal.kernel.util.StringUtil;
026 import com.liferay.portal.kernel.util.Validator;
027 import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
028 import com.liferay.portal.model.SystemEventConstants;
029 import com.liferay.portal.model.User;
030 import com.liferay.portal.service.ServiceContext;
031 import com.liferay.portal.util.PortalUtil;
032 import com.liferay.portlet.documentlibrary.DuplicateFileEntryTypeException;
033 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
034 import com.liferay.portlet.documentlibrary.NoSuchMetadataSetException;
035 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
036 import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
037 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
038 import com.liferay.portlet.documentlibrary.model.DLFileEntryTypeConstants;
039 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
040 import com.liferay.portlet.documentlibrary.model.DLFolder;
041 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
042 import com.liferay.portlet.documentlibrary.service.base.DLFileEntryTypeLocalServiceBaseImpl;
043 import com.liferay.portlet.documentlibrary.util.DLUtil;
044 import com.liferay.portlet.dynamicdatamapping.RequiredStructureException;
045 import com.liferay.portlet.dynamicdatamapping.StructureXsdException;
046 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
047 import com.liferay.portlet.dynamicdatamapping.model.DDMStructureConstants;
048
049 import java.util.ArrayList;
050 import java.util.Date;
051 import java.util.HashMap;
052 import java.util.List;
053 import java.util.Locale;
054 import java.util.Map;
055
056
063 public class DLFileEntryTypeLocalServiceImpl
064 extends DLFileEntryTypeLocalServiceBaseImpl {
065
066 @Override
067 public DLFileEntryType addFileEntryType(
068 long userId, long groupId, String fileEntryTypeKey,
069 Map<Locale, String> nameMap, Map<Locale, String> descriptionMap,
070 long[] ddmStructureIds, ServiceContext serviceContext)
071 throws PortalException, SystemException {
072
073 User user = userPersistence.findByPrimaryKey(userId);
074
075 if (Validator.isNull(fileEntryTypeKey)) {
076 fileEntryTypeKey = String.valueOf(counterLocalService.increment());
077 }
078 else {
079 fileEntryTypeKey = StringUtil.toUpperCase(fileEntryTypeKey.trim());
080 }
081
082 String fileEntryTypeUuid = serviceContext.getUuid();
083
084 if (Validator.isNull(fileEntryTypeUuid)) {
085 fileEntryTypeUuid = PortalUUIDUtil.generate();
086 }
087
088 long fileEntryTypeId = counterLocalService.increment();
089
090 long ddmStructureId = updateDDMStructure(
091 userId, fileEntryTypeUuid, fileEntryTypeId, groupId, nameMap,
092 descriptionMap, serviceContext);
093
094 if (ddmStructureId > 0) {
095 ddmStructureIds = ArrayUtil.append(ddmStructureIds, ddmStructureId);
096 }
097
098 Date now = new Date();
099
100 validate(fileEntryTypeId, groupId, fileEntryTypeKey, ddmStructureIds);
101
102 DLFileEntryType dlFileEntryType = dlFileEntryTypePersistence.create(
103 fileEntryTypeId);
104
105 dlFileEntryType.setUuid(fileEntryTypeUuid);
106 dlFileEntryType.setGroupId(groupId);
107 dlFileEntryType.setCompanyId(user.getCompanyId());
108 dlFileEntryType.setUserId(user.getUserId());
109 dlFileEntryType.setUserName(user.getFullName());
110 dlFileEntryType.setCreateDate(serviceContext.getCreateDate(now));
111 dlFileEntryType.setModifiedDate(serviceContext.getModifiedDate(now));
112 dlFileEntryType.setFileEntryTypeKey(fileEntryTypeKey);
113 dlFileEntryType.setNameMap(nameMap);
114 dlFileEntryType.setDescriptionMap(descriptionMap);
115
116 dlFileEntryTypePersistence.update(dlFileEntryType);
117
118 dlFileEntryTypePersistence.addDDMStructures(
119 fileEntryTypeId, ddmStructureIds);
120
121 if (serviceContext.isAddGroupPermissions() ||
122 serviceContext.isAddGuestPermissions()) {
123
124 addFileEntryTypeResources(
125 dlFileEntryType, serviceContext.isAddGroupPermissions(),
126 serviceContext.isAddGuestPermissions());
127 }
128 else {
129 addFileEntryTypeResources(
130 dlFileEntryType, serviceContext.getGroupPermissions(),
131 serviceContext.getGuestPermissions());
132 }
133
134 return dlFileEntryType;
135 }
136
137 @Override
138 public DLFileEntryType addFileEntryType(
139 long userId, long groupId, String name, String description,
140 long[] ddmStructureIds, ServiceContext serviceContext)
141 throws PortalException, SystemException {
142
143 Map<Locale, String> nameMap = new HashMap<Locale, String>();
144
145 nameMap.put(LocaleUtil.getSiteDefault(), name);
146
147 Map<Locale, String> descriptionMap = new HashMap<Locale, String>();
148
149 descriptionMap.put(LocaleUtil.getSiteDefault(), description);
150
151 return addFileEntryType(
152 userId, groupId, null, nameMap, descriptionMap, ddmStructureIds,
153 serviceContext);
154 }
155
156 @Override
157 public void cascadeFileEntryTypes(long userId, DLFolder dlFolder)
158 throws PortalException, SystemException {
159
160 long[] groupIds = PortalUtil.getSiteAndCompanyGroupIds(
161 dlFolder.getGroupId());
162
163 List<DLFileEntryType> dlFileEntryTypes = getFolderFileEntryTypes(
164 groupIds, dlFolder.getFolderId(), true);
165
166 List<Long> fileEntryTypeIds = getFileEntryTypeIds(dlFileEntryTypes);
167
168 long defaultFileEntryTypeId = getDefaultFileEntryTypeId(
169 dlFolder.getFolderId());
170
171 ServiceContext serviceContext = new ServiceContext();
172
173 serviceContext.setCompanyId(dlFolder.getCompanyId());
174 serviceContext.setScopeGroupId(dlFolder.getGroupId());
175 serviceContext.setUserId(userId);
176
177 cascadeFileEntryTypes(
178 userId, dlFolder.getGroupId(), dlFolder.getFolderId(),
179 defaultFileEntryTypeId, fileEntryTypeIds, serviceContext);
180 }
181
182 @Override
183 @SystemEvent(
184 action = SystemEventConstants.ACTION_SKIP,
185 type = SystemEventConstants.TYPE_DELETE)
186 public void deleteFileEntryType(DLFileEntryType dlFileEntryType)
187 throws PortalException, SystemException {
188
189 if (dlFileEntryPersistence.countByFileEntryTypeId(
190 dlFileEntryType.getFileEntryTypeId()) > 0) {
191
192 throw new RequiredStructureException(
193 RequiredStructureException.REFERENCED_STRUCTURE);
194 }
195
196 DDMStructure ddmStructure = ddmStructureLocalService.fetchStructure(
197 dlFileEntryType.getGroupId(),
198 PortalUtil.getClassNameId(DLFileEntryMetadata.class),
199 DLUtil.getDDMStructureKey(dlFileEntryType));
200
201 if (ddmStructure == null) {
202 ddmStructure = ddmStructureLocalService.fetchStructure(
203 dlFileEntryType.getGroupId(),
204 PortalUtil.getClassNameId(DLFileEntryMetadata.class),
205 DLUtil.getDeprecatedDDMStructureKey(dlFileEntryType));
206 }
207
208 if (ddmStructure != null) {
209 ddmStructureLocalService.deleteStructure(
210 ddmStructure.getStructureId());
211 }
212
213 dlFileEntryTypePersistence.remove(dlFileEntryType);
214 }
215
216 @Override
217 public void deleteFileEntryType(long fileEntryTypeId)
218 throws PortalException, SystemException {
219
220 DLFileEntryType dlFileEntryType =
221 dlFileEntryTypePersistence.findByPrimaryKey(fileEntryTypeId);
222
223 deleteFileEntryType(dlFileEntryType);
224 }
225
226 @Override
227 public void deleteFileEntryTypes(long groupId)
228 throws PortalException, SystemException {
229
230 List<DLFileEntryType> dlFileEntryTypes =
231 dlFileEntryTypePersistence.findByGroupId(groupId);
232
233 for (DLFileEntryType dlFileEntryType : dlFileEntryTypes) {
234 deleteFileEntryType(dlFileEntryType);
235 }
236 }
237
238 @Override
239 public DLFileEntryType fetchFileEntryType(long fileEntryTypeId)
240 throws SystemException {
241
242 return dlFileEntryTypePersistence.fetchByPrimaryKey(fileEntryTypeId);
243 }
244
245 @Override
246 public DLFileEntryType fetchFileEntryType(
247 long groupId, String fileEntryTypeKey)
248 throws SystemException {
249
250 fileEntryTypeKey = StringUtil.toUpperCase(fileEntryTypeKey.trim());
251
252 return dlFileEntryTypePersistence.fetchByG_F(groupId, fileEntryTypeKey);
253 }
254
255 @Override
256 public long getDefaultFileEntryTypeId(long folderId)
257 throws PortalException, SystemException {
258
259 folderId = getFileEntryTypesPrimaryFolderId(folderId);
260
261 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
262 DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(folderId);
263
264 return dlFolder.getDefaultFileEntryTypeId();
265 }
266 else {
267 return 0;
268 }
269 }
270
271 @Override
272 public DLFileEntryType getFileEntryType(long fileEntryTypeId)
273 throws PortalException, SystemException {
274
275 return dlFileEntryTypePersistence.findByPrimaryKey(fileEntryTypeId);
276 }
277
278 @Override
279 public DLFileEntryType getFileEntryType(
280 long groupId, String fileEntryTypeKey)
281 throws PortalException, SystemException {
282
283 fileEntryTypeKey = StringUtil.toUpperCase(fileEntryTypeKey.trim());
284
285 return dlFileEntryTypePersistence.findByG_F(groupId, fileEntryTypeKey);
286 }
287
288 @Override
289 public List<DLFileEntryType> getFileEntryTypes(long[] groupIds)
290 throws SystemException {
291
292 return dlFileEntryTypePersistence.findByGroupId(groupIds);
293 }
294
295 @Override
296 public List<DLFileEntryType> getFolderFileEntryTypes(
297 long[] groupIds, long folderId, boolean inherited)
298 throws PortalException, SystemException {
299
300 if (!inherited) {
301 return dlFolderPersistence.getDLFileEntryTypes(folderId);
302 }
303
304 List<DLFileEntryType> dlFileEntryTypes = null;
305
306 folderId = getFileEntryTypesPrimaryFolderId(folderId);
307
308 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
309 dlFileEntryTypes = dlFolderPersistence.getDLFileEntryTypes(
310 folderId);
311 }
312
313 if ((dlFileEntryTypes == null) || dlFileEntryTypes.isEmpty()) {
314 dlFileEntryTypes = new ArrayList<DLFileEntryType>(
315 getFileEntryTypes(groupIds));
316
317 DLFileEntryType dlFileEntryType =
318 dlFileEntryTypePersistence.fetchByPrimaryKey(
319 DLFileEntryTypeConstants.FILE_ENTRY_TYPE_ID_BASIC_DOCUMENT);
320
321 dlFileEntryTypes.add(0, dlFileEntryType);
322 }
323
324 return dlFileEntryTypes;
325 }
326
327 @Override
328 public List<DLFileEntryType> search(
329 long companyId, long[] groupIds, String keywords,
330 boolean includeBasicFileEntryType, int start, int end,
331 OrderByComparator orderByComparator)
332 throws SystemException {
333
334 return dlFileEntryTypeFinder.findByKeywords(
335 companyId, groupIds, keywords, includeBasicFileEntryType, start,
336 end, orderByComparator);
337 }
338
339 @Override
340 public int searchCount(
341 long companyId, long[] groupIds, String keywords,
342 boolean includeBasicFileEntryType)
343 throws SystemException {
344
345 return dlFileEntryTypeFinder.countByKeywords(
346 companyId, groupIds, keywords, includeBasicFileEntryType);
347 }
348
349 @Override
350 public void unsetFolderFileEntryTypes(long folderId)
351 throws SystemException {
352
353 List<DLFileEntryType> dlFileEntryTypes =
354 dlFolderPersistence.getDLFileEntryTypes(folderId);
355
356 for (DLFileEntryType dlFileEntryType : dlFileEntryTypes) {
357 dlFolderPersistence.removeDLFileEntryType(
358 folderId, dlFileEntryType);
359 }
360 }
361
362 @Override
363 public DLFileEntry updateFileEntryFileEntryType(
364 DLFileEntry dlFileEntry, ServiceContext serviceContext)
365 throws PortalException, SystemException {
366
367 long groupId = serviceContext.getScopeGroupId();
368 long folderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
369
370 DLFolder dlFolder = dlFolderPersistence.fetchByPrimaryKey(
371 dlFileEntry.getFolderId());
372
373 if (dlFolder != null) {
374 groupId = dlFolder.getGroupId();
375 folderId = dlFolder.getFolderId();
376 }
377
378 List<DLFileEntryType> dlFileEntryTypes = getFolderFileEntryTypes(
379 PortalUtil.getSiteAndCompanyGroupIds(groupId), folderId, true);
380
381 List<Long> fileEntryTypeIds = getFileEntryTypeIds(dlFileEntryTypes);
382
383 if (fileEntryTypeIds.contains(dlFileEntry.getFileEntryTypeId())) {
384 return dlFileEntry;
385 }
386
387 long defaultFileEntryTypeId = getDefaultFileEntryTypeId(folderId);
388
389 DLFileVersion dlFileVersion =
390 dlFileVersionLocalService.getLatestFileVersion(
391 dlFileEntry.getFileEntryId(), true);
392
393 if (dlFileVersion.isPending()) {
394 workflowInstanceLinkLocalService.deleteWorkflowInstanceLink(
395 dlFileVersion.getCompanyId(), dlFileEntry.getGroupId(),
396 DLFileEntry.class.getName(), dlFileVersion.getFileVersionId());
397 }
398
399 return dlFileEntryLocalService.updateFileEntry(
400 serviceContext.getUserId(), dlFileEntry.getFileEntryId(), null,
401 null, null, null, null, false, defaultFileEntryTypeId, null, null,
402 null, 0, serviceContext);
403 }
404
405 @Override
406 public void updateFileEntryType(
407 long userId, long fileEntryTypeId, Map<Locale, String> nameMap,
408 Map<Locale, String> descriptionMap, long[] ddmStructureIds,
409 ServiceContext serviceContext)
410 throws PortalException, SystemException {
411
412 DLFileEntryType dlFileEntryType =
413 dlFileEntryTypePersistence.findByPrimaryKey(fileEntryTypeId);
414
415 long ddmStructureId = updateDDMStructure(
416 userId, dlFileEntryType.getUuid(), fileEntryTypeId,
417 dlFileEntryType.getGroupId(), nameMap, descriptionMap,
418 serviceContext);
419
420 if (ddmStructureId > 0) {
421 ddmStructureIds = ArrayUtil.append(ddmStructureIds, ddmStructureId);
422 }
423
424 validate(
425 fileEntryTypeId, dlFileEntryType.getGroupId(),
426 dlFileEntryType.getFileEntryTypeKey(), ddmStructureIds);
427
428 dlFileEntryType.setModifiedDate(serviceContext.getModifiedDate(null));
429 dlFileEntryType.setNameMap(nameMap);
430 dlFileEntryType.setDescriptionMap(descriptionMap);
431
432 dlFileEntryTypePersistence.update(dlFileEntryType);
433
434 dlFileEntryTypePersistence.setDDMStructures(
435 fileEntryTypeId, ddmStructureIds);
436 }
437
438 @Override
439 public void updateFileEntryType(
440 long userId, long fileEntryTypeId, String name, String description,
441 long[] ddmStructureIds, ServiceContext serviceContext)
442 throws PortalException, SystemException {
443
444 Map<Locale, String> nameMap = new HashMap<Locale, String>();
445
446 nameMap.put(LocaleUtil.getSiteDefault(), name);
447
448 Map<Locale, String> descriptionMap = new HashMap<Locale, String>();
449
450 descriptionMap.put(LocaleUtil.getSiteDefault(), description);
451
452 updateFileEntryType(
453 userId, fileEntryTypeId, nameMap, descriptionMap, ddmStructureIds,
454 serviceContext);
455 }
456
457 @Override
458 public void updateFolderFileEntryTypes(
459 DLFolder dlFolder, List<Long> fileEntryTypeIds,
460 long defaultFileEntryTypeId, ServiceContext serviceContext)
461 throws PortalException, SystemException {
462
463 List<Long> originalFileEntryTypeIds = getFileEntryTypeIds(
464 dlFolderPersistence.getDLFileEntryTypes(dlFolder.getFolderId()));
465
466 if (fileEntryTypeIds.equals(originalFileEntryTypeIds)) {
467 return;
468 }
469
470 for (Long fileEntryTypeId : fileEntryTypeIds) {
471 if (!originalFileEntryTypeIds.contains(fileEntryTypeId)) {
472 dlFolderPersistence.addDLFileEntryType(
473 dlFolder.getFolderId(), fileEntryTypeId);
474 }
475 }
476
477 for (Long originalFileEntryTypeId : originalFileEntryTypeIds) {
478 if (!fileEntryTypeIds.contains(originalFileEntryTypeId)) {
479 dlFolderPersistence.removeDLFileEntryType(
480 dlFolder.getFolderId(), originalFileEntryTypeId);
481
482 workflowDefinitionLinkLocalService.deleteWorkflowDefinitionLink(
483 dlFolder.getCompanyId(), dlFolder.getGroupId(),
484 DLFolder.class.getName(), dlFolder.getFolderId(),
485 originalFileEntryTypeId);
486 }
487 }
488 }
489
490 protected void addFileEntryTypeResources(
491 DLFileEntryType dlFileEntryType, boolean addGroupPermissions,
492 boolean addGuestPermissions)
493 throws PortalException, SystemException {
494
495 resourceLocalService.addResources(
496 dlFileEntryType.getCompanyId(), dlFileEntryType.getGroupId(),
497 dlFileEntryType.getUserId(), DLFileEntryType.class.getName(),
498 dlFileEntryType.getFileEntryTypeId(), false, addGroupPermissions,
499 addGuestPermissions);
500 }
501
502 protected void addFileEntryTypeResources(
503 DLFileEntryType dlFileEntryType, String[] groupPermissions,
504 String[] guestPermissions)
505 throws PortalException, SystemException {
506
507 resourceLocalService.addModelResources(
508 dlFileEntryType.getCompanyId(), dlFileEntryType.getGroupId(),
509 dlFileEntryType.getUserId(), DLFileEntryType.class.getName(),
510 dlFileEntryType.getFileEntryTypeId(), groupPermissions,
511 guestPermissions);
512 }
513
514 protected void cascadeFileEntryTypes(
515 long userId, long groupId, long folderId,
516 long defaultFileEntryTypeId, List<Long> fileEntryTypeIds,
517 ServiceContext serviceContext)
518 throws PortalException, SystemException {
519
520 List<DLFileEntry> dlFileEntries = dlFileEntryPersistence.findByG_F(
521 groupId, folderId);
522
523 for (DLFileEntry dlFileEntry : dlFileEntries) {
524 Long fileEntryTypeId = dlFileEntry.getFileEntryTypeId();
525
526 if (fileEntryTypeIds.contains(fileEntryTypeId)) {
527 continue;
528 }
529
530 DLFileVersion dlFileVersion =
531 dlFileVersionLocalService.getLatestFileVersion(
532 dlFileEntry.getFileEntryId(), true);
533
534 if (dlFileVersion.isPending()) {
535 workflowInstanceLinkLocalService.deleteWorkflowInstanceLink(
536 dlFileVersion.getCompanyId(), groupId,
537 DLFileEntry.class.getName(),
538 dlFileVersion.getFileVersionId());
539 }
540
541 dlFileEntryLocalService.updateFileEntry(
542 userId, dlFileEntry.getFileEntryId(), null, null, null, null,
543 null, false, defaultFileEntryTypeId, null, null, null, 0,
544 serviceContext);
545 }
546
547 List<DLFolder> subFolders = dlFolderPersistence.findByG_M_P_H(
548 groupId, false, folderId, false);
549
550 for (DLFolder subFolder : subFolders) {
551 long subFolderId = subFolder.getFolderId();
552
553 if (subFolder.isOverrideFileEntryTypes()) {
554 continue;
555 }
556
557 cascadeFileEntryTypes(
558 userId, groupId, subFolderId, defaultFileEntryTypeId,
559 fileEntryTypeIds, serviceContext);
560 }
561 }
562
563 protected void fixDDMStructureKey(
564 String fileEntryTypeUuid, long fileEntryTypeId, long groupId)
565 throws SystemException {
566
567 DDMStructure ddmStructure = ddmStructureLocalService.fetchStructure(
568 groupId, PortalUtil.getClassNameId(DLFileEntryMetadata.class),
569 DLUtil.getDeprecatedDDMStructureKey(fileEntryTypeId));
570
571 if (ddmStructure != null) {
572 ddmStructure.setStructureKey(
573 DLUtil.getDDMStructureKey(fileEntryTypeUuid));
574
575 ddmStructureLocalService.updateDDMStructure(ddmStructure);
576 }
577 }
578
579 protected List<Long> getFileEntryTypeIds(
580 List<DLFileEntryType> dlFileEntryTypes) {
581
582 List<Long> fileEntryTypeIds = new SortedArrayList<Long>();
583
584 for (DLFileEntryType dlFileEntryType : dlFileEntryTypes) {
585 fileEntryTypeIds.add(dlFileEntryType.getFileEntryTypeId());
586 }
587
588 return fileEntryTypeIds;
589 }
590
591 protected long getFileEntryTypesPrimaryFolderId(long folderId)
592 throws NoSuchFolderException, SystemException {
593
594 while (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
595 DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(folderId);
596
597 if (dlFolder.isOverrideFileEntryTypes()) {
598 break;
599 }
600
601 folderId = dlFolder.getParentFolderId();
602 }
603
604 return folderId;
605 }
606
607 protected long updateDDMStructure(
608 long userId, String fileEntryTypeUuid, long fileEntryTypeId,
609 long groupId, Map<Locale, String> nameMap,
610 Map<Locale, String> descriptionMap, ServiceContext serviceContext)
611 throws PortalException, SystemException {
612
613 fixDDMStructureKey(fileEntryTypeUuid, fileEntryTypeId, groupId);
614
615 String ddmStructureKey = DLUtil.getDDMStructureKey(fileEntryTypeUuid);
616
617 String xsd = ParamUtil.getString(serviceContext, "xsd");
618
619 DDMStructure ddmStructure = ddmStructureLocalService.fetchStructure(
620 groupId, PortalUtil.getClassNameId(DLFileEntryMetadata.class),
621 ddmStructureKey);
622
623 if ((ddmStructure != null) && Validator.isNull(xsd)) {
624 xsd = ddmStructure.getXsd();
625 }
626
627 try {
628 if (ddmStructure == null) {
629 ddmStructure = ddmStructureLocalService.addStructure(
630 userId, groupId,
631 DDMStructureConstants.DEFAULT_PARENT_STRUCTURE_ID,
632 PortalUtil.getClassNameId(DLFileEntryMetadata.class),
633 ddmStructureKey, nameMap, descriptionMap, xsd, "xml",
634 DDMStructureConstants.TYPE_AUTO, serviceContext);
635 }
636 else {
637 ddmStructure = ddmStructureLocalService.updateStructure(
638 ddmStructure.getStructureId(),
639 ddmStructure.getParentStructureId(), nameMap,
640 descriptionMap, xsd, serviceContext);
641 }
642
643 return ddmStructure.getStructureId();
644 }
645 catch (StructureXsdException sxe) {
646 if (ddmStructure != null) {
647 ddmStructureLocalService.deleteStructure(
648 ddmStructure.getStructureId());
649 }
650 }
651
652 return 0;
653 }
654
655 protected void validate(
656 long fileEntryTypeId, long groupId, String fileEntryTypeKey,
657 long[] ddmStructureIds)
658 throws PortalException, SystemException {
659
660 DLFileEntryType dlFileEntryType = dlFileEntryTypePersistence.fetchByG_F(
661 groupId, fileEntryTypeKey);
662
663 if ((dlFileEntryType != null) &&
664 (dlFileEntryType.getFileEntryTypeId() != fileEntryTypeId)) {
665
666 throw new DuplicateFileEntryTypeException(fileEntryTypeKey);
667 }
668
669 if (ddmStructureIds.length == 0) {
670 throw new NoSuchMetadataSetException();
671 }
672
673 for (long ddmStructureId : ddmStructureIds) {
674 DDMStructure ddmStructure =
675 ddmStructurePersistence.fetchByPrimaryKey(ddmStructureId);
676
677 if (ddmStructure == null) {
678 throw new NoSuchMetadataSetException(
679 "{ddmStructureId=" + ddmStructureId);
680 }
681 }
682 }
683
684 }